Physical Volumes haben sich als praktischen Standard für das Volume Management etabliert.
Doch irgendwann ist die zugrunde liegende Disk voll und muss vergrössert werden, was in virtuellen Umgebungen ganz einfach ist.
Für die nachfolgende Vergrösserung der Physical Volumes gibt es verschiedene Vorgehensweisen, welche hier beleuchtet werden.
Inhalt
Physical volume als ganze Disk
Hat man eine Virtualisierte Maschine (z.B. VMware) und im LVM die Physical Volumes als ganze Disks hinzugefügt (z.B. /dev/sdb/, anstatt /deb/sdb1), kann man diese einfach vergrössern, indem man in der VM die Festplatte vergrössert, diese dann mit dem blockdev Kommando in Linux einliesst und mit pvresize vom LVM erkennen lässt:
blockdev --rereadpt /dev/sdX pvresize /dev/sdX |
[stextbox id=“note“ caption=“blockdev: ioctl error on BLKRRPART: Device or resource busy“]
Manchmal kann es vorkommen, dass man bei blockdev den Fehler: „Device or resource busy“ bekommt:
# blockdev --rereadpt /dev/sdX
blockdev: ioctl error on BLKRRPART: Device or resource busy |
Dann hilft vielleicht ein Trick weiter, in dem man ein rescan des SCSI devices macht.
Zuerst muss man jedoch herausfinden wo das dran hängt:
# dmesg | grep sdX | grep Attached [ 1.061952] sd 0:0:1:0: [sdX] Attached SCSI disk |
=> In diesem Fall bei: 0:0:1:0:
Dann löst man darauf ein rescan aus:
echo "1" > /sys/class/scsi_device/0\:0\:1\:0/device/rescan |
danach kann das PV resized werden:
pvresize /dev/sdX |
[/stextbox]
Physical voume als Partition
Besteht das Physical Volume hingegen aus einer Partition (z.B. /dev/sdb1) kann man das Programm growpart
verwenden:
growpart /dev/sdX 1 |
Die Zahl zuhinterst steht für die Nummer der Partition; bei /dev/sdX1 also 1.
Zu beachten ist, dass wenn man das Physical Volume auf einer extended partion hat (wie das der Installer von Ubuntu unglücklicherweise macht), muss zuerst die extended partition vergrössert werden, bevor die eigentliche LVM Partition vergrössert werden kann.
Sieht beispielsweise das Layout so aus (vergrössern wollen wir /dev/sda6):
# fdisk -l Disk /dev/sda: 200 GiB [...] [...] Disklabel type: dos Disk identifier: 0x21237d42 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 1499135 1497088 731M b W95 FAT32 /dev/sda2 * 1499136 3500031 2000896 977M 83 Linux /dev/sda3 3502078 251658239 248156162 118.3G 5 Extended /dev/sda5 3502080 3504127 2048 1M 83 Linux /dev/sda6 3506176 251656191 248150016 118.3G 8e Linux LVM |
Dann müsste man growpart zweimal anwenden:
growpart /dev/sda 3 growpart /dev/sda 6 |
Nun kann man mit pvscan
und pvresize
das Volume vergrössern:
pvscan pvresize /dev/sdX |
[stextbox id=“note“ caption=“Filesytem auf dem Volume“]
Arbeiten man ohne LVM und hat direkt das filesystem auf z.B. /dev/sdX1, geht das natürlich auch. Dann muss man nach dem Vergrössern anstelle von pvscan/pvresize noch e2fsck und resize2fs ausführen
xfs:
xfs_growfs |
oder unter ext4:
(ACHTUNG, das volume sollte UNmounted sein!):
e2fsck -f /dev/sdX1 resize2fs /dev/sdX1 |
[/stextbox]
Hilft das nicht und ist die zu vergrössernde Partition die letzte in der Reihenfolge, so gibt es noch einen einfachen Trick: Die Partition entfernen und danach neu erstellen. Das klingt zwar etwas beängstigend, funktioniert aber: 😉
Achtung: Bevor man an der Partitionstabelle manipuliert ist es anzuraten vorher einen snapshot der VM zu machen und oder die Schritte vorher auf einer Test-VM auszuprobieren!
fdisk /dev/sdX Command (m for help): p Disk /dev/sdX: 8589 MB, 8589934592 bytes, 16777216 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 label type: dos Disk identifier: 0x00015b7c Device Boot Start End Blocks Id System /dev/sdX1 * 2048 1026047 512000 83 Linux /dev/sdX2 1026048 10485759 4729856 8e Linux LVM Command (m for help): d Partition number (1,2, default 2): Partition 2 is deleted Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (1026048-16777215, default 1026048): Using default value 1026048 Last sector, +sectors or +size{K,M,G} (1026048-16777215, default 16777215): Using default value 16777215 Partition 2 of type Linux and of size 7.5 GiB is set Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to '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 or after you run partprobe(8) or kpartx(8) Syncing disks. |
Nun muss noch die Partitionstabelle neu eingelesen werden, dies geht nur mit partx:
partx -u /dev/sdX |
Nun kann man mit pvscan
und pvresize
das Volume vergrössern:
pvscan pvresize /dev/sdX |
Pysical volume als Partition (alternative)
Alternativ kann man auch eine neue Festplatte hinzufügen, die grösser oder gleichgross ist als die andere, die Daten auf der alten dann mit pvmove auf die neue/grössere verschiebt und danach die alte entfernen.