Dodawanie dysku do maszyny wirtualnej z systemem Linux

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy ✔️ skalowania

W tym artykule pokazano, jak dołączyć dysk trwały do maszyny wirtualnej, aby można było zachować dane — nawet jeśli maszyna wirtualna zostanie ponownie aprowizowana z powodu konserwacji lub zmiany rozmiaru.

Dołączanie nowego dysku do maszyny wirtualnej

Jeśli chcesz dodać nowy, pusty dysk danych na maszynie wirtualnej, użyj polecenia az vm disk attach z parametrem --new . Jeśli maszyna wirtualna znajduje się w strefie dostępności, dysk jest automatycznie tworzony w tej samej strefie co maszyna wirtualna. Aby uzyskać więcej informacji, zobacz Omówienie Strefy dostępności. Poniższy przykład tworzy dysk o nazwie myDataDisk o rozmiarze 50 Gb:

az vm disk attach \
   -g myResourceGroup \
   --vm-name myVM \
   --name myDataDisk \
   --new \
   --size-gb 50

Mniejsze opóźnienia

W wybranych regionach opóźnienie dołączania dysku zostało zmniejszone, więc zobaczysz poprawę do 15%. Jest to przydatne w przypadku zaplanowanych/nieplanowanych trybów failover między maszynami wirtualnymi, skalowania obciążenia lub uruchamiania obciążenia stanowego o dużej skali, takiego jak Azure Kubernetes Service. Jednak to ulepszenie jest ograniczone do jawnego polecenia dołączania dysku, az vm disk attach. Nie zobaczysz poprawy wydajności, jeśli wywołasz polecenie, które może niejawnie wykonać dołączanie, na przykład az vm update. Nie musisz podejmować żadnych działań innych niż wywoływanie jawnego polecenia attach, aby zobaczyć to ulepszenie.

Mniejsze opóźnienie jest obecnie dostępne w każdym regionie publicznym, z wyjątkiem:

  • Kanada Środkowa
  • Central US
  • East US
  • Wschodnie stany USA 2
  • South Central US
  • Zachodnie stany USA 2
  • Niemcy Północne
  • Jio India West
  • Europa Północna
  • West Europe

Dołączanie istniejącego dysku

Aby dołączyć istniejący dysk, znajdź identyfikator dysku i przekaż go do polecenia az vm disk attach . Poniższy przykład wykonuje zapytanie dotyczące dysku o nazwie myDataDisk w grupie myResourceGroup, a następnie dołącza je do maszyny wirtualnej o nazwie myVM:

diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)

az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId

Formatowanie i instalowanie dysku

Aby podzielić na partycje, sformatować i zainstalować nowy dysk, aby maszyna wirtualna z systemem Linux mogła jej używać, na maszynie wirtualnej za pomocą protokołu SSH. Aby uzyskać więcej informacji, zobacz temat dotyczący korzystania z protokołu SSH systemu Linux na platformie Azure. Poniższy przykład łączy się z maszyną wirtualną z publicznym adresem IP 10.123.123.25 z nazwą użytkownika azureuser:

ssh azureuser@10.123.123.25

Wyszukiwanie dysku

Po nawiązaniu połączenia z maszyną wirtualną znajdź dysk. W tym przykładzie używamy lsblk polecenia , aby wyświetlić listę dysków.

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

Dane wyjściowe są podobne do poniższego przykładu:

sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0      14G
└─sdb1               14G /mnt
sdc     3:0:0:0      50G

Oto dysk, sdc który chcemy, ponieważ jest 50G. Jeśli dodasz wiele dysków i nie masz pewności, który dysk jest oparty na samym rozmiarze, możesz przejść do strony maszyny wirtualnej w portalu, wybrać pozycję Dyski i sprawdzić numer LUN dysku w obszarze Dyski. Porównaj numer LUN z portalu z ostatnią liczbą części danych wyjściowych HTCL , czyli numerem LUN. Inną opcją jest wyświetlenie listy zawartości /dev/disk/azure/scsi1 katalogu:

ls -l /dev/disk/azure/scsi1

Dane wyjściowe powinny być podobne do następującego przykładu:

lrwxrwxrwx 1 root root 12 Mar 28 19:41 lun0 -> ../../../sdc

Formatowanie dysku

Sformatuj dysk za pomocą partedparametru , jeśli rozmiar dysku to dwa tebibajty (TiB) lub większy, należy użyć partycjonowania GPT, jeśli znajduje się w obszarze 2TiB, można użyć partycjonowania MBR lub GPT.

Uwaga

Zaleca się użycie najnowszej wersji parted dostępnej dla dystrybucji. Jeśli rozmiar dysku to 2 tebibajty (TiB) lub większy, należy użyć partycjonowania GPT. Jeśli rozmiar dysku jest poniżej 2 TiB, można użyć partycjonowania MBR lub GPT.

W poniższym przykładzie użyto polecenia parted w systemie /dev/sdc, który jest miejscem, w którym pierwszy dysk danych będzie zwykle znajdować się na większości maszyn wirtualnych. Zastąp sdc wartość poprawną opcją dla dysku. Formatujemy go również przy użyciu systemu plików XFS .

sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1

partprobe Użyj narzędzia , aby upewnić się, że jądro zna nową partycję i system plików. Nie można użyć partprobe polecenia blkid lub lsblk, aby nie zwracać identyfikatora UUID dla nowego systemu plików natychmiast.

Instalowanie dysku

Teraz utwórz katalog, aby zainstalować system plików przy użyciu polecenia mkdir. Poniższy przykład tworzy katalog w lokalizacji /datadrive:

sudo mkdir /datadrive

Użyj mount polecenia , aby zainstalować system plików. Poniższy przykład instaluje partycję /dev/sdc1 w /datadrive punkcie instalacji:

sudo mount /dev/sdc1 /datadrive

Utrwalanie instalacji

Aby mieć pewność, że dysk zostanie automatycznie zainstalowany ponownie po ponownym uruchomieniu /etc/fstab , należy go dodać do pliku. Zdecydowanie zaleca się również użycie identyfikatora UUID (uniwersalnego unikatowego identyfikatora) do /etc/fstab odwoływania się do dysku, a nie tylko nazwy urządzenia (np. /dev/sdc1). Jeśli system operacyjny wykryje błąd dysku podczas rozruchu, w przypadku używania identyfikatora UUID w danej lokalizacji nie zostanie zainstalowany nieprawidłowy dysk. Do pozostałych dysków danych zostałyby w takiej sytuacji przypisane te same identyfikatory urządzeń. Identyfikator UUID nowego dysku możesz znaleźć za pomocą narzędzia blkid:

sudo blkid

Dane wyjściowe wyglądają podobnie do następującego przykładu:

/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"

Uwaga

Nieprawidłowe edytowanie pliku /etc/fstab może uniemożliwić rozruch systemu. Jeśli nie masz pewności, jak to zrobić, sprawdź informacje na temat prawidłowego edytowania tego pliku w dokumentacji dystrybucji. Zaleca się również utworzenie kopii zapasowej /etc/fstab pliku przed edycją.

Następnie otwórz /etc/fstab plik w edytorze tekstów. Dodaj wiersz na końcu pliku przy użyciu wartości /dev/sdc1 UUID urządzenia utworzonego w poprzednich krokach oraz punktu instalacji ./datadrive Korzystając z przykładu z tego artykułu, nowy wiersz będzie wyglądać następująco:

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2

Po zakończeniu edytowania pliku zapisz i zamknij edytor.

Alternatywnie możesz uruchomić następujące polecenie, aby dodać dysk do /etc/fstab pliku:

echo "UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2" >> /etc/fstab

Uwaga

Później usunięcie dysku danych bez edytowania fstab może spowodować niepowodzenie rozruchu maszyny wirtualnej. Większość dystrybucji zapewnia opcje nofail i/lub nobootwait fstab. Te opcje umożliwiają rozruch systemu nawet wtedy, gdy podczas rozruchu nie można zainstalować dysku. Aby uzyskać więcej informacji na temat tych parametrów, zapoznaj się z dokumentacją dystrybucji.

Opcja nofail gwarantuje, że maszyna wirtualna zostanie uruchomiona, nawet jeśli system plików jest uszkodzony lub dysk nie istnieje w czasie rozruchu. Bez tej opcji można napotkać zachowanie zgodnie z opisem w temacie Nie można nawiązać połączenia SSH z maszyną wirtualną z systemem Linux z powodu błędów FSTAB

Konsola szeregowa maszyny wirtualnej platformy Azure może służyć do uzyskiwania dostępu do konsoli maszyny wirtualnej, jeśli modyfikowanie fstab spowodowało błąd rozruchu. Więcej szczegółów można znaleźć w dokumentacji konsoli szeregowej.

Obsługa funkcji TRIM/UNMAP dla systemu Linux na platformie Azure

Niektóre jądra systemu Linux obsługują operacje TRIM/UNMAP w celu odrzucenia nieużywanych bloków na dysku. Ta funkcja jest przydatna głównie do informowania platformy Azure o tym, że usunięte strony nie są już prawidłowe i można je odrzucić. Ta funkcja może zaoszczędzić pieniądze na dyskach, które są rozliczane na podstawie ilości zużytego magazynu, na przykład dysków niezarządzanych w warstwie Standardowa i migawek dysków.

Istnieją dwa sposoby włączania obsługi funkcji TRIM na maszynie wirtualnej z systemem Linux. Jak zwykle zapoznaj się z rozkładem zalecanym podejściem:

  • discard Użyj opcji instalacji w /etc/fstabprogramie , na przykład:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • W niektórych przypadkach discard opcja może mieć wpływ na wydajność. Alternatywnie możesz uruchomić fstrim polecenie ręcznie z poziomu wiersza polecenia lub dodać je do narzędzia crontab w celu regularnego uruchamiania:

sudo apt install util-linux
sudo fstrim /datadrive

Rozwiązywanie problemów

Podczas dodawania dysków danych do maszyny wirtualnej z systemem Linux mogą wystąpić błędy, jeśli dysk nie istnieje w numerze LUN 0. Jeśli dodasz dysk ręcznie przy użyciu az vm disk attach -new polecenia i określisz jednostkę LUN (--lun) zamiast zezwalać platformie Azure na określenie odpowiedniej jednostki LUN, upewnij się, że dysk już istnieje /będzie istnieć w numerze LUN 0.

Rozważmy poniższy przykład pokazujący fragment kodu wyjściowego z lsscsielementu :

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

Dwa dyski danych istnieją w jednostkach LUN 0 i LUN 1 (pierwsza kolumna w szczegółach [host:channel:target:lun]danych wyjściowychlsscsi). Oba dyski powinny być dostępne z poziomu maszyny wirtualnej. Jeśli został ręcznie określony pierwszy dysk, który ma zostać dodany w numerze LUN 1 i drugim dysku w numerze LUN 2, możesz nie zobaczyć dysków poprawnie z poziomu maszyny wirtualnej.

Uwaga

Wartość platformy Azure host to 5 w tych przykładach, ale może się to różnić w zależności od wybranego typu magazynu.

To zachowanie dysku nie jest problemem platformy Azure, ale sposobem, w jaki jądro systemu Linux jest zgodne ze specyfikacjami SCSI. Gdy jądro systemu Linux skanuje magistralę SCSI dla dołączonych urządzeń, urządzenie musi znajdować się w numerze LUN 0, aby system kontynuował skanowanie pod kątem dodatkowych urządzeń. W związku z tym:

  • Przejrzyj dane wyjściowe po lsscsi dodaniu dysku danych, aby sprawdzić, czy masz dysk w numerze LUN 0.
  • Jeśli dysk nie jest poprawnie wyświetlany na maszynie wirtualnej, sprawdź, czy dysk istnieje w numerze LUN 0.

Następne kroki