Rozwiązywanie problemów ze zmianami nazwy urządzenia maszyny wirtualnej 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łączaniu dysków danych. Ten 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 zostaną odłączone i ponownie dołączone, nazwy urządzeń dysków zostaną zmienione.
- Aplikacja lub skrypt odwołujące 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 cyfr głównych (liter) i pomocniczych. Gdy sterownik urządzenia magazynu systemu Linux wykryje nowe urządzenie, sterownik przypisuje do urządzenia numery główne i pomocnicze z dostępnego zakresu. 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 asynchronicznie. W związku z tym nazwa ścieżki urządzenia może się różnić w zależności od ponownego uruchomienia.
Rozwiązanie
Aby rozwiązać ten problem, użyj trwałego nazewnictwa. Istnieją cztery sposoby używania trwałego nazewnictwa: według etykiety systemu plików, identyfikatora UUID, identyfikatora lub ścieżki. Zalecamy używanie etykiety systemu plików lub identyfikatora UUID dla maszyn wirtualnych z systemem Linux platformy Azure.
Większość dystrybucji udostępnia fstab
parametry nofail lub nobootwait. Te parametry umożliwiają rozruch systemu, 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 do używania identyfikatora UUID podczas dodawania dysku danych, zobacz Łączenie z maszyną wirtualną z systemem Linux w celu zainstalowania nowego dysku.
Gdy agent systemu Azure Linux jest zainstalowany na maszynie wirtualnej, agent używa reguł Udev do konstruowania zestawu łączy symbolicznych w ścieżce /dev/disk/azure. Aplikacje i skrypty używają reguł Udev do identyfikowania dysków dołączonych do maszyny wirtualnej wraz z typem dysku i jednostkami LUN dysku.
Jeśli karta fstab została już edytowana w taki sposób, że maszyna wirtualna nie jest uruchamiana 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.
Identyfikowanie jednostek LUN dysku
Aplikacje używają jednostek LUN do znajdowania wszystkich dołączonych dysków i tworzenia łączy symbolicznych. Agent platformy Azure z systemem Linux zawiera reguły Udev, które konfigurują linki symboliczne z jednostki LUN do urządzeń:
$ 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 za pomocą lsscsi
narzędzia 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 jednostce 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. Możesz na przykład użyć interfejsu wiersza az
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 metody blkid
Aplikacje i skrypty odczytują dane wyjściowe blkid
lub podobne źródła informacji, aby utworzyć łącza symboliczne w ścieżce /dev. Dane wyjściowe pokazują identyfikatory UUID wszystkich dysków dołączonych do maszyny wirtualnej i skojarzonego z nimi pliku 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 platformy Azure linux konstruują zestaw łączy 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.
Wszelkie dodatkowe partycje z blkid
listy znajdują się na dysku danych. Aplikacje obsługują 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, zapoznaj się z następującymi artykułami:
- Ubuntu: używanie identyfikatora UUID
- Red Hat: trwałe nazewnictwo
- Linux: co mogą zrobić identyfikatory UUID
- 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 platformy Azure.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla