lvm
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| lvm [2025-08-25 11:44:51] – [LVM-Beispiel] manfred | lvm [2025-08-25 11:53:07] (aktuell) – [LV löschen] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Logical Volume Manager (LVM) ====== | ||
| + | |||
| + | # aptitude -y install lvm2 | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | so kann man ein LVM-Volumen von einem Image mounten: | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | === 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 # | ||
| + | |||
| + | umount /data | ||
| + | growpart /dev/vdb 1 | ||
| + | vgextend vgsdata | ||
| + | pvresize /dev/vdb1 | ||
| + | vgdisplay vgsdata | ||
| + | lvresize -l +100%FREE vgsdata/ | ||
| + | e2fsck -f / | ||
| + | resize2fs / | ||
| + | mount /data | ||
| + | df -h /data | ||
| + | |||
| + | |||
| + | ===== unterstützte Dateisysteme ===== | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | LVM-Implementation (1998 von Heinz Mauelshagen geschrieben), | ||
| + | |||
| + | Die Dateisysteme [[:: | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | ^Dateisysteme und ihre Möglichkeiten ^^^^^ | ||
| + | ^Dateisystem ^Online ^^Offline ^^ | ||
| + | ^ ^Vergrößern ^Verkleinern ^Vergrößern ^Verkleinern ^ | ||
| + | | ext2/ | ||
| + | | 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:// | ||
| + | |||
| + | 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 "/ | ||
| + | |||
| + | Dann muss man eine //logische Volumengruppe// | ||
| + | |||
| + | # vgcreate home /dev/sda3 | ||
| + | Volume group " | ||
| + | |||
| + | Jetzt kann man sich schon mal alle Informationen zur //logische Volumengruppe// | ||
| + | |||
| + | # 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 " | ||
| + | |||
| + | 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 " | ||
| + | Logical volume " | ||
| + | |||
| + | |||
| + | **Ein //logisches Volumen// (fritz) mit einer Größe von 1GB kann man wie folgt anlegen:** | ||
| + | |||
| + | # lvcreate -L 1G -n fritz home | ||
| + | Logical volume " | ||
| + | |||
| + | oder | ||
| + | # lvcreate -L 100%FREE -n fritz home | ||
| + | Logical volume " | ||
| + | |||
| + | 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 / | ||
| + | # mount / | ||
| + | |||
| + | Man kann das ganze auch mit //LABEL// machen: | ||
| + | |||
| + | # mkfs -t ext4 -L fritz / | ||
| + | # mount LABEL=fritz /home/fritz | ||
| + | |||
| + | Man kann an Stelle von " | ||
| + | |||
| + | # mkfs -t ext4 -L /home/fritz / | ||
| + | # mount LABEL=/ | ||
| + | |||
| + | In der /// | ||
| + | |||
| + | LABEL=/ | ||
| + | |||
| + | Soll das Laufwerk sehr //sicher// (dafür aber langsamer) sein, dann noch das hier: | ||
| + | |||
| + | # tune2fs -o journal_data / | ||
| + | |||
| + | 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 / | ||
| + | | ||
| + | # vi /etc/fstab | ||
| + | LABEL=swap | ||
| + | |||
| + | einen **Snapshot** erstellen: | ||
| + | # lvcreate -L10G -s -n der_schnappschuss / | ||
| + | |||
| + | |||
| + | ==== 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 / | ||
| + | # e2fsck -yFf / | ||
| + | # resize2fs -p / | ||
| + | # mount / | ||
| + | |||
| + | |||
| + | === jfs === | ||
| + | |||
| + | JFS kann __nur_ im eingehängten Zustand vergrößert werden! | ||
| + | |||
| + | # lvresize -L 30G data/mysql | ||
| + | # mount -o remount, | ||
| + | |||
| + | |||
| + | ==== 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, | ||
| + | |||
| + | 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/ | ||
| + | > lsblk | ||
| + | |||
| + | VG (Volumen-Gruppe) anzeigen | ||
| + | > vgdisplay | ||
| + | > vgdisplay vgname | ||
| + | |||
| + | LV (logisches Volumen) aus einer Volumen-Gruppe anzeigen | ||
| + | > ls -lha / | ||
| + | |||
| + | LV (logisches Volumen) aus einer Volumen-Gruppe löschen | ||
| + | > lvremove / | ||
| + | |||
| + | Die Volumen-Gruppe löschen | ||
| + | > vgremove vgname | ||
| + | |||
| + | |||
| + | ==== LVM-Beispiel ==== | ||
| + | |||
| + | |||
| + | === LVM-Volumen anlegen === | ||
| + | |||
| + | Das komplette Laufwerk "''/ | ||
| + | |||
| + | 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 / | ||
| + | > echo " | ||
| + | |||
| + | |||
| + | === LVM-Volumen anlegen === | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | das physikalische Volumen hat noch 500GB freien Platz: | ||
| + | > lsblk | ||
| + | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | ||
| + | ... | ||
| + | vdb | ||
| + | └─vdb1 | ||
| + | └─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 | ||
| + | | ||
| + | | ||
| + | (parted) resizepart 1 100% | ||
| + | | ||
| + | (parted) p | ||
| + | ... | ||
| + | Number | ||
| + | | ||
| + | |||
| + | > lsblk | ||
| + | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | ||
| + | vdb | ||
| + | └─vdb1 | ||
| + | └─vgsdata-vol--data 253:0 0 500G 0 lvm | ||
| + | |||
| + | Volumengruppe auf 100% vergrößern: | ||
| + | > vgs | ||
| + | VG #PV #LV #SN Attr | ||
| + | ... | ||
| + | vgsdata | ||
| + | | ||
| + | > lvextend -l +100%FREE / | ||
| + | | ||
| + | > vgs | ||
| + | VG #PV #LV #SN Attr | ||
| + | ... | ||
| + | vgsdata | ||
| + | |||
| + | Dateisystem auf das LVM-Volumen schreiben: | ||
| + | > resize2fs / | ||
| + | |||
| + | |||
| + | ===== Parse error at byte 3 ===== | ||
| + | |||
| + | wenn dieser Fehler beim Aufruf eines beliebigen LVM-Befehl' | ||
| + | # 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 / | ||
| + | |||
| + | |||
| + | ===== Eine LVM-Partition von einem mit dd erstellten Image mounten ===== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | hier wird die Partition mit der Loop-Methode gemountet: | ||
| + | # losetup --all | ||
| + | |||
| + | erstmal wird das Image überprüft: | ||
| + | # file backup-cloud.img | ||
| + | backup-cloud.img: | ||
| + | | ||
| + | # fdisk -l backup-cloud.img | ||
| + | | ||
| + | Disk backup-cloud.img: | ||
| + | Units = sectors of 1 * 512 = 512 bytes | ||
| + | Sector size (logical/ | ||
| + | I/O size (minimum/ | ||
| + | |||
| + | mounten | ||
| + | # losetup /dev/loop0 backup-cloud.img | ||
| + | # pvs | ||
| + | PV | ||
| + | /dev/loop0 vg lvm2 a-- 9,51g 0 | ||
| + | | ||
| + | # vgchange -a y vg | ||
| + | 2 logical volume(s) in volume group " | ||
| + | | ||
| + | # mount -o ro / | ||
| + | |||
| + | umount | ||
| + | # umount /mnt/old/ | ||
| + | # vgchange -a n vg | ||
| + | 0 logical volume(s) in volume group " | ||
| + | | ||
| + | # losetup -d /dev/loop0 | ||
| + | # losetup --all | ||
| + | |||
| + | |||
| + | ===== Partitionen auf einem LVM-Volumen mounten ===== | ||
| + | |||
| + | root@computer01: | ||
| + | PV | ||
| + | / | ||
| + | / | ||
| + | |||
| + | root@computer01: | ||
| + | lrwxrwxrwx 1 root root 14 Mai 31 2019 / | ||
| + | | ||
| + | root@computer01: | ||
| + | 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 -> ../ | ||
| + | | ||
| + | root@computer01: | ||
| + | Medium /dev/loop0: 500 GiB, 536854491136 Bytes, 1048543928 Sektoren | ||
| + | Einheiten: sectors von 1 * 512 = 512 Bytes | ||
| + | Sektorengröße (logisch/ | ||
| + | I/O Größe (minimal/ | ||
| + | Typ der Medienbezeichnung: | ||
| + | Medienkennung: | ||
| + | | ||
| + | Gerät | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | root@computer01: | ||
| + | | ||
| + | root@computer01: | ||
| + | /dev/loop0: [0006]:502 (/ | ||
| + | | ||
| + | root@computer01: | ||
| + | Medium /dev/loop0: 499,8 GiB, 536597590016 Bytes, 1048042168 Sektoren | ||
| + | Einheiten: sectors von 1 * 512 = 512 Bytes | ||
| + | Sektorengröße (logisch/ | ||
| + | I/O Größe (minimal/ | ||
| + | root@computer01: | ||
| + | VG #PV #LV #SN Attr | ||
| + | data | ||
| + | computer90-vg | ||
| + | system | ||
| + | | ||
| + | root@computer01: | ||
| + | LV VG | ||
| + | computer90 | ||
| + | pcsyslog02 | ||
| + | syslog01 | ||
| + | mysql | ||
| + | root computer90-vg | ||
| + | swap computer90-vg | ||
| + | swap system | ||
| + | var | ||
| + | |||
| + | root@computer01: | ||
| + | ... | ||
| + | root@computer01: | ||
| + | |||
| + | root@computer01: | ||
| + | root@computer01: | ||
| + | root@computer01: | ||
| + | /dev/loop0 | ||
| + | |||
