Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
lpi1:lvm [2019/07/02 15:47] ingo_wichmann |
lpi1:lvm [2025/02/04 16:31] (aktuell) |
||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
{{ :admin_grundlagen:lvm.png?200 |}} | {{ :admin_grundlagen:lvm.png?200 |}} | ||
====== LVM einrichten ====== | ====== LVM einrichten ====== | ||
- | Pakete installieren ( Debian ): | + | ===== Pakete installieren ====== |
+ | Debian: | ||
apt install lvm2 parted | apt install lvm2 parted | ||
- | Boot-Initialisierung einrichten: ( SuSE ) | + | openSuSE: |
- | /etc/init.d/boot.lvm start | + | zypper install lvm |
- | chkconfig boot.lvm on | + | |
- | LVM-Partition anlegen: | + | ===== Partitionierung ===== |
+ | Partition mit Typ LVM anlegen: | ||
parted /dev/sda print | parted /dev/sda print | ||
parted /dev/sda set 2 lvm on | parted /dev/sda set 2 lvm on | ||
Zeile 32: | Zeile 33: | ||
====== LV anlegen ====== | ====== LV anlegen ====== | ||
- | erstes Physical Volume anlegen: | + | LVM-Blockdevice zum Physical Volume machen: |
pvcreate /dev/sda2 | pvcreate /dev/sda2 | ||
- | Bestehende Physical Volumes anzeigen: | + | Bestehende Physical Volumes anzeigen: (( oder ausführlicher mit |
+ | pvdisplay | ||
+ | )) | ||
pvs | pvs | ||
- | Volume Group anlegen ( bestehend aus den zwei physical volumes ): | + | Volume Group mit Namen ''vg_system'' anlegen: |
(( ''-'' ( Minus ) in VG und LV Namen besser vermeiden )) | (( ''-'' ( Minus ) in VG und LV Namen besser vermeiden )) | ||
- | ''vg_system'' ist hier der Name der VolumeGroup | ||
vgcreate vg_system /dev/sda2 | vgcreate vg_system /dev/sda2 | ||
- | Volume Group aktivieren: | + | Volume Group aktivieren: (optional) |
vgchange -a y vg_system | vgchange -a y vg_system | ||
- | Bestehende Volume Groups anzeigen: | + | Bestehende Volume Groups anzeigen: (( oder ausführlicher mit |
+ | vgdisplay | ||
+ | )) | ||
vgs | vgs | ||
- | Logical Volume anlegen: ''lv_test'' ist hier der Name des LogicalVolume | + | Logical Volume mit Namen ''lv_test'' anlegen: |
lvcreate --size 5G --name /dev/vg_system/lv_test | lvcreate --size 5G --name /dev/vg_system/lv_test | ||
- | Bestehende Logical Volumes anzeigen: | + | Bestehende Logical Volumes anzeigen: (( oder ausführlicher mit |
+ | lvdisplay | ||
+ | )) | ||
lvs | lvs | ||
- | Formatieren ( hier mit ext4-FilesSystem ): | + | Formatieren ( hier mit ext4-Dateisystem ): |
mkfs.ext4 /dev/vg_system/lv_test | mkfs.ext4 /dev/vg_system/lv_test | ||
=== Testen === | === Testen === | ||
- | Mount-Point erstellen: | + | Mountpoint erstellen: |
mkdir /mnt/lv_test | mkdir /mnt/lv_test | ||
- | logical volume an Mount-Point in Dateisystem einhängen: | + | Logical Volume am Mountpoint einhängen: |
mount /dev/vg_system/lv_test /mnt/lv_test | mount /dev/vg_system/lv_test /mnt/lv_test | ||
- | Testweise /usr/bin-Verzeichnis kopieren: | + | Testweise Daten aus ''/usr/bin''-Verzeichnis kopieren: |
cp -a /usr/bin/. /mnt/lv_test | cp -a /usr/bin/. /mnt/lv_test | ||
+ | df -h /mnt/lv_test | ||
- | ====== LV vergrößern / verkleinern ====== | + | ====== 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. | 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. | ||
- | |||
- | ===== Volume Group um PV vergrößern ===== | ||
- | nur falls auf Volume Group nicht mehr genug Platz | ||
- | vgextend <Name Volume group> <Name physical volume> | ||
- | vgextend vg_system /dev/sda5 | ||
===== Logical Volume & Dateisystem vergrößern ===== | ===== Logical Volume & Dateisystem vergrößern ===== | ||
- | lvresize --size +1g --resizefs /dev/vg_system/lv_test | + | ==== Volume und Dateisystem in einem Schritt ==== |
- | oder | + | (geht nicht bei btrfs) |
+ | lvresize --size +2g --resizefs /dev/vg_system/lv_test | ||
+ | df -h /mnt/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 | lvextend -L +2g /dev/vg_system/lv_test | ||
- | Dateisystem vergrößern: | + | === Dateisystem vergrößern === |
- | * ext3/4 | + | == ext3/4 == |
resize2fs /dev/vg_system/lv_test | resize2fs /dev/vg_system/lv_test | ||
- | * xfs | + | == xfs == |
+ | ((Volume muss nach ''/mnt/lv_test'' gemountet sein)) | ||
xfs_growfs /mnt/lv_test | xfs_growfs /mnt/lv_test | ||
- | ====== Snapshot erstellen ====== | + | == 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 -caf lv_test.tar.zst 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 | ||
+ | )) | ||
+ | ext4-Dateisystem und LV verkleinern: | ||
+ | lvreduce --size 3G --resizefs /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: | (( Falls das Kernel Modul dm-snapshot noch nicht geladen ist: | ||
modprobe dm-snapshot | modprobe dm-snapshot | ||
)) | )) | ||
- | lvcreate --snapshot --size 100M --name lv_snapshot1 /dev/vg_system/lv_test | + | ===== Snapshot erstellen & löschen ===== |
- | mkdir /mnt/snapshot1 | + | ==== Snapshot erstellen ==== |
- | mount -o ro /dev/vg_system/lv_snapshot1 /mnt/snapshot1 | + | |
+ | lvcreate --snapshot --extents 10%ORIGIN --name lv_snapshot1 /dev/vg_system/lv_test | ||
+ | mkdir /mnt/snapshot1 | ||
+ | mount -o ro,noatime /dev/vg_system/lv_snapshot1 /mnt/snapshot1 | ||
(( bei XFS | (( bei XFS | ||
- | mount -o ro,nouuid /dev/vg_system/lv_snapshot /mnt/snapshot1 | + | 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) | oder (falls es ohne ''norecovery'' nicht geht) | ||
- | mount -o ro,nouuid,norecovery /dev/vg_system/lv_snapshot /mnt/snapshot1 | + | mount -o ro,noatime,nouuid,norecovery /dev/vg_system/lv_snapshot /mnt/snapshot1 |
)) | )) | ||
- | (( <del>Vorsicht bei XFS, das Snapshot wird nicht lesbar sein. Generell eine gute Idee, das Volume vorher read-only zu mounten</del> Ich glaube das stimmt nicht mehr. Siehe ''man fsfreeze''. )) | + | -> jetzt könnte man eine Kopie von ''/mnt/snapshot1'' auf einen anderen Datenträger ziehen |
- | == Snapshot entfernen == | + | ==== Snapshot entfernen ==== |
- | wie jedes lv | + | umount /mnt/snapshot1 |
lvremove /dev/vg_system/lv_snapshot1 | lvremove /dev/vg_system/lv_snapshot1 | ||
+ | |||
+ | ===== Snapshot erstellen & wiederherstellen ===== | ||
+ | ++++ Snapshot erstellen & wiederherstellen | | ||
+ | ==== Snapshot erstellen ==== | ||
+ | lvcreate --snapshot --extents 10%ORIGIN --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 ====== | ====== Physical Volume entfernen ====== | ||
zweites Physical Volume anlegen: | zweites Physical Volume anlegen: | ||
Zeile 117: | Zeile 175: | ||
vgreduce vg_system /dev/sda2 | vgreduce vg_system /dev/sda2 | ||
pvremove /dev/sda2 | pvremove /dev/sda2 | ||
- | ====== Hinweise ====== | + | wipefs -af /dev/sda2 |
+ | ====== Logical Volume spiegeln (RAID 1) ====== | ||
+ | ++++ Logical Volume spiegeln (RAID 1) | | ||
+ | zweites Physical Volume anlegen: | ||
+ | pvcreate /dev/sda2 | ||
+ | vgextend vg_system /dev/sda2 | ||
- | Falls man vergessen hat das LVM in die Fstab einzutragen, sind diese nach einem Neustart verschwunden. | + | Logical Volume zu RAID 1 konvertieren: |
- | lvdisplay | + | lvconvert --type raid1 /dev/vg_system/lv_test |
- | listet die LVMs dann als "LV Status NOT available" auf. | + | journalctl -kf |
+ | (warten bis "recovery done" erscheint) | ||
- | Lösung: Vgs von Hand aktivieren: | + | ((Unter CentOS 8 testen: |
- | + | lvconvert --raidintegrity y /dev/vg_system/lv_test | |
- | lvchange -a y vg_system | + | blkdiscard /dev/sda6 |
- | + | )) | |
- | Es kann praktisch sein, die //extent size// zu ändern, z.B. um sie passend für ein RAID-stripe set zu machen | + | ++++ |
- | + | ====== Deduplizierung ====== | |
- | vgchange -s 1m | + | ++++ Deduplizierung | |
- | vgs -v | + | 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/ | |
- | ====== Links ====== | + | * RedHat Doku |
- | * http://tldp.org/HOWTO/LVM-HOWTO | + | |
- | * http://www.linux-magazin.de/heft_abo/ausgaben/2005/10/ueber_alle_fallen | + | |
- | * https://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/Cluster_Logical_Volume_Manager/index.html | + | |
- | * http://www.novell.com/documentation/sles10/sles_admin/data/cha_advdisk.html | + | |
+ | ++++ |