Vraag Hoe vergroot u de schijfruimte van een KVM-gast?


Ik heb een Ubuntu-gast ingesteld op een CentOS KVM-host met initieel 6 GB schijfruimte. Hoe ga ik over het vergroten van de schijfruimte van de Ubuntu-gast vanaf de opdrachtregel?

EDIT # 1: ik gebruik een schijfkopiebestand (qemu).


84
2017-10-24 14:23


oorsprong


Gebruikt u LVM of schijfkopie in een bestand? - Selivanov Pavel


antwoorden:


  1. stop de VM
  2. rennen qemu-img resize vmdisk.img +10G om de afbeeldingsgrootte met 10 Gb te vergroten
  3. start de VM, wijzig de omvang van de partities en de LVM-structuur er normaal in

105
2017-10-24 15:32



Ah, je hebt me verslagen, ik heb net de opties voor het wijzigen van de grootte op qemu-img op de manpagina opgemerkt. Dus dit bespaart een paar stappen. Leuk! - slm
Werkte voor het herschalen van mijn * .qcow2 img op RHEL6.6. Bedankt! - Jacob Goulden
start the VM, resize the partitions and LVM structure within it normally Hoe je dat doet? Leg het alstublieft uit. - Waki
Je kunt niet alles aan je overhandigen op een schaal. Als je partities of LV's hebt geprobeerd en het niet gelukt om het formaat van de LV's te wijzigen, open dan een nieuwe vraag, beschrijf wat je hebt geprobeerd en wat niet werkte - dyasny
Om de grootte van parties en LVM te wijzigen, volgt u alle stappen zoals uitgelegd in dit uitstekende artikel: sandilands.info/sgordon/... - skonsoft


Online-methode (met behulp van qemu, libvirt en virtio-block)

Voor beter of slechter worden de onderstaande commando's uitgevoerd, zelfs als de virtuele doelschijf is aangekoppeld. Dit kan handig zijn in omgevingen waar de schijf niet kan worden gedeactiveerd (zoals een rootpartitie), de VM moet blijven en de systeemeigenaar is bereid om het risico van datacorruptie op zich te nemen. Om dat risico te verwijderen, moet u inloggen op de VM en eerst de doelschijf ontkoppelen, iets dat niet altijd mogelijk is.

Voer het volgende uit vanuit de KVM-hypervisor.

  1. Vergroot de omvang van het schijfimagebestand zelf (geef het te verhogen bedrag aan):

    qemu-img resize <my_vm>.img +10G
    
  2. Haal de naam van het virtio-apparaat op via de libvirt-shell (drive-virtio-disk0 in dit voorbeeld):

    virsh qemu-monitor-command <my_vm> info block --hmp
      drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0
      drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
    
  3. Signaleer de virtio-driver om de nieuwe grootte te detecteren (specificeer de totale nieuwe capaciteit):

    virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
    

Log dan in op de VM. hardlopen dmesg moet melden dat de virtio-schijf een capaciteitswijziging heeft gedetecteerd. Op dit punt, ga je gang en verklein je partities en LVM-structuur naar behoefte.


23
2017-09-22 23:08



De manpagina voor qemu-img (de mijne dateerde van 2016-05-08) zegt: "Waarschuwing: Gebruik qemu-img nooit om afbeeldingen in gebruik te wijzigen door een actieve virtuele machine of een ander proces; dit kan de afbeelding vernietigen. Houd er ook rekening mee dat het ondervragen van een afbeelding die door een ander proces wordt gewijzigd, mogelijk een inconsistente status heeft. "Dus ik weet niet zeker of (de eerste stap) veilig is wanneer de virtuele machine nog steeds actief is. - user44400
Werkt niet op centos7 + kvm - e-info128
Dit werkte perfect voor mij. Ceph- en virtio block-apparaten gebruiken. we slaan applicatiedata / MySQL db op een aparte partitie op. Stop de toepassingen die deze partitie openen. Ontkoppel het. Verklein het. fsck. monteer het dan opnieuw met de nieuwe maat. Geen uitschakeling nodig. - nelaaro


Deze serverfault vragen zijn vergelijkbaar, maar meer specifiek, KVM online schijf resize? & Centos Xen het formaat van de DomU-partitie en de volumegroep wijzigen. De eerste stelt de vraag hoe een KVM-gast kan worden verhoogd terwijl deze online is, terwijl de tweede XEN specifiek is met LVM. Ik vraag hoe dit te bereiken terwijl de KVM offline is.

NOTITIE: Deze link was nuttig voor METHOD # 1, en laat zien hoe je een KVM-schijfruimte vergroot (op basis van ext3), HOWTO: formaat van een KVM virtuele machine aanpassen.

Een ding om rekening mee te houden met KVM-gasten is dat de partities die ze binnen gebruiken kunnen beïnvloeden welke methode je kunt gebruiken om hun schijfruimte te vergroten.

METHODE # 1: Partities zijn gebaseerd op ext2 / ext3 / ext4

De noten van deze methode zijn als volgt:

# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak

# 3. create a new image
qemu-img create -f raw addon.raw 30G

# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img

Nu met het grotere bestand mykvm.img in de hand, start je op gparted en breid de bestaande partitie uit naar de nieuw toegevoegde schijfruimte. Deze laatste stap breidt in feite de OS-partitie uit, zodat deze gebruik kan maken van de extra ruimte.

METHODE # 2: Partities zijn gebaseerd op LVM

Hier zijn de stappen die ik globaal volgde om de grootte van een KVM-gast te wijzigen die LVM intern gebruikte.

  1. Schakel de VM uit
  2. voeg meer ruimte toe aan het "afbeeldingsbestand" van de gast (bijvoorbeeld: cat old.img 10G_addon.raw >> new.img
  3. start de VM (met behulp van de nieuw gemaakte new.img)
  4. voer fdisk in VM uit en verwijder en maak LVM-partitie opnieuw

    % fdisk /dev/vda
    ...
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        3263    26105625   8e  Linux LVM
    
    Command (m for help): d
    Partition number (1-4): 2
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    
    Command (m for help): n 
    Command action
      e   extended
      p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (14-5874, default 14): 14
    Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874): 
    Using default value 5874
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  83  Linux
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or 
    resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.
    %
    
  5. Start de VM opnieuw op

  6. Wijzig het fysieke LVM-volume

    % pvdisplay 
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               24.90 GB / not usable 21.59 MB
      Allocatable           yes (but full)
      PE Size (KByte)       32768
      Total PE              796
      Free PE               0
      ...
    
    % pvresize /dev/vda2
    
    % pvdisplay
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               44.90 GB / not usable 22.89 MB
      Allocatable           yes 
      PE Size (KByte)       32768
      Total PE              1436
      Free PE               640
      ...
    
  7. Verklein het LVM-logische volume

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. Laat het bestandssysteem groeien

      % resize2fs /dev/VolGroup00/LogVol00 
      resize2fs 1.39 (29-May-2006)
      Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
      Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
      The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
    

Het bovenstaande is mijn voorbeeld, maar ik heb de stappen hierin gevolgd website


17
2017-10-24 14:36



methode # 1 in dit bericht lijkt niet zo goed te werken - de virtuele machinebeheerder in red hat rapporteert het nieuwe formaat achteraf niet. De door @dyasny voorgestelde methode lijkt op dit punt in ieder geval beter te werken. - Iwan Aucamp
@IwanAucamp - interessant, gebruik ik virt-manager en hebben methode # 1 & # 2 uitgebreid gebruikt voordat ik onze KVM-servers naar een nieuwere versie van KVM (CentOS 5 -> CentOS 6) migreerde. Ik gebruik nu de qemu-img resize methode ook. - slm
Voor methode # 2 vind je lvextend handler als stap 7: lvextend /dev/Volgroup/lvname /dev/vda2 (allemaal op één regel, waarbij / dev / vda2 uw fysieke volume zou zijn). Zonder andere opties gebruikt het de maximale grootte in die volumegroep. - Mike S
Methode # 2, stap 4 zal niet werken als er logische volumes zijn in een partitietabel. Na het recreëren van een uitgebreid type partitie, zal de eerste beschikbare sector niet langer overeenkomen met die welke voorafgaand was aan de wijzigingen. Bijv. als de eerste sector van uw logische partitie 1001472 was, is deze na de wijzigingen 1003518 (uitgaande van een 10G-schijf eerder en 50G na het wijzigen van het formaat). Iedereen weet hoe je, indien mogelijk, logische volumes opnieuw kunt creëren in dezelfde eerste sector? - ILIV
Dit komt doordat fdisk standaard uitlijningsbeperkingen (1MB-stap) toepast op partities. Als u wilt werken, accepteert u de standaardwaarde van 1003518, voert u expertmodus (x) in en kiest u b en stelt u de eerste sector in op 1001472. Zie unix.stackexchange.com/a/320447 voor details. - ILIV


Formaat wijzigen en Interne partities in één stap vergroten

Ik had een Ubuntu-host met een Qcow2-gastbestandsafbeelding en wilde de grootte van de schijf aanpassen en de juiste partities allemaal in één stap uitbreiden. Het vereist dat je de libvirt guest bestandssysteemhulpprogramma's instelt, maar die zijn handig om er toch in de buurt te hebben.

Inspiratie van hier: http://libguestfs.org/virt-resize.1.html

De belangrijkste opdracht hier is: virt-resize

  • dit is een hulpprogramma voor libvirt
  • het kan een gastschijf uitbreiden EN de partities binnen één stap uitbreiden
  • het kopieert de schijf, het breidt het niet op zijn plaats uit
    • dit is goed omdat je het ongerepte origineel als een hebt backup

Voorbereiding:

* Install libvirt file system utilities package 
    * sudo apt-get install libguestfs-tools

* Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom:
    * sudo libguestfs-test-tool

* If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it:
    * sudo update-guestfs-appliance

* Run the test again and verify it works
    * sudo libguestfs-test-tool

Doe nu het volgende:

1) sluit de gast af:

2) Bekijk de huidige dimensionering en bekijk de partitienaam die u wilt uitbreiden met het hulpprogramma libvirt:

sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file

3) Maak de nieuwe (40G) -uitvoerschijf aan:

qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img:  sudo truncate -s 40G outdisk

4) Kopieer het oude naar het nieuwe terwijl u de juiste partitie uitvouwt (ervan uitgaande dat uw schijfpartitie uit stap 2 / dev / sda1 was):

sudo virt-resize --expand /dev/sda1 indisk outdisk

5) Hernoem het indisk-bestand als een back-up, hernoem de outdisk als indisk (of wijzig de gast-XML)

6) Start de gast opnieuw op en test het nieuwe schijfbestand zorgvuldig voordat u het originele bestand verwijdert

7) Winst!


11
2018-06-13 14:02



Dit doet bijna het werk in mijn geval. Helaas bijna. Wanneer de gast (een CentOS 7-server) opnieuw wordt opgestart, wordt de uitgevouwen schijf niet meer opgestart. - Urhixidur
Het werkte prima voor mij. Het weglaten -o preallocation=metadata maakt een kaal bestand aan. Met die optie wordt de volledige grootte vooraf toegewezen. - Dennis Williamson
Uitstekend, dit antwoord spijkerde het voor mij op. Heel erg bedankt! De "officiële" documentatie voor libguestfs (libguestfs.org/virt-resize.1.html), is helaas niet goed geschreven en wordt nogal verwarrend. - mbello
Werkte goed voor me, onthoud dat je het niet echt hoeft te gebruiken -o preallocation=metadata en als je dat niet doet, moet je ook het truncate stap. virt-resize zal het bestand hoe dan ook groeien. - amoe


Als u LVM binnen de VM gebruikt, is de eenvoudigste manier om dit te doen, het toevoegen van een nieuwe virtuele schijf aan de VM en het uitbreiden van de volumegroep en logische volumes daarop.

Controleren of u LVM-run gebruikt sudo pvs; sudo vgs; sudo lvs, je krijgt zoiets als:

PV         VG     Fmt  Attr PSize  PFree
/dev/vda1  vgWWW  lvm2 a-   30.00g    0

VG     #PV #LV #SN Attr   VSize  VFree
vgWWW    1   2   0 wz--n- 30.00g    0

LV   VG    Attr   LSize 
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao  1.19g

als het besturingssysteem van de VM LVM gebruikt. In het bovenstaande voorbeeld heeft de VM een 30 Gbyte vdisk, geconfigureerd met LVM met één volumegroep genaamd vgWWW met twee logische volumes, één voor swap en één voor al het andere.

Als LV in gebruik is in de VM:

  1. Schakel de VM uit
  2. Maak op de host een nieuw virtueel schijfbestand en voeg het toe aan de VM
  3. Start de VM opnieuw en log in
  4. Markeer de nieuwe schijf als een fysiek volume voor LVM met sudo pvcreate /dev/vdb
  5. Breid de volumegroep uit met dit nieuwe blok van de schijf sudo vgextend vgWWW /dev/vdb
  6. Breid het logische volume uit om de nieuwe spatie in te nemen sudo lvextend --extents +100%FREE /dev/vgWWW/root (of zoiets sudo lvextend --size +8G /dev/vgWWW/root als je het niet helemaal wilt laten groeien, zou dit voorbeeld 8Gb aan het volume toevoegen)
  7. Verklein het bestandssysteem met resize2fs /dev/vgWWW/root

Notitie: het bovenstaande veronderstelt dat de vg / lv-namen hetzelfde zijn als mijn voorbeeld, wat onwaarschijnlijk is, wijzig indien nodig, ook als de VM al een virtuele schijf had genaamd vdb de nieuwe zal iets anders zijn (vdc, enzovoorts)

Notitie:  resize2fs werkt alleen op ext2, ext3 en ext4 bestandssysteem. Als u iets anders gebruikt, zal het fout gaan en niets doen.

Notitie: omdat je het formaat van een live bestandssysteem wijzigt resize2fs zal u niet vragen om uit te voeren fsck eerst zoals het zou zijn voor een niet-gekoppeld bestandssysteem, zal het gewoon doorgaan. Misschien wilt u een alleen-lezen bestandssysteem uitvoeren, controleer of er geen problemen zijn voordat u doorgaat.


5
2017-10-24 15:10



Dit kan ook gedaan worden met GUI dat is best aardig centos.org/docs/5/html/Deployment_Guide-en-US/... - Nux


Er is een mogelijkheid om de schijf van je VM te vergroten zonder de VM opnieuw te starten als je Virtio Drive en LVM gebruikt.

  1. Gebruik virt-manager of virsh om een ​​nieuwe lege schijf te definiëren
  2. De kernel zou een nieuw / dev / vdb moeten zien
  3. (Optioneel) Maak een primaire partitie met fdisk om / dev / vdb1 te krijgen, en gebruik dan kpartx -a / dev / vdb om de partitietabel opnieuw te lezen

  4. Gebruik vgextend vg_name / dev / vdb1 (of / dev / vdb als je geen partitie hebt gemaakt)

  5. Gebruik lvextend -l + 100% GRATIS / dev / vg_name / lv_name
  6. Gebruik resize2fs / dev / vg_name / lv_name om je bestandssysteem uit te breiden

U bent klaar.


3
2017-07-12 10:25



Ik zal dat toevoegen libguestfs.org/virt-resize.1.htmlzou ook moeten helpen. - FearlessFuture


Een andere manier om het te doen

truncate -s +2G vm1.img 

ga een schijf opnieuw scannen en nadat je je lvm-formaat hebt aangepast.


2
2018-04-18 17:50





Op deze manier kunt u de gewenste partitie uitbreiden:

    # see what partitions you have? 
    virt-filesystems --long -h --all -a olddisk

    truncate -r olddisk newdisk
    truncate -s +5G newdisk

    # Note "/dev/sda2" is a partition inside the "olddisk" file.
    virt-resize --expand /dev/sda2 olddisk newdisk

Zie meer voorbeelden hier.


2
2017-10-01 15:50





Als je LVM in je VM hebt, is dit eenvoudig en snel gek.

  1. Schakel VM (gastmachine) uit.
  2. Voeg op uw hostmachine een nieuw opslagapparaat toe.
  3. Gast aanzetten.
  4. Open Systeem -> Beheer -> Logisch volumebeheer (of typ sudo system-config-lvm in terminal) *.

Ik vond de GUI behoorlijk intuïtief, maar volg de volgende stappen als je problemen hebt.

  1. Open "Niet-geïnitialiseerde entiteiten" en vind uw nieuwe schijf.
  2. Na het selecteren van een nieuwe schijf, vindt u onder de afbeelding een knop voor initialiseren. Druk erop.
  3. Het zal je vragen over partitionering - je hebt het niet nodig.
  4. Voeg als u klaar bent uw schijf toe aan de bestaande volumegroep.
  5. Ten slotte moet je je logische volume (s) laten groeien - dit gebeurt in de logische weergave van de groep door de eigenschappen van je volume te bewerken.
  6. Opslaan en je bent klaar. U hoeft de VM niet opnieuw op te starten.

Notitie! Ten minste op CentOS 6 is LVM GUI niet standaard geïnstalleerd, maar je kunt het installeren met yum install system-config-lvm.


1
2018-06-07 16:12





  1. Schakel de VM uit
  2. Formaat afbeelding aanpassen:

    qemu-img resize vmdisk.img +16G
    

    vergroot de afbeeldingsgrootte met 16 GB.

  3. Als uw afbeelding GPT (GUID Partition Table) heeft, dan is de schijfgrootte die in GPT wordt gebruikt anders dan bij nieuw formaat, moet u dit oplossen met gdisk:

    MY_DRIVE=/dev/vda
    gdisk $MY_DRIVE <<EOF
    w
    Y
    Y
    EOF
    

    of met parted:

    parted $MY_DRIVE print Fix
    

    Om de een of andere reden parted fix werkt niet als er geen tty wordt weergegeven (bijvoorbeeld bij provisioning met Vagrant), dus ik gebruik gdisk.

  4. Verhoog de partitiegrootte om alle beschikbare ruimte te vullen:

    MY_PARTITION_GUID=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
    i
    EOF
    )
    
    MY_PARTITION_FIRST_SECTOR=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
    i
    EOF
    )
    
    gdisk $MY_DRIVE <<EOF
    d
    n
    
    $MY_PARTITION_FIRST_SECTOR
    
    
    x
    a
    2
    
    c
    $MY_PARTITION_GUID
    w
    Y
    EOF
    

    De x a 2 <Enter> onderdeel is optioneel en nodig als u een verouderde BIOS gebruikt. MY_PARTITION_GUID=... en c $MY_PARTITION_GUID onderdelen zijn ook optioneel en alleen nodig als u de partitie UUID gebruikt /etc/fstab of ergens anders.

  5. Start partities opnieuw op of herlees met partx -u $MY_DRIVE of partprobe.

  6. Uitbreiding van de partitie, voorbeeld voor ext2, ext3 of ext4:

    MY_PARTITION="${MY_DRIVE}1"
    resize2fs $MY_PARTITION
    

1
2018-04-05 22:32