Immer wieder stellt man fest, dass für einige LVM noch Hexenwerk ist. Sofern man allerdings noch nicht mit BTRfs oder vergleichbaren Filesystemen spielt, ist LVM immernoch sehr attraktiv. Denn man erhöht die Flexibilität bei Erweiterungen von Mountpoints und Verwaltung der physikalischen Festplatten. Es gibt sicherlich noch viele weitere Vorteile, die will ich aber nicht alle aufzählen. 🙂

Erweiterung von Mointpoints

Sofern noch Platz in der Volumegroup ist, kann direkt beim lvextend loslegen. Herausfinden könnt ihr das über:

root@servername:~# vgs
  VG                #PV #LV #SN Attr   VSize   VFree
  random-vg-name      1   2   0 wz--n- 149.76g 8.00m

Hier wären nun nur 8MB frei.

Erweitern des VGs

Nehmen wir an wir haben eine neue Festplatte eingebaut - Virtuell oder Physikalisch spielt natürlich keine Rolle.

Nun müssen wir herausfinden, wie die neue Festplatte im System heißt, dazu können wir zum einen unter dmesg oder in die /proc/partitions schauen:

dmesg | tail -n 7
[17986986.088284] sd 3:0:0:0: [sdb] 104857600 512-byte logical blocks: (53.6 GB/50.0 GiB)
[17986986.088292] sd 3:0:0:0: Attached scsi generic sg2 type 0
[17986986.088302] sd 3:0:0:0: [sdb] Write Protect is off
[17986986.088304] sd 3:0:0:0: [sdb] Mode Sense: 61 00 00 00
[17986986.088322] sd 3:0:0:0: [sdb] Cache data unavailable
[17986986.088323] sd 3:0:0:0: [sdb] Assuming drive cache: write through
[17986986.104055] sd 3:0:0:0: [sdb] Attached SCSI disk
# Ergebnis ist "sdb"
cat /proc/partitions

Bei neuen Partitionen ist hier das Device ohne "Nummer" zu suchen.

In unserem Fall ist es also das Device sdb, dieses partitionieren wir. Auch hier gibt es verschiedenste Ansichten... aber ich lege eine saubere Partition an.

parted /dev/sd[n] ## Buchstabe der Festplatte/Partition angeben
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel msdos
Error: Expecting a partition type.
(parted) mkpart primary 0% 100%
(parted) set 1 lvm on
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number  Start   End     Size    Type     File system  Flags
 1      1049kB  53.7GB  53.7GB  primary               lvm
(parted) quit

Nun ist das Device vorbereitet und wir können es der Volumegroup hinzufügen.

Erstellen des physical devices

Dieser Schritt wird bei vgextend oder vgcreate gleich mit erledigt. Der Vollständigkeit halber, erwähne ich es trotzdem kurz. Mit pvcreate machen wir aus der eben angelegten Partion sd[n]1 ein physical device.

# Hilfeausgabe
root@servername:~# pvcreate --help
  pvcreate: Initialize physical volume(s) for use by LVM
pvcreate
        [--norestorefile]
        [--restorefile file]
        [-d|--debug]
        [-f[f]|--force [--force]]
        [-h|-?|--help]
        [--labelsector sector]
        [-M|--metadatatype 1|2]
        [--pvmetadatacopies #copies]
        [--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]]
        [--dataalignment Alignment[bBsSkKmMgGtTpPeE]]
        [--dataalignmentoffset AlignmentOffset[bBsSkKmMgGtTpPeE]]
        [--setphysicalvolumesize PhysicalVolumeSize[bBsSkKmMgGtTpPeE]
        [-t|--test]
        [-u|--uuid uuid]
        [-v|--verbose]
        [-y|--yes]
        [-Z|--zero {y|n}]
        [--version]
        PhysicalVolume [PhysicalVolume...]
root@servername:~# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
root@servername:~# pvs
  PV         VG                Fmt  Attr PSize   PFree
  /dev/sda5  random-vg-name    lvm2 a--  149.76g  8.00m
  /dev/sdb1                    lvm2 a--   50.00g 50.00g

Erweitern der Volumegroup

Nun können wir die Volumegroup erweitern:

root@servername:~# vgextend --help
  vgextend: Add physical volumes to a volume group
vgextend
        [-A|--autobackup y|n]
        [--restoremissing]
        [-d|--debug]
        [-f|--force]
        [-h|--help]
        [-t|--test]
        [-v|--verbose]
        [--version]
        [ PHYSICAL DEVICE OPTIONS ]
        VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
root@servername:~# vgextend random-vg-name /dev/sdb1
  Volume group "random-vg-name" successfully extended
root@servername:~# vgs
  VG                #PV #LV #SN Attr   VSize   VFree
  random-vg-name      2   2   0 wz--n- 199.75g 50.00g
root@servername:~# pvs
  PV         VG                Fmt  Attr PSize   PFree
  /dev/sda5  random-vg-name    lvm2 a--  149.76g  8.00m
  /dev/sdb1  random-vg-name    lvm2 a--   50.00g 50.00g

Erweitern des Logical Volumes (LV) und des Dateisystems

Nun muss das LV und das Filesystem natürlich noch erweitert werden. Dies werde ich ebenfalls in zwei Schritten durchführen. Bei lvextend kann über den Schalter -r das Filesystem gleich mit erweitert werden.

root@servername:~# lvs
  LV     VG                Attr      LSize   Pool Origin Data%  Move Log Copy%  Convert
  root   random-vg-name    -wi-ao--- 141.75g
  swap_1 random-vg-name    -wi-ao---   8.00g
root@servername:~# lvextend --help
  lvextend: Add space to a logical volume
lvextend
        [-A|--autobackup y|n]
        [--alloc AllocationPolicy]
        [-d|--debug]
        [-f|--force]
        [-h|--help]
        [-i|--stripes Stripes [-I|--stripesize StripeSize]]
        {-l|--extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] |
         -L|--size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}
        [-m|--mirrors Mirrors]
        [--nosync]
        [--use-policies]
        [-n|--nofsck]
        [--noudevsync]
        [-r|--resizefs]
        [-t|--test]
        [--type VolumeType]
        [-v|--verbose]
        [--version]
        LogicalVolume[Path] [ PhysicalVolumePath... ]
root@servername:~# lvextend -L +20G /dev/random-vg-name/root        (ein -r erweitert gleich das Filesystem)
  Extending logical volume root to 161.75 GiB
  Logical volume root successfully resized

Anzeigen des genutzten Filesystems:

root@servername:~# mount
/dev/mapper/random-vg-name--02--vg-root on / type **ext4** (rw,errors=remount-ro)  <<---- EXT4
... # Ausgabe gekürzt
root@servername:~# resize2fs /dev/random-vg-name/root
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/random-vg-name/root is mounted on /; on-line resizing required
old_desc_blocks = 9, new_desc_blocks = 11
The filesystem on /dev/random-vg-name/root is now 42402816 blocks long.
root@servername:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           799M  960K  798M   1% /run
/dev/dm-0       160G  119G   33G  79% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            3.9G     0  3.9G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sda1       236M   70M  154M  32% /boot
root@servername:~# vgs
  VG                #PV #LV #SN Attr   VSize   VFree
  random-vg-name      2   2   0 wz--n- 199.75g 30.00g

Wir haben das Filesystem bzw. das LV nicht um die volle Kapazität erweitert, falls diese irgendwo anders untergebracht werden sollen. Man könnte bei lvextend auch alle Extents zuweisen lvextend -l 100%FREE /dev/random-vg-name/root

Ich hoffe dieses kleine HowTo hilft euch etwas weiter. Gerne könnt ihr Fragen oder Anregungen in den Kommentaren posten!

Grüße