Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:lvm [2011/03/16 01:54] – [Verwaltungstools] st | linux:lvm [2020/01/15 11:37] (aktuell) – st | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== LVM ====== | ||
+ | Der [[wpde> | ||
+ | * Festplatten (Physical Volume, PV) werden zu | ||
+ | * einem Pool (//Volume Group//, VG) zusammengefasst, | ||
+ | * " | ||
+ | |||
+ | |||
+ | ===== Vorteile von LVM ===== | ||
+ | |||
+ | Es lassen sich im laufenden Betrieb Partitionen | ||
+ | * anlegen, | ||
+ | * vergrößern | ||
+ | * und verkleinern. | ||
+ | * zu einer einzigen (großen) Partition zusammenfassen. | ||
+ | * einen so genannten Snapshot eines Dateisystems erstellen (konsistente Zustandssicherung des Dateisystems z.B. für ein Backup) | ||
+ | * damit auch RAID-0 realisieren. | ||
+ | |||
+ | Kombinationen mit anderen Möglichkeiten, | ||
+ | |||
+ | |||
+ | ===== Verwaltungstools ===== | ||
+ | |||
+ | ^ Befehl ^ Beschreibung ^ | ||
+ | ^ Befehle für physical volumes ^^ | ||
+ | | pvcreate | Erzeugen eines PV | | ||
+ | | pvdisplay | Anzeigen der Attribute von PVs | | ||
+ | | pvscan | Suchen nach vorhandenen PVs | | ||
+ | | pvchange | Ändern von Attributen von PVs | | ||
+ | | pvresize| PV Vergrößern | | ||
+ | ^ Befehle für volume groups ^^ | ||
+ | | vgcreate | Erzeugen einer neuen VG | | ||
+ | | vgremove | Löschen einer leeren VG ohne LVs | | ||
+ | | vgextend | Erweitern einer VG um weitere PVs | | ||
+ | | vgreduce | Verkleinern einer VG um leere PVs | | ||
+ | | vgdisplay | Anzeigen von Attributen von VGs | | ||
+ | | vgrename | Umbenennen einer VG | | ||
+ | | vgscan | Suchen nach vorhandenen VGs | | ||
+ | | vgchange | Ändern von Attributen und Aktivieren/ | ||
+ | ^ Befehle für logical volumes ^^ | ||
+ | | lvcreate | Erzeugen eines LV | | ||
+ | | lvremove | Löschen von inaktiven LVs | | ||
+ | | lvextend | Vergrößern eines LV | | ||
+ | | lvreduce | Verkleinern eines LV | | ||
+ | | lvdisplay | Anzeigen von Attributen von LVs | | ||
+ | | lvrename | Umbenennen eines LV | | ||
+ | | lvscan | Suchen nach allen vorhandenen LVs | | ||
+ | | lvchange | Ändern von Attributen eines LV | | ||
+ | |||
+ | |||
+ | |||
+ | **Erweiterte Befehle** | ||
+ | |||
+ | ^ Befehl ^ Beschreibung ^ | ||
+ | | pvdata | Debug-Anzeigen der Attribute von PVs | | ||
+ | | pvmove | LV-Daten online verlagern | | ||
+ | | vgcfgbackup | Metadatensicherung von VGs durchführen | | ||
+ | | vgcfgrestore | Metadatenrestauration auf PVs einer VG durchführen | | ||
+ | | vgck | Überprüfung der Metadatenkonsistenz von VGs | | ||
+ | | vgexport | VG abmelden, um deren PVs auf ein anderes System zu verlagern | | ||
+ | | vgimport | Verlagerte VG am Zielsystem bekannt machen | | ||
+ | | vgmerge | Zwei VGs zu einer verbinden | | ||
+ | | vgmknodes | Neuanlegen der Gerätedateien von VGs | | ||
+ | | vgsplit | Eine VG in zwei aufteilen | | ||
+ | | e2fsadm | LV und Ext2-Dateisystem in der Größe ändern | | ||
+ | | lvmchange | LVM zurücksetzen | | ||
+ | | lvmsadc | Statistikdaten sammeln | | ||
+ | | lvmsar | Gesammelte Statistikdaten anzeigen | | ||
+ | | lvmcreate_initrd | Initial-RAM-Disk zum Booten mit Root-Dateisystem auf LV erzeugen | | ||
+ | | lvmdiskscan | Nach als PV unterstützten Geräten suchen | | ||
+ | |||
+ | Quelle: [[http:// | ||
+ | ==== evms ==== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ==== ivman ==== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | ===== Links ===== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | ===== Bedienung ===== | ||
+ | |||
+ | |||
+ | ==== Unterstützung im System ==== | ||
+ | |||
+ | Vorraussetzungen | ||
+ | - es muss das Paket lvm2 installiert sein (alternativ ist evms möglich) | ||
+ | - der devicemapper (dm_mod) muss geladen sein; siehe [[kernel# | ||
+ | |||
+ | ==== LVM aktivieren ==== | ||
+ | |||
+ | |||
+ | Falls ein Gerät beim booten nicht aktiv war sind auch das darauf enthaltene LVM-Geräte nicht automatisch erkannt worden. | ||
+ | <code bash> | ||
+ | pvscan -v | ||
+ | vgscan -v | ||
+ | vgchange -ay</ | ||
+ | |||
+ | Ohne den letzten Befehl verbleibt das logical volume im Status " | ||
+ | |||
+ | |||
+ | ==== Volumegroup inaktiv schalten ==== | ||
+ | |||
+ | Der folgende Befehle schaltet eine volume-group auf inaktiv (es wird nichts gelöscht) | ||
+ | <code bash> | ||
+ | |||
+ | |||
+ | ==== PV löschen | ||
+ | |||
+ | <code bash> | ||
+ | (ebenso lvremove, vgremove) | ||
+ | ==== LVM neu einrichten ==== | ||
+ | |||
+ | === PV erstellen === | ||
+ | |||
+ | - eine Partition mit der Partitions-ID 8e (für LVM) erstellen, siehe partitionierung | ||
+ | - vgscan -v | ||
+ | - pvcreate /dev/PART | ||
+ | |||
+ | |||
+ | === VG erstellen === | ||
+ | |||
+ | vgcreate NAME_DER_VG / | ||
+ | |||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | vgcreate vg_daten /dev/sda1 | ||
+ | |||
+ | |||
+ | === LV erstellen === | ||
+ | |||
+ | lvcreate -L GRÖSSE -n NAME_DER_NEUEN_LV NAME_DER_VG | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | lvcreate -L 52G -n lv_root vg_daten | ||
+ | |||
+ | ==== LV vergrößern und verkleinern ==== | ||
+ | |||
+ | Wie schon gesagt lässt sich mit LVM eine Partition nachträglich vergrößern und auch verkleinern. Möchte man das zuvor angelegte Logical Volume mit der Größe von 1000 Megabyte **vergrößern**, | ||
+ | |||
+ | lvextend -L 1300M / | ||
+ | |||
+ | Alternativ den gesamten freien Speicher hinzufügen: | ||
+ | lvextend -l +100%FREE / | ||
+ | |||
+ | Jetzt wurde erst die virtuelle Partition, also das Logical Volume vergrößert (T als Abkürzung für Terrabyte wäre auch möglich). Zusätzlich muss man nun auch das darin enthaltene Dateisystem vergrößern. Zuvor muss es allerdings mit umount aus dem Verzeichnisbaum entfernt und noch mit e2fsck auf Fehler überprüft werden. | ||
+ | |||
+ | umount /lvm-test | ||
+ | e2fsck -f / | ||
+ | resize2fs / | ||
+ | |||
+ | |||
+ | Umgekehrt können Sie mit resize2fs das Dateisystem auch **verkleinern**, | ||
+ | |||
+ | :!: Achtung: Erst das Dateisystem und danach das Logical Volume mit lvreduce verkleinern! Würden Sie erst das Logical Volume mit lvreduce verkleinern, | ||
+ | |||
+ | umount /lvm-test | ||
+ | e2fsck -f / | ||
+ | resize2fs / | ||
+ | lvreduce -L1000M / | ||
+ | |||
+ | :!: Alternativ wäre eine relative Veränderung der Größe um einen bestimmten Speicherplatz möglich, dabei muss man aber genau rechnen (das nicht zu viel weggenommen wird), da resize2fs die Größe immer absolut haben möchte. | ||
+ | |||
+ | lvreduce -L-300M / | ||
+ | |||
+ | Um komfortabler zu arbeiten, gibt es das Kommando e2fsadm, das alle vorher beschriebenen Schritte wie lvextend, lvreduce, e2fsck und resize2fs zusammen ausführt. Wie der Name schon andeutet, funktioniert das Programm nur bei dem Dateisystem ext2. Falls das Programm nicht in Ihrer Distribution enthalten ist, können Sie es unter http:// | ||
+ | |||
+ | umount /lvm-test | ||
+ | e2fsadm -L 1300M / | ||
+ | |||
+ | Bei der Verkleinerung verfährt man in gleicher Weise: | ||
+ | |||
+ | umount /lvm-test | ||
+ | e2fsadm -L 1000M / | ||
+ | |||
+ | ==== PV vergrößern ==== | ||
+ | |||
+ | Auch physikalische Volume (PV) können sich verändern (z. B. Image vergrößert). | ||
+ | |||
+ | **vergrößern**: | ||
+ | - alle Logical Volumes (LV) der Volume Group (VG) unmounten, wenn Swap-Partitionen als LVs enthalten sind, diese mit swapoff deaktivieren | ||
+ | - VG für die Vergrößerung inaktiv schalten: <code bash> | ||
+ | - mit cfdisk die LVM-Partition löschen und größer (mit Typ 8e) anlegen | ||
+ | - das PV auf die neue Größe einstellen: <code bash> | ||
+ | - VG aktivieren: <code bash> | ||
+ | - wieder alles wie vorher mounten mit <code bash> | ||
+ | |||
+ | |||
+ | ==== PV aus VG entfernen ==== | ||
+ | |||
+ | Wenn eine Volume-group (VG) aus mehreren physical volumes (PV) muss früher oder später auch mal eine PV aus der VG entfernt werden. | ||
+ | |||
+ | - Damit das funktioniert müssen zuerst alle logical volumes (LV) entfernt werden die von diesem PV abhängen. Die Daten sind damit natürlich auch gelöscht:< | ||
+ | - anschließend wird das PV aus der VG abgemeldet:< | ||
+ | |||
+ | |||
+ | ==== PV zu einer VG hinzufügen ==== | ||
+ | |||
+ | Wenn eine Volume group (VG) durch eine oder mehrere physical volumes (PV) erweitert werden soll (hier im Beispiel hat die neue PV ''/ | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | ==== VG vergrößern und verkleinern ==== | ||
+ | |||
+ | Da auch der Speicherplatz der Volume Group irgendwann belegt ist und man damit kein Logical Volume mehr anlegen oder **vergrößern** kann, ist es möglich, auch eine Volume Group mit dem Befehl '' | ||
+ | |||
+ | pvcreate /dev/sdb1 | ||
+ | vgextend volg1 /dev/sdb1 | ||
+ | |||
+ | |||
+ | Möchte man eine Volume Group **verkleinern**, | ||
+ | |||
+ | vgreduce -a volg1 | ||
+ | |||
+ | alle freien Physical Volumes aus der Volume Group entfernen. Um ein bestimmtes Physical Volume zu entfernen, muss man den genauen Pfad dessen angeben. Vorher kann man, falls erwünscht, mit dem Befehl pvdisplay -v überprüfen, | ||
+ | pvdisplay -v /dev/hdb7 | ||
+ | vgreduce volg1 /dev/hdb7 | ||
+ | |||
+ | Voraussetzung ist immer, dass auf dem betreffenden Physical Volume keine Daten enthalten sind. Mit dem Kommando pvmove kann man vorher gegebenenfalls die Daten auf ein anderes Physical Volume verschieben. | ||
+ | |||
+ | |||
+ | ==== Snapshots ==== | ||
+ | |||
+ | Ein Snapshot ist eine Momentaufnahme der Daten eines Logical Volumes, das die vollständigen Daten enthält, aber seperat eingehängt werden kann. | ||
+ | Nach einer angegebenen Datenmenge von Unterschieden wird es ungültig. | ||
+ | |||
+ | === Snapshot erstellen === | ||
+ | |||
+ | |||
+ | Vorraussetzungen: | ||
+ | - lvm-System | ||
+ | - ausreichend freier Speicherplatz (extents) in der VG | ||
+ | |||
+ | Beispiel: | ||
+ | lvcreate -L 100G --snapshot -n backup / | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * ''/ | ||
+ | |||
+ | Der Snapshot kann nun wie ein normales Blockdevices benutzt werden u. a. sind **mounts** (hier schreibgeschützt) möglich: | ||
+ | |||
+ | mount -o ro / | ||
+ | |||
+ | |||
+ | Die **aktuelle Belegung** anzuzeigen (Überprüfung: | ||
+ | |||
+ | lvdisplay / | ||
+ | |||
+ | < | ||
+ | --- Logical volume --- | ||
+ | LV Name / | ||
+ | VG Name vg_data | ||
+ | LV UUID 21eCPd-qrfR-THpQ-6DCc-SxXU-pbNh-hvYKS1 | ||
+ | LV Write Access | ||
+ | LV snapshot status | ||
+ | LV Status | ||
+ | # open 1 | ||
+ | LV Size 5,86 TB | ||
+ | Current LE | ||
+ | COW-table size | ||
+ | COW-table LE 25600 | ||
+ | Allocated to snapshot | ||
+ | Snapshot chunk size 4,00 KB | ||
+ | Segments | ||
+ | Allocation | ||
+ | Read ahead sectors | ||
+ | - currently set to 256 | ||
+ | Block device | ||
+ | </ | ||
+ | |||
+ | Aktuell sind demnach 26,96% (von 100GB) schon veränderte Daten. Nachdem 100 GB veränderte Daten vorliegen, ist der Snapshot nicht mehr verfügbar. In diesem Fall wird er als " | ||
+ | |||
+ | < | ||
+ | --- Logical volume --- | ||
+ | LV Name / | ||
+ | VG Name vg_data | ||
+ | LV UUID 21eCPd-qrfR-THpQ-6DCc-SxXU-pbNh-hvYKS1 | ||
+ | LV Write Access | ||
+ | LV snapshot status | ||
+ | LV Status | ||
+ | # open 0 | ||
+ | LV Size 5,86 TB | ||
+ | Current LE | ||
+ | COW-table size | ||
+ | COW-table LE 25600 | ||
+ | Snapshot chunk size 4,00 KB | ||
+ | Segments | ||
+ | Allocation | ||
+ | Read ahead sectors | ||
+ | - currently set to 256 | ||
+ | Block device | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === snapshot löschen === | ||
+ | |||
+ | |||
+ | lvremove / | ||
+ | |||
+ | Wenn der Befehl innerhalb eines Shellscriptes ausgeführt werden soll (oder die interaktive Sicherheitsabfrage unerwünscht ist) dann muss -f angefügt werden: | ||
+ | |||
+ | lvremove -f / | ||
+ | |||
+ | |||
+ | Mit folgendem Shellscript (abspeichern z. B. als '' | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | error=0 | ||
+ | |||
+ | # change to 0 after test! | ||
+ | testmode=1 | ||
+ | |||
+ | inact_dev=`lvdisplay | grep -A 0 -B 5 ' | ||
+ | |||
+ | if [ -z $inact_dev ];then | ||
+ | if [ $testmode -eq 1 ];then | ||
+ | echo " | ||
+ | fi | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | |||
+ | for dev in " | ||
+ | if [[ -e $dev ]]; then | ||
+ | if [ $testmode -eq 1 ];then | ||
+ | echo " | ||
+ | else | ||
+ | lvremove -f $dev | ||
+ | fi | ||
+ | if [ $? -ne 0 ]; then | ||
+ | echo "could not delete $dev" | ||
+ | error=1 | ||
+ | fi | ||
+ | else | ||
+ | echo "not a valid device $dev" | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [ $error -eq 1 ]; then | ||
+ | echo "there was an error at some point." | ||
+ | exit 1 | ||
+ | else | ||
+ | exit 0 | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Beispielkonfiguration / | ||
+ | |||
+ | < | ||
+ | # mdadm.conf | ||
+ | # | ||
+ | # Please refer to mdadm.conf(5) for information about this file. | ||
+ | # | ||
+ | |||
+ | # by default, scan all partitions (/ | ||
+ | # alternatively, | ||
+ | DEVICE partitions | ||
+ | |||
+ | # auto-create devices with Debian standard permissions | ||
+ | CREATE owner=root group=disk mode=0660 auto=yes | ||
+ | |||
+ | # automatically tag new arrays as belonging to the local system | ||
+ | HOMEHOST < | ||
+ | |||
+ | # instruct the monitoring daemon where to send mail alerts | ||
+ | MAILADDR root | ||
+ | MAILFROM SERVER2 - mdadm | ||
+ | |||
+ | # mdadm --detail --scan >> / | ||
+ | ARRAY /dev/md0 metadata=1.2 name=server2: | ||
+ | </ |