In diesem Artikel werde ich Ihnen die Situation erläutern, in der Sie das qcow2-Image der virtuellen KVM-Maschine so schnell wie möglich reduzieren müssen.
Geräteformat blockieren - qcow2
Dieses Schema kann jedoch mit Rohbildern ausgefĂĽhrt werden. Es reicht aus, es in qcow2 zu konvertieren. Im Allgemeinen sind die Anweisungen fĂĽr alles relevant, was in qcow2 konvertiert wird.
Eine einfache Möglichkeit, die Festplatte in KVM zu verkleinern, ist folgende:
- Komprimieren eines qcow2-Blockgeräts (VM-Datenträger)
- Eine kleinere Festplatte erstellen
- Montage von gparted Image, alter und neuer Festplatte
- Vorbereiten des Startvorgangs des Betriebssystems
- VM- und Hostcomputerspezifikationen:
Host: CentOS 7 + QEMU 2.12 + LIBVIRT 4.5.0 + Kernel UEK5 v. 4.14
VM: CentOS 7 + 80 GB Festplatte + Kernel Standard v. 3.10
Der Spender ist eine virtuelle CentOS 7-Maschine mit einem 80-GB-Festplatten-Image, das tatsächlich von 20 GB und physisch 80 GB belegt ist. Wir werden es auf 40 GB reduzieren.
Was ist der Unterschied zwischen Bildgröße, tatsächlicher und physischer Größe?
Nehmen wir an, das qcow2-Image ist 80 GB groß und wir wissen davon. Während des Betriebs wurde das Bild mit Daten verstopft, einige Daten wurden gelöscht. Im Allgemeinen scheinen die gelöschten Daten aufgrund der Besonderheiten des Prozesses des Schreibens und Löschens von Daten für das Betriebssystem nicht zu existieren, sondern bleiben im Bild aufgezeichnet, bis sie von anderen Daten überschrieben werden. Dementsprechend zeigt der KVM-Host selbst im Betriebssystem 20 GB tatsächlich belegte Daten an (wir verwenden das Dienstprogramm qemu-img, um Informationen abzurufen):
qemu-img info qcow2_image.img
image: qcow2_image.img
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 80G
cluster_size: 65536
Format specific information:
compat: 0.10
refcount bits: 16
Sie können sehen, dass die virtuelle Größe = Festplattengröße sowie du -sh des Images zeigen, dass es echte 80G belegt:
du -sh qcow2_image.img
80G qcow2_image.img
Und da wir die Bildgröße auf 40 GB reduzieren müssen, starten wir den Prozess.
Stufe 1 - Komprimieren des Blockgeräts (Bild)
Bevor Sie mit dem Reduzieren der Festplatte beginnen, mĂĽssen Sie sicherstellen, dass der belegte Speicherplatz im Betriebssystem geringer ist als das Volumen, auf das die Festplatte auf die eine oder andere Weise reduziert wird.
df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 80G 18G 63G 22% /
Wie wir sehen können, sind 18 GB belegt, was weniger als 40 GB entspricht. Schalten Sie die VM mit dem Befehl aus
shutdown -h now
Und wir gehen zum Host-Computer und ĂĽberprĂĽfen:
- Wie viel kostet das Bild physisch?
- wie viel eigentlich
# qemu-img info qcow_shrink
image: qcow_shrink
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 80G
cluster_size: 65536
Format specific information:
compat: 0.10
refcount bits: 16
# virt-df -h qcow_shrink
du -sh Filesystem Size Used Available Use%
qcow_shrink:/dev/sda1 488M 101M 351M 21%
qcow_shrink:/dev/sda2 79G 17G 62G 22%
# du -sh qcow_shrink
80G qcow_shrink
Um das Bild zu komprimieren, benötigen wir ein einfaches Dienstprogramm namens virt-sparsify . Stellen Sie sicher, dass die VM nicht funktioniert, und führen Sie den Befehl im Verzeichnis zusammen mit dem Disk-Image aus (Wichtiger Hinweis: Stellen Sie vor dem Starten von virt-sparsify sicher, dass in / tmp und im Image-Speicher genügend freier Speicherplatz vorhanden ist, um den Vorgang auszuführen.)
virt-sparsify qcow_shrink qcow_shrink-new
Ein erfolgreicher Abschluss des Vorgangs fĂĽhrt zu folgender Ausgabe:
[ 0.0] Create overlay file in /tmp to protect source disk
[ 0.1] Examine source disk
[ 1.2] Fill free space in /dev/sda1 with zero
[ 1.5] Fill free space in /dev/sda2 with zero
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 72.5] Copy to destination and make sparse
[ 81.9] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the
target disk boots and works correctly.
Dann tauschen wir die Festplatte aus (verschieben Sie qcow_shrink irgendwo zur Seite, zum Beispiel qcow_shrink-old und qcow_shrink-new an seiner Stelle - qcow_shrink ).
mv qcow_shrink qcow_shrink-old && mv qcow_shrink-new qcow_shrink
Wir starten die VM. Wenn alles angefangen hat, löschen wir die VM und arbeiten weiter.
Stufe 2 - Erstellen Sie eine kleinere Festplatte
Eine einfache Prozedur mit nur einem Befehl:
qemu-img create -f qcow2 -o preallocation=metadata qcow_shrinked 40G
qcow_shrinked - neues Bild Name
40G - neue Größe
Stufe 3 - Verbindung trennen
Da Administratoren manchmal einfachere Methoden zur Lösung des Problems bevorzugen, wird das Tamburin beiseite gelegt (kpartx) und ISO und VNC treten an seine Stelle. Glücklicherweise ist es nicht sehr schwierig, es in KVM anzuschließen.
Was machen wir:
- ISO-Image GParted bereitstellen
- Verbinden Sie qcow2_shrinked mit VM
- Starten Sie die VM und starten Sie von ISO
Ich werde in diesem Artikel weglassen, wie dies zu tun ist, da davon ausgegangen wird, dass die Person, die dies alles tut, bereits weiĂź, wie es passiert, aber das Ergebnis wird das folgende sein:
Starten Sie die VM und sehen Sie den GParted-Startbildschirm:
Wählen Sie das erste Element aus und folgen Sie den Anweisungen auf dem Bildschirm. Normalerweise drücke ich die Eingabetaste.
Wenn wir GParted selbst sehen, können wir loslegen. Überprüfen Sie schnell, welche Partitionstabelle / dev / vda hat - msdos oder gpt . Dies ist wichtig: Wechseln Sie
zur zweiten Festplatte / dev / vdb und erstellen Sie die Partitionstabelle: Wählen Sie
beim Erstellen der Tabelle den Typ msdos aus, wie wir zuvor erfahren haben. Wechseln Sie
dann zurĂĽck zu / dev / vdaund nacheinander beginnen wir von den ersten Festplatten an, Partitionen zu kopieren und wechseln zwischen vda und vdb :
Das Endergebnis lautet : DrĂĽcken Sie Ăśbernehmen
und warten Sie, bis das Ergebnis vollständig ist:
Als Ergebnis:
Das sieht bereits nach der Wahrheit aus. Da wir jedoch einige Manipulationen vorgenommen haben, die dazu führen, dass die UUIDs der Festplatten geändert werden, wird das Betriebssystem möglicherweise nicht gestartet. Warum? CentOS 7 verwendet Festplatten-UUIDs in fstab, Grub2 verwendet Festplatten-UUIDs. Springen Sie also in die Konsole und führen Sie schwarze Magie aus.
Gparted arbeitet zunächst als Benutzer, daher springen wir mit dem Befehl sudo su - root unter root :
Lassen Sie uns blkid , um sicherzustellen, dass sich die UUID der Partitionen geändert hat
Es ist ersichtlich, dass die UUID vda1 = vdb1 ist, aber für vdb2 hat sie sich geändert. Es ist okay - du kannst damit leben.
Mounten Sie vdb zusammen mit der / boot-Partition vollständig und mounten Sie einige Partitionen für unsere Bequemlichkeit.
mkdir vdb2
mount /dev/vdb2 vdb2
mount /dev/vdb1 vdb2/boot
cd vdb2
mount --bind /dev dev
mount --bind /sys sys
mount --bind /proc proc
chroot .
Beginnen wir mit fstab - da es nicht sehr praktisch ist, die UUID in VNC einzugeben, werden wir sie durch den bekannten Gerätenamen ersetzen.
Wir ersetzen die Zeile mit UUID = ... mit, Aufmerksamkeit : wir
geben / dev / vdb2 , wenn die alte Platte nicht als getrennt geplant, wir
geben / dev / VDA2 , wenn die alte Platte getrennt werden
Da wir das trennen alte Festplatte vor dem Laden des OS, dann schreiben Sie / dev / VDA2
Weiter Ă„ndern Sie den Bootloader und ordnen Sie ihn. Nehmen wir an, dass sich alles in / boot / grub2 befindet, grub.cfg sich an derselben Stelle befindet, efi jedoch nicht (msdos-Tabelle, die efi ist :)):
grub2-install /dev/vdb
cd /boot/grub2
grub2-mkconfig -o grub.cfg
In diesem Fall können Sie sich freuen und durch Deaktivieren von gparted das Betriebssystem starten.
Stufe 4 - Starten Sie das Betriebssystem
Vor dem Laden des Betriebssystems empfehle ich weiterhin, die alte Festplatte vom Server zu trennen. Daher musste vda2 in der vorherigen Phase in fstab registriert sein. Wenn Sie jedoch ein aufmerksamer PC-Benutzer sind und die Verbindung nicht getrennt haben, sollte es keine Probleme geben. Bei einer alten Festplatte ist es sehr wahrscheinlich, dass Sie von dieser starten.
Während des Startvorgangs gab es keine Probleme. Der Server wurde wie erwartet gestartet. Lassen Sie uns dies überprüfen:
[root@shrink ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 484M 0 484M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.7M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vdb2 40G 18G 23G 44% /
/dev/vdb1 488M 101M 352M 23% /boot
tmpfs 100M 0 100M 0% /run/user/0
[root@shrink ~]# blkid
/dev/vda1: UUID="ea505196-32fb-4df6-8bed-0a0ab2d0b726" TYPE="ext4"
/dev/vda2: UUID="30ec1bc6-658f-4611-8708-5e3b7ebaa467" TYPE="xfs"
/dev/vdb1: UUID="ea505196-32fb-4df6-8bed-0a0ab2d0b726" TYPE="ext4"
/dev/vdb2: UUID="c8548834-272b-4331-a9bf-aa99fb41a434" TYPE="xfs"
/dev/sr0: UUID="2019-03-21-13-42-32-00" LABEL="GParted-live" TYPE="iso9660" PTTYPE="dos"
Wir sehen, dass / boot und / erforderlich sind, 40 GB groß, das Betriebssystem läuft. Glück, sonst nicht!
Bonus
Etwas, dem Sie sich in manchen Situationen stellen mĂĽssen.
- VM Windows, virt-sparsify . , , ( blkid), Windows , . ( ) fixmbr + rebuildbcd. — man
- — xfs Superblock has unknown read-only compatible features (0x4) enabled. read-only, . :
Als alles in gparted oder einer anderen Umgebung ausgeführt wurde, war die Version des Kernels dieser Umgebung höchstwahrscheinlich zu neu, wobei xfs geringfügig geändert wurde, dh die Metadaten und ihre Version unterscheiden sich. Infolgedessen verwandelt sich xfs, das im neuen Kernel erstellt wurde, in einen Kürbis auf dem alten. Wir starten Rescue Gparted, erhöhen das Netzwerk in dieser Rettungsumgebung und installieren den neuesten Kernel im Betriebssystem. Ich habe 5.x unter CentOS 7 installiert, vielleicht reicht 4.x, ich habe es nicht getestet, aber am Ende hat alles funktioniert. Darüber hinaus ohne Probleme.
Das ist alles!
Wie Sie sehen, ist daran nichts Kompliziertes. Natürlich können Sie LVM, resize2fs und andere Dinge verwenden, aber qcow2 wird immer noch woanders verwendet und sogar von jemandem benötigt.
Wenn Sie eine noch einfachere Methode kennen, schreiben Sie darĂĽber in den Kommentaren.