orm@doc-tcpip.org | Erstellt: Januar 2012 - Letzte Modifikation: Januar 2012 |
Wenn man von AIX kommt, dann fällt einem der Linux LVM natürlich leicht. Im Kopf behalten sollte man, daß die Physical und Logical Partitions (PP und LP) hier als Extensions bezeichnet werden, also immer von PE und LE die Rede ist...
Die LVM Kommandos sind etwas eigenartig, man kann zb. die LVs nicht mit dem Namen ansprechen, die Kommandos erwarten ein Device, etwas in der Art: /dev/meine_vg/mein_lv
Weiterhin gibt es eine Reihe ungewohnter Features, man kann VGs zusammenfassen oder eine VG in zwei aufspalten - und man kann ein LV zum Backup im laufenden Betrieb als Snapshot einfrieren.
Grundlage sind die Physical Volumes, was bei Linux auch Partitions sein können. Diese legt man mit fdisk oder einem anderen Tool an bzw. stellt der Maschine Platten lokal oder im SAN zur Verfügung. Als Partition Type sollte man 83 für eine Linux Partition oder 8e für Linux LVM wählen.
Mit dem LVM kommen eine ganze Reihe Kommandos, die sich teilweise überlappen. Interessant sind hierbei die Kommandos, mit denen man Informationen abfragt. Da gibt es einen zweiten Satz an Kommandos, die alle Informationen in Zeilen ausgeben: pvs, vgs, lvs.
[root ~]# lsmod|grep dm_ dm_mirror 14101 0 dm_region_hash 12170 1 dm_mirror dm_log 10122 2 dm_mirror,dm_region_hash dm_crypt 13022 1 dm_mod 81500 24 dm_mirror,dm_log,dm_crypt
Für jede Platte bzw. Partition gibt es ein Block-Device, wie für eine Platte üblich. Hier ein Beispiel mit einer verschlüsselten Platte.
[root@mulhacen ~]# fdisk -l Disk /dev/sdb: 320.1 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x64656469 Device Boot Start End Blocks Id System /dev/sdb1 * 1 66 524288 83 Linux /dev/sdb2 66 19188 153600000 83 Linux /dev/sdb3 19188 20233 8388608 82 Linux swap / Solaris Die dazu angelegten Device-special Files: /dev brw-rw----. 1 root disk 8, 16 Dec 22 11:21 sdb brw-rw----. 1 root disk 8, 17 Dec 22 11:20 sdb1 brw-rw----. 1 root disk 8, 18 Dec 22 11:20 sdb2 brw-rw----. 1 root disk 8, 19 Dec 22 11:20 sdb3 Der LVM legt jetzt für jedes seiner LVs auch ein Device-special File an: /dev brw-rw----. 1 root disk 253, 0 Dec 22 11:20 dm-0 brw-rw----. 1 root disk 253, 1 Dec 22 11:20 dm-1 brw-rw----. 1 root disk 253, 2 Dec 22 11:20 dm-2 brw-rw----. 1 root disk 253, 3 Dec 22 11:20 dm-3 brw-rw----. 1 root disk 253, 4 Dec 22 11:20 dm-4 brw-rw----. 1 root disk 253, 5 Dec 22 11:20 dm-5 brw-rw----. 1 root disk 253, 6 Dec 22 11:20 dm-6 Auf diese Block-Devices zeigen eine Reihe Links in den Verzeichnisen /dev/mapper und /dev/rootvg. Das Letztere bildet die VG. Mit diesen Namen können die LVs jetzt angesprochen werden. /dev/mapper crw-rw----. 1 root root 10, 58 Dec 22 12:20 control lrwxrwxrwx. 1 root root 7 Dec 22 11:20 luks-be3fa632-aa6a-4ff6-b1da-fd0aa28ec614 -> ../dm-0 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 rootvg-homelv -> ../dm-2 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 rootvg-optlv -> ../dm-6 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 rootvg-rootlv -> ../dm-1 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 rootvg-tmplv -> ../dm-4 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 rootvg-userlv -> ../dm-5 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 rootvg-varlv -> ../dm-3 /dev/rootvg lrwxrwxrwx. 1 root root 7 Dec 22 11:20 homelv -> ../dm-2 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 optlv -> ../dm-6 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 rootlv -> ../dm-1 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 tmplv -> ../dm-4 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 userlv -> ../dm-5 lrwxrwxrwx. 1 root root 7 Dec 22 11:20 varlv -> ../dm-3 Die Platten werden im Verzeichnis /dev/disks über eine Reihe weiterer Links definiert. Zugriffen werden kann dabei über die ID oder die UUID, im Falle "echter" Hardware auch über den Hardware-Pfad. (Ausgabe teilweise gekürzt). /dev/disk by-id: total 0 lrwxrwxrwx. 1 root root 9 Dec 22 11:21 ata-HITACHI_HTS723232A7A364_E3834563GUKARN -> ../../sdb lrwxrwxrwx. 1 root root 10 Dec 22 11:20 ata-HITACHI_HTS723232A7A364_E3834563GUKARN-part1 -> ../../sdb1 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 dm-name-luks-be3fa632-aa6a-4ff6-b1da-fd0aa28ec614 -> ../../dm-0 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 dm-name-rootvg-rootlv -> ../../dm-1 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 dm-uuid-CRYPT-LUKS1-be3fa632aa6a4ff6b1dafd0aa28ec614-luks-be3fa632-aa6a-4ff6-b1da-fd0aa28ec614 -> ../../dm-0 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 dm-uuid-LVM-N8uWwJYYuilNYbITmVIF1aKd7Fhyu3FcF6DsW3DqpyDUX1S70Chq4t11FYBytLNk -> ../../dm-1 lrwxrwxrwx. 1 root root 9 Dec 22 11:21 scsi-SATA_HITACHI_HTS7232_E3834563GUKARN -> ../../sdb lrwxrwxrwx. 1 root root 10 Dec 22 11:20 scsi-SATA_HITACHI_HTS7232_E3834563GUKARN-part1 -> ../../sdb1 lrwxrwxrwx. 1 root root 9 Dec 22 11:21 wwn-0x5000cca61dcb9e64 -> ../../sdb lrwxrwxrwx. 1 root root 10 Dec 22 11:20 wwn-0x5000cca61dcb9e64-part1 -> ../../sdb1 ...... by-label: total 0 by-path: total 0 lrwxrwxrwx. 1 root root 9 Dec 22 11:21 pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sdb lrwxrwxrwx. 1 root root 10 Dec 22 11:20 pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sdb1 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 pci-0000:00:1f.2-scsi-0:0:0:0-part2 -> ../../sdb2 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 pci-0000:00:1f.2-scsi-0:0:0:0-part3 -> ../../sdb3 by-uuid: total 0 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 32509125-a93c-432c-8ef6-bf7572b10e01 -> ../../sdb1 lrwxrwxrwx. 1 root root 10 Dec 22 11:20 c4a7caa4-a0e1-4405-a5d9-128aa0c88fc5 -> ../../dm-1 ... [root@mulhacen ~]# pvscan PV /dev/mapper/luks-be3fa632-aa6a-4ff6-b1da-fd0aa28ec614 VG rootvg lvm2 [146.48 GiB / 69.99 GiB free] Total: 1 [146.48 GiB] / in use: 1 [146.48 GiB] / in no VG: 0 [0 ]
Anlegen eines PV:
pvcreate /dev/hdaX (Namen der Devices aud fdisk -l)
Anlegen einer VG:
vgcreate meine_vg /dev/hdaX /dev/hdaY
Eine VG online/offline nehmen:
Praktischerweise kann man mit dem Linux LVM alle vorhandenen VGs mit einem Kommando online nehmen: vgchange -a y (Offline geht die VG mit "n" - "-a" steht für "available") Oder eine bestimmte VG: vgchange -a y /dev/meine_vg
Eine VG exportieren bzw. importieren:
vgexport vgimport
Anlegen eines LV:
lvcreate -L 1G -n mein_lv meine_vg Mit dem Schalter "-m" kann man die Zahl der Kopien spezifizieren. In diesem Fall muß man zusätzlich eine Art des Mirror-Logs angeben. Mit dem Schalter "-s" kann man den Startzeitpunkt für einen "Snapshot" festlegen. Es werden dann in dem neuen LV per "Copy on Write" alle angefassten Blöcke gesichert. Man kann diese LV auf ein FS Mounten und so eine Datensicherung im laufenden Betrieb anfertigen. Der Platzbedarf entspricht der Anzahl der während der Laufzeit angefassten Blöcke, ist also deutlich kleiner als das originale LV. Nach der Sicherung wird das Snapshot-LV wieder gelöscht. lvcreate -s -L 250M -n mein_snap /dev/meine_vg/mein_lv
Anlegen eines Filesystemes im neuen LV:
mkfs -t ext4 /dev/meine_vg/mein_lv Mounten und eintragen in die /etc/fstab...
Vergrößern eines LV (FS):
lvextend -L +4G /dev/meine_vg/mein_lv Mit "+" wird das bestehende LV um diese Größe erweitert, ansonsten wird das LV auf den angegebenen Wert erweitert. Man kann auch PE (physical extensions) angeben. Zusätzlich kann man die PVs angeben, auf die die Daten kommen sollen. Das Filesystem muß man dann auch vergrößern, je nach Typ ist ein umount nötig: resize2fs /dev/rootvg/varlv (damit wird auf die Größe des LV angepasst. Man kann das FS auch kleiner machen, mit der expliziten Angabe der Größe: resize2fs /dev/rootvg/varlv 3G).
Verkleinern eines LV (FS):
Das Verkleinern von FS/LV funktioniert analog. Zuerst wird das FS verkleinert, mit resize2fs /dev/rootvg/varlv 1G (Je nach Filesystemtyp muß man das FS abhängen). Dann kann man das LV verkleinern und danach wieder mounten: lvreduce -L 1G /dev/rootvg/varlv
Neue Platten in eine VG aufnehmen:
vgextend meine_vg /dev/hdaZ /dev/hdaY /dev/hdaX (die hat man vorher mit fdisk und pvcreate angelegt)
Ein PV (Platte, Partition) aus der VG entfernen und löschen:
vgreduce pvremove
Die PE/LE eines PV auf ein anderes übertragen:
Ein PV (also eine Platte oder eine Partition) komplett auf ein anderes PV übertragen - wenn man eine VG Umziehen oder eine Platte ersetzen möchte: Dazu muß man mit pvdisplay -m Platz suchen. Danach kann man die eventuell gesetzte Allokation des PV abschalten (pvchange -xn /dev/hdaX). Mit pvmove kann man dann alles verschieben: pvmove /dev/hdaX /dev/hdaNEU. Das Kommando kann man in den Backgroud schicken, man kann einen Intervall spezifizieren, indem ein Status gegeben bzw. geloggt wird. Das ist ein Schweizer Taschenmesser, da man auch einzelne LV oder einzelne PE gezielt verschieben kann: pvmove -n mein_lv /dev/hdaX /dev/hdaNEU pvmove /dev/hdaX:555-655 /dev/hdaNEU (oder pvmove /dev/hdaX:555-655 /dev/hdaNEU:0-99) pvmove -n mein_lv /dev/hdaX:555-655 /dev/hdaNEU (Hier werden nur die PE des LV in diesem Bereich bewegt. Soll das innerhalb des gleichen PV sein, so muß man --alloc anywhere spezifizieren). Sämtliche Spiegel, Kopien oder Backups müßen einzeln bearbeitet werden..... Ohne Angabe eines Zieles werden die PEs in der VG untergebracht.
Ein PV vergrößern oder verkleinern:
Analoge Kommandos gibt es für jede Ebene des LVM. So kann man Partitionen mit fdisk vergrößern oder verkleinern und dann mit pvresize das PV anpassen.
Spezielle Features: VGs verschmelzen und aufteilen:
Interessanterweise kann der Linux-LVM ganze VGs verschmelzen oder eine gegebene VG in zwei VGs aufteilen: vgmerge und vgsplit. Im Fall des "Mergens" müßen die Parameter der VGs natürlich passen.
Parameter einer VG oder eines LV ändern:
vgchange lvchange
Den Namen einer VG oder eines LV ändern:
vgrename lvrename
Welche LV gehören zu meiner VG?
lvdisplay -v /dev/rootvg So erhalte ich auch gleich noch Informationen zur VG und zu den PV: vgdisplay -v /dev/rootvg
Wie frage ich Daten ab?
pvs - Report information about physical volumes. pvscan - Scan all disks for physical volumes. vgs - Report information about volume groups. vgscan - Scan all disks for volume groups and rebuild caches. lvs - Report information about logical volumes. lvscan - Scan (all disks) for logical volumes.
Weitere Kommandos zum Backup und Troubleshooting
pck - Check physical volume metadata. vgck - Check volume group metadata. vgcfgbackup - Backup volume group descriptor area. vgcfgrestore - Restore volume group descriptor area. vgimportclone - Import and rename duplicated volume group (e.g. a hardware snapshot). vgmknodes - Recreate volume group directory and logical volume special files.
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL