LVM: Physical Volume vergössern

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.

Quellen

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert