Der Logical Volume Manager (LVM) stellt verschiedene Funktionen zur Verfügung, um den Plattenplatz auf einem Linux System effizienter zu verwalten. Man kann Dateisysteme nachträglich vergrößern oder verkleinern, Ausfallsicherheit oder eine bessere Performance durch Einsatz mehrerer physikalischer Festplatten erreichen (RAID0, RAID1 oder RAID5) oder während des Betriebs defekte Festplatten austauschen. |
Auch wenn man auf die Ausfallsicherheit oder Performance verzichtet, ist der Einsatz von LVM eine nützliche Sache. Allein schon die Möglichkeit, nachträglich Dateisysteme zu vergrößern oder bei Festplattenproblemen die Daten leicht auf eine neue Platte kopieren zu können, rechtfertigt den Einsatz von LVM.
Das geschieht in den folgenden Schritten:
Sofern man noch nicht den gesamten Platz in einer Volume Group verbraucht hat, kann man mit "lvresize" oder "lvextend" ein Dateisystem vergrößern. Nach der Änderung der Partition muss dann noch das Dateisystem selbst vergrößert werden. Bei den verbreiteten ext2 oder ext3 Dateisysteme unter Linux macht man das mit "resize2fs".
Zusätzliche Festplatten können leicht mit "vgextend" zu eine Volume Group hinzugefügt werden.
Festplatten halten bekanntlich nicht ewig. Wenn man Hinweise auf Fehlfunktionen hat, sollte man die Festplatte austauschen. Dazu fügt man eine neue Festplatte hinzu und bindet sie mit "pvcreate" und "vgextend" in den LVM ein. Sodann verschiebt man mit "pvmove" alle Daten von der defekten Platte auf die neue. Die fehlerhafte Platte kann dann mit "vgreduce" aus der Volume Group entfernt und ausgebaut werden.
Es ist nicht möglich, sämtliche Partitionen eines Linux Systems mit LVM zu verwalten. Zumindest der Kernel muss sich auf einer normalen Partition befinden (meistens ist das /boot), da die üblichen Boot Loader keinen LVM Support haben.
Weiterhin sollte man sich überlegen, was man im Fehlerfalle (z.B. bei einem Absturz) zu tun gedenkt. Falls man einen Rootserver hat, ist man auf das vom Anbieter zur Verfügung gestellte "rescue system" angewiesen. Enthält das Rescue System keine LVM Utilities, dann kann man die Partitionen nicht mounten und man kommt an die Daten nicht mehr so ohne weiteres ran.
Bei einem Rootserver ist es daher empfehlenswert, alle für den Systemstart benötigten Dateisysteme auf die herkömmliche Art und Weise anzulegen und nur die Anwender-Dateisysteme mit LVM zu verwalten.
Um LVM zu nutzen, braucht man einen Kernel mit den LVM-Erweiterungen (sind bei den meisten Distributionen schon drin) sowie die LVM Utilities.
Auf einem Debian System wird LVM so installiert:
apt-get install lvm-common lvm2 |
Der erste Schritt ist, freien Speicherplatz zur Benutzung mit LVM zu markieren. Dazu wird der Befehl 'pvcreate' benutzt. Man kann sowohl Disk-Partitionen als auch ganze Festplatten oder sonstige block devices verwenden.
'pvscan' prüft alle vorhanden block devices, ob physical LVM volumes vorhanden sind.
'pvdisplay' zeigt wichtige Informationen über die vorhandenen physical volumes an.
server03:~# fdisk /dev/sda The number of cylinders for this disk is set to 38913. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/sda: 300.0 GB, 300069052416 bytes 255 heads, 63 sectors/track, 36481 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 36481 293033601 5 Extended /dev/sda5 1 8 64197 83 Linux /dev/sda6 9 259 2016126 83 Linux /dev/sda7 260 322 506016 83 Linux /dev/sda8 323 573 2016126 83 Linux /dev/sda9 574 1074 4024251 83 Linux /dev/sda10 1075 36481 284406696 8e Linux LVM Command (m for help): q server03:~# pvcreate /dev/sda10 Physical volume "/dev/sda10" successfully created server03:~# pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created server03:~# pvscan PV /dev/sda10 lvm2 [271.23 GB] PV /dev/sdb2 lvm2 [277.55 GB] Total: 2 [548.78 GB] / in use: 0 [0 ] / in no VG: 2 [548.78 GB] server03:~# pvdisplay --- Physical volume --- PV Name /dev/sda10 VG Name disk PV Size 271.23 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 69435 Free PE 69435 Allocated PE 0 PV UUID PfI4Gs-18uX-jmvV-JrG6-pPcv-NrxN-I1q5RH --- Physical volume --- PV Name /dev/sdb2 VG Name disk PV Size 277.55 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 71053 Free PE 71053 Allocated PE 0 PV UUID RoqRsm-fgaf-WKk0-RbJ4-3Y20-YYq3-YLPZKL |
Eine Volume Group verwaltet den Speicherplatz von mindestens einem physical volume. Man kann nachträglich weitere physical volumes hinzufügen.
server03:~# vgcreate disk /dev/sda10 Volume group "disk" successfully created server03:~# vgextend disk /dev/sdb2 Volume group "disk" successfully extended server03:~# vgscan Reading all physical volumes. This may take a while... Found volume group "disk" using metadata type lvm2 server03:~# vgdisplay --- Volume group --- VG Name disk System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 548.78 GB PE Size 4.00 MB Total PE 140488 Alloc PE / Size 0 / 0 Free PE / Size 140488 / 548.78 GB VG UUID KEYgjn-jPuz-W6wb-YDWL-clhj-FbSt-I4ibnZ |
Ein logical volume verhält sich im wesentlichen genau so wie eine Disk Partition. Man kann es mit einem beliebigen Dateisystem formatieren. Der Unterschied ist, dass man ein logical volume auch nachträglich noch vergrößern kann, z.B. wenn man mehr Speicherplatz benötigt als zunächst erwartet. Bei einer Disk Partition ist das nur sehr schwer möglich; wenn man die eine Partition vergrößert, muss man die darauffolgende Partition verkleinern, was sehr aufwändig ist. Eine Disk Partition kann auch nie größer als die Festplatte sein, auf der sie liegt.
Diese Einschränkungen gibt es für logical volumes nicht.
server03:~# lvcreate --size 100G --name v0300 disk Logical volume "v0300" created server03:~# lvscan ACTIVE '/dev/disk/v0300' [100.00 GB] inherit server03:~# lvdisplay --- Logical volume --- LV Name /dev/disk/v0300 VG Name disk LV UUID js11uX-rtDI-cXa0-QGYE-H53R-2GYs-yL93MI LV Write Access read/write LV Status available # open 0 LV Size 100.00 GB Current LE 25600 Segments 1 Allocation inherit Read ahead sectors 0 Block device 254:0 |
Die verbreitetsten File Systeme sind ext3, reiserfs und evtl. xfs. Die meisten Distributionen verwenden inzwischen das ext3 File System, das einen guten Kompromiss zwischen Datensicherheit und Performance bietet. Für weitergehende Informationen ist der folgende Artikel hilfreich: http://www.linux-user.de/ausgabe/2006/01/046-dateisysteme/index.html.
# mke2fs -j /dev/disk/backup mke2fs 1.40-WIP (14-Nov-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 90849280 inodes, 181676032 blocks 9083801 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 5545 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. |
Ein Dateisystem stellt den Speicherplatz einer Partition oder eines logical volumes so zur Verfügung, dass man darauf Dateien abspeichern kann. Es ist normalerweise genauso groß wie die darunterliegende Partition bzw. logical volume, aber man kann es auch nachträglich vergrößern oder verkleinern.
Dabei ist folgendes zu berücksichtigen: Will man das Dateisystem vergrößern, muss zuerst die Partition vergrößert werden. Will man es verkleinern, darf die Partition erst nach der Verkleinerung des Dateisystems verkleinert werden. Ist ja auch irgendwie logisch.
Beim Hantieren mit Dateisystemen sollte man immer daran denken, dass ein Fehler häufig zum Totalverlust sämtlicher Daten führt. Also vorher ein Backup machen, wenn irgend möglich! Und die Kommandozeile nochmal genau überprüfen, bevor man auf die Returntaste drückt.
Hier die Anweisungen, um eine Partition von 200 GByte auf 50 GByte zu verkleinern:
server04:~# resize2fs /dev/disk/space 50G resize2fs 1.40-WIP (14-Nov-2006) Please run 'e2fsck -f /dev/disk/space' first. server04:~# e2fsck -f /dev/disk/space e2fsck 1.40-WIP (14-Nov-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/disk/space: 15/26214400 files (6.7% non-contiguous), 8611356/52428800 blocks server04:~# resize2fs /dev/disk/space 50G resize2fs 1.40-WIP (14-Nov-2006) Resizing the filesystem on /dev/disk/space to 13107200 (4k) blocks. The filesystem on /dev/disk/space is now 13107200 blocks long. server04:~# e2fsck -f /dev/disk/space e2fsck 1.40-WIP (14-Nov-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/disk/space: 15/6553600 files (6.7% non-contiguous), 7992506/13107200 blocks |
Um das darunterliegende logical volume zu verkleinern, verwendet man den Befehl "lvresize":
server04:~# lvresize --size 50G /dev/disk/space WARNING: Reducing active logical volume to 50.00 GB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce space? [y/n]: y Reducing logical volume space to 50.00 GB Logical volume space successfully resized |
Ein logical volume stellt Speicherplatz eines oder mehrerer physischer Laufwerke bereit. Falls nun eines dieser Laufwerke ausfällt, ist das gesamte logical volume beschädigt. Man verringert also die Datensicherheit, wenn mehrere physische Laufwerke in einem einzigen logical volume zusammengefasst werden. Es wäre also wünschenswert, wenn der Speicherplatz eines logical volumes sich möglichst auf einer einzigen Festplatte befindet.
Auch beim Austausch eines Laufwerkes müssen die darauf enthaltenen logical volumes auf andere physical volumes verschoben werden.
Dies geht sehr einfach mit dem "pvmove" Befehl. Das schöne daran ist, dass der Verschiebevorgang während des laufenden Betriebs erfolgen kann: der pvmove Befehl spiegelt die betroffenen logical volumes einfach auf ein anderes physical volume. Schreibvorgänge werden nun sowohl auf dem alten als auch auf dem neuen physical volume ausgeführt. Nachdem die Spiegelung abgeschlossen wurde, d.h. nachdem sämtliche Daten auf das neue physical volume übertragen wurden, wird die Zuordnung des alten physical volumes zum logical volume aufgehoben.
Hier ein Beispiel: es sind zwei Festplatten vorhanden. Auf der ersten Festplatte sind 50 GByte allokiert, auf der zweiten sind 100 GByte allokiert. Die erste Festplatte soll nun entfernt werden, dazu soll der LVM sämtliche Daten, die auf dem physical volume /dev/sda10 enthalten sind, auf eine andere Platte kopieren.
Nach der Ausführung des pvmove-Befehls zeigt pvdisplay an, dass die Partition /dev/sda10 nunmehr leer ist. Man könne sie nun mit vgreduce vom LVM abmelden und die Platte ausbauen.
server04:~# pvdisplay --- Physical volume --- PV Name /dev/sda10 VG Name disk PV Size 271.23 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 69435 Free PE 56635 Allocated PE 12800 PV UUID PfI4Gs-18uX-jmvV-JrG6-pPcv-NrxN-I1q5RH --- Physical volume --- PV Name /dev/sdb2 VG Name disk PV Size 277.55 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 71053 Free PE 45453 Allocated PE 25600 PV UUID RoqRsm-fgaf-WKk0-RbJ4-3Y20-YYq3-YLPZKL server04:~# pvmove /dev/sda10 /dev/sda10: Moved: 0.9% /dev/sda10: Moved: 1.7% /dev/sda10: Moved: 2.5% /dev/sda10: Moved: 3.4% ... /dev/sda10: Moved: 100.0% server04:~# pvdisplay --- Physical volume --- PV Name /dev/sda10 VG Name disk PV Size 271.23 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 69435 Free PE 69435 Allocated PE 0 PV UUID PfI4Gs-18uX-jmvV-JrG6-pPcv-NrxN-I1q5RH --- Physical volume --- PV Name /dev/sdb2 VG Name disk PV Size 277.55 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 71053 Free PE 32653 Allocated PE 38400 PV UUID RoqRsm-fgaf-WKk0-RbJ4-3Y20-YYq3-YLPZKL server04:~# vgreduce disk /dev/sda10 Removed "/dev/sda10" from volume group "disk" server04:~# pvremove /dev/sda10 Labels on physical volume "/dev/sda10" successfully wiped |