Tutorial - Manage Azure disks with the Azure CLI

Azure virtual machines (VMs) use disks to store the operating system, applications, and data. When you create VM, it is important to choose a disk size and configuration appropriate to the expected workload. This tutorial shows you how to deploy and manage VM disks. You learn about:

  • OS disks and temporary disks
  • Data disks
  • Standard and Premium disks
  • Disk performance
  • Attaching and preparing data disks
  • Resizing disks
  • Disk snapshots

Open Azure Cloud Shell

Azure Cloud Shell is a free, interactive shell that you can use to run the steps in this article. Common Azure tools are preinstalled and configured in Cloud Shell for you to use with your account. Just select the Copy button to copy the code, paste it in Cloud Shell, and then press Enter to run it. There are a few ways to open Cloud Shell:

Select Try It in the upper-right corner of a code block. Cloud Shell in this article
Open Cloud Shell in your browser. https://shell.azure.com/bash
Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. Cloud Shell in the portal

If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.30 or later. Run az --version to find the version. If you need to install or upgrade, see Install Azure CLI.

Default Azure disks

When an Azure virtual machine is created, two disks are automatically attached to the virtual machine.

Operating system disk - Operating system disks can be sized up to 2 TB, and hosts the VMs operating system. The OS disk is labeled /dev/sda by default. The disk caching configuration of the OS disk is optimized for OS performance. Because of this configuration, the OS disk should not be used for applications or data. For applications and data, use data disks, which are detailed later in this tutorial.

Temporary disk - Temporary disks use a solid-state drive that is located on the same Azure host as the VM. Temp disks are highly performant and may be used for operations such as temporary data processing. However, if the VM is moved to a new host, any data stored on a temporary disk is removed. The size of the temporary disk is determined by the VM size. Temporary disks are labeled /dev/sdb and have a mountpoint of /mnt.

Temporary disk sizes

Type Common sizes Max temp disk size (GiB)
General purpose A, B, and D series 1600
Compute optimized F series 576
Memory optimized D, E, G, and M series 6144
Storage optimized L series 5630
GPU N series 1440
High performance A and H series 2000

Azure data disks

To install applications and store data, additional data disks can be added. Data disks should be used in any situation where durable and responsive data storage is desired. Each data disk has a maximum capacity of 4 TB. The size of the virtual machine determines how many data disks can be attached to a VM. For each VM vCPU, two data disks can be attached.

Max data disks per VM

Type VM Size Max data disks per VM
General purpose A, B, and D series 64
Compute optimized F series 64
Memory optimized D, E, and G series 64
Storage optimized L series 64
GPU N series 64
High performance A and H series 64

VM disk types

Azure provides two types of disk.

Standard disk

Standard Storage is backed by HDDs, and delivers cost-effective storage while still being performant. Standard disks are ideal for a cost effective dev and test workload.

Premium disk

Premium disks are backed by SSD-based high-performance, low-latency disk. Perfect for VMs running production workload. Premium Storage supports DS-series, DSv2-series, GS-series, and FS-series VMs. When you select a disk size, the value is rounded up to the next type. For example, if the disk size is less than 128 GB, the disk type is P10. If the disk size is between 129 GB and 512 GB, the size is a P20. Over, 512 GB, the size is a P30.

Premium disk performance

Premium storage disk type P4 P6 P10 P20 P30 P40 P50
Disk size (round up) 32 GB 64 GB 128 GB 512 GB 1,024 GB (1 TB) 2,048 GB (2 TB) 4,095 GB (4 TB)
Max IOPS per disk 120 240 500 2,300 5,000 7,500 7,500
Throughput per disk 25 MB/s 50 MB/s 100 MB/s 150 MB/s 200 MB/s 250 MB/s 250 MB/s

While the above table identifies max IOPS per disk, a higher level of performance can be achieved by striping multiple data disks. For instance, a Standard_GS5 VM can achieve a maximum of 80,000 IOPS. For detailed information on max IOPS per VM, see Linux VM sizes.

Create and attach disks

Data disks can be created and attached at VM creation time or to an existing VM.

Attach disk at VM creation

Create a resource group with the az group create command.

az group create --name myResourceGroupDisk --location eastus

Create a VM using the az vm create command. The following example creates a VM named myVM, adds a user account named azureuser, and generates SSH keys if they do not exist. The --datadisk-sizes-gb argument is used to specify that an additional disk should be created and attached to the virtual machine. To create and attach more than one disk, use a space-delimited list of disk size values. In the following example, a VM is created with two data disks, both 128 GB. Because the disk sizes are 128 GB, these disks are both configured as P10s, which provide maximum 500 IOPS per disk.

az vm create \
  --resource-group myResourceGroupDisk \
  --name myVM \
  --image UbuntuLTS \
  --size Standard_DS2_v2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --data-disk-sizes-gb 128 128

Attach disk to existing VM

To create and attach a new disk to an existing virtual machine, use the az vm disk attach command. The following example creates a premium disk, 128 gigabytes in size, and attaches it to the VM created in the last step.

az vm disk attach \
    --resource-group myResourceGroupDisk \
    --vm-name myVM \
    --disk myDataDisk \
    --size-gb 128 \
    --sku Premium_LRS \
    --new

Prepare data disks

Once a disk has been attached to the virtual machine, the operating system needs to be configured to use the disk. The following example shows how to manually configure a disk. This process can also be automated using cloud-init, which is covered in a later tutorial.

Manual configuration

Create an SSH connection with the virtual machine. Replace the example IP address with the public IP of the virtual machine.

ssh azureuser@52.174.34.95

Partition the disk with fdisk.

(echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/sdc

Write a file system to the partition by using the mkfs command.

sudo mkfs -t ext4 /dev/sdc1

Mount the new disk so that it is accessible in the operating system.

sudo mkdir /datadrive && sudo mount /dev/sdc1 /datadrive

The disk can now be accessed through the datadrive mountpoint, which can be verified by running the df -h command.

df -h

The output shows the new drive mounted on /datadrive.

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        30G  1.4G   28G   5% /
/dev/sdb1       6.8G   16M  6.4G   1% /mnt
/dev/sdc1        50G   52M   47G   1% /datadrive

To ensure that the drive is remounted after a reboot, it must be added to the /etc/fstab file. To do so, get the UUID of the disk with the blkid utility.

sudo -i blkid

The output displays the UUID of the drive, /dev/sdc1 in this case.

/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="ext4"

Add a line similar to the following to the /etc/fstab file.

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive  ext4    defaults,nofail   1  2

Now that the disk has been configured, close the SSH session.

exit

Resize VM disk

Once a VM has been deployed, the operating system disk or any attached data disks can be increased in size. Increasing the size of a disk is beneficial when you need more storage space or a higher level of performance (such as a P10, P20, or P30). Disks cannot be decreased in size.

Before you increase disk size, the ID or name of the disk is needed. Use the az disk list command to return all disks in a resource group. Take note of the disk name that you would like to resize.

az disk list \
    --resource-group myResourceGroupDisk \
    --query '[*].{Name:name,Gb:diskSizeGb,Tier:accountType}' \
    --output table

The VM must be deallocated. Use the az vm deallocate command to stop and deallocate the VM.

az vm deallocate --resource-group myResourceGroupDisk --name myVM

Use the az disk update command to resize the disk. This example resizes a disk named myDataDisk to 1 terabyte.

az disk update --name myDataDisk --resource-group myResourceGroupDisk --size-gb 1023

Once the resize operation has completed, start the VM.

az vm start --resource-group myResourceGroupDisk --name myVM

If you resize the operating system disk, the partition is automatically expanded. If you resize a data disk, any current partitions must be expanded in the VM's operating system.

Snapshot Azure disks

When you take a disk snapshot, Azure creates a read only, point-in-time copy of the disk. Azure VM snapshots are useful to quickly save the state of a VM before you make configuration changes. In the event the configuration changes prove to be undesired, VM state can be restored using the snapshot. When a VM has more than one disk, a snapshot is taken of each disk independently of the others. To take application consistent backups, consider stopping the VM before you take disk snapshots. Alternatively, use the Azure Backup service, which enables you to perform automated backups while the VM is running.

Create snapshot

Before you create a virtual machine disk snapshot, the ID or name of the disk is needed. Use the az vm show command to return the disk ID. In this example, the disk ID is stored in a variable so that it can be used in a later step.

osdiskid=$(az vm show -g myResourceGroupDisk -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)

Now that you have the ID of the virtual machine disk, the following command creates a snapshot of the disk.

az snapshot create \
    --resource-group myResourceGroupDisk \
    --source "$osdiskid" \
    --name osDisk-backup

Create disk from snapshot

This snapshot can then be converted into a disk, which can be used to recreate the virtual machine.

az disk create --resource-group myResourceGroupDisk --name mySnapshotDisk --source osDisk-backup

Restore virtual machine from snapshot

To demonstrate virtual machine recovery, delete the existing virtual machine.

az vm delete --resource-group myResourceGroupDisk --name myVM

Create a new virtual machine from the snapshot disk.

az vm create \
    --resource-group myResourceGroupDisk \
    --name myVM \
    --attach-os-disk mySnapshotDisk \
    --os-type linux

Reattach data disk

All data disks need to be reattached to the virtual machine.

First find the data disk name using the az disk list command. This example places the name of the disk in a variable named datadisk, which is used in the next step.

datadisk=$(az disk list -g myResourceGroupDisk --query "[?contains(name,'myVM')].[name]" -o tsv)

Use the az vm disk attach command to attach the disk.

az vm disk attach –g myResourceGroupDisk –-vm-name myVM –-disk $datadisk

Next steps

In this tutorial, you learned about VM disks topics such as:

  • OS disks and temporary disks
  • Data disks
  • Standard and Premium disks
  • Disk performance
  • Attaching and preparing data disks
  • Resizing disks
  • Disk snapshots

Advance to the next tutorial to learn about automating VM configuration.