Udostępnij za pośrednictwem


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 blkidinformacji 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:

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.