Felsöka ändringar av enhetsnamn för virtuell Linux-dator
Gäller för: ✔️ Virtuella Linux-datorer
Den här artikeln förklarar varför enhetsnamnen ändras när du har startat om en virtuell Linux-dator eller kopplat om datadiskarna. Artikeln innehåller också lösningar på det här problemet.
Symtom
Du kan få följande problem när du kör virtuella Linux-datorer i Microsoft Azure:
- Det går inte att starta den virtuella datorn efter en omstart.
- När datadiskar kopplas från och kopplas tillbaka ändras namnen på diskenheterna.
- Ett program eller skript som refererar till en disk med enhetsnamnet misslyckas eftersom enhetsnamnet har ändrats.
Orsak
Enhetssökvägar i Linux är inte garanterade att vara konsekventa mellan omstarter. Enhetsnamn består av större siffror (bokstäver) och mindre siffror. När Linux Storage-enhetsdrivrutinen identifierar en ny enhet tilldelar drivrutinen större och mindre nummer från det tillgängliga intervallet till enheten. När en enhet tas bort frigörs enhetsnumren för återanvändning.
Problemet beror på att enhetsgenomsökning i Linux schemaläggs av SCSI-undersystemet så att det sker asynkront. Därför kan namnet på en enhetssökväg variera mellan omstarter.
Lösning
Lös problemet genom att använda enhetsnamn som är beständiga för omstarter. Det finns flera sätt att använda beständig namngivning: efter filsystemetikett, UUID eller efter härledd enhetssökväg. För virtuella Linux-datorer som inte använder Logical Volume Manager (LVM) rekommenderar vi att du använder filsystemets UUID eller länkar som skapats med hjälp av udev-regler. För LVM-baserade filsystem är montering med volymgruppen och namnet på den logiska volymen också en giltig metod, eftersom LVM-objekten förblir konsekventa oavsett hur de fysiska volymerna sorteras.
De flesta distributioner tillhandahåller parametrarna fstab
nofail eller nobootwait . Dessa parametrar gör det möjligt för ett system att starta när disken inte kan monteras vid start. Mer information om dessa parametrar finns i distributionsdokumentationen. Information om hur du konfigurerar en virtuell Linux-dator att använda ett UUID när du lägger till en datadisk finns i Ansluta till den virtuella Linux-datorn för att montera den nya disken.
Om du redan har redigerat din fstab på ett sådant sätt att den virtuella datorn inte startar och du inte kan SSH till den virtuella datorn kan du använda seriekonsolen för den virtuella datorn för att gå in i enanvändarläge och ändra din fstab, eller använda Automatisk reparation av Azure Linux för att automatisera reparationsprocessen.
Identifiera disk-LUN
När Azure Linux-agenten installeras på en virtuell dator använder agenten udev-regler för att skapa en uppsättning symboliska länkar under sökvägen /dev/disk/azure , som korrelerar de Azure-definierade LUN-bilagorna till de traditionella diskenheterna:
$ tree /dev/disk/azure
/dev/disk/azure
├── resource -> ../../sdb
├── resource-part1 -> ../../sdb1
├── root -> ../../sda
├── root-part1 -> ../../sda1
└── scsi1
├── lun0 -> ../../../sdc
├── lun0-part1 -> ../../../sdc1
├── lun1 -> ../../../sdd
├── lun1-part1 -> ../../../sdd1
├── lun1-part2 -> ../../../sdd2
└── lun1-part3 -> ../../../sdd3
LUN-information från Linux-gästkontot hämtas med hjälp lsscsi
av eller ett liknande verktyg:
$ sudo lsscsi
[1:0:0:0] cd/dvd Msft Virtual CD/ROM 1.0 /dev/sr0
[2:0:0:0] disk Msft Virtual Disk 1.0 /dev/sda
[3:0:1:0] disk Msft Virtual Disk 1.0 /dev/sdb
[5:0:0:0] disk Msft Virtual Disk 1.0 /dev/sdc
[5:0:0:1] disk Msft Virtual Disk 1.0 /dev/sdd
Gäst-LUN-informationen används med Azure-prenumerationsmetadata för att hitta den virtuella hårddisken i Azure Storage som innehåller partitionsdata. Du kan till exempel använda az
CLI:
$ az vm show --resource-group testVM --name testVM | jq -r .storageProfile.dataDisks
[
{
"caching": "None",
"createOption": "empty",
"diskSizeGb": 1023,
"image": null,
"lun": 0,
"managedDisk": null,
"name": "testVM-20170619-114353",
"vhd": {
"uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-114353.vhd"
}
},
{
"caching": "None",
"createOption": "empty",
"diskSizeGb": 512,
"image": null,
"lun": 1,
"managedDisk": null,
"name": "testVM-20170619-121516",
"vhd": {
"uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-121516.vhd"
}
}
]
Identifiera UUID för filsystem med hjälp av blkid
Program och skript läser utdata blkid
från , eller liknande informationskällor, för att skapa symboliska länkar i sökvägen /dev. Utdata visar UUID:erna för alla diskar som är anslutna till den virtuella datorn och deras associerade enhetsfil:
$ sudo blkid -s UUID
/dev/sr0: UUID="120B021372645f72"
/dev/sda1: UUID="52c6959b-79b0-4bdd-8ed6-71e0ba782fb4"
/dev/sdb1: UUID="176250df-9c7c-436f-94e4-d13f9bdea744"
/dev/sdc1: UUID="b0048738-4ecc-4837-9793-49ce296d2692"
Azure Linux-agentens Udev-regler skapar en uppsättning symboliska länkar under sökvägen /dev/disk/azure:
$ ls -l /dev/disk/azure
total 0
lrwxrwxrwx 1 root root 9 Jun 2 23:17 resource -> ../../sdb
lrwxrwxrwx 1 root root 10 Jun 2 23:17 resource-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 9 Jun 2 23:17 root -> ../../sda
lrwxrwxrwx 1 root root 10 Jun 2 23:17 root-part1 -> ../../sda1
Program använder länkarna för att identifiera startdiskenheten och resursdisken (tillfälliga). I Azure bör program titta i sökvägarna /dev/disk/azure/root-part1 eller /dev/disk/azure-resource-part1 för att identifiera dessa partitioner.
Eventuella ytterligare partitioner från blkid
listan finns på en datadisk. Program underhåller UUID för dessa partitioner och använder en sökväg för att identifiera enhetsnamnet vid körning:
$ ls -l /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692
lrwxrwxrwx 1 root root 10 Jun 19 15:57 /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692 -> ../../sdc1
Hämta de senaste Azure Storage-reglerna
Kör följande kommandon för att hämta de senaste Azure Storage-reglerna:
# sudo curl -o /etc/udev/rules.d/66-azure-storage.rules https://raw.githubusercontent.com/Azure/WALinuxAgent/master/config/66-azure-storage.rules
# sudo udevadm trigger --subsystem-match=block
Se även
Mer information finns i följande artiklar:
- Ubuntu: Använda UUID
- Red Hat: Beständig namngivning
- Linux: Vad UUID:er kan göra åt dig
- Udev: Introduktion till enhetshantering i ett modernt Linux-system
Kontakta oss om du behöver hjälp
Om du har frågor eller behöver hjälp skapar du en supportbegäran eller frågar Azure Community-support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.