Problemen oplossen met wijzigingen van de apparaatnaam voor een virtuele Linux-machine
Van toepassing op: ✔️ Virtuele Linux-machines
In dit artikel wordt uitgelegd waarom apparaatnamen worden gewijzigd nadat u een Virtuele Linux-machine opnieuw hebt opgestart of de gegevensschijven opnieuw hebt gekoppeld. Het artikel bevat ook oplossingen voor dit probleem.
Symptomen
Mogelijk ondervindt u de volgende problemen bij het uitvoeren van Linux-VM's 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 het schijfapparaat 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 opnieuw opstarten. Apparaatnamen bestaan uit primaire cijfers (letters) en secundaire cijfers. Wanneer het stuurprogramma van het Linux-opslagapparaat een nieuw apparaat detecteert, wijst het stuurprogramma primaire en secundaire getallen toe van het beschikbare bereik aan het apparaat. Wanneer een apparaat wordt verwijderd, worden de apparaatnummers vrijgemaakt voor hergebruik.
Het probleem treedt op omdat apparaatscans in Linux zijn gepland door het SCSI-subsysteem asynchroon. Als gevolg hiervan kan de naam van een apparaatpad variëren tussen opnieuw opstarten.
Oplossing
U kunt dit probleem oplossen door apparaatnamen te gebruiken die permanent zijn bij het opnieuw opstarten. Er zijn verschillende manieren om permanente naamgeving te gebruiken: op bestandssysteemlabel, UUID of op afgeleid apparaatpad. Voor Linux-VM's die geen LVM (Logical Volume Manager) gebruiken, raden we u aan de UUID van het bestandssysteem te gebruiken of koppelingen die zijn gemaakt met behulp van udev-regels. Voor op LVM gebaseerde bestandssysteemen is koppelen met behulp van de volumegroep en logische volumenaam ook een geldige benadering, omdat de LVM-objecten consistent blijven, ongeacht hoe de fysieke volumes worden geordend.
De meeste distributies bieden de fstab
nofail - of nobootwait-parameters . Met deze parameters kan een systeem worden opgestart wanneer de schijf niet kan worden gekoppeld bij het opstarten. Raadpleeg uw distributiedocumentatie voor meer informatie over deze parameters. Zie Verbinding maken met de Virtuele Linux-machine om de nieuwe schijf te koppelen voor informatie over het configureren van een Linux-VM voor het gebruik van een UUID wanneer u een gegevensschijf toevoegt.
Als u uw fstab al hebt bewerkt op een zodanige manier dat uw VIRTUELE machine niet wordt opgestart en u geen SSH naar uw VIRTUELE machine kunt uitvoeren, kunt u de seriële console van de VIRTUELE machine gebruiken om de modus voor één gebruiker in te voeren en uw fstab te wijzigen, of Azure Linux Auto Repair gebruiken om het herstelproces te automatiseren.
LUN's voor schijven identificeren
Wanneer de Azure Linux-agent op een virtuele machine is geïnstalleerd, gebruikt de agent udev-regels om een set symbolische koppelingen te maken onder het pad /dev/disk/azure , die de door Azure gedefinieerde LUN-bijlagen correleren met de traditionele schijfapparaten:
$ 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-gegevens uit het Linux-gastaccount worden 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-informatie wordt gebruikt met metagegevens van het Azure-abonnement 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 virtuele machine 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 voor 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 (kortstondige) schijf 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 nieuwste 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
Raadpleeg voor meer informatie de volgende artikelen:
- Ubuntu: UUID gebruiken
- Red Hat: permanente naamgeving
- Linux: Wat UUID's voor u kunnen doen
- Udev: Inleiding tot apparaatbeheer in een modern Linux-systeem
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 Azure-feedbackcommunity.