✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

סקריפט – כיצד להעביר (להעתיק) מכונה עם Managed Disk לחשבון אחר

Avihai Hajaj
|
קלה
|
Jul 10, 2018
alt="facebook"alt="linkedin"
להרשמה לניוזלטר

מדריך זה מציג סקריפט שיעזור לבצע העברה (העתקה) של מכונה עם דיסקים מנוהלים (Azure Managed Disk) לחשבון אחר (Subscription).

מה זה Azure Managed Disk ?

בקצרה Azure Managed Disk זה דיסקים שניהול האחסון שלהם מתבצע עבורך ברקע. לפני שהיה קיים השירות Azure Managed Disk, הינו צריכים ליצור Azure Storage Account על מנת שנוכל לאחסן דיסקים (קבצי VHD) לטובת השרתים. Storage Account היה מוגבל מבחינת כמות IOPS שאפשר לקבל ב-Storage Account ולכן היינו צריכים לשים לב שאנחנו לא עוברים את כמות ה-IOPS ודואגים לחלק למספר Storage Account שונים.

הסקריפט הזה יאפשר להעביר (להעתיק) מכונה מחשבון אחד לשני עם כל הדיסקים כולל Data Disks. נכון לכתיבת המאמר, אין אפשרות להעביר מכונה עם דיסקים מנוהלים בין Resource Group ו/או Subscription בעזרת הפורטל.

 

כמה הערות לפני שאציג את הסקריפט:

· ה-Resource Group בחשבון היעד חייב להיות קיים.

· ה-Virtual Network בחשבון היעד חייב להיות קיים.

· המשאבים מועתקים לחשבון היעד בדיוק באותן שמות, סוג הדיסקים והמיקום (Azure Location) כפי שהוא נמצא בחשבון המקור.

 

להורדת הסקריפט יש לגשת ללינק הבא: Move-VM-With-ManagedDisk-Between-Subscriptions

חשוב לפני הרצת הסקריפט להשלים את הפרמטרים תחת (Source Parameters and Target Parameters)

להלן הסקריפט המלא:

#Source Parameters

 

#Source Subscription Id

$SourceSubscription='SourceSubscription';

#Source Resource Group of VM

$SourceResourceGroup = 'SourceResourceGroup';

#Source VM

$SourceVMName = 'VMName';

 

#Set the context to the Source Subscription

Select-AzureRmSubscription -SubscriptionId:$SourceSubscription;

$SourceVM = Get-AzureRmVM -Name:$SourceVMName -ResourceGroupName:$SourceResourceGroup;

#Source VM StorageProfile

$SRCSTGProfile = $SourceVM.StorageProfile;

 

#Target Parameters

 

#Target Subscription Id

$TargetSubscription='TargetSubscription';

#Target Resource Group of VM (+ManagedDisk)

$TargetResourceGroup = 'TargetResourceGroup';

 

#Target Resource Group of VNET

$TargetVNETResourceGroup = 'TargetVNETResourceGroup';

#Target VNET Name

$TargetVNETName = 'TargetVNETName';

#Target Subnet Name

$TargetSubnetName = 'TargetSubnetName';

 

#Set the context to the Target Subscription

Select-AzureRmSubscription -SubscriptionId:$TargetSubscription;

 

#Copy OS Disk From Source To Target Subscription

$SourceOSDisk = Get-AzureRmResource -ResourceId:"$($SRCSTGProfile.OsDisk.ManagedDisk.Id)";

$DiskType = $SourceOSDisk.Sku.Name -Replace "_";

$diskOSConfig = New-AzureRmDiskConfig -SourceResourceId:$SourceOSDisk.ResourceId -Location:$SourceOSDisk.Location -SkuName:$DiskType -CreateOption Copy;

$TargetOSDisk = New-AzureRmDisk -Disk:$diskOSConfig -DiskName:$SourceOSDisk.Name -ResourceGroupName:$TargetResourceGroup;

 

 

#If Data Disk Exist? Copy DataDisk From Source To Target Subscription

if ($SRCSTGProfile.DataDisks) {

         $HashTable = @{};

         Foreach ($DataDisk in $SRCSTGProfile.DataDisks) {

                  $SourceDataDisk = Get-AzureRmResource -ResourceId:"$($DataDisk.ManagedDisk.Id)";

                  $DiskType = $SourceDataDisk.Sku.Name -Replace "_";

                  $diskDataConfig = New-AzureRmDiskConfig -SourceResourceId:$SourceDataDisk.ResourceId -Location:$SourceDataDisk.Location -SkuName:$DiskType -CreateOption Copy;

                  $TargetDataDisk = New-AzureRmDisk -Disk:$diskDataConfig -DiskName:$SourceDataDisk.Name -ResourceGroupName:$TargetResourceGroup;

                  $HashTable.Add("$($DataDisk.Lun)","$($TargetDataDisk.ID)");

         }

}

 

#Create VM on Target Subscription

 

#Target VM configuration

$TargetVM = New-AzureRmVMConfig -VMName:$SourceVMName -VMSize:"$($SourceVM.HardwareProfile.VmSize)";

if ("$($SourceOSDisk.Properties.osType)" -eq 'Windows') {

         $TargetVM = Set-AzureRmVMOSDisk -VM:$TargetVM -ManagedDiskId:$TargetOSDisk.Id -Name:$TargetOSDisk.Name -CreateOption:Attach -Windows;

         } else {

         $TargetVM = Set-AzureRmVMOSDisk -VM:$TargetVM -ManagedDiskId:$TargetOSDisk.Id -Name:$TargetOSDisk.Name -CreateOption:Attach -Linux;

         }

 

#Add DataDisks According Source VM Luns

if ($HashTable) {

         For ($i=0; $i -lt $HashTable.Keys.Count; $i++) {

                  $TargetVM = Add-AzureRmVMDataDisk -CreateOption:Attach -Lun:$i -VM:$TargetVM -ManagedDiskId:"$($HashTable["$i"])" -Name:"$($HashTable["$i"].Split("/")[-1])";

         }

}

#Get the virtual network

$VNet = Get-AzureRmVirtualNetwork -Name:$TargetVNETName -ResourceGroupName:$TargetVNETResourceGroup;

#Get the Subnet

$Subnet = $VNet.Subnets|?{$_.Name -eq $TargetSubnetName};

#Create NIC

$NIC = New-AzureRmNetworkInterface -Name:($TargetVM.Name.ToLower()+'_nic') -ResourceGroupName:$TargetResourceGroup -Location:$TargetOSDisk.Location -SubnetId:$Subnet.Id;

$TargetVM = Add-AzureRmVMNetworkInterface -VM:$TargetVM -Id:$NIC.Id;

 

#Create VM

New-AzureRmVM -VM:$TargetVM -ResourceGroupName:$TargetResourceGroup -Location:$TargetOSDisk.Location -DisableBginfoExtension;

עד שיהיה תהליך מובנה של מעבר שרתים עם דיסקים מנוהלים בין חשבונות, הסקריפט הזה מאוד יכול לסייע לכם.

מדריך זה מציג סקריפט שיעזור לבצע העברה (העתקה) של מכונה עם דיסקים מנוהלים (Azure Managed Disk) לחשבון אחר (Subscription).

מה זה Azure Managed Disk ?

בקצרה Azure Managed Disk זה דיסקים שניהול האחסון שלהם מתבצע עבורך ברקע. לפני שהיה קיים השירות Azure Managed Disk, הינו צריכים ליצור Azure Storage Account על מנת שנוכל לאחסן דיסקים (קבצי VHD) לטובת השרתים. Storage Account היה מוגבל מבחינת כמות IOPS שאפשר לקבל ב-Storage Account ולכן היינו צריכים לשים לב שאנחנו לא עוברים את כמות ה-IOPS ודואגים לחלק למספר Storage Account שונים.

הסקריפט הזה יאפשר להעביר (להעתיק) מכונה מחשבון אחד לשני עם כל הדיסקים כולל Data Disks. נכון לכתיבת המאמר, אין אפשרות להעביר מכונה עם דיסקים מנוהלים בין Resource Group ו/או Subscription בעזרת הפורטל.

 

כמה הערות לפני שאציג את הסקריפט:

· ה-Resource Group בחשבון היעד חייב להיות קיים.

· ה-Virtual Network בחשבון היעד חייב להיות קיים.

· המשאבים מועתקים לחשבון היעד בדיוק באותן שמות, סוג הדיסקים והמיקום (Azure Location) כפי שהוא נמצא בחשבון המקור.

 

להורדת הסקריפט יש לגשת ללינק הבא: Move-VM-With-ManagedDisk-Between-Subscriptions

חשוב לפני הרצת הסקריפט להשלים את הפרמטרים תחת (Source Parameters and Target Parameters)

להלן הסקריפט המלא:

#Source Parameters

 

#Source Subscription Id

$SourceSubscription='SourceSubscription';

#Source Resource Group of VM

$SourceResourceGroup = 'SourceResourceGroup';

#Source VM

$SourceVMName = 'VMName';

 

#Set the context to the Source Subscription

Select-AzureRmSubscription -SubscriptionId:$SourceSubscription;

$SourceVM = Get-AzureRmVM -Name:$SourceVMName -ResourceGroupName:$SourceResourceGroup;

#Source VM StorageProfile

$SRCSTGProfile = $SourceVM.StorageProfile;

 

#Target Parameters

 

#Target Subscription Id

$TargetSubscription='TargetSubscription';

#Target Resource Group of VM (+ManagedDisk)

$TargetResourceGroup = 'TargetResourceGroup';

 

#Target Resource Group of VNET

$TargetVNETResourceGroup = 'TargetVNETResourceGroup';

#Target VNET Name

$TargetVNETName = 'TargetVNETName';

#Target Subnet Name

$TargetSubnetName = 'TargetSubnetName';

 

#Set the context to the Target Subscription

Select-AzureRmSubscription -SubscriptionId:$TargetSubscription;

 

#Copy OS Disk From Source To Target Subscription

$SourceOSDisk = Get-AzureRmResource -ResourceId:"$($SRCSTGProfile.OsDisk.ManagedDisk.Id)";

$DiskType = $SourceOSDisk.Sku.Name -Replace "_";

$diskOSConfig = New-AzureRmDiskConfig -SourceResourceId:$SourceOSDisk.ResourceId -Location:$SourceOSDisk.Location -SkuName:$DiskType -CreateOption Copy;

$TargetOSDisk = New-AzureRmDisk -Disk:$diskOSConfig -DiskName:$SourceOSDisk.Name -ResourceGroupName:$TargetResourceGroup;

 

 

#If Data Disk Exist? Copy DataDisk From Source To Target Subscription

if ($SRCSTGProfile.DataDisks) {

         $HashTable = @{};

         Foreach ($DataDisk in $SRCSTGProfile.DataDisks) {

                  $SourceDataDisk = Get-AzureRmResource -ResourceId:"$($DataDisk.ManagedDisk.Id)";

                  $DiskType = $SourceDataDisk.Sku.Name -Replace "_";

                  $diskDataConfig = New-AzureRmDiskConfig -SourceResourceId:$SourceDataDisk.ResourceId -Location:$SourceDataDisk.Location -SkuName:$DiskType -CreateOption Copy;

                  $TargetDataDisk = New-AzureRmDisk -Disk:$diskDataConfig -DiskName:$SourceDataDisk.Name -ResourceGroupName:$TargetResourceGroup;

                  $HashTable.Add("$($DataDisk.Lun)","$($TargetDataDisk.ID)");

         }

}

 

#Create VM on Target Subscription

 

#Target VM configuration

$TargetVM = New-AzureRmVMConfig -VMName:$SourceVMName -VMSize:"$($SourceVM.HardwareProfile.VmSize)";

if ("$($SourceOSDisk.Properties.osType)" -eq 'Windows') {

         $TargetVM = Set-AzureRmVMOSDisk -VM:$TargetVM -ManagedDiskId:$TargetOSDisk.Id -Name:$TargetOSDisk.Name -CreateOption:Attach -Windows;

         } else {

         $TargetVM = Set-AzureRmVMOSDisk -VM:$TargetVM -ManagedDiskId:$TargetOSDisk.Id -Name:$TargetOSDisk.Name -CreateOption:Attach -Linux;

         }

 

#Add DataDisks According Source VM Luns

if ($HashTable) {

         For ($i=0; $i -lt $HashTable.Keys.Count; $i++) {

                  $TargetVM = Add-AzureRmVMDataDisk -CreateOption:Attach -Lun:$i -VM:$TargetVM -ManagedDiskId:"$($HashTable["$i"])" -Name:"$($HashTable["$i"].Split("/")[-1])";

         }

}

#Get the virtual network

$VNet = Get-AzureRmVirtualNetwork -Name:$TargetVNETName -ResourceGroupName:$TargetVNETResourceGroup;

#Get the Subnet

$Subnet = $VNet.Subnets|?{$_.Name -eq $TargetSubnetName};

#Create NIC

$NIC = New-AzureRmNetworkInterface -Name:($TargetVM.Name.ToLower()+'_nic') -ResourceGroupName:$TargetResourceGroup -Location:$TargetOSDisk.Location -SubnetId:$Subnet.Id;

$TargetVM = Add-AzureRmVMNetworkInterface -VM:$TargetVM -Id:$NIC.Id;

 

#Create VM

New-AzureRmVM -VM:$TargetVM -ResourceGroupName:$TargetResourceGroup -Location:$TargetOSDisk.Location -DisableBginfoExtension;

עד שיהיה תהליך מובנה של מעבר שרתים עם דיסקים מנוהלים בין חשבונות, הסקריפט הזה מאוד יכול לסייע לכם.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Avihai Hajaj
בואו נעבוד ביחד
צרו קשר