Benutzer-Werkzeuge

Webseiten-Werkzeuge


lvm

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
lvm [2019-08-02 06:52:06] manfredlvm [2025-08-25 11:53:07] (aktuell) – [LV löschen] manfred
Zeile 1: Zeile 1:
 +====== Logical Volume Manager (LVM) ======
 +
 +  # aptitude -y install lvm2
 +
 +  * [[http://www.linuxhaven.de/dlhp/HOWTO/DE-LVM-HOWTO-4.html]]
 +
 +so kann man ein LVM-Volumen von einem Image mounten:
 +  * [[http://www.hutsky.cz/blog/2014/06/mount-a-disk-image-containing-lvm/]]
 +
 +
 +=== 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
 +
 +
 +===== LVM vergrößern =====
 +
 +<color #22b14c>//Getestet mit Ubuntu 20.04 LTS//</color>
 +
 +  umount /data
 +  growpart /dev/vdb 1 
 +  vgextend vgsdata 
 +  pvresize /dev/vdb1
 +  vgdisplay vgsdata
 +  lvresize -l +100%FREE vgsdata/vol-data
 +  e2fsck -f /dev/mapper/vgsdata-vol--data
 +  resize2fs /dev/mapper/vgsdata-vol--data
 +  mount /data
 +  df -h /data
 +
 +
 +===== unterstützte Dateisysteme =====
 +
 +  * [[http://de.wikipedia.org/wiki/Logical_Volume_Manager]]
 +
 +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 [[::FreeBSD:ZFS]] und [[btrfs]] enthalten bereits die Funktionen eines Logical Volume Manager's. Hier braucht man also keinen separaten Logical Volume Manager.
 +
 +  * [[http://wiki.ubuntuusers.de/Dateisystemgröße_ändern#Dateisysteme-und-ihre-Eigenschaften]]
 +
 +^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 =====
 +
 +  * [[http://www.pro-linux.de/NB3/artikel/2/136]]
 +
 +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.
 +
 +  - 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!
 +  - 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).
 +
 +
 +==== LV löschen ====
 +
 +physikalische Laufwerke/Volumen anzeigen
 +  > lsblk
 +
 +VG (Volumen-Gruppe) anzeigen
 +  > vgdisplay
 +  > vgdisplay vgname
 +
 +LV (logisches Volumen) aus einer Volumen-Gruppe anzeigen
 +  > ls -lha /dev/vgname/
 +
 +LV (logisches Volumen) aus einer Volumen-Gruppe löschen
 +  > lvremove /dev/vgname/lvname
 +
 +Die Volumen-Gruppe löschen
 +  > vgremove vgname
 +
 +
 +==== LVM-Beispiel ====
 +
 +
 +=== LVM-Volumen anlegen ===
 +
 +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 
 +
 +
 +=== LVM-Volumen anlegen ===
 +
 +[[https://www.thomas-krenn.com/de/wiki/LVM_vergr%C3%B6%C3%9Fern]]
 +
 +das physikalische Volumen hat noch 500GB freien Platz:
 +  > lsblk
 +  NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 +  ...
 +  vdb                   252:16   0 1000G  0 disk 
 +  └─vdb1                252:17    500G  0 part 
 +    └─vgsdata-vol--data 253:0    0  500G  0 lvm  
 +
 +Partition auf 100% der Plattengröße vergrößern:
 +  > parted /dev/vdb
 +  (parted) p
 +  (parted) unit %
 +  (parted) mkpart primary 0% 100%
 +  (parted) p
 +  ...
 +  Number  Start  End    Size   File system  Name     Flags
 +        0,00%  50,0%  50,0%               primary  lvm
 +  
 +  (parted) resizepart 1 100%
 +  
 +  (parted) p
 +  ...
 +  Number  Start  End   Size  File system  Name     Flags
 +        0,00%  100%  100%               primary  lvm
 +
 +  > lsblk
 +  NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 +  vdb                   252:16   0 1000G  0 disk 
 +  └─vdb1                252:17   0 1000G  0 part 
 +    └─vgsdata-vol--data 253:0    0  500G  0 lvm  
 +
 +Volumengruppe auf 100% vergrößern:
 +  > vgs
 +    VG         #PV #LV #SN Attr   VSize    VFree
 +    ...
 +    vgsdata      1     0 wz--n- <500,00g    0
 +  
 +  > lvextend -l +100%FREE /dev/mapper/vgsdata-vol--data
 +  
 +  > vgs
 +    VG         #PV #LV #SN Attr   VSize     VFree
 +    ...
 +    vgsdata      1     0 wz--n- <1000,00g    0
 +
 +Dateisystem auf das LVM-Volumen schreiben:
 +  > resize2fs /dev/mapper/vgsdata-vol--data
 +
 +
 +===== 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                 0 wz--n- 1016,75g 426,75g
 +    computer90-vg    1     0 wz--n-  499,74g 154,52g
 +    system               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
 +