Rozwiązywanie problemów ze zmianą nazwy urządzenia maszyny wirtualnej z systemem Linux
Dotyczy: ✔️ maszyny wirtualne z systemem Linux
W tym artykule wyjaśniono, dlaczego nazwy urządzeń zmieniają się po ponownym uruchomieniu maszyny wirtualnej z systemem Linux lub ponownym dołączeniu dysków danych. Artykuł zawiera również rozwiązania tego problemu.
Symptomy
Podczas uruchamiania maszyn wirtualnych z systemem Linux na platformie Microsoft Azure mogą wystąpić następujące problemy:
- Rozruch maszyny wirtualnej nie powiedzie się po ponownym uruchomieniu.
- Gdy dyski danych są odłączane i ponownie dołączane, nazwy urządzeń dyskowych są zmieniane.
- Aplikacja lub skrypt odwołujący się do dysku przy użyciu nazwy urządzenia kończy się niepowodzeniem, ponieważ nazwa urządzenia uległa zmianie.
Przyczyna
Ścieżki urządzeń w systemie Linux nie mają gwarancji spójności w przypadku ponownych uruchomień. Nazwy urządzeń składają się z głównych cyfr (liter) i cyfr pomocniczych. Gdy sterownik urządzenia magazynu systemu Linux wykryje nowe urządzenie, sterownik przypisuje główne i pomocnicze numery z dostępnego zakresu do urządzenia. Po usunięciu urządzenia numery urządzeń są zwalniane do ponownego użycia.
Problem występuje, ponieważ skanowanie urządzeń w systemie Linux jest zaplanowane przez podsystem SCSI w sposób asynchroniczny. W związku z tym nazwa ścieżki urządzenia może się różnić w zależności od ponownych uruchomień.
Rozwiązanie
Aby rozwiązać ten problem, użyj nazw urządzeń trwałych podczas ponownego uruchamiania. Istnieje kilka sposobów używania trwałego nazewnictwa: według etykiety systemu plików, identyfikatora UUID lub pochodnej ścieżki urządzenia. W przypadku maszyn wirtualnych z systemem Linux, które nie korzystają z Menedżera woluminów logicznych (LVM), zalecamy użycie identyfikatora UUID systemu plików lub linków utworzonych przy użyciu reguł udev. W przypadku systemów plików opartych na LVM instalowanie przy użyciu grupy woluminów i nazwy woluminu logicznego jest również prawidłowe, ponieważ obiekty LVM pozostają spójne niezależnie od kolejności woluminów fizycznych.
Większość dystrybucji zapewnia fstab
parametry nofail lub nobootwait . Te parametry umożliwiają systemowi rozruch, gdy nie można zainstalować dysku podczas uruchamiania. Zapoznaj się z dokumentacją dystrybucji, aby uzyskać więcej informacji na temat tych parametrów. Aby uzyskać informacje na temat konfigurowania maszyny wirtualnej z systemem Linux pod kątem używania identyfikatora UUID podczas dodawania dysku danych, zobacz Connect to the Linux VM to mount the new disk (Nawiązywanie połączenia z maszyną wirtualną z systemem Linux w celu zainstalowania nowego dysku).
Jeśli plik fstab został już edytowany w taki sposób, że maszyna wirtualna nie uruchamia się i nie możesz nawiązać połączenia SSH z maszyną wirtualną, możesz użyć konsoli szeregowej maszyny wirtualnej, aby wprowadzić tryb pojedynczego użytkownika i zmodyfikować kartę fstab lub użyć usługi Azure Linux Auto Repair, aby zautomatyzować proces naprawy.
Identyfikowanie jednostek LUN dysku
Gdy agent platformy Azure z systemem Linux jest zainstalowany na maszynie wirtualnej, agent używa reguł udev do konstruowania zestawu łączy symbolicznych w ścieżce /dev/disk/azure , które korelują załączniki LUN zdefiniowane przez platformę Azure z tradycyjnymi urządzeniami dyskowymi:
$ 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
Informacje o jednostkach LUN z konta gościa systemu Linux są pobierane przy użyciu lsscsi
lub podobnego narzędzia:
$ 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
Informacje o numerze LUN gościa są używane z metadanymi subskrypcji platformy Azure w celu zlokalizowania dysku VHD w usłudze Azure Storage zawierającego dane partycji. Na przykład możesz użyć interfejsu az
wiersza polecenia:
$ 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"
}
}
]
Odnajdywanie identyfikatorów UUID systemu plików przy użyciu obiektu blkid
Aplikacje i skrypty odczytują dane wyjściowe blkid
informacji lub podobne źródła informacji w celu konstruowania linków symbolicznych w ścieżce /dev. Dane wyjściowe zawierają identyfikatory UUID wszystkich dysków dołączonych do maszyny wirtualnej i skojarzonych z nimi plików urządzenia:
$ 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"
Reguły udev agenta systemu Linux platformy Azure konstruowają zestaw linków symbolicznych w ścieżce /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
Aplikacje używają linków do identyfikowania urządzenia dysku rozruchowego i dysku zasobu (efemerycznego). Na platformie Azure aplikacje powinny znajdować się w ścieżkach /dev/disk/azure/root-part1 lub /dev/disk/azure-resource-part1, aby odnaleźć te partycje.
Wszystkie dodatkowe partycje z blkid
listy znajdują się na dysku danych. Aplikacje utrzymują identyfikator UUID dla tych partycji i używają ścieżki do odnajdywania nazwy urządzenia w czasie wykonywania:
$ 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
Pobieranie najnowszych reguł usługi Azure Storage
Aby uzyskać najnowsze reguły usługi Azure Storage, uruchom następujące polecenia:
# 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
Zobacz też
Aby uzyskać więcej informacji, zobacz następujące artykuły:
- Ubuntu: używanie identyfikatora UUID
- Red Hat: trwałe nazewnictwo
- Linux: jakie identyfikatory UUID mogą zrobić za Ciebie
- Udev: Wprowadzenie do zarządzania urządzeniami w nowoczesnym systemie Linux
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.