Felsöka ändringar av enhetsnamn för virtuella Linux-datorer
Den här artikeln förklarar varför enhetsnamnen ändras när du startar om en virtuell Linux-dator eller kopplar om datadiskarna. Artikeln innehåller även lösningar på det här problemet.
Symptom
Du kan uppleva 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 på nytt ändras diskenhetsnamnen.
- 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 konsekventa mellan omstarter. Enhetsnamn består av större siffror (bokstäver) och mindre siffror. När Enhetsdrivrutinen för Linux-lagring 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 olika omstarter.
Lösning
Lös problemet genom att använda beständig namngivning. Det finns fyra sätt att använda beständig namngivning: efter filsystemetikett, UUID, ID eller sökväg. Vi rekommenderar att du använder filsystemetiketten eller UUID för virtuella Azure Linux-datorer.
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 för 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.
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. Program och skript använder Udev-regler för att identifiera diskar som är anslutna till den virtuella datorn, tillsammans med disktyp och disk-LUN.
Om du redan har redigerat 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 virtuella datorer för att ange enanvändarläge och ändra din fstab.
Identifiera disk-LUN
Program använder LUN för att hitta alla anslutna diskar och för att skapa symboliska länkar. Azure Linux-agenten innehåller Udev-regler som konfigurerar symboliska länkar från ett LUN till enheterna:
$ 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:erna för filsystemet 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"
Udev-reglerna för Azure Linux-agenten 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ällig). 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 listan blkid
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 för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för