Für eine bessere Performance können unter anderem bei der Virtualisierung mit KVM logische Volumen eines LVM als virtuelle Festplatte für die virtuellen Maschinen genutzt werden. Kommt zusätzlich in der VM ein weiteres LVM zum Einsatz ist es bei der Vergrößerung der virtuellen Festplatte nicht nur mit einer einfachen Neupartitionierung getan. Im Folgenden werden die benötigten Schritte beschrieben, durch die die volle Speicherkapazität der virtuellen Festplatte verwendet werden kann.
Zunächst muss das logische Volumen auf dem Host-System vergrößert werden. Das Vorgehen ist dabei dem in Artikel "Linux: Logisches Volumen bei LVM vergrößern" beschriebenen sehr ähnlich. Im folgenden Beispiel wird so die Größe der virtuelle Festplatte auf 20 Gigabyte festgelegt.
$ sudo lvresize -L20G /dev/volume_group/meine_vm
Anschließend muss die virtuelle Maschine neu gestartet werden. Ein einfacher Neustart reicht jedoch nicht aus, da die Änderung nur richtig an das Gast-System weitergegeben wird, wenn die virtuelle Maschine komplett ausgeschaltet und wieder eingeschaltet wurde. Nach dem Neustart wird im Gast-System weitergearbeitet. Dort wird das Programm fdisk verwendet um die Partition, auf der das physische Volumen liegt, zu vergrößern. Dafür wird das Programm unter Angabe der entsprechenden Festplatte und der Einstellung, dass alle Werte in Sektoren angezeigt werden, gestartet.
$ sudo fdisk -u=sectors /dev/vda
Anschließend kann die aktuelle Partitionstabelle angezeigt werden.
Command (m for help): p
Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ecb4e
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 391167 194560 83 Linux
/dev/vda2 391168 20969471 10289152 8e Linux LVM
Zu sehen ist das auf der Partition /dev/vda2 das physische Volumen des LVM liegt. Diese Partition geht bis zum Sektor 20969471, durch die Vergrößerung der virtuellen Festplatte stehen jedoch 41943040 Sektoren zur Verfügung.
Achtung: Theoretisch sollte bei dem Folgenden nichts schief gehen, jedoch ist es wie immer empfehlenswert ein Backup der Daten anzulegen. Sollte es während des Vorgangs doch zu einem Fehler kommen könnten alle Daten verloren gehen.
Leider ist es nicht möglich die Partition einfach so zu vergrößern. Dazu wird die Partition zunächst gelöscht.
Hinweis: Unbedingt auf die richtige Nummer der Partition achten. Hier ist es die 2.
Command (m for help): d
Partition number (1-4): 2
Anschließend wird die Partition neu angelegt. Wichtig ist, dass die Partition vom gleichen Type ist und die gleiche Nummer hat. Zusätzlich muss der erste Sektor dem der gelöschten Partition entsprechen. Im vorliegenden Fall ist das der Sektor 391168. Hinweis: Der Wert für den letzten Sektor darf nicht kleiner als der der original Partition sein.
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2):
Using default value 2
First sector (391168-41943039, default 391168):
Using default value 391168
Last sector, +sectors or +size{K,M,G} (391168-41943039, default 41943039):
Using default value 41943039
Ist das geschafft, bietet es sich an die neue Partitionstabelle noch einmal genau anzuschauen.
Command (m for help): p
Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ecb4e
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 391167 194560 83 Linux
/dev/vda2 391168 41943039 20775936 83 Linux
Wichtig: Zu sehen ist, dass der Type der angelegten Partition auf Linux steht. Dies muss unbedingt noch geändert werden. Der richtige Typ ist 8e, welcher für Linux LVM steht.
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)
Noch einmal alles überprüfen.
Command (m for help): p
Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ecb4e
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 391167 194560 83 Linux
/dev/vda2 391168 41943039 20775936 8e Linux LVM
Bis jetzt wurden alle Änderungen nur im Programm vorgenommen, aber noch nicht auf die Festplatte gespeichert. Daher muss dies abschließend noch gemacht werden.
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 or after you run partprobe(8) or kpartx(8)
Syncing disks.
Damit der Kernel die neue Partitionstabelle richtig einließt sollte das System neu gestartet werden. Nach dem Neustart wird geschaut ob alle Änderungen an der Partitionstabelle erfolgreich waren und den Vorstellungen entsprechen.
$ sudo fdisk -l /dev/vda
Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ecb4e
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 391167 194560 83 Linux
/dev/vda2 391168 41943039 20775936 8e Linux LVM
Ist alles in Ordnung wird mit dem Programm pvscan eine Übersicht über die im System vorhandenen physischen Volumen abgerufen.
$ sudo pvscan
PV /dev/vda2 VG vg_system lvm2 [9.81 GiB / 956.00 MiB free]
Total: 1 [9.81 GiB] / in use: 1 [9.81 GiB] / in no VG: 0 [0 ]
Zusehen ist, dass der Speicher immer noch auf ca. 10 Gigabyte steht, was der Ausgangsgröße entspricht. Um dies zu ändern muss das physische Volumen vergrößert werden.
$ sudo pvresize /dev/vda2
Physical volume "/dev/vda2" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
Wie zu sehen ist, war die Vergrößerung erfolgreich und ein erneuter Aufruf von pvscan zeigt, dass der voll Speicher jetzt in der Volume Group zur Verfügung ist.
$ sudo pvscan
PV /dev/vda2 VG vg_system lvm2 [19.81 GiB / 10.94 GiB free]
Total: 1 [19.81 GiB] / in use: 1 [19.81 GiB] / in no VG: 0 [0 ]
Links
- Wikipedia: Logical Volume Manager (deutsch)