Dateisysteme virtueller Maschinen verwalten

Die nachfolgenden Angaben wurden unter folgender Umgebung getestet: Scientific Linux 6.1, Virtualisierung mit KVM.

Kommandozeilen-Werkzeuge im Paket libguestfs-tools

Das Paket libguestfs-tools enthält einige Werkzeuge mit der Dateisysteme virtueller Maschinen analysiert oder verändert werden können. Insbesondere die Größenänderung einers Plattenimages und der enthaltenen Dateisysteme wird damit leicht ermöglicht. Es enthält auch Werkzeuge um Dateien in diesen Dateisystemen anzuzeigen, zu editieren, zu sichern, … . Nachfolgend ein kurzer Überblick in dem die Anwendung einiger der Werkzeuge kurz demonstriert wird – und eine Demonstration einer Plattenimage-Größenänderung.

virt-df zeigt den freien Platz in den Dateisystemen einer virtuellen Maschine an. Im Gegensatz zu anderen Werkzeugen zeigt es nicht nur den einer virtuellen Maschine zugeordneten Plattenplatz an, sondern kann in die virtuelle Maschine „hineinsehen“ um den dort wirklich belegten Platz anzuzeigen. Es ist mit dem Kommando df(1)vergleichbar, arbeitet aber auf dem Dateisystem virtueller Maschinen und arbeitet sogar für virtuelle Windows-Maschinen.

Beispiel:
[root@dellserv ~]# virt-df -d test.serv.private
Using CPU model "cpu64-rhel6"
Filesystem                                1K-blocks       Used  Available  Use%
test.serv.private:/dev/sda1                  154691      29539     117165   20%
test.serv.private:/dev/system/root          4725116    3756100     728992   80%

virt-filesystems ist ein Kommandozeilen-Werkzeug um die Dateisysteme, Partitionen, Block-Geräte, logischen Volumes (LVs), Volume-Gruppen (VGs) und physikalischen Volumes (PVs) im Plattenimage einer virtuellen Maschine anzuzeigen.

Beispiel:
[root@dellserv ~]# virt-filesystems --long -h --all -d test.serv.private
Using CPU model "cpu64-rhel6"
Name              Type        VFS   Label  Size  Parent
/dev/sda1         filesystem  ext4  -      156M  -
/dev/system/root  filesystem  ext4  -      4,6G  -
/dev/system/swap  filesystem  swap  -      148M  -
/dev/system/root  lv          -     -      4,6G  /dev/system
/dev/system/swap  lv          -     -      148M  /dev/system
/dev/system       vg          -     -      4,7G  -
/dev/sda2         pv          -     -      4,7G  -
/dev/sda1         partition   -     -      156M  /dev/sda
/dev/sda2         partition   -     -      4,7G  /dev/sda
/dev/sda          device      -     -      4,9G  -

Mit virt-ls können Dateilistings innerhalb einer virtuellen Maschine angezeigt werden.

Beispiel:
[root@dellserv ~]# virt-ls -d test.serv.private -l /boot
Using CPU model "cpu64-rhel6"
total 23722
drwxr-xr-x  4 root root     1024 Nov  4 10:40 .
drwxr-xr-x 23 root root     4096 Nov  5 10:03 ..
-rw-r--r--  1 root root  2247048 Jul 26 19:12 System.map-2.6.37.6-0.7-desktop
-rw-------  1 root root      512 Aug 21 17:26 backup_mbr
lrwxrwxrwx  1 root root        1 Mar  2  2011 boot -> .
-rw-r--r--  1 root root     1236 Feb 21  2011 boot.readme
-rw-r--r--  1 root root   120322 Jul 26 18:24 config-2.6.37.6-0.7-desktop
drwxr-xr-x  2 root root     1024 Aug 21 17:51 grub
lrwxrwxrwx  1 root root       27 Aug 21 17:53 initrd -> initrd-2.6.37.6-0.7-desktop
-rw-r--r--  1 root root 11299312 Aug 21 17:53 initrd-2.6.37.6-0.7-desktop
drwx------  2 root root    12288 Aug 21 17:13 lost+found
-rw-r--r--  1 root root   553984 Nov  4 10:40 message
-rw-r--r--  1 root root   196515 Jul 26 19:23 symvers-2.6.37.6-0.7-desktop.gz
-rw-r--r--  1 root root  5294771 Jul 26 19:22 vmlinux-2.6.37.6-0.7-desktop.gz
lrwxrwxrwx  1 root root       28 Aug 21 17:51 vmlinuz -> vmlinuz-2.6.37.6-0.7-desktop
-rw-r--r--  1 root root  4555104 Jul 26 19:12 vmlinuz-2.6.37.6-0.7-desktop

Mit virt-cat kann der Inhalt einer Datei im Plattenimage einer virtuellen Maschine angezeigt werden.

Beispiel:
[root@dellserv ~]# virt-cat test.serv.private /boot/boot.readme
Using CPU model "cpu64-rhel6"
This file is for first help if you occur some problems during booting.

FAQ

Aber nicht nur das Anzeigen eines Datei-Inhalts ist möglich. Mit virt-edit können Dateien im Dateisystem einer virtuellen Maschine auch direkt vom Host-System aus editiert werden. ACHTUNG: Das sollte Sie auf keinen Fall in einer laufenden VM durchführen – Sie sollten die VM vorher immer herunter fahren.

Beispiel:
[root@dellserv ~]# virt-edit test.serv.private /boot/boot.readme

Dieses Kommando öffnet die Datei /boot/boot.readme der VM entweder in vi oder im Editor der durch die Umgebungsvariable EDITOR festgelegt ist.

virt-rescue stellt eine Rettungs-Shell bzw. ein Rettungssystem für interaktive Fixes an einer virtuellen Maschine zur Verfügung. Nach einem kurzen „Bootvorgang“ eines „Rettungs-Systems“ steht eine virtuelle Rettungs-Shell zur Verfügung. Mit dem mount-Befehl kann dann z.B. die Systemplatte der virtuellen Maschine nach /sysrootgemountet und anschließend bearbeitet werden.

Resizing eines Platten-Images eine virtuellen Maschine

Hierfür wird virt-resize verwendet. Dieses Werkzeug verändert aber nie das Original-Plattenimage! Sie müssen deshalb vorab ein neues Plattenimage in der gewünschten Größe anlegen. Damit das neue Plattenimage dann aber direkt in der bereits definierten VM verwendet werden kann, sollte es den gleichen Namen haben wie das bisherige. Deshalb wird zuerst das alte Image umbenannt. Im Fall eines Logical Volumes (LV) als Plattenimage geht das so:

[root@dellserv ~]# lvrename /dev/dataraid/test.serv.private \
/dev/dataraid/test.serv.private.bak
Renamed "test.serv.private" to "test.serv.private.bak" in volume group "dataraid"

Anschließend wird das neue Plattenimage als neues Logical Volume in der gewünschten Größe erstellt. Hier wird dafür der Name des bisherigen Plattenimages (test.serv.private) verwendet und das neue Volume in der gleichen Volume Group (VG dataraid) erstellt:

[root@dellserv ~]# lvcreate -L 6GB -n test.serv.private dataraid
Logical volume "test.serv.private" created

Anschließend wird das alte Plattenimage /dev/dataraid/test.serv.private.bak in das neue Plattenimage /dev/dataraid/test.serv.private übertragen. Der--expand-Parameter sorgt in diesem Beispiel dafür, dass der neu zur Verfügung stehende Platz komplett der Partition /dev/sda2 zugeschlagen wird. Da /dev/sda2außerdem ein Physical Volume der virtuellen Maschine ist, wird dieses (virtuelle) Physical Volume gleich ebenfalls in der Größe verändert.

[root@dellserv ~]# virt-resize --expand /dev/sda2 \
/dev/dataraid/test.serv.private.bak \
/dev/dataraid/test.serv.private
Using CPU model "cpu64-rhel6"
Summary of changes:
/dev/sda1: partition will be left alone
/dev/sda2: partition will be resized from 4.7G to 5.8G
/dev/sda2: content will be expanded using the 'pvresize' method
Copying /dev/sda1 ...
[############################################################################]
Copying /dev/sda2 ...
[############################################################################]
Using CPU model "cpu64-rhel6"
Expanding /dev/sda2 using the 'pvresize' method

Damit wurde das Plattenimage und das in /dev/sda2 enthaltene Physical Volume vergrößert. Das Logical Volume der virtuellen Maschine allerdings noch nicht. Nach dem Booten der virtuellen Maschine kann dies z.B. wie folgt erfolgen:

test:/usr/share/man # lvresize -l +100%FREE /dev/system/root
Extending logical volume root to 5,70 GiB
Logical volume root successfully resized

Eine Kontrolle der Auswirkung im Dateisystem zeigt aber erst keine Änderung an – der neue Platz ist nicht verfügbar.

test:~ # df -h
Dateisystem          Größe Benut  Verf Ben%% Eingehängt auf
rootfs                4,6G  3,6G  712M  84% /
devtmpfs              493M  116K  493M   1% /dev
tmpfs                 499M  4,0K  499M   1% /dev/shm
/dev/mapper/system-root
4,6G  3,6G  712M  84% /
/dev/vda1             152M   29M  115M  21% /boot

Dazu muss erst noch das enthaltene Dateisystem in der Größe geändert werden (siehe dazu auch den LVM Resizing Guide von Tom Hirt).

test:~ # resize2fs -p /dev/mapper/system-root
resize2fs 1.41.14 (22-Dec-2010)
Das Dateisystem auf /dev/mapper/system-root ist auf / eingehängt; Online-Grössenveränderung nötig
old desc_blocks = 1, new_desc_blocks = 1
Führe eine Online-Grössenänderung von /dev/mapper/system-root auf 1494016 (4k) Blöcke durch.
Das Dateisystem auf /dev/mapper/system-root ist nun 1494016 Blöcke groß.

Anschließend ist der freie Platz auch im Dateisystem sicht- und verfügbar.

test:~ # df -h
Dateisystem          Größe Benut  Verf Ben%% Eingehängt auf
rootfs                5,7G  3,6G  1,8G  68% /
devtmpfs              493M  116K  493M   1% /dev
tmpfs                 499M  4,0K  499M   1% /dev/shm
/dev/mapper/system-root
5,7G  3,6G  1,8G  68% /
/dev/vda1             152M   29M  115M  21% /boot

Weitere Werkzeuge im Paket libguestfs-tools:

  • virt-inspector untersucht eine virtuelle Maschine und versucht Details der VM zu erkennen. Dies beinhaltet die Betriebssystem-Version, die Kernel-Version, die installierten Treiber, ob die VM voll-virtualisiert (FV) oder teil-virtualisiert (PV) ist, welche Anwendungen installiert sind und weiteres.
  • virt-list-filesystems kann dazu verwendet werden die Dateisysteme im Platten-Image einer virtuellen Maschine aufzulisten (z.B. für die Weiterverwendung in Shell-Skripten, … ).
  • virt-list-partitions kann dazu verwendet werden die Partitionen im Platten-Image einer virtuellen Maschine aufzulisten.
  • virt-make-fs erlaubt auf Basis einer Dateisammlung oder eines tar-Archivs die Erstellung eines Dateisystems.
  • virt-tar ist ein Archivierungs-, Backup- und Upload-Werkzeug für das Dateisystem virtueller Maschinen.
  • virt-win-reg erlaubt es Ihnen in die Windows Registry von virtuellen Windows Maschinen hinein zu sehen.

Schreibe einen Kommentar