Categories
Linux CentOS

CentOS 7: Neue Disk zu LVM Disk Group hinzufügen (Härtefall)

In einem relativ aktuellen Fall hatten wir das Problem, dass unter einer CentOS7-VM ein LVM-Volume volllief:

sudo lvm vgdisplay
 --- Volume group ---
 VG Name centos
 System ID
 Format lvm2
 Metadata Areas 3
 Metadata Sequence No 8
 VG Access read/write
 VG Status resizable
 MAX LV 0
 Cur LV 3
 Open LV 3
 Max PV 0
 Cur PV 3
 Act PV 3
 VG Size 1.27 TiB
 PE Size 4.00 MiB
 Total PE 332622
 Alloc PE / Size 332622 / 1.27 TiB
 Free PE / Size 0 / 0
 VG UUID xxxx

Nun wurde über Hyper-V eine weitere 500GB große Disk hinzugefügt. Diese muss nun zum logischen Volume hinzugefügt werden. Hierzu gehen wir erstmal in die LVM-Umgebung:

> Sudo LVM

Nach erneuter Eingabe des Passworts können wir loslegen. Über den Befehl lvmdiskscan können wir den Pfad der neuen Disk bestimmen:

lvm> lvmdiskscan
 /dev/centos/root [ 1.03 TiB]
 /dev/sda1 [ 200.00 MiB]
 /dev/centos/swap [ 2.00 GiB]
 /dev/sda2 [ 500.00 MiB]
 /dev/centos/home [ 247.25 GiB]
 /dev/sda3 [ 299.31 GiB] LVM physical volume
 /dev/sdb [ 500.00 GiB]
 /dev/sdc [ 500.00 GiB] LVM physical volume
 /dev/sdd1 [ 500.00 GiB] LVM physical volume
 4 disks
 2 partitions
 1 LVM physical volume whole disk
 2 LVM physical volumes

Mit dieser Disk werde ich das Beispiel durchmachen, Sie aber zur Verdeutlichung auch immer rot markieren. Als erstes wollen wir erreichen, dass die Disk über den LVM verwendet werden kann. Hierzu verwenden wir folgenden Befehl:

lvm> lvm pvcreate /dev/sdb
 Physical volume "/dev/sdb" successfully created

Führen wir nun erneut den Befehl lvmdiskscan aus, so sehen wir, dass die neue Disk hinzugefügt wurde:

lvm> lvmdiskscan
 /dev/centos/root [ 1.03 TiB]
 /dev/sda1 [ 200.00 MiB]
 /dev/centos/swap [ 2.00 GiB]
 /dev/sda2 [ 500.00 MiB]
 /dev/centos/home [ 247.25 GiB]
 /dev/sda3 [ 299.31 GiB] LVM physical volume
 /dev/sdb [ 500.00 GiB] LVM physical volume
 /dev/sdc [ 500.00 GiB] LVM physical volume
 /dev/sdd1 [ 500.00 GiB] LVM physical volume
 3 disks
 2 partitions
 2 LVM physical volume whole disks
 2 LVM physical volumes

Jetzt können wir die Disk nehmen, und sie unserer bestehenden LVM-Gruppe hinzufügen. Den Gruppennamen bekommt man über den Befehl vgdisplay heraus:

lvm> vgdisplay
 --- Volume group ---
 VG Name centos
 System ID
 Format lvm2
 Metadata Areas 3
 Metadata Sequence No 8
 VG Access read/write
 VG Status resizable
 MAX LV 0
 Cur LV 3
 Open LV 3
 Max PV 0
 Cur PV 3
 Act PV 3
 VG Size 1.27 TiB
 PE Size 4.00 MiB
 Total PE 332622
 Alloc PE / Size 332622 / 1.27 TiB
 Free PE / Size 0 / 0
 VG UUID x6THwj-1ybf-7UZD-GSb4-OJU0-ByTg-dyQL7h

Somit können wir folgenden Befehl abfeuern:

vgextend "centos" /dev/sdb
Volume group "centos" successfully extended

Sollten hier schon Fehlermeldungen wie diese hier kommen:

Couldn't create temporary text file name.
Backup of volume group centos metadata failed.

…so werden wir nachher noch was beachten müssen. Dies tritt vor allem dann auf, wenn das bestehende Volume wirklich komplett voll ist.

Nachdem nun die Gruppe vergrößert wurde, muss das Volume entsprechend vergrößert werden. Bei uns war es das root-Volume, dessen Pfad wir über den Befehl lvmdiskscan schon ausmachten:

lvm> lvmdiskscan
 /dev/centos/root [ 1.03 TiB]
 /dev/sda1 [ 200.00 MiB]
 /dev/centos/swap [ 2.00 GiB]
 /dev/sda2 [ 500.00 MiB]
 /dev/centos/home [ 247.25 GiB]
 /dev/sda3 [ 299.31 GiB] LVM physical volume
 /dev/sdb [ 500.00 GiB] LVM physical volume
 /dev/sdc [ 500.00 GiB] LVM physical volume
 /dev/sdd1 [ 500.00 GiB] LVM physical volume
 3 disks
 2 partitions
 2 LVM physical volume whole disks
 2 LVM physical volumes

Wir müssen uns nun also die zukünftige Größe des Volumes erschließen. Dies geschieht in zwei Schritten:

lvm> vgdisplay
 --- Volume group ---
 VG Name centos
 System ID
 Format lvm2
 Metadata Areas 4
 Metadata Sequence No 9
 VG Access read/write
 VG Status resizable
 MAX LV 0
 Cur LV 3
 Open LV 3
 Max PV 0
 Cur PV 4
 Act PV 4
 VG Size 1.76 TiB
 PE Size 4.00 MiB
 Total PE 460621
 Alloc PE / Size 332622 / 1.27 TiB
 Free PE / Size 127999 / 500.00 GiB
 VG UUID x6THwj-1ybf-7UZD-GSb4-OJU0-ByTg-dyQL7h

lvm> lvdisplay /dev/centos/root
 --- Logical volume ---
 LV Path /dev/centos/root
 LV Name root
 VG Name centos
 LV UUID 6wSo4q-yRO7-dZiZ-TwBf-QYeq-iTjf-O1Uk6Z
 LV Write Access read/write
 LV Creation host, time localhost.localdomain, 2016-03-14 13:42:03 +0100
 LV Status available
 # open 1
 LV Size 1.03 TiB
 Current LE 268814
 Segments 3
 Allocation inherit
 Read ahead sectors auto
 - currently set to 8192
 Block device 253:0

Addieren wir die aktuelle Größe des Volumes mit dem neu gewonnenen freien Speicherplatz (127999 + 268814), so bekommen wir als Endergebnis die neue Größe des Laufwerks (396813). Sofern es vorher keine Fehlermeldung bei Ausführung des Befehls vgextend “centos” /dev/sdb gab, so können Sie nun mit folgendem Befehl das Volume erweitern:

lvm> lvresize -l 396813 /dev/centos/root
Size of logical volume centos/root changed from 1.03 TiB (268814 extents) to 1.51 TiB (396813 extents).
Logical volume root successfully resized.

Anderenfalls müssen wir noch das Autobackup deaktivieren, was aber durch eine kleine Abänderung des Befehls noch in der selben Line möglich ist:

lvm> lvresize -A n -l 396813 /dev/centos/root
 Size of logical volume centos/root changed from 1.03 TiB (268814 extents) to 1.51 TiB (396813 extents).
 WARNING: This metadata update is NOT backed up
 Logical volume root successfully resized.

Abschließend muss noch das Dateisystem erweitert werden. Dies erfolgt über den folgenden Befehl (außerhalb der LVM-Umgebung):

> sudo xfs_growfs /dev/centos/root

Das sollte es gewesen sein. Überprüfen kann man es mit dem Befehl df -h:

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 1.6T 1.1T 500G 68% /
devtmpfs 5.8G 0 5.8G 0% /dev
tmpfs 5.8G 8.0K 5.8G 1% /dev/shm
tmpfs 5.8G 8.3M 5.8G 1% /run
tmpfs 5.8G 0 5.8G 0% /sys/fs/cgroup
/dev/sda2 494M 134M 361M 28% /boot
/dev/sda1 200M 9.5M 191M 5% /boot/efi
/dev/mapper/centos-home 248G 33M 248G 1% /home
tmpfs 1.2G 0 1.2G 0% /run/user/1001

Leave a Reply

Your email address will not be published. Required fields are marked *