In Azure, every VM has a persistent OS Disk that is used for booting the VM and contains the operating system. In addition to an OS disk, each VM also has a temporary disk that is present on the compute cluster hosting your VM.
Why is my OS disk not @ /dev/sda?
In most cases the OS disk is /dev/sda
but in some odd cases it is not. This is not an Azure specific issue but a default Linux behavior. The ordering in which Linux enumerates SCSI devices is nondeterministic. It scans SCSI devices in the order they appear on the PCI Bus. Therefore, whichever disk is enumerated first is /dev/sda
.
OK, so how to identify my disks?
To resolve this problem, use persistent naming. There are four ways to use persistent naming in Linux:
- filesystem label
- UUID
- ID
- path.
Generally, it is recommend to use the filesystem label or UUID for Azure Linux VMs.
Let there be disks!
OS and temporary disks
When the Azure Linux agent is installed on a VM, the agent uses udev rules to construct a set of symbolic links under the /dev/disk/azure
path. There, /dev/disk/azure
is the first place you should look. Using this path, we can identify the different disk types attached to the VM as well the LUNs for data disks.
We can take a look at these symbolic links to identify the disks.
kay@uuidvm:~$ ls -l /dev/disk/azure
total 0
lrwxrwxrwx 1 root root 9 Apr 30 17:48 resource -> ../../sdb
lrwxrwxrwx 1 root root 10 Apr 30 17:48 resource-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 9 Apr 30 17:48 root -> ../../sda
lrwxrwxrwx 1 root root 10 Apr 30 17:48 root-part1 -> ../../sda1
lrwxrwxrwx 1 root root 11 Apr 30 17:48 root-part14 -> ../../sda14
lrwxrwxrwx 1 root root 11 Apr 30 17:48 root-part15 -> ../../sda15
drwxr-xr-x 2 root root 120 Apr 30 22:24 scsi1
Based on the above output, we can identify the following disks and their paths:
/dev/disk/azure/root-part1
- OS Disk/dev/disk/azure-resource-part1
- Temporary/Resource Disk
Data Disks
For data disks, we can use the tree command like shown below. Using this command, we can also identify the LUN numbers for the data disks
kay@uuidvm:~$ tree /dev/disk/azure
/dev/disk/azure
├── resource -> ../../sdb
├── resource-part1 -> ../../sdb1
├── root -> ../../sda
├── root-part1 -> ../../sda1
├── root-part14 -> ../../sda14
├── root-part15 -> ../../sda15
└── scsi1
├── lun0 -> ../../../sdc
├── lun0-part1 -> ../../../sdc1
├── lun9 -> ../../../sdd
└── lun9-part1 -> ../../../sdd1
Based on the above output, we can identify the following data disks and their LUNs
lun0-part1
– Data Disk 1 mounted at LUN 0lun9-part2
– Data Disk 2 mounted at LUN 9
In Azure, the VM disks properties page looks like below
A disk by any other name
Now, we need to find how to refer to these disks in our scripts and applications. For that, we’ll run the following command
kay@uuidvm:~$ sudo blkid -s UUID
/dev/sdb1: UUID="420dd50e-9a61-4e26-9d24-5d399065ec52"
/dev/sda1: UUID="eb5f4234-4e60-46a9-a0dc-76fd1a593cdd"
/dev/sda15: UUID="D183-43BF"
/dev/sdc1: UUID="27230452-56a6-4aba-9c90-77071488ece5"
/dev/sdd1: UUID="28372da4-8adc-4be0-b1a8-7f51248f91ab"
With the above information, we can refer to our boot disk in the ls
command as follows
kay@uuidvm:~$ ls -l /dev/disk/by-uuid/eb5f4234-4e60-46a9-a0dc-76fd1a593cdd
lrwxrwxrwx 1 root root 10 Apr 30 17:48 /dev/disk/by-uuid/eb5f4234-4e60-46a9-a0dc-76fd1a593cdd -> ../../sda1
Reach out if you have any questions! Feel free to follow me on
- Twitter - @singhkays
- LinkedIn - https://www.linkedin.com/in/singhkays/