Benutzer-Werkzeuge

Webseiten-Werkzeuge


lvm

Dies ist eine alte Version des Dokuments!


Logical Volume Manager (LVM)

# aptitude -y install lvm2

so kann man ein LVM-Volumen von einem Image mounten:

LVM-Fehlermeldungen die auch bei anderen Kommandos erscheinen

dieser Fehler tritt auf, wenn ein Volumen aus einer Volumengruppe entfernt wurde:

  WARNING: Device for PV H3cLlM-6Gnk-HK8W-ax7g-LAtT-0JpR-Fc7OMA not found or rejected by a filter.

beheben lässt sich das Problem mit diesem Kommando:

> pvscan --cache

unterstützte Dateisysteme

LVM-Implementation (1998 von Heinz Mauelshagen geschrieben), die sich in der Bedienung stark an HP-UX anlehnt. Eine Online-Vergrößerung ist unter Anderem mit folgenden Dateisystemen möglich: ext2, ext3, und ext4, JFS, ReiserFS V3 so wie mit XFS. Ebenfalls ist die Spiegelung der Logical Volumes möglich und unabhängig vom verwendeten Dateisystem. Neben der LVM-Implementierung von Red Hat (ehemals Sistina) gibt es mit EVMS auch eine Implementierung von IBM, die über LVM hinaus auch fast alle anderen Massenspeicheraufgaben unterstützt (Partitionierung, RAID, Dateisystemverwaltung).

Die Dateisysteme ZFS und btrfs enthalten bereits die Funktionen eines Logical Volume Manager's. Hier braucht man also keinen separaten Logical Volume Manager.

Dateisysteme und ihre Möglichkeiten
Dateisystem Online Offline
Vergrößern Verkleinern Vergrößern Verkleinern
ext2/ext3/ext4 ja nein ja ja
ReiserFS nein nein ja ja
JFS ja nein nein nein
XFS ja nein nein nein
NTFS nein nein ja ja
FAT nein nein ja ja

Installation

Als erstes muss eine Partition angelegt werden und die Partions-ID auf 8e geändert werden. Dies passiert mit fdisk und sollte keinen große Probleme bereiten:

# fdisk -l
# fdisk -l /dev/sda
# fdisk /dev/sda

Als zweites muss die Partition (bzw. die Partitionen) initialisiert werden:

# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

Dann muss man eine logische Volumengruppe (z.B. home) anlegen:

# vgcreate home /dev/sda3
  Volume group "home" successfully created

Jetzt kann man sich schon mal alle Informationen zur logische Volumengruppe anzeigen lassen:

# vgs
# vgdisplay
# vgdisplay home

Die Variable Total PE bezeichnet die Gesamtgröße der logische Volumengruppe. Und die Variable Free PE bezeichnet die Gesamtgröße des noch freien Bereiches in der logische Volumengruppe.

Will man also die komplette Volumengruppe mit nur einem einzigen logisches Volumen (fritz) belegen, kann man das ganz einfach so machen:

# lvcreate -l [Wert von "Free PE"] -n fritz home
  Logical volume "fritz" created

Das logisches Volumen kann man sich so ansehen:

# lvs
# lvdisplay

Gelöscht wird ein logisches Volumen so:

# lvremove home/fritz
  Do you really want to remove active logical volume "fritz"? [y/n]: y
    Logical volume "fritz" successfully removed

Ein logisches Volumen (fritz) mit einer Größe von 1GB kann man wie folgt anlegen:

# lvcreate -L 1G -n fritz home
  Logical volume "fritz" created

oder

# lvcreate -L 100%FREE -n fritz home
  Logical volume "fritz" created

Ein logisches Volumen vergrößert man um 1GB so:

# lvresize -L +1G home/fritz
  Extending logical volume fritz to 2,00 GB
  Logical volume fritz successfully resized

Die Größe eines logisches Volumen setzt man wie folgt auf einen festen Wert:

# lvresize -L 3G home/fritz
  Extending logical volume fritz to 3,00 GB
  Logical volume fritz successfully resized

Ein logisches Volumen vergrößert man wie folgt um 20% der aktuellen Gesamtgröße:

# lvresize -l +20%LV home/fritz
  Extending logical volume fritz to 1,20 GB
  Logical volume fritz successfully resized

Jetzt kann man das logische Volumen formatieren und einhängen:

# mkfs -t ext4 /dev/home/fritz
# mount /dev/home/fritz /home/fritz

Man kann das ganze auch mit LABEL machen:

# mkfs -t ext4 -L fritz /dev/home/fritz
# mount LABEL=fritz /home/fritz

Man kann an Stelle von "fritz" auch die komplette Bezeichnung des Mount-Points (/home/fritz) als Label verwenden:

# mkfs -t ext4 -L /home/fritz /dev/home/fritz
# mount LABEL=/home/fritz /home/fritz

In der /etc/fstab würde der Eintrag dann so aussehen:

LABEL=/home/fritz        /home/fritz        jfs        defaults        0 0

Soll das Laufwerk sehr sicher (dafür aber langsamer) sein, dann noch das hier:

# tune2fs -o journal_data /dev/home/fritz

Möchte man ein logisches Volumen für SWAP verwenden, dann könnte man es so machen:

# lvcreate -L 2G -n swap home
# mkswap -L swap /dev/home/swap

# vi /etc/fstab
  LABEL=swap              none                    swap    sw              0 0

einen Snapshot erstellen:

# lvcreate -L10G -s -n der_schnappschuss /dev/home/fritz

LV vergrößern

ext*

Seit Kernel 2.6.10 kann es auch im eingehängten Zustand vergrößert werden.

# lvresize -L 30G data/mysql
# umount /var/lib/mysql/
# e2fsck -yFf /dev/mapper/data-mysql
# resize2fs 
# mount /var/lib/mysql/

jfs

JFS kann __nur_ im eingehängten Zustand vergrößert werden!

# lvresize -L 30G data/mysql
# mount -o remount,resize /var/lib/mysql/

zu bedenken bei LV-Vergrößerungen

Die Möglichkeit zu haben, bei Bedarf ein zu klein bemessenes Dateisystem zu vergrößern ist zwar recht schön, ist aber auch in einigen Punkten problematisch.

  1. Wenn man ein Dateisystem mit statischen Inodes (z.B.: ext3 oder ext4) verwendet, dann bleibt die Anzahl der Inodes bei der Vergrösserung gleich. Das bedeutet, man kann jetzt zwar größere Dateien auf der Partition ablegen aber nicht mehr!
  2. Liegen auf einer VolumenGruppe viele LV's und davon werden dann hin und wieder mal verschiedene LV's vergrössert, dann fragmentiert der Festplattenbereich auf der VolumenGruppe und dadurch werden die mechanischen Plattenkopfbewegungen unnötig in die Höhe getrieben. Das bedeutet, die gefühlte Arbeitsgeschwindigkeit der Platte sinkt.

Aus diesem Grund sollte man das Vergrößern von LV's auf ein Minimum beschränken und bevorzugt ein Dateisystem einsetzen, welches mit dynamischen Inodes arbeitet (z.B.: JFS oder XFS).

LVM-Beispiel

Das komplette Laufwerk "/dev/sdc" soll mit einem LVM-Volumen versehen werden.

eine eigene Partition über das komplette Laufwerk (100%) erstellen:

> parted /dev/sdc
(parted) p
(parted) unit %
(parted) mkpart primary 0% 100%
(parted) p
(parted) quit

eine eigene Volumengruppe über die komplette Partition (100%) erstellen:

> vgcreate binlog /dev/sdc1
> vgs

das LVM-Volumen in der zuvor angelgten Volumengruppe anlegen:

> lvcreate -l 100%FREE -n binlog vgsbinlog
> vgs

Dateisystem auf das LVM-Volumen schreiben:

> mkfs -t ext4 -m 0 -L binlog /dev/mapper/vgsbinlog-binlog 
> echo "LABEL="binlog"          /var/log/mysql/ ext4    defaults,noatime        2 2" >> /etc/fstab 

Parse error at byte 3

wenn dieser Fehler beim Aufruf eines beliebigen LVM-Befehl's auftritt (meist nach einem Absturz):

# lvs
  Parse error at byte 3 (line 2): unexpected token

dann müssen alle LV-Laufwerke runter gefahren werden

und dann kann man den Kram hier löschen:

# rm /etc/lvm/cache/.cache*

Eine LVM-Partition von einem mit dd erstellten Image mounten

http://www.utilities-online.info/articles/Mount-an-LVM-partition-image-cloned-with-dd/#.XUPcD_ybH0M

hier wird die Partition mit der Loop-Methode gemountet:

# losetup --all

erstmal wird das Image überprüft:

# file backup-cloud.img
backup-cloud.img: LVM2 PV (Linux Logical Volume Manager), UUID: NiSuLv-fH2Z-eO4H-JoJ2-9yuG-fWvW-gmuJak, size: 10212081664

# fdisk -l backup-cloud.img

Disk backup-cloud.img: 10.2 GB, 10212040704 bytes, 19945392 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

mounten

# losetup /dev/loop0 backup-cloud.img
# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/loop0 vg   lvm2 a--  9,51g    0

# vgchange -a y vg
2 logical volume(s) in volume group "vg" now active

# mount -o ro /dev/vg/lv_root /mnt/old/

umount

# umount /mnt/old/
# vgchange -a n vg
  0 logical volume(s) in volume group "vg" now active

# losetup -d /dev/loop0
# losetup --all

Partitionen auf einem LVM-Volumen mounten

root@computer01:~# pvs
  PV         VG     Fmt  Attr PSize    PFree
  /dev/sda2  system lvm2 a--    90,68g  68,82g
  /dev/sdb1  data   lvm2 a--  1016,75g 426,75g
root@computer01:~# ls -lha /dev/drbd/by-res/computer90/0
lrwxrwxrwx 1 root root 14 Mai 31  2019 /dev/drbd/by-res/computer90/0 -> ../../../drbd3

root@computer01:~# ls -lha /dev/drbd/by-res/computer90/
insgesamt 0
drwxr-xr-x 2 root root  60 Mai 31  2019 .
drwxr-xr-x 6 root root 120 Mär 18 10:37 ..
lrwxrwxrwx 1 root root  14 Mai 31  2019 0 -> ../../../drbd3

root@computer01:~# fdisk -lu /dev/drbd3
Medium /dev/loop0: 500 GiB, 536854491136 Bytes, 1048543928 Sektoren
Einheiten: sectors von 1 * 512 = 512 Bytes
Sektorengröße (logisch/physisch): 512 Bytes / 512 Bytes
I/O Größe (minimal/optimal): 512 Bytes / 512 Bytes
Typ der Medienbezeichnung: dos
Medienkennung: 0x00034266

Gerät        Boot  Start       Ende   Sektoren Größe Id Typ
/dev/loop0p1 *      2048     499711     497664   243M 83 Linux
/dev/loop0p2      501758 1048543231 1048041474 499,8G  5 Erweiterte
/dev/loop0p5      501760 1048543231 1048041472 499,8G 8e Linux LVM
root@computer01:~# mount -o loop,offset=$((512*501760)) /dev/drbd3 /mnt/

root@computer01:~# losetup --all
/dev/loop0: [0006]:502 (/dev/drbd3), offset 256901120

root@computer01:~# fdisk -lu /dev/loop0
Medium /dev/loop0: 499,8 GiB, 536597590016 Bytes, 1048042168 Sektoren
Einheiten: sectors von 1 * 512 = 512 Bytes
Sektorengröße (logisch/physisch): 512 Bytes / 512 Bytes
I/O Größe (minimal/optimal): 512 Bytes / 512 Bytes
root@computer01:~# vgs
  VG             #PV #LV #SN Attr   VSize    VFree
  data             1   4   0 wz--n- 1016,75g 426,75g
  computer90-vg    1   3   0 wz--n-  499,74g 154,52g
  system           1   2   0 wz--n-   90,68g  68,82g

root@computer01:~# lvs
  LV          VG             Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  computer90  data           -wi-ao---- 500,00g
  pcsyslog02  data           -wi-ao----  30,00g
  syslog01    data           -wi-ao----  30,00g
  mysql       computer90-vg  -wi-a----- 286,10g
  root        computer90-vg  -wi-a-----  47,68g
  swap        computer90-vg  -wi-a-----  11,44g
  swap        system         -wi-ao----   1,86g
  var         system         -wi-ao----  20,00g
root@computer01:~# mount /dev/mapper/computer90--vg-root /mnt/
...
root@computer01:~# umount /mnt/
root@computer01:~# vgchange -an /dev/mapper/computer90--vg
root@computer01:~# losetup --all
root@computer01:~# losetup -f
/dev/loop0
/home/http/wiki/data/attic/lvm.1584976225.txt · Zuletzt geändert: von manfred