Problemen met het wijzigen van de naam van linux-VM-apparaten oplossen

In dit artikel wordt uitgelegd waarom apparaatnamen veranderen nadat u een Linux-VM opnieuw hebt opgestart of de gegevensschijven opnieuw hebt gekoppeld. Het artikel biedt ook oplossingen voor dit probleem.

Symptomen

U kunt de volgende problemen ondervinden bij het uitvoeren van Virtuele Linux-machines in Microsoft Azure:

  • De VM kan niet worden opgestart na het opnieuw opstarten.
  • Wanneer gegevensschijven worden losgekoppeld en opnieuw worden gekoppeld, worden de namen van de schijfapparaten gewijzigd.
  • Een toepassing of script dat verwijst naar een schijf met behulp van de apparaatnaam, mislukt omdat de apparaatnaam is gewijzigd.

Oorzaak

Apparaatpaden in Linux zijn niet gegarandeerd consistent bij het opnieuw opstarten. Apparaatnamen bestaan uit primaire cijfers (letters) en secundaire cijfers. Wanneer het Linux-opslagapparaatstuurprogramma een nieuw apparaat detecteert, wijst het stuurprogramma primaire en secundaire getallen uit het beschikbare bereik toe aan het apparaat. Wanneer een apparaat wordt verwijderd, worden de apparaatnummers vrijgemaakt voor hergebruik.

Het probleem treedt op omdat het scannen van apparaten in Linux door het SCSI-subsysteem asynchroon wordt uitgevoerd. Als gevolg hiervan kan de naam van een apparaatpad variëren tijdens het opnieuw opstarten.

Oplossing

Gebruik permanente naamgeving om dit probleem op te lossen. Er zijn vier manieren om permanente naamgeving te gebruiken: op bestandssysteemlabel, op UUID, op id of op pad. U wordt aangeraden het bestandssysteemlabel of UUID te gebruiken voor Azure Linux-VM's.

De meeste distributies bieden de fstabparameters nofail of nobootwait . Met deze parameters kan een systeem worden opgestart wanneer de schijf niet kan worden gekoppeld bij het opstarten. Raadpleeg de distributiedocumentatie voor meer informatie over deze parameters. Zie Verbinding maken met de virtuele Linux-machine om de nieuwe schijf te koppelen voor meer informatie over het configureren van een Virtuele Linux-machine voor het gebruik van een UUID wanneer u een gegevensschijf toevoegt.

Wanneer de Azure Linux-agent is geïnstalleerd op een VM, gebruikt de agent Udev-regels om een set symbolische koppelingen te maken onder het pad /dev/disk/azure. Toepassingen en scripts gebruiken Udev-regels om schijven te identificeren die zijn gekoppeld aan de VM, samen met het schijftype en schijf-LUN's.

Als u uw fstab al zodanig hebt bewerkt dat uw VM niet wordt opgestart en u niet kunt SSH naar uw VM, kunt u de seriële console van de VM gebruiken om de modus voor één gebruiker in te schakelen en uw fstab te wijzigen.

Schijf-LUN's identificeren

Toepassingen gebruiken LUN's om alle gekoppelde schijven te vinden en symbolische koppelingen te maken. De Azure Linux-agent bevat Udev-regels waarmee symbolische koppelingen van een LUN naar de apparaten worden ingesteld:

$ 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-informatie uit het Linux-gastaccount wordt opgehaald met behulp van lsscsi of een vergelijkbaar hulpprogramma:

$ 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

De gast-LUN-gegevens worden gebruikt met metagegevens van Azure-abonnementen om de VHD in Azure Storage te vinden die de partitiegegevens bevat. U kunt bijvoorbeeld de az CLI gebruiken:

$ 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"
  }
  }
]

UUID's van bestandssysteem detecteren met behulp van blkid

Toepassingen en scripts lezen de uitvoer van blkid, of vergelijkbare informatiebronnen, om symbolische koppelingen te maken in het /dev-pad. De uitvoer toont de UUID's van alle schijven die zijn gekoppeld aan de VM en het bijbehorende apparaatbestand:

$ 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"

De Udev-regels van de Azure Linux-agent maken een set symbolische koppelingen onder het pad /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

Toepassingen gebruiken de koppelingen om het opstartschijfapparaat en de resourceschijf (kortstondig) te identificeren. In Azure moeten toepassingen zoeken in de paden /dev/disk/azure/root-part1 of /dev/disk/azure-resource-part1 om deze partities te detecteren.

Eventuele extra partities uit de blkid lijst bevinden zich op een gegevensschijf. Toepassingen onderhouden de UUID voor deze partities en gebruiken een pad om de apparaatnaam tijdens runtime te detecteren:

$ 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

De nieuwste Azure Storage-regels ophalen

Voer de volgende opdrachten uit om de meest recente Azure Storage-regels op te halen:

# 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

Zie ook

Zie de volgende artikelen voor meer informatie:

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.