When you create an Azure windows virtual machine, it comes a default OS drive (C:\) and a temporary drive (D:\). An azure virtual machine allows you to attach a data disk to it to expand the storage. The number of data disks that can be attached to the VM depends on the Size and Family of the VM.
You can automate the process of attaching the data disk and initializing it using two scripts:
Script 1: initializePartition.ps1
This script contains the code to initialize the RAW partition.
Script 2: attachAndInstallCSE.ps1
This script will attach the data disk to the Azure windows virtual machine. It also installs the Custom Script Extension to the virtual machine.
initializePartition.ps1
$disks = Get-Disk | Where partitionstyle -eq 'raw' | sort number $letters = 70..89 | ForEach-Object { [char]$_ } $count = 0 $labels = "data1","data2" foreach ($disk in $disks) { $driveLetter = $letters[$count].ToString() $disk | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -UseMaximumSize -DriveLetter $driveLetter | Format-Volume -FileSystem NTFS -NewFileSystemLabel $labels[$count] -Confirm:$false -Force $count++ }
attachAndInstallCSE.ps1
# Declaringvariables $resourceGroupName = 'resourceGroupName' $virtualMachineName = 'virtualMachineName' $location = 'East US' $storageType = 'Premium_LRS' $dataDiskName = $virtualMachineName + '_datadisk1' # Create a new managed data disk $diskConfig = New-AzureRmDiskConfig -SkuName $storageType -Location $location -CreateOption Empty -DiskSizeGB 128 $dataDisk1 = New-AzureRmDisk -DiskName $dataDiskName -Disk $diskConfig -ResourceGroupName $resourceGroupName # Get the virtual machine reference $vm = Get-AzureRmVM -Name $virtualMachineName -ResourceGroupName $resourceGroupName # Update the VM reference by adding the data disk $vm = Add-AzureRmVMDataDisk -VM $vm -Name $dataDiskName -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1 # Update the virtual machine Update-AzureRmVM -VM $vm -ResourceGroupName $resourceGroupName ## Install the Custom Script Extension that inturn calls the initializePartition.ps1 $location = "East US 2" # The name you want to give for the CSE $extensionName = "extensionName" $fileName = "initializePartition.ps1" # Storage Account where the initializePartition.ps1 is present $storageAccountName = "<INSERT_STORAGE_ACCOUNT_NAME>" # Primary Access Key of Storage Account where the initializePartition.ps1 is present $storageAccountAccessPrimaryKey = "<INSERT_STORAGE_PRIMARY_ACCESS_KEY>" # Storage Account container where the initializePartition.ps1 is present $storageAccountContainerName = "<INSERT_STORAGE_ACCOUNT_CONTAINER_NAME>" Set-AzureRmVMCustomScriptExtension -ResourceGroupName $resourceGroupName -Location $location -VMName $virtualMachineName -Name $extensionName -TypeHandlerVersion "1.4" -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountAccessPrimaryKey -FileName $fileName -ContainerName $storageAccountContainerName