Dieses Tutorial beschreibt, wie man den Inhalt eines qcow2 Snapshots eines virtuellen Servers bearbeitet und die Snapshot Datei anschließend auf die Größe der enthaltenen Daten schrumpft.
Das kann z.B. nützlich sein, wenn ein Snapshot große Datenmengen enthält, die anderweitig gesichert sind. Diese Daten aus dem Snapshot zu entfernen und die Snapshot Datei zu verkleinern, reduziert die Zeit, um das Image wieder auf einen virtuellen Server hochzuladen.
Das Ziel dieses Tutorials ist, einen Weg aufzuzeigen, der auf einem Windows System möglich ist. Die Methode ist aber auch auf anderen Betriebssystemen andwendbar.
Diese Methode setzt genug Festplattenspeicher voraus, um die unbearbeitete Snapshotdatei und gleichzeitig den verkleinerten Snapshot zu speichern.
Die Snapshotdatei sollte im qcow2 Format vorliegen und bereits heruntergeladen sein. Der Anwender sollte mit der Kommandozeile hinreichend vertraut sein, um sich durch ein Dateisystem zu bewegen und selektiv unerwünschte Dateien zu löschen.
Lade die Installationsdatei für QEMU herunter und installiere Qemu.
Alpine Linux ist eine kleine Linux distribution. Für die weiteren Schritte dieses Tutorials, lade die "Virtual" x86_64 ISO Datei.
Benutze QEMU, um einen virtuellen Computer mit Alpine Linux als Betriebssystem and der qcow2 Snapshot Datei als virtuelle Festplatte zu starten:
qemu-system-x86_64.exe -m 2048 -smp 4 -boot d -cdrom alpine-virt-3.17.3-x86_64.iso -drive if=virtio,driver=qcow2,discard=on,file=diskimage.qcow2
Es kann nötig sein, für das qemu Programm, die Alpine ISO Datei und das Festplattenimage den jeweiligen Pfad voranzustellen. Außerdem kann der Name der heruntergeladenen Alpine ISO Datei anders sein.
Die -m 2048
Option gibt dem virtuellen Computer 2GB RAM. Mit -smp 4
werden vier CPU-Kerne bereitgestellt. Der -boot d
Parameter stellt als Bootdevice das CD-ROM ISO ein, das mit dem -cdrom
Parameter festgelegt wird.
Mit dem -drive
Parameter erzeugt QEMU eine virtuelle Festplatte an einer virtio Schnittstelle, die vom qcow2 Treiber bedient wird. Die Angabe discard=on
sorgt dafür, das Discard Anweisungen an den Treiber durchgereicht werden.
Wegen der besseren Kompatibilität aktiviert der genannte Befehl keine Hardwarebeschleunigung für die Virtualisierung. Die Ausführung kann deshalb langsamer als erwartet sein. Du kannst -accel whpx
oder -accel haxm
auf Windows und -accel kvm
auf Linux versuchen, aber wenn das nicht funktioniert, benutze einfach die langsamere Softwareemulation.
Anmeldung als root ohne Passwort
Die voreingestellte US Tastaturbelegung ändern:
setup-keymap
Gib setup ein, drücke Tab, damit Autocomplete den Bindestrich ergänzt, dann gib den Rest ein.
Für die deutsche Tastaturbelegung, gib zwei mal nacheinander 'de' ein.
Anzeigen der Partitionen mit:
fdisk -l
Hänge die Partition ein, die du bearbeiten möchtest, z.B. /dev/vda1:
mount /dev/vda1 /mnt
Lösche die Dateien, die aus dem Snapshot entfernt werden sollen
cd /mnt
...Benutze cd, find, rm, etc., um die nicht benötigten Dateien zu finden und zu löschen...
cd /
Markiere den leeren Platz im Dateisystem als unbenutzt
fstrim -v /mnt
Hänge die Partition wieder aus
umount /mnt
Schalte den virtuellen Computer aus. In Alpine Linux geht das so:
poweroff
Der Platz, den die gelöschten Dateien belegten, ist jetzt als unbenutzt markiert. Dafür haben "discard=on" und "fstrim" gesorgt. Beim Umkopieren der Datei mit qemu-img wird der so markierte freie Speicher nicht mitkopiert.
qemu-img.exe convert -f qcow2 -O qcow2 diskimage.qcow2 diskimage-trimmed.qcow2
Es kann wieder nötig sein, Pfade voranzustellen.
Das qcow2 Dateiformat unterstützt Kompression, die die Dateigröße weiter reduzieren kann. Kompression kann optional mit -c
eingeschaltet werden, aber dadurch dauert dieser Vorgang erheblich länger.
qemu-img.exe convert -f qcow2 -O qcow2 -c diskimage.qcow2 diskimage-trimmed.qcow2
Nach diesem Tutorial liegt der Snapshot in zwei Kopien vor: Die Originaldatei mit den Änderungen, die du in der VM gemacht hast, und die geschrumpfte Kopie. Die Originaldatei kann gelöscht werden. Die Kopie ist unabhängig davon.
Copyright (c) 2021 netcup
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicence, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
By making a contribution to this project, I certify that:
The contribution was created in whole or in part by me and I have the right to submit it under the licence indicated in the file; or
The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate licence and I have the right under that licence to submit that work with modifications, whether created in whole or in part by me, under the same licence (unless I am permitted to submit under a different licence), as indicated in the file; or
The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the licence(s) involved.