Een schijf toevoegen aan een virtuele Linux-machine

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

In dit artikel wordt beschreven hoe u een permanente schijf aan uw VM koppelt, zodat u uw gegevens kunt behouden, zelfs als uw VM opnieuw is ingericht vanwege onderhoud of het wijzigen van het formaat.

Een nieuwe schijf koppelen aan een VM

Als u een nieuwe, lege gegevensschijf wilt toevoegen aan uw VM, gebruikt u de opdracht az vm disk attach met de --new parameter . Als uw VM zich in een beschikbaarheidszone bevindt, wordt de schijf automatisch gemaakt in dezelfde zone als de VM. Zie Overzicht van Beschikbaarheidszones voor meer informatie. In het volgende voorbeeld wordt een schijf met de naam myDataDisk gemaakt die 50 Gb groot is:

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

Lagere latentie

In bepaalde regio's is de latentie van schijfkoppelingen verminderd, dus u ziet een verbetering van maximaal 15%. Dit is handig als u geplande/niet-geplande failovers tussen VM's hebt, uw workload schaalt of een stateful workload op grote schaal uitvoert, zoals Azure Kubernetes Service. Deze verbetering is echter beperkt tot de expliciete opdracht voor schijfkoppeling, az vm disk attach. De prestatieverbetering wordt niet weergegeven als u een opdracht aanroept waarmee impliciet een bijlage wordt uitgevoerd, zoals az vm update. U hoeft geen andere actie te ondernemen dan het aanroepen van de expliciete koppelingsopdracht om deze verbetering te zien.

Lagere latentie is momenteel beschikbaar in elke openbare regio, met uitzondering van:

  • Canada - midden
  • VS - centraal
  • VS - oost
  • VS - oost 2
  • VS - zuid-centraal
  • VS - west 2
  • Duitsland - noord
  • Jio India West
  • Europa - noord
  • Europa -west

Een bestaande schijf koppelen

Als u een bestaande schijf wilt koppelen, zoekt u de schijf-id en geeft u de id door aan de opdracht az vm disk attach . In het volgende voorbeeld wordt een query uitgevoerd op een schijf met de naam myDataDisk in myResourceGroup en wordt deze vervolgens gekoppeld aan de VM met de naam myVM:

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

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

De schijf formatteren en koppelen

Als u de nieuwe schijf wilt partitioneren, formatteren en koppelen zodat uw Linux-VM deze kan gebruiken, gebruikt u SSH in uw VM. Zie voor meer informatie SSH gebruiken met Linux op Azure. In het volgende voorbeeld wordt verbinding gemaakt met een VM met het openbare IP-adres 10.123.123.25 met de gebruikersnaam azureuser:

ssh azureuser@10.123.123.25

De schijf vinden

Zodra u verbinding hebt gemaakt met uw VM, zoekt u de schijf. In dit voorbeeld gebruiken lsblk we om de schijven weer te geven.

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

De uitvoer lijkt op die in het volgende voorbeeld:

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

Hier is sdc de schijf die we willen, omdat het 50G is. Als u meerdere schijven toevoegt en niet zeker weet welke schijf alleen op de grootte is gebaseerd, gaat u naar de VM-pagina in de portal, selecteert u Schijven en controleert u het LUN-nummer voor de schijf onder Gegevensschijven. Vergelijk het LUN-nummer van de portal met het laatste nummer van het HTCL-gedeelte van de uitvoer, namelijk de LUN. Een andere optie is om de inhoud van de map weer te geven /dev/disk/azure/scsi1 :

ls -l /dev/disk/azure/scsi1

De uitvoer moet er ongeveer uitzien als in het volgende voorbeeld:

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

De schijf formatteren

Formatteer de schijf met parted, als de schijfgrootte twee tebibytes (TiB) of groter is, moet u GPT-partitionering gebruiken. Als de schijf kleiner is dan 2TiB, kunt u MBR- of GPT-partitionering gebruiken.

Notitie

U wordt aangeraden de nieuwste versie parted te gebruiken die beschikbaar is voor uw distributie. Als de schijfgrootte 2 tebibytes (TiB) of groter is, moet u GPT-partitionering gebruiken. Als de schijf kleiner is dan 2 TiB, kunt u MBR- of GPT-partitionering gebruiken.

In het volgende voorbeeld wordt op /dev/sdcgebruiktparted. Dit is de locatie waar de eerste gegevensschijf zich meestal op de meeste VM's bevindt. Vervang door sdc de juiste optie voor uw schijf. We maken het ook op met behulp van het XFS-bestandssysteem .

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

Gebruik het partprobe hulpprogramma om ervoor te zorgen dat de kernel op de hoogte is van de nieuwe partitie en het nieuwe bestandssysteem. Het niet gebruiken partprobe kan ertoe leiden dat de opdrachten blkid of lsblk niet onmiddellijk de UUID voor het nieuwe bestandssysteem retourneren.

De schijf koppelen

Maak nu een map om het bestandssysteem te koppelen met behulp van mkdir. In het volgende voorbeeld wordt een map gemaakt op /datadrive:

sudo mkdir /datadrive

Gebruik mount om vervolgens het bestandssysteem te koppelen. In het volgende voorbeeld wordt de /dev/sdc1 partitie gekoppeld aan het /datadrive koppelpunt:

sudo mount /dev/sdc1 /datadrive

De koppeling behouden

Om ervoor te zorgen dat het station automatisch opnieuw wordt gekoppeld na het opnieuw opstarten, moet het worden toegevoegd aan het /etc/fstab bestand. Het wordt ook ten zeerste aanbevolen dat de UUID (Universally Unique Identifier) wordt gebruikt in /etc/fstab om te verwijzen naar het station in plaats van alleen de apparaatnaam (zoals /dev/sdc1). Als het besturingssysteem een schijffout ontdekt tijdens het opstarten, kunt u door de UUID te gebruiken voorkomen dat de verkeerde schijf wordt gekoppeld aan een bepaalde locatie. Resterende gegevensschijven worden dan toegewezen aan dezelfde apparaat-id's. Als u de UUID van het nieuwe station wilt zoeken, gebruikt u het hulpprogramma blkid:

sudo blkid

De uitvoer ziet er ongeveer uit als in het volgende voorbeeld:

/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"

Notitie

Als u het bestand /etc/fstab onjuist bewerkt, kan dat erin resulteren dat het systeem niet meer kan worden opgestart. Als u niet zeker weet wat u moet doen, raadpleegt u de documentatie van de distributie over het bewerken van dit bestand. Het wordt ook aanbevolen om een back-up van het bestand te maken voordat u het /etc/fstab bewerkt.

Open vervolgens het /etc/fstab bestand in een teksteditor. Voeg een regel toe aan het einde van het bestand, met behulp van de UUID-waarde voor het /dev/sdc1 apparaat dat in de vorige stappen is gemaakt, en het koppelpunt van /datadrive. Aan de hand van het voorbeeld uit dit artikel ziet de nieuwe regel er als volgt uit:

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

Wanneer u klaar bent met het bewerken van het bestand, slaat u de editor op en sluit u deze.

U kunt ook de volgende opdracht uitvoeren om de schijf toe te voegen aan het /etc/fstab bestand:

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

Notitie

Als u later een gegevensschijf verwijdert zonder fstab te bewerken, kan dit ertoe leiden dat de VM niet kan worden opgestart. De meeste distributies bieden de opties nofail en/of nobootwait fstab. Met deze opties kan een systeem worden opgestart, zelfs als de schijf niet kan worden gekoppeld tijdens het opstarten. Raadpleeg de documentatie van uw distributie voor meer informatie over deze parameters.

De nofail-optie zorgt ervoor dat de VM wordt gestart, zelfs als het bestandssysteem beschadigd is of als de schijf niet bestaat tijdens het opstarten. Zonder deze optie kunt u gedrag tegenkomen zoals beschreven in Kan niet SSH naar Linux-VM vanwege FSTAB-fouten

De seriële console van azure-VM kan worden gebruikt voor consoletoegang tot uw VM als het wijzigen van fstab heeft geleid tot een opstartfout. Meer informatie vindt u in de documentatie van de seriële console.

TRIM/UNMAP-ondersteuning voor Linux in Azure

Sommige Linux-kernels ondersteunen TRIM/UNMAP-bewerkingen om ongebruikte blokken op de schijf te verwijderen. Deze functie is vooral nuttig om Azure te informeren dat verwijderde pagina's niet meer geldig zijn en kunnen worden verwijderd. Met deze functie kunt u geld besparen op schijven die worden gefactureerd op basis van de hoeveelheid verbruikte opslag, zoals niet-beheerde standaardschijven en schijfmomentopnamen.

Er zijn twee manieren om TRIM-ondersteuning in te schakelen op uw Linux-VM. Neem zoals gebruikelijk contact op met uw distributie voor de aanbevolen aanpak:

  • Gebruik de discard koppelingsoptie in /etc/fstab, bijvoorbeeld:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • In sommige gevallen kan de optie gevolgen hebben voor de discard prestaties. U kunt de fstrim opdracht ook handmatig uitvoeren vanaf de opdrachtregel of toevoegen aan uw crontab om deze regelmatig uit te voeren:

sudo apt install util-linux
sudo fstrim /datadrive

Problemen oplossen

Wanneer u gegevensschijven toevoegt aan een Linux-VM, kunnen er fouten optreden als er geen schijf bestaat op LUN 0. Als u handmatig een schijf toevoegt met behulp van de az vm disk attach -new opdracht en u een LUN (--lun) opgeeft in plaats van het Azure-platform toe te staan om de juiste LUN te bepalen, moet u ervoor zorgen dat er al een schijf bestaat/bestaat op LUN 0.

Bekijk het volgende voorbeeld met een fragment van de uitvoer van lsscsi:

[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 twee gegevensschijven bestaan op LUN 0 en LUN 1 (de eerste kolom in de lsscsi uitvoerdetails [host:channel:target:lun]). Beide schijven moeten toegankelijk zijn vanuit de VM. Als u handmatig de eerste schijf hebt opgegeven die moet worden toegevoegd op LUN 1 en de tweede schijf op LUN 2, ziet u de schijven mogelijk niet correct vanuit uw VM.

Notitie

De Azure-waarde host is 5 in deze voorbeelden, maar dit kan variëren afhankelijk van het type opslag dat u selecteert.

Dit schijfgedrag is geen Probleem in Azure, maar de manier waarop de Linux-kernel de SCSI-specificaties volgt. Wanneer de Linux-kernel de SCSI-bus scant op gekoppelde apparaten, moet er een apparaat worden gevonden op LUN 0 om het systeem te kunnen blijven scannen op extra apparaten. Als zodanig:

  • Controleer de uitvoer van na het toevoegen van lsscsi een gegevensschijf om te controleren of u een schijf op LUN 0 hebt.
  • Als uw schijf niet correct wordt weergegeven in uw VM, controleert u of er een schijf bestaat op LUN 0.

Volgende stappen

  • Raadpleeg de aanbevelingen voor de prestaties van uw Linux-machine optimaliseren om ervoor te zorgen dat uw Linux-VM correct is geconfigureerd.
  • Breid uw opslagcapaciteit uit door meer schijven toe te voegen en RAID te configureren voor extra prestaties.