Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung | |||
admin_grundlagen:lvm [2019/07/02 15:49] |
admin_grundlagen:lvm [2024/03/19 10:37] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== 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: | ||
+ | <file> | ||
+ | /dev/sda2 30212096 59572223 29360128 14G Linux LVM | ||
+ | /dev/sda3 59572224 90114190 30541967 14,6G Linux LVM | ||
+ | </file> | ||
+ | |||
+ | ====== 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 | ||
+ | |||
+ | ++++ |