====== Aufbau eines logical volumes (LV) ====== Ein LV besteht aus mehreren Ebenen. Die unterste Ebene bilden die sogenannten **physical volumes** ( PV ).\\ Mehrere PVs kann man nun zusammenfassen zu einer logischen Einheit, der sogenannten **volume group** ( VG ).\\ Auf der VG kann man nun **logical volumes** ( LV ) erzeugen, die eine beliebige Größe haben können.\\ In der Summe können die LVs die Größe der VG natürlich nicht überschreiten. {{ :admin_grundlagen:lvm.png?200 |}} ====== LVM einrichten ====== ===== Pakete installieren ====== Debian: apt install lvm2 parted openSuSE: zypper install lvm ===== Partitionierung ===== LVM-Partition anlegen: parted /dev/sda print parted /dev/sda set 2 lvm on parted /dev/sda set 3 lvm on Alte Metadaten löschen: wipefs -af /dev/sda2 wipefs -af /dev/sda3 Partitionen anzeigen: fdisk -l | grep -i lvm in der Ausgabe sollten 2 LVM-Partitionen erscheinen: /dev/sda2 30212096 59572223 29360128 14G Linux LVM /dev/sda3 59572224 90114190 30541967 14,6G Linux LVM ====== LV anlegen ====== erstes Physical Volume anlegen: pvcreate /dev/sda2 Bestehende Physical Volumes anzeigen: pvs Volume Group mit Namen ''vg_system'' anlegen: (( ''-'' ( Minus ) in VG und LV Namen besser vermeiden )) vgcreate vg_system /dev/sda2 Volume Group aktivieren: (optional) vgchange -a y vg_system Bestehende Volume Groups anzeigen: vgs Logical Volume mit Namen ''lv_test'' anlegen: lvcreate --size 5G --name /dev/vg_system/lv_test Bestehende Logical Volumes anzeigen: lvs Formatieren ( hier mit ext4-Dateisystem ): mkfs.ext4 /dev/vg_system/lv_test === Testen === Mountpoint erstellen: mkdir /mnt/lv_test Logical Volume am Mountpoint einhängen: mount /dev/vg_system/lv_test /mnt/lv_test Testweise Daten aus ''/usr/bin''-Verzeichnis kopieren: cp -a /usr/bin/. /mnt/lv_test ====== LV vergrößern ====== Der Vorteil eines LV ist, daß es zur Laufzeit vergrößert werden kann. Ein LV kann auch verkleinert werden, dass geht aber nur bei ext4 und auch da nur nach umount. ===== Logical Volume & Dateisystem vergrößern ===== ==== Volume und Dateisystem in einem Schritt ==== (geht nicht bei btrfs) lvresize --size +2g --resizefs /dev/vg_system/lv_test ==== Volume und Dateisystem in zwei Schritten ==== ++++ Volume und Dateisystem in zwei Schritten | === LV vergrößern === lvextend -L +2g /dev/vg_system/lv_test === Dateisystem vergrößern === == ext3/4 == resize2fs /dev/vg_system/lv_test == xfs == ((Volume muss nach ''/mnt/lv_test'' gemountet sein)) xfs_growfs /mnt/lv_test == btrfs == ((Volume muss nach ''/mnt/lv_test'' gemountet sein)) btrfs filesystem resize max /mnt/lv_test ++++ ====== LV verkleinern ====== ++++ LV verkleinern | geht nur mit ext2/3/4 Dateisystem cd /mnt df -hT . lv_test Backup erstellen: tar -cf lv_test.tar.zstd --use-comp zstd lv_test/ ext4-Dateisystem aushängen & prüfen: umount /mnt/lv_test fsck.ext4 -f /dev/mapper/vg_system-lv_test ext4-Dateisystem verkleinern: resize2fs /dev/mapper/vg_system-lv_test 3G LV verkleinern: lvreduce --size 3G /dev/mapper/vg_system-lv_test Dateisystem wieder einhängen: mount /dev/mapper/vg_system-lv_test /mnt/lv_test Wenn die Daten ok sind, Backup löschen: rm lv_test.tar.zstd ++++ ====== Snapshots ====== (( Falls das Kernel Modul dm-snapshot noch nicht geladen ist: modprobe dm-snapshot )) ===== Snapshot erstellen & löschen ===== ==== Snapshot erstellen ==== lvcreate --snapshot --size 200M --name lv_snapshot1 /dev/vg_system/lv_test mkdir /mnt/snapshot1 mount -o ro,noatime /dev/vg_system/lv_snapshot1 /mnt/snapshot1 (( bei XFS UUID vor dem Mounten anpassen: (verändert den Snapshot) uuid=$(uuid) xfs_admin -U "$uuid" /dev/vgsystem/lvtest1 oder Mount-Option ''nouuid'' (ohne Änderung am Snapshot) mount -o ro,noatime,nouuid /dev/vg_system/lv_snapshot /mnt/snapshot1 oder (falls es ohne ''norecovery'' nicht geht) mount -o ro,noatime,nouuid,norecovery /dev/vg_system/lv_snapshot /mnt/snapshot1 )) -> jetzt könnte man eine Kopie von ''/mnt/snapshot1'' auf einen anderen Datenträger ziehen ==== Snapshot entfernen ==== umount /mnt/snapshot1 lvremove /dev/vg_system/lv_snapshot1 ===== Snapshot erstellen & wiederherstellen ===== ++++ Snapshot erstellen & wiederherstellen | ==== Snapshot erstellen ==== lvcreate --snapshot --size 200M --name lv_snapshot2 /dev/vg_system/lv_test ==== Daten im Original LV ändern/löschen ==== rm -rf /mnt/lv_test/s* ==== Zustand aus Snapshot wiederherstellen ==== lvconvert --mergesnapshot /dev/vg_system/lv_snapshot2 lvs lvdisplay /dev/vg_system/lv_test ls /mnt/lv_test/s* Dateisystem aushängen: umount /mnt/lv_test LV deaktivieren & wieder aktivieren: lvchange -an /dev/vg_system/lv_test lvchange -ay /dev/vg_system/lv_test Dateisystem wieder einhängen: mount /dev/vg_system/lv_test /mnt/lv_test Prüfen, ob Dateien wieder da sind: ls /mnt/lv_test/s* ++++ ====== Physical Volume entfernen ====== zweites Physical Volume anlegen: pvcreate /dev/sda3 vgextend vg_system /dev/sda3 pvmove /dev/sda2 vgreduce vg_system /dev/sda2 pvremove /dev/sda2 ====== Logical Volume spiegeln (RAID 1) ====== ++++ Logical Volume spiegeln (RAID 1) | zweites Physical Volume anlegen: pvcreate /dev/sda2 vgextend vg_system /dev/sda2 Logical Volume zu RAID 1 konvertieren: lvconvert --type raid1 /dev/vg_system/lv_test journalctl -kf (warten bis "recovery done" erscheint) ((Unter CentOS 8 testen: lvconvert --raidintegrity y /dev/vg_system/lv_test blkdiscard /dev/sda6 )) ++++ ====== Deduplizierung ====== ++++ Deduplizierung | Debian: [[https://github.com/dm-vdo/kvdo/issues/53|Kernel Modul ab Kernel 6.9 mainline und nicht in Debian stable]] * https://blog.defaultroutes.de/talks/sys4-storage/ * RedHat Doku ++++