Frage Wie erhöhen Sie den Speicherplatz eines KVM-Gastes?


Ich habe einen Ubuntu-Gast auf einem CentOS-KVM-Host mit anfänglich 6 GB Festplattenspeicher eingerichtet. Wie gehe ich vor, um den Speicherplatz des Ubuntu-Gastes über die Befehlszeile zu erhöhen?

EDIT # 1: Ich benutze eine Image-Datei (qemu).


84
2017-10-24 14:23


Ursprung


Verwenden Sie LVM oder Disk Image in einer Datei? - Selivanov Pavel


Antworten:


  1. Stoppen Sie die VM
  2. Lauf qemu-img resize vmdisk.img +10G um die Bildgröße um 10 GB zu erhöhen
  3. Starten Sie die VM, ändern Sie die Größe der Partitionen und der LVM-Struktur innerhalb der VM

105
2017-10-24 15:32



Ah, du hast mich dazu geschlagen, ich habe gerade die Größenänderungsoptionen auf qemu-img in der Manpage bemerkt. Also sparen Sie ein paar Schritte. Nett! - slm
Arbeitete für das Ändern meiner * .qcow2 img auf RHEL6.6. Vielen Dank! - Jacob Goulden
start the VM, resize the partitions and LVM structure within it normally Wie es geht? Bitte erläutern Sie es. - Waki
Sie können nicht alles auf einem Teller erhalten. Wenn Sie versucht haben, die Größe von Partitionen oder LVs zu ändern, öffnen Sie eine neue Frage, beschreiben Sie, was Sie versucht haben und was nicht - dyasny
Um Partitionen und LVM in der Größe anzupassen, befolgen Sie alle Schritte, die in diesem ausgezeichneten Artikel erläutert wurden: sandilands.info/sgordon/... - skonsoft


Online-Methode (mit qemu, libvirt und virtio-block)

Zum besseren oder schlechteren werden die folgenden Befehle ausgeführt, auch wenn das virtuelle Ziellaufwerk angehängt ist. Dies kann in Umgebungen nützlich sein, in denen die Festplatte nicht deaktiviert werden kann (z. B. eine Root-Partition), die VM muss eingeschaltet bleiben und Der Systemeigentümer ist bereit, das Risiko der Datenbeschädigung zu übernehmen. Um dieses Risiko zu beseitigen, müssen Sie sich zuerst bei der VM anmelden und die Zielfestplatte zuerst unmounten, was nicht immer möglich ist.

Führen Sie Folgendes vom KVM-Hypervisor aus.

  1. Erhöhen Sie die Größe der Datenträger-Image-Datei selbst (geben Sie den zu vergrößernden Wert an):

    qemu-img resize <my_vm>.img +10G
    
  2. Erhalte den Namen des virtio-Geräts über die libvirt-Shell (drive-virtio-disk0 in diesem Beispiel):

    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. Signalisieren Sie, dass der Virtio-Treiber die neue Größe erkennt (geben Sie die gesamte neue Kapazität an):

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

Melden Sie sich dann bei der VM an. Laufen dmesg sollte melden, dass die virtio-Platte eine Kapazitätsänderung erkannt hat. An diesem Punkt können Sie die Partitionen und die LVM-Struktur nach Bedarf anpassen.


23
2017-09-22 23:08



Die Manpage für qemu-img (meins ist vom 08.05.2016) sagt: "Warnung: Verwenden Sie niemals qemu-img, um Bilder zu ändern, die von einer laufenden virtuellen Maschine oder einem anderen Prozess verwendet werden. Dies kann das Bild zerstören. Beachten Sie außerdem, dass die Abfrage eines Bildes, das von einem anderen Prozess geändert wird, einen inkonsistenten Zustand aufweisen kann. "Ich bin mir also nicht sicher, ob der erste Schritt sicher ist, wenn die virtuelle Maschine noch läuft. - user44400
Funktioniert nicht auf centos7 + kvm - e-info128
Das hat perfekt für mich funktioniert. Verwenden von Ceph- und Virtio-Block-Geräten. Wir speichern Anwendungsdaten / MySQL db auf einer separaten Partition. Stoppen Sie die Anwendungen, die auf diese Partition zugreifen. Unmounten Sie es. Größe ändern. fsck. dann mount es wieder mit der neuen Größe. Kein Herunterfahren erforderlich. - nelaaro


Diese Serverfehlerfragen sind ähnlich, aber spezifischer, KVM online Festplatte Größe ändern? & Centos Xen ändert die Größe der DomU-Partition und der Volume-Gruppe. Der erste stellt die Frage, wie man einen KVM-Gast während der Online-Präsenz erhöhen kann, während der zweite XEN-spezifisch ist und LVM verwendet. Ich frage, wie dies zu erreichen ist, während der KVM offline ist.

HINWEIS: Dieser Link war nützlich für METHODE 1 und zeigt, wie man den Festplattenspeicher eines KVM vergrößert (ext3-basiert), HOWTO: Ändern der Größe eines KVM Virtual Machine Image.

Eine Sache, die bei KVM-Gästen beachtet werden muss, ist, dass die Partitionen, die sie verwenden, bewirken können, mit welcher Methode sie ihren Speicherplatz erhöhen können.

METHODE 1: Partitionen sind ext2 / ext3 / ext4 basiert

Die Nüsse dieser Methode sind wie folgt:

# 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

Jetzt mit der größeren Datei mykvm.img in der Hand, booten gparted und erweitern Sie die vorhandene Partition in den neu hinzugefügten Speicherplatz. Dieser letzte Schritt erweitert im Grunde die Betriebssystempartition, so dass sie den zusätzlichen Speicherplatz nutzen kann.

Methode # 2: Partitionen sind LVM-basiert

Hier sind die Schritte, die ich grob befolgt habe, um die Größe eines KVM-Gastes zu ändern, der LVM intern verwendet hat.

  1. Fahren Sie die VM herunter
  2. Fügen Sie der "image-Datei" des Gastes mehr Platz hinzu (zB: cat old.img 10G_addon.raw >> new.img
  3. Starten Sie die VM (mit dem neu erstellten new.img)
  4. Führen Sie fdisk in der VM aus und löschen und erstellen Sie die LVM-Partition erneut

    % 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. Starten Sie die VM neu

  6. Ändern Sie die Größe des physischen LVM-Volumes

    % 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. Ändern Sie die Größe des LVM Logical Volume

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. Erweitern Sie das Dateisystem

      % 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.
    

Das obige ist mein Beispiel, aber ich habe die Schritte auf diesem Weg befolgt Webseite


17
2017-10-24 14:36



Methode # 1 in diesem Post scheint nicht so gut zu funktionieren - Virtual Machine Manager in Red Hat meldet die neue Größe danach nicht mehr. Die von @dyasny vorgeschlagene Methode scheint zumindest in dieser Hinsicht besser zu funktionieren. - Iwan Aucamp
@IwanAucamp - interessant, ich benutze virt-manager und ich habe die Methoden # 1 und # 2 ausgiebig verwendet, bevor ich unsere KVM-Server auf eine neuere Version von KVM (CentOS 5 -> CentOS 6) migriert habe. Ich benutze jetzt die qemu-img resize Methode auch. - slm
Für Methode 2 finden Sie möglicherweise die letzte Handler wie in Schritt 7: lvextend /dev/Volgroup/lvname /dev/vda2 (alles auf einer Zeile, wobei / dev / vda2 dein physisches Volumen wäre). Ohne weitere Optionen wird die maximale Größe in dieser Volume-Gruppe verwendet. - Mike S
Methode 2, Schritt 4 funktioniert nicht, wenn logische Volumes in einer Partitionstabelle vorhanden sind. Nach der Wiederherstellung eines erweiterten Partitionstyps entspricht der erste verfügbare Sektor nicht mehr dem, der vor den Änderungen vorhanden war. Z.B. Wenn der erste Sektor Ihrer logischen Partition 1001472 ist, wird er nach den Änderungen 1003518 sein (unter der Annahme, dass 10G vor und 50G nach der Größenänderung sind). Wer weiß, wie logische Volumes im gleichen ersten Sektor wieder hergestellt werden können, wenn irgend möglich? - ILIV
Dies liegt daran, dass fdisk standardmäßig Alignment-Constraints (1 MB-Schritt) auf Partitionen anwendet. Akzeptieren Sie den Standardwert 1003518, wechseln Sie in den Expertenmodus (x), wählen Sie b und setzen Sie den ersten Sektor auf 1001472. Siehe unix.stackexchange.com/a/320447 für Details. - ILIV


Ändern und Erweitern interner Partitionen in einem Schritt

Ich hatte einen Ubuntu-Host mit einem qcow2-Gastdatei-Image und wollte die Größe der Festplatte ändern und die entsprechenden Partitionen in einem Schritt erweitern. Es erfordert, dass Sie die libvirt-Gast-Dateisystem-Dienstprogramme einrichten, aber diese sind nützlich, um überhaupt zu haben.

Inspiration von hier: http://libguestfs.org/virt-resize.1.html

Der Schlüsselbefehl hier ist: virt-resize

  • Dies ist ein libvirt-Dienstprogramm
  • Es kann eine Gastplatte erweitern UND die Partitionen in einem Schritt erweitern
  • Es kopiert die Festplatte, sie wird nicht direkt erweitert
    • das ist gut, weil du das unberührte Original als eine hast Sicherung

Vorbereitung:

* 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

Jetzt mache folgendes:

1) den Gast herunterfahren:

2) Überprüfen Sie die aktuelle Größe und zeigen Sie den Partitionsnamen an, den Sie mit dem libvirt-Dienstprogramm erweitern möchten:

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

3) Erstellen Sie die neue (40G) Ausgabediskette:

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

4) Kopieren Sie das alte auf das neue, während Sie die entsprechende Partition erweitern (vorausgesetzt, Ihre Festplattenpartition aus Schritt 2 war / dev / sda1):

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

5) Benennen Sie die Indisk-Datei als Backup um, benennen Sie die Outdisk als Indisk um (oder modifizieren Sie das Gast-XML)

6) Starten Sie den Gast neu und testen Sie die neue Datei sorgfältig, bevor Sie die Originaldatei löschen

7) Gewinn!


11
2018-06-13 14:02



Das macht in meinem Fall fast den Job. Traurig, fast. Wenn der Gast (ein CentOS 7-Server) neu gestartet wird, erkennt er, dass die erweiterte Festplatte nicht mehr gestartet werden kann. - Urhixidur
Es hat super für mich funktioniert. Weglassen -o preallocation=metadata erstellt eine Sparse-Datei. Mit dieser Option wird die gesamte Größe vorbelegt. - Dennis Williamson
Ausgezeichnet, diese Antwort hat es für mich genagelt. Vielen Dank! Die "offizielle" Dokumentation für libguestfs (libguestfs.org/virt-resize.1.html), ist leider nicht gut geschrieben und endet ziemlich verwirrend. - mbello
Arbeitete gut für mich, denken Sie daran, dass Sie nicht wirklich verwenden müssen -o preallocation=metadata und wenn Sie nicht tun, sollten Sie auch überspringen truncate Schritt. virt-resize wird die Datei sowieso entsprechend erweitern. - amoe


Wenn Sie LVM innerhalb der VM verwenden, besteht die einfachste Möglichkeit darin, der VM eine neue virtuelle Festplatte hinzuzufügen und die Volume-Gruppe und die logischen Volumes darauf zu erweitern.

Um zu überprüfen, ob Sie LVM verwenden, führen Sie aus sudo pvs; sudo vgs; sudo lvs, du wirst so etwas bekommen:

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

wenn das Betriebssystem der VM LVM verwendet. Im obigen Beispiel verfügt die VM über einen 30 GB großen vdisk, der mit LVM mit einer Datenträgergruppe namens vgWWW konfiguriert wurde, die zwei logische Datenträger enthält, einen für Swap und einen für alles andere.

Wenn LV in der VM verwendet wird:

  1. Fahren Sie die VM herunter
  2. Erstellen Sie auf dem Host eine neue virtuelle Festplattendatei und fügen Sie sie zur VM hinzu
  3. Starten Sie die VM neu und loggen Sie sich ein
  4. Markieren Sie das neue Laufwerk als physischen Datenträger für LVM mit sudo pvcreate /dev/vdb
  5. Erweitern Sie die Volume-Gruppe, um diesen neuen Festplattenblock mit einzuschließen sudo vgextend vgWWW /dev/vdb
  6. Erweitern Sie das logische Volumen, um den neuen Raum mit aufzunehmen sudo lvextend --extents +100%FREE /dev/vgWWW/root (oder so ähnlich sudo lvextend --size +8G /dev/vgWWW/root Wenn Sie es nicht vollständig erweitern möchten, würde dieses Beispiel dem Volume 8 GB hinzufügen.
  7. Ändern Sie die Größe des Dateisystems mit resize2fs /dev/vgWWW/root

Hinweis: Das obige nimmt an, dass die vg / lv-Namen die gleichen wie in meinem Beispiel sind, was unwahrscheinlich ist, und ändern Sie es gegebenenfalls, auch wenn die VM bereits ein virtuelles Laufwerk aufgerufen hat vdb das neue wird etwas anderes sein (vdc, und so weiter)

Hinweis:  resize2fs funktioniert nur auf ext2, ext3 und ext4 filesystem. Wenn Sie etwas anderes verwenden, wird es Fehler und nichts tun.

Hinweis: wie Sie die Größe eines Live-Dateisystems ändern resize2fs wird Sie nicht zum Ausführen auffordern fsck erstens, wie es für ein nicht abgehängtes Dateisystem wäre, wird es einfach weitergehen. Möglicherweise möchten Sie eine schreibgeschützte Dateisystemprüfung ausführen, bevor keine Probleme auftreten.


5
2017-10-24 15:10



Dies kann auch mit einer GUI gemacht werden, die ziemlich nett ist centos.org/docs/5/html/Deployment_Guide-de-US/... - Nux


Es besteht die Möglichkeit, die Größe der Festplatte Ihrer VM zu erhöhen, ohne die VM neu zu starten, wenn Sie virtio drive und LVM verwenden.

  1. Verwenden Sie virt-manager oder virsh, um eine neue leere Festplatte zu definieren
  2. Der Kernel sollte ein neues / dev / vdb sehen
  3. (Optional) Erstellen Sie eine primäre Partition mit fdisk, um / dev / vdb1 zu erhalten, und verwenden Sie dann kpartx -a / dev / vdb, um die Partitionstabelle erneut zu lesen

  4. Verwenden Sie vgextend vg_name / dev / vdb1 (oder / dev / vdb, wenn Sie keine Partition erstellt haben)

  5. Verwenden Sie lvextend -l + 100% FREE / dev / vg_name / lv_name
  6. Verwenden Sie resize2fs / dev / vg_name / lv_name, um Ihr Dateisystem zu erweitern

Sie sind fertig.


3
2017-07-12 10:25



Ich füge das hinzu libguestfs.org/virt-resize.1.html sollte auch helfen. - FearlessFuture


Eine andere Möglichkeit, es zu tun

truncate -s +2G vm1.img 

Gehen Sie in den Disk-Rescan und nachdem Sie Ihre Größe ändern können.


2
2018-04-18 17:50





Auf diese Weise können Sie die gewünschte Partition erweitern:

    # 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

Weitere Beispiele Hier.


2
2017-10-01 15:50





Wenn Sie LVM in Ihrer VM haben, dann ist das verrückt einfach und schnell.

  1. VM deaktivieren (Gastcomputer)
  2. Fügen Sie auf Ihrem Hostcomputer ein neues Speichergerät hinzu.
  3. Aktivieren Sie den Gast.
  4. Offenes System -> Verwaltung -> Logische Volumenverwaltung (oder geben Sie ein sudo system-config-lvm im Terminal) *.

Ich fand die GUI ziemlich intuitiv, aber folge den nächsten Schritten, wenn du Probleme hast.

  1. Öffnen Sie "Uninitialized Entities" und suchen Sie Ihr neues Laufwerk.
  2. Nachdem Sie ein neues Laufwerk ausgewählt haben, sollten Sie unter dem Bild einen Initialisierungsknopf finden. Drück es.
  3. Es wird Sie nach Partitionierung fragen - Sie brauchen es nicht.
  4. Wenn Sie fertig sind, fügen Sie Ihr Laufwerk der vorhandenen Datenträgergruppe hinzu.
  5. Schließlich müssen Sie Ihr (e) logische (n) Volume (s) erweitern - dies geschieht in der logischen Ansicht der Gruppe durch Bearbeiten der Eigenschaften Ihres Volumes.
  6. Speichern und fertig. Kein Neustart der VM erforderlich.

Hinweis! Zumindest auf CentOS 6 ist die LVM GUI nicht standardmäßig installiert, aber Sie können sie mit installieren yum install system-config-lvm.


1
2018-06-07 16:12