Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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 -p /dev/mapper/data-mysql # 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.
- 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
oder zum vergrößern:
Number Start End Size File system Name Flags 1 0,00% 50,0% 50,0% primary lvm (parted) resizepart 1 100% (parted) p ... Number Start End Size File system Name Flags 1 0,00% 100% 100% primary lvm
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
