Dela via


Expandera virtuella hårddiskar på en virtuell Linux-dator

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

Den här artikeln beskriver expanderande OS-diskar och datadiskar för en virtuell Linux-dator (VM). Du kan lägga till datadiskar för att ge mer lagringsutrymme och du kan även expandera en befintlig datadisk. Standardstorleken för virtuell hårddisk för operativsystemet (OS) är vanligtvis 30 GB på en virtuell Linux-dator i Azure. Den här artikeln beskriver hur du expanderar os-diskar eller datadiskar. Du kan inte utöka storleken på randiga volymer.

En OS-disk har en maximal kapacitet på 4 095 GiB. Många operativsystem är dock partitionerade med master boot record (MBR) som standard. MBR begränsar den användbara storleken till 2 TiB. Om du behöver mer än 2 TiB kan du överväga att ansluta datadiskar för datalagring. Om du behöver lagra data på OS-disken och behöver extra utrymme konverterar du dem till GUID Partition Table (GPT).

Varning

Kontrollera alltid att filsystemet är i felfritt tillstånd, att diskpartitionstabelltypen (GPT eller MBR) stöder den nya storleken och se till att dina data säkerhetskopieras innan du utför diskexpansionsåtgärder. Mer information finns i snabbstarten för Azure Backup.

Identifiera Azure-datadiskobjekt i operativsystemet

När du expanderar en datadisk kan det vara svårt att relatera Azure LUN till Linux-enheterna när det finns flera datadiskar på den virtuella datorn. Om OS-disken behöver utökas är den tydligt märkt i Azure Portal som OS-disk.

Börja med att identifiera relationen mellan diskanvändning, monteringspunkt och enhet med df kommandot .

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

Här kan vi till exempel se att /opt/db/data filsystemet är nästan fullt och finns på partitionen /dev/sdd1 . Utdata från visar enhetssökvägen om disken är monterad med hjälp av df enhetssökvägen eller (föredraget) UUID på fstab. Anteckna även kolumnen Typ som anger filsystemets format. Formatet är viktigt senare.

Leta nu upp det LUN som korrelerar med genom att /dev/sdd undersöka innehållet i /dev/disk/azure/scsi1. Utdata från följande ls kommando visar att enheten som /dev/sdd kallas i Linux-operativsystemet finns på LUN1 när du tittar i Azure Portal.

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

Expandera en Azure Managed Disk

Expandera utan stilleståndstid

Du kan expandera dina hanterade diskar utan att frigöra den virtuella datorn. Inställningen för värdcachen för disken ändrar inte om du kan expandera en datadisk utan att frigöra den virtuella datorn.

Den här funktionen har följande begränsningar:

  • Stöds endast för datadiskar.
  • Om en Standard HDD-, Standard SSD- eller Premium SSD-disk är 4 TiB eller mindre frigör du den virtuella datorn och kopplar från disken innan du expanderar den utöver 4 TiB. Om en av dessa disktyper redan är större än 4 TiB kan du expandera den utan att frigöra den virtuella datorn och koppla från disken. Detta gäller inte för Premium SSD v2 eller Ultra Disks.
  • Stöds inte för delade diskar.
  • Installera och använd antingen:
  • Inte tillgängligt på vissa klassiska virtuella datorer. Använd det här skriptet för att hämta en lista över klassiska VM-SKU:er som har stöd för att expandera utan driftstopp.

Expandera med Ultra Disk och Premium SSD v2

Expandera ultradiskar och Premium SSD v2-diskar har följande ytterligare begränsningar:

  • Du kan inte expandera en disk medan en bakgrundskopia av data också förekommer på den disken, till exempel när en disk hydreras från ögonblicksbilder.
  • Du kan inte expandera en virtuell dator som använder NVMe-styrenheter för Ultra Disks eller Premium SSD v2-diskar utan driftstopp.

Regional tillgänglighet

Storleksändring av Ultra Disks- och Premium SSD v2-diskar är för närvarande tillgängligt i alla Premium SSD v2- och Ultra-stödda regioner förutom följande:

  • USA, västra 2
  • Västeuropa
  • USA, östra

Expandera Azure Managed Disk

Kontrollera att du har installerat den senaste Azure CLI och är inloggad på ett Azure-konto med az login.

Den här artikeln kräver en befintlig virtuell dator i Azure med minst en datadisk ansluten och förberedd. Om du inte redan har en virtuell dator som du kan använda kan du läsa Skapa och förbereda en virtuell dator med datadiskar.

I följande exempel ersätter du exempelparameternamn som myResourceGroup och myVM med dina egna värden.

Viktigt!

Om disken uppfyller kraven i Expandera utan stilleståndstid kan du hoppa över steg 1 och 3.

Krympning av en befintlig disk stöds inte och det kan eventuellt leda till dataförlust.

När du har expanderat diskarna måste du expandera volymen i operativsystemet för att dra nytta av den större disken.

  1. Det går inte att utföra åtgärder på virtuella hårddiskar när den virtuella datorn körs. Frigör den virtuella datorn med az vm deallocate. I följande exempel frigörs den virtuella datorn med namnet myVM i resursgruppen med namnet myResourceGroup:

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    Kommentar

    Den virtuella datorn måste frigöras för att expandera den virtuella hårddisken. Om du stoppar den virtuella datorn med az vm stop frigörs inte beräkningsresurserna. Om du vill frigöra beräkningsresurser använder du az vm deallocate.

  2. Visa en lista över hanterade diskar i en resursgrupp med az disk list. I följande exempel visas en lista över hanterade diskar i resursgruppen med namnet myResourceGroup:

    az disk list \
        --resource-group myResourceGroup  \
        --query '[*].{Name:name,size:diskSizeGB,Tier:sku.tier}' \
        --output table
    

    Expandera den disk som krävs med az disk update. I följande exempel expanderas den hanterade disken med namnet myDataDisk till 200 GB:

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    Kommentar

    När du expanderar en hanterad disk avrundas den uppdaterade storleken upp till närmaste hanterade diskstorlek. En tabell med tillgängliga storlekar och nivåer för hanterade diskar finns i Förstå Azure Disk Storage-fakturering.

  3. Starta den virtuella datorn med az vm start. I följande exempel startas den virtuella datorn med namnet myVM i resursgruppen med namnet myResourceGroup:

    az vm start --resource-group myResourceGroup --name myVM
    

Expandera en diskpartition och ett filsystem

Kommentar

Det finns många verktyg som kan användas för att utföra partitionsändringen, men verktygen som beskrivs i resten av det här dokumentet är samma verktyg som används av vissa automatiserade processer, till exempel cloud-init. Som beskrivs här growpart ger verktyget med gdisk paketet universell kompatibilitet med GPT-diskar (GUID Partition Table), eftersom äldre versioner av vissa verktyg som fdisk inte stöder GPT.

Identifiera en ändrad diskstorlek

Om en datadisk expanderades utan avbrott med hjälp av proceduren som nämnts tidigare ändras inte den rapporterade diskstorleken förrän enheten genomsöks igen, vilket normalt bara sker under startprocessen. Den här omsökningen kan anropas på begäran med följande procedur. I det här exemplet upptäcker vi att datadisken för närvarande /dev/sda har storleksändrats från 256 GiB till 512 GiB med hjälp av metoderna i det här dokumentet.

  1. Identifiera den storlek som identifieras för tillfället på den första raden med utdata från fdisk -l /dev/sda

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. Infoga ett 1 tecken i genomsökningsfilen för den här enheten. Observera referensen till sda i exemplet. Diskidentifieraren skulle ändras om en annan diskenhet ändrades.

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. Kontrollera att den nya diskstorleken nu känns igen

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

Resten av den här artikeln använder OS-disken för exemplen på proceduren för att öka storleken på en volym på OS-nivå. Om den expanderade disken är en datadisk använder du föregående vägledning för att identifiera datadiskenheten och följer dessa instruktioner som en riktlinje och ersätter datadiskenheten (till exempel /dev/sda), partitionsnummer, volymnamn, monteringspunkter och filsystemformat efter behov.

All vägledning för Linux-operativsystemet bör ses som allmän och kan tillämpas på alla distributioner, men matchar vanligtvis konventionerna för den namngivna Marketplace-utgivaren. Referera till Red Hat-dokumenten för paketkraven för all distribution baserat på Red Hat eller anspråk på Red Hat-kompatibilitet.

Öka storleken på OS-disken

Följande instruktioner gäller för godkända Linux-distributioner.

Kommentar

Innan du fortsätter ska du göra en fullständig säkerhetskopia av den virtuella datorn, eller åtminstone ta en ögonblicksbild av os-disken.

På Ubuntu 16.x och senare expanderas rotpartitionen för OS-disken och filsystemen automatiskt för att utnyttja allt ledigt sammanhängande utrymme på rotdisken av cloud-init, förutsatt att det finns lite ledigt utrymme för storleksändringsåtgärden. I det här fallet är sekvensen helt enkelt

  1. Öka storleken på OS-disken enligt beskrivningen tidigare
  2. Starta om den virtuella datorn och få åtkomst till den virtuella datorn med hjälp av rotanvändarkontot .
  3. Kontrollera att OS-disken nu visar en ökad filsystemstorlek.

Som du ser i följande exempel ändrades OS-disken från portalen till 100 GB. Filsystemet /dev/sda1 som är monterat på / visar nu 97 GB.

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@ubuntu:~#

Utöka utan avbrott klassisk VM SKU-stöd

Om du använder en klassisk SKU för virtuella datorer kanske den inte stöder expanderande diskar utan driftstopp.

Använd följande PowerShell-skript för att avgöra vilka VM-SKU:er som är tillgängliga med:

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}