Logical Volume Manager (LVM) Howto - deutsche Version <author>Richard Heider <lvm-howto@litefaden.com> <date>1.0 ($Revision: 1.0.2.2 $), 4. Apr 2000 <abstract>Der Logical Volume Manager (LVM) schafft eine virtuelle Sicht auf Festplatten und erleichtert so die Verwaltung des Speicherplatzes. LVM ermöglicht u.a. die Anpassung und Erweiterung von Filesystemen auf logischen Volumes, sowie Stripe Sets. Dieses Howto beschreibt die Installation und Administration des LVM. LVM kann zusammen mit RAID Software oder -Hardware eingesetzt werden. Es werden einfache und komplexe Installationen, sowie die Fehlerdiagnose behandelt. <toc> <sect>Grundlagen <p> Dieses Dokument befindet sich noch in der frühen Entwicklung. Die meisten Beispiele sind noch nicht Korrektur gelesen, also durchaus mit Vorsicht zu geniessen. Anmerkungen, Fehlermeldungen und Verbesserungsvorschläge sind ausdrücklich erwünscht und erbeten. <sect1>Was ist LVM? <p> Eine häufige Aufgabe der Systemadministration ist die bedarfsgerechte Verteilung von Festplattenplatz auf die entsprechenden Filesysteme. Partitionierungen können auf einem installierten System nur sehr aufwendig geändert werden, was Veränderungen und Erweiterungen erschwert. Der Logical Volume Manager (LVM) schafft eine virtuelle Sicht auf den vorhanden Plattenplatz und ermöglicht so die flexible Anpassung und Erweiterung des Filesystems an die veränderten Ansprüche. Der Logical Volume Driver 0.8final ist seit Linux 2.3.47 Bestandteil des Standard Kernels. Wesentliche Anwendungen des LVM sind Filesysteme die die Grösse einer Festplatte übersteigen, z.B. ein grosses /home Verzeichnis, Datenbank Volumes die in sogenannten Stripe Sets auf mehrere Festplatten verteilt werden sollen und die Erweiterung von Filesystems bei Platzbedarf. <sect2>Vorteile von LVM <p> <itemize> <item>Filesysteme und damit Dateien können grösser sein, als die verwendeten Festplatten . <item>Es können viele Partitionen angelegt werden; 256 insgesamt. <item>Leichteres Systeminstallation und Festplattenverwaltung, da man bei der Partitionierung und Definition der Filessysteme nicht so weit vorausdenken muss. Man bedient sich einfach aus dem Speicherplatz-Pool, der Volume Group. <item>Filesysteme können in Stripe Sets auf mehrere (SCSI) Platten verteilt werden wodurch eine besser I/O Geschwindigkeit erreicht werden kann. <item>Devices können mit sprechenden Namen versehen werden (z.B. für Kunden-ID). <item>Die Filesysteme können dem wächsenden Platzbedarf bei Bedarf angepasst werden. Bestimmte Filesysteme können erweitert werden ohne sie komplett neu aufsetzen/formatieren zu müssen, falls ein entsprechendes Tool existiert. <item>Die Administrationsmöglichkeiten im laufenden Betrieb werden erhöht, da einige Konfigurationen auf aktiven Volumes durchgeführt werden können. Insbesondere ist es möglich, ein logisches Volume im laufenden Betrieb auf ein anderes Physikalisches Volume (Festplatte) zu verschieben. </itemize> <sect2>Wer braucht LVM? <p> Bei den heute üblichen Plattengrössen bietet sich der Einsatz von LVM bereits bei gut ausgestatteten Home PCs und kleinen Servern an. Auf jedenfall sinnvoll ist der Einsatz bei Systemen mit wachsendem Datenbestand, wie z.B. Datenbanken, Benutzerverzeichnisse, MP3 Archive, grosse Spoolverzeichnisse (News). Bei stark belasteten Systemen bietet der LVM zudem die Möglichkeit mit einem "Raid0" die Zugriffe auf mehrere Platten zu verteilen um performanter zu sein. <sect1>Funktionsweise des LVM <p> Das Arbeiten mit LVM unterscheidet sich recht grundlegend von der Arbeit mit normalen Partionen. Versuchen Sie sich also etwas von Ihren vorhanden Vorstellungen vom Umgang mit Festplatten zu lösen. Am Anfang steht natürlich auch beim LVM die real existierende Festplatte oder die Festplatten Partition. Sie wird mit Physical Volume (PV) bezeichnet. Diese wird zu Beginn in eine Volume Group (VG) aufgenommen, dies ist ein Pool des gesamten zur Verfügung stehenden Speicherplatzes. Aus diesem Pool werden nun logische Volumes (LV) nach Bedarf erzeugt. Das Betriebsystem greift nun auf diese logischen Partitionen (LV) anstelle der reellen Partitionen (PV) zu. Der LVM hat also eine zusätzliche Ebene zwischen der Festplatte und der Ein-/Ausgabe des Linux-Kernels geschaffen. Dies ermöglich die Definition von logischen Volumes, (fast) unabhängig von den zu Grunde liegenden physikalischen Volumes. Mehrere Platten können zu einer grossen logischen Partition zusammen gefasst werden. Der LVM erlaubt wesentliche Eingriffe, wie hinzufügen von PVs und erweitern von LVs sogar im laufenden System. Dies setzt natürlich "Hot-Swapable" Hardware voraus, die für den Ein- und Ausbau in einem laufenden System konzipiert wurde. Beschäftigen Sie sich einen Augenblick mit den Abkürzungen der verschiedenen Objekte. Ein Grossteil der Dokumentation, sowie der Rest dieses HOWTOs, verwendet diese Kürzel. Ausserdem basieren fast alle Programmnamen auf diesen Abkürzungen. <sect1>Abkürzungen <p> <itemize> <item>LVM: Logical Volume Manager <item>PV: Physical Volume = Festplatte oder Partition <item>PE: Physical Extend = Belegungseinheit des PV, Block <item>VG: Volume Group <item>LV: Logical Volume = virtuelle Partition ( /dev/VolumeGroupName/LogicalVolumeName ); Dies ist die logische Einheit, die Träger des Filesystems ist. <item>LE: Logical Extend = Belegungseinheit des LV, Block <item>VGDA: Volume Group Descriptor Area = reservierter Bereich auf dem PV für die Datenbank mit den PE <==> LE Zuordnungen. </itemize> <sect1>Warnung <p> LVM ist mittlerweile ziemlich stabil, allerdings sollten Sie sich darüber im Klaren sein, dass Arbeiten an der Festplattenaufteilung und am Filesystem immer mit einem erhöhten Risiko verbunden sind. Daten können verlorengehen durch Programm- und Betriebssystemabstürze, Stromausfälle und last but not least durch Fehlbedienung von Kommandos. Also: Sichern Sie Ihre Daten bevor Sie mit LVM arbeiten oder Volumes umkonfigurieren. <sect1>Haftung <p> Für die hier vorgestellten Verfahren übernehme ich keine Haftung. Arbeiten Sie nie ohne Backup! <sect1>Copyright <p> Dieses Dokument ist urheberrechtlich geschützt. Das Copyright liegt bei Richard Heider. Das Dokument darf gemäß der GNU <url url="http://www.tu-harburg.de/dlhp/HOWTO/DE-GPL.html" name="General Public License ">verbreitet werden. Insbesondere bedeutet dieses, daß der Text sowohl über elektronische wie auch physikalische Medien ohne Zahlung von Lizenzgebühren verbreitet werden darf, solange dieser Copyright Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt und ausdrücklich erwünscht. Bei einer Publikation in Papierform ist das Deutsche Linux HOWTO Projekt hierüber zu informieren. <sect>Erstinstallation von LVM - ein einfaches Scenario <p> Dieses Kapitel soll anhand eines konkreten Beispiels, einem unerfahrenen Admin Anfangsgrössen für die Installation einer Distribution mit LVM geben, sowie eine Idee vermitteln in welcher Reihenfolge die verscheidenen Vorgänge stattfinden. <sect1>Annahmen <p> Es soll ein PC installiert werden, mit 2 IDE Festplatten a 20 GB, die als /dev/hda und /dev/hdb angesprochen werden. Linux ist noch nicht installiert. Sie verwenden eine Distribution, deren Kernel bereits mit LVM kompiliert wurde (z.B. Suse >= 6.3). Linux kann nicht direkt von einem LVM Volume booten. In diesem einfachen Scenario soll die root Partition auf einer normalen (kleinen) Partition liegen. Alle weiteren Filesysteme werden auf logischen Volumes untergebracht. Der grobe Ablauf der Installation ist wie folgt: <itemize> <item>Da wir die LVs erst unter dem laufenden System einrichten können, installieren wir zuerst ein möglichst minimales Linux. <item>Unter diesem System initialisieren wir den LVM, die Logischen Volumes und legen die neuen Filesysteme an. <item>Die bestehenden Verzeichnisse /usr /opt und /home werden auf die neuen Filesysteme verschoben. <item>Das System wird so eingerichtet, dass die neuen Filesysteme automatisch beim Systemstart gemountet werden. <item>Die Linux Installation kann jetzt auf ein vollständiges System erweitert werden. </itemize> <sect1>Planung der Filesysteme <p> In diesem Beispiel wird nur eine einfache Planung vorgegeben. Weitergehende Überlegungen finden Sie später im Kapitel "komplexere Überlegungen und Planungen". Wir verwenden nur eine Volume Group. Die Grösse des boot volumes sollte zwischen 20- 30 MB liegen. Das root volumes wird zwischen 300-500 MB gross werden. Die Planung für einen einfachen Server mit 40 GB Plattenplatz könnte also wie folgt aussehen: </p> <p> <table> <tabular ca="lrl"> Filesystem|Grösse|Mountpoint@<hline> /dev/hda2|470 MB|/@ /dev/hda1|30 MB|/boot@ /dev/vg01/lvol1|1,5 GB|/usr@ /dev/vg01/lvol2|500 MB|/opt@ /dev/vg01/lvol3|10 GB|/home@ freier Plattenplatz|27,5 GB|(wird bei Bedarf zur Erweiterung der vorhanden LVs verwendet)@ </tabular> <caption>Filesystemplanung</caption> </table> </p> <p> Die Grössen sind natürlich nur als grober Anhaltspunkt zu verstehen. Die exakte Grösse hängt natürlich von Ihrem installierten System ab. Die hier angegeben Grössen beziehen sich auf eine umfangreiche Installation der Suse 6.3. <sect1>Vorgehensweise <p> Im Beispiel werden nur die relevanten Optionen der Befehle erwähnt. Für die komplette Syntax lesen Sie bitte die Man Pages. <sect2>Betriebsystem Installation und Partitionieren der Festplatten. <p> Installieren Sie Ihr Linux entsprechend der Anleitung Ihrer Distribution. Halten Sie die ausgewählten Programmpackete minimal, da jetzt die LVM Volumes und damit der komplette Speicherplatz ja noch nicht verfügbar sind. Wenn Sie im Laufe der Installation ihre Festplatten partitionieren, dann müssen Sie die Patitionen zur Verwendung mit LVM einrichten. Die Partions-Id muss auf 0x8e gesetzt werden. Die verhindert das versehentliche überschreiben von nicht LVM Partitionen. In unserem Scenario partitionieren wir die Festplatten wie folgt: </p> <p> <table> <tabular ca="llrl"> Platte|Partition|Grösse|Id/Typ der Partition@<hline> hda|/dev/hda1|30 MB|0x83 Linux native@ hda|/dev/hda2|470 MB|0x83 Linux native@ hda|/dev/hda3|19,5 GB|0x8e Linux LVM@ @ hdb|/dev/hdb1|100 MB|0x82 Linux swap@ hdb|/dev/hdb2|19,9 GB|0x8e Linux LVM@ </tabular> <caption>Partitionsaufteilung</caption> </table> </p> <sect2>Aktivieren des LVM <p> Der erste Aufbau von vgscan aktiviert die LVM Funktionalität im Kernel, da die noch nicht vorhandene lvm Datenbank angelegt wird. Dieser Schritt ist in unserem Scenario zwingend, da es sich um ein neu installiertes System handelt. Der Befehl vgscan ermittelt alle LVM PVs und legt die Datei /etc/lvmtab und das Verzeichnis /etc/lvmtab.d an oder aktualisiert sie. <verb>vgscan </verb> <sect2>Physical Volumes anlegen <p> Der Befehl pvcreate legt den VGDA Block auf dem PV an. Er muss für jedes PV ausgeführt werden, bevor es von LVM verwendet werden kann: <verb>pvcreate /dev/hda3 pvcreate /dev/hdb2 </verb> <sect2>Volume Groups anlegen <p> Jetzt legen wir mit 'vgcreate <VolumeGroup> <Partition(en)>' unsere Volume Group an und nennen sie "vg01": <verb>vgcreate vg01 /dev/hda3 /dev/hdb2 </verb> <sect2>Logische Volumes anlegen. <p> Hier legen wir jetzt alle unsere logischen Volumes an. Als Namen verwenden wir, etwas fantasielos, lvol1, lvol2 und lvol3. Dabei bedienen wir uns mit dem Plattenplatz auf Volume Group vg01, der einzigen Volume Group in diesem Beispiel. Es ist offensichtlich, dass wir hier nicht mehr Plattenplatz "verteilen" können, als wir bei vgcreate in die Volume Group "hineingesteckt" haben, und zwar in Form der beiden Partitionen hda3 und hdb2. (lvcreate -L<Grösse> -n <LogicalVolumeName> <Volume Group>). <verb>lvcreate -L 1500M -n lvol1 vg01 lvcreate -L 500M -n lvol2 vg01 lvcreate -L 10G -n lvol3 vg01 </verb> <sect2>Filesysteme anlegen <p> Ab jetzt können die logischen Partitionen, genau so wie gewöhnliche Partitionen, über Ihre Device Files angesprochen werden. Gewöhliche Partitionen werden mit /dev/sd[a-z]* oder /dev/hd[a-z]* bezeichnet; Logische Volumes werden mit /dev/VolumeGroupName/LogicalVolumeName angesprochen. Mit mke2fs <LogicalVolumeName> legen wir die ext2 Filesysteme an: <verb>mke2fs /dev/vg01/lvol1 mke2fs /dev/vg01/lvol2 mke2fs /dev/vg01/lvol3 </verb> <sect2>Filesysteme verwenden <p> Trotz der minimalen Linux Installation liegen wahrscheinlich schon eine Dateien in den Ordnern /usr /opt und /home. Wir müssen diese "alten" Verzeichnisse also zuerst umbenennen und dann die Mountpoints anlegen, bevor wir die "neuen" Filesyssteme mounten können. Anschliessend müssen wir die Inhalte der "alten" Verzeichnisse in die "neuen" kompieren. Wenn Sie ganz sicher sind, dass die ganze LVM Installation und das Kopieren funktioniert hat, können Sie die alten Verzeichnisse bei Gelegenheit entfernen. <verb>mv /usr /usr.old mv /opt /opt.old mv /home /home.old mkdir /usr mkdir /opt mkdir /home mount /dev/vg01/lvol1 /usr mount /dev/vg01/lvol2 /opt mount /dev/vg01/lvol3 /home cp -avx /usr.old/* /usr cp -avx /opt.old/* /opt cp -avx /home.old/* /home </verb> <sect2>fstab anpassen <p> Damit die neuen Filesysteme nun bei jedem Systemstart automatisch gemountet werden, müssen wir sie in die Datei /etc/fstab eintragen (siehe 'man fstab'). In unserem Scenario sehen die zusätzlichen Einträge wie folgt aus: <verb>/dev/vg01/lvol1 /usr ext2 defaults 1 2 /dev/vg01/lvol2 /opt ext2 defaults 1 2 /dev/vg01/lvol3 /home ext2 defaults 1 2 </verb> <sect2>Programmpackete nachinstallieren <p> Die LVM Installation ist jetzt beendet. Die logischen Volumes und damit der komplette Festplattenplatz stehen zur Verfügung. Jetzt kann die noch minimale Linux Installation um zusätzliche Programmpackete auf den vollen gewünschten Umfang erweitert werden. <sect>Arbeiten mit LVM <p> Hier werden die wesentlichen Administationsvorgänge beschrieben. <sect1>Booten <p> Eventuell muss das LVM-Modul geladen werden. Normalerweise können die gespeicherte LVM-Konfiguration in den Dateien/Verzeichnissen /etc/lvmtab, /etc/lvmconf, /etc/lvmtab.d wieder benutzt werden: <verb>vgchange -a y </verb> Sollte die gespeicherten Daten korrupt oder nicht vorhanden sein (z.B. weil eine Platte in ein fremdes System eingebaut wird) können alle potentiellen PV's (alle SCSI- und IDE-Platten, Loop-Devices, etc.) gescannt werden. <verb>vgscan -v </verb> Es ist Zweckmässig vgscan jedesmal beim booten, vor dem Arbeiten mit logischen Volumes automatisch zu starten. Danach ebenfalls mit vgchange -a y aktivieren. <sect1>Shutdown <p> LVM muß sauber abgeschlossen werden, damit ein Wiederherstellen später möglich ist. Zuerst sind alle Filesysteme auf den LV's zu unmounten. Es dürfen keine geöffneten LV (gemountete Filesysteme, Swap etc.) existieren. Danach die VG als Gesamtes deaktivieren: <verb>vgchange -a n </verb> <sect1>Anlegen einer Volume Group (VG) <p> Einer Volume Group muß beim Anlegen mindestens ein PV zugefügt werden, weitere können später hinzugefügt werden. Anlegen einer VG mit dem Namen vg00: <verb>vgcreate -v vg00 /dev/loop7 </verb> <sect1>Umbenennen einer Volume Group (VG) <p> Die VG 'vg00' wird zu 'myvg' umbenannt. Dazu muss die VG erst deaktiviert werden. Nur VGs, die keine offenen LVs haben können deaktiviert werden. Nach dem Umbenennen muss die VG wieder aktiviert werden. <verb>vgchange -a n vg00 vgrename vg00 myvg vgchange -a y myvg </verb> <sect1>Vorbereiten der Physical Volume (PV) <p> Ein Physical Volume (PV) kann eine Festplatten-Partition, eine gesamte Platte, ein Loop-Device, ein MD-Device oder eine beliebiges anderes Block-Device sein. Das PV muß vor Benutzung durch LVM formatiert werden, d.h. gewisse Datenstrukturen werden darin abgelegt. Wenn eine Partition benutzt wird, muß der Partitionstyp mit fdisk auf 0x8E gesetzt werden. Dies dient lediglich dazu, daß die Partition nicht über andere Wege (z.B. Filesystem) benutzt wird. Aufruf von pvcreate: <verb>pvcreate /dev/loop7 </verb> Falls sich dort schon ein PV konfiguriert wurde, zum Überschreiben ev. Parameter -f oder -ff angeben. <sect1>Hinzufügen eines PV zu einer VG <p> Erstellen Sie die Partition und setzen Sie die Partions ID auf 0x8e um sie als LVM Partition zu kennzeichnen. Beispiel für "sda1" und "vg01": <verb>[FDISK BEISPIEL FEHLT NOCH] pvcreate /dev/sda1 vgextend vg01 /dev/sda1 </verb> Die erste Partition wird mit 'vgcreate vg01 /dev/sda1' hinzugefügt, da die Volume Group dann ja noch nicht existiert. <sect1>Entfernen eines PV aus einer VG <p> <verb>pvmove /dev/sdx1 vgreduce vg0x /dev/sdx1 </verb> <sect1>Verlagerung eines PV auf ein anderes PV <p> Manchmal ist es Notwendig, die Daten von ein einem physikalischen Volume auf ein anderes zu Verschieben. Gründe dafür können sein, <itemize> <item>dass Sie eine auf Loop-Devices basierende Testkonfiguration in eine performantere Konfiguration umwandeln wollen, in der die PVs auf eigenen Platten liegen. <item>dass Sie eine Festplatte ausbauen oder durch eine neuere (grössere) ersetzen wollen. </itemize> Vorraussetzung für die Verlaferung der PEs eines PV auf ein anderes ist, dass auf den verbleibenden PVs genug Platz vorhanden ist, um die gesamten Daten aufnehmen zu können. Die Verlagerung kann im Online Betrieb erfolgen. (Vertrauen ist gut; Ein Backup ist besser :-) Beispiel 1: hda1 in vg0x soll "frei gemacht" werden, damit die Festplatte ausgebaut werden kann: <verb>pvmove /dev/hda1 vgreduce vg0x /dev/hda1 </verb> Beispiel2: Das PV '/dev/loop7' in VG 'vg00' soll von dem jetzigen provisorischen Loop-Device auf eine neue Partition ('/dev/hda1') verschoben werden. Dies geschieht im Online-Betrieb. <verb>(Ggf. mit fdisk Partition-ID von hda1 auf 0xfe setzen) pvcreate -v /dev/hda1 vgextend -v vg00 /dev/hda1 pvmove -v /dev/loop7 /dev/hda1 vgreduce -v vg00 /dev/loop7 </verb> <sect1>Anlegen und Benutzen eines Logical Volume (LV) <p> In einer gegebenen VG können mehrere Logical Volume's (LV) angelegt werden. Ohne spezielle Parameter wird irgendwo freier Platz belegt. Normalerweise werden die PV's nacheinander, möglichst aneinanderhängend aufgefüllt. Wird kein Name für das LV angegeben, vergibt LVM automatisch einen (lvol1, lvol2, ...). Die Größe der LV wird durch -L gefolgt von einer Zahl mit dem Zusatz K, M oder G (für Kbyte, MByte, GByte) angegeben. Beispiel: LV mit dem Namen test mit 10 MB in der VG vg00: <verb>lvcreate -v -L10M -n test vg00 </verb> LVM legt damit ein Block-Device /dev/vg00/test an, auf das jetzt normal zugegriffen werden kann: <verb>mkfs -t ext2 /dev/vg00/test mount /dev/vg00/test /tmp/lvmtest/mnt0 </verb> (... und/oder fstab Eintrag) <sect1>Vergrössern eines Logischen Volumes (LV) <p> Sie können ein LV /dev/test_vg/test_lv auf 1600MB erweitern, in dem Sie eine relative Grössenangabe verwenden <verb>&dquot;lvextend -L+100 /dev/test_vg/test_lv&dquot; </verb> oder eine absolute Grössenangabe <verb>&dquot;lvextend -L1600 /dev/test_vg/test_lv&dquot; </verb> Beispiel zusammen mit Erweiterung des Filesystems: <verb>lvextend -L+3G /dev/vg01/lvol01 e2fsadm -L+3G /dev/vg01/lvol01 </verb> Eventuell /var/state/nfs/devtab anpassen falls nfs freigabe bestand. (Warum??? - Bitte um Input - richard) <sect1>Verkleinern eines logischen Volumes (LV) <p> Das LV '/dev/test_vg/test_lv' soll um 700 LEs auf 900 LEs verkleinert werden. Die logical Extents können relativ angegeben werden: <verb>&dquot;lvreduce -l-700 /dev/test_vg/test_lv&dquot; </verb> oder die gewünschte Grösse kann in absoluten PEs angegeben werden: <verb>&dquot;lvreduce -l900 /dev/test_vg/test_lv&dquot; </verb> <sect1>Umbenennen eines Logischen Volumes (LV) <p> Nur geschlossene LVs können umbenannt werden. Vergessen Sie nicht nach dem Umbennen ggf. Ihren Eintrag in '/etc/fstab' zu ändern. <verb>&dquot;lvchange -an /dev/whatever/test_lv&dquot; &dquot;lvrename /dev/whatever/test_lv /dev/whatever/whatvolume&dquot; &dquot;lvchange -ay /dev/whatever/whatvolume&dquot; </verb> Alternativ kann folgender Aufruf von lvrename verwendet werden: <verb>&dquot;lvrename whatever test_lv whatvolume&dquot; </verb> <sect1>Anpassen der Grösse eine ext2 Filesystems <p> Wenn Sie das Tool resize2fs besitzen, können Sie ein LV mit ext2-Filesystem dynamisch vergrößern oder verkleinern, ohne die existierenden Daten auf dem Filesystem zu zerstören. Das Programm resize2fs gibt es bei <htmlurl url="http://www.powerquest.com/" name="www.powerquest.com"> <verb>e2fsadm -L+100 /dev/test_vg/another_test_lv </verb> <sect1>Anlegen eines Swap-Devices <p> Es soll ein 50 MB Volume in vg00 zur Verwendung als Swap Partition erzeugt und verwendet werden. <verb>lvcreate -L50M -n swap1 vg00 mkswap /dev/vg00/swap1 swapon /dev/vg00/swap1 </verb> Eintrag in /etc/fstab: <verb>/dev/vg00/swap1 swa swap defaults 0 0 </verb> <sect1>Test Konfigurationen mit Loop-Devices <p> Will man LVM testen, ohne Umpartitionieren zu müssen, kann man Loop-Devices verwenden. Für den produktiven Einsatz empfiehlt sich das natürlich nicht. Mit Loop-Devices kann man auf normale Dateien im Filesystem wie auf ein Block-Device zugreifen. Siehe 'man losetup'. Anmerkung: <itemize> <item>LVM erkennt anscheinend nur /dev/loop7 . <item>Eine Volume-Group (VG) muß mindestens 20 MB groß sein. </itemize> Einrichtung: Datei in bestimmter Größe anlegen: <verb>dd if=/dev/zero of=/tmp/lvmtest/loop bs=1024 count=21000 </verb> Loop-Device konfigurieren: <verb>losetup /dev/loop7 /tmp/lvmtest/loop </verb> Jetzt kann man auf /dev/loop7 wie auf ein normales Block-Device zugreifen. Wird /dev/loop7 nicht mehr gebraucht, mit Loop-Device konfigurieren: <verb>losetup -d /dev/loop7 </verb> die Verbindung lösen; danach kann die Datei /tmp/lvmtest/loop gelöscht werden. <sect>komplexere Überlegungen und Konfigurationen <p> <sect1>Überlegungen zur Volumegroup <p> <quote>Dies sind einige Überlegungen warum man mehr als einer Volumegroup verwenden will und wie man sich seine Volume Groups organisiert. Auf vielen "einfachen" Servern wird es sinnvoll sein alle physikalischen Platten in eine Volume Group zu nehmen, vorallem, wenn Sie keine Verfügbarkeitsunterscheidung zwischen den Verzeichnissen treffen. Sinnvoll ist es sicher gesonderte Volume Groups anzulegen für "billigen" IDE Speicherplatz und "performanteren" SCSI Speicherplatz oder Speicherplatz auf einem (redundanten) Hardware RAID. </quote> Mehrere PVs in einer Volume Group erhöhen das statistische Ausfallrisiko. Nur wenige oder sogar nur ein PV in einer VG schränken die Flexibilität in der Speicherzuordnung ein. "Removable Disks" sind am besten in einer eigen Volume Group aufgehoben um den Im- und Export zu erleichtern. Hier sollten auch auf jedenfall sprechende VG Namen vergeben werden. Recht praktisch ist es auch, die Volume Group am Systemnamen anzulehnen, denn so kann man Namenskonflikte vermeiden, wenn z.B. die Platte von &dquot;kira&dquot; mal temporär an &dquot;dax&dquot; gehängt wird. Würden beide Systeme ihre erste Volume-Group vg00 nennen, wäre das nicht so einfach. Die maximale Speichergrösse einer Volume Group ist abhängig von der Grösse der Physical Extents, die beim anlegen der Volume Group gesetzt wird. Diese Belegungseinheit gilt für alle Physikalischen Volumes der Volume Group. <sect1>Booten von einem logical Volume <p> Linux benötigt zum booten mindestens ein boot volume, das nicht auf LVM basiert. (Für Details siehe Kapitel "Booten von einem logical Volume".) Es empfiehlt sich aber auch das root volume auf einer gewöhnlichen Partition zu haben. Can i have my root filesystem in a logical volume? Yes you can. There's basic support since LVM 0.7 to create an initial ram disk containing the necessary executables, device specials etc. to switch to a logical volume containing a root filesystem. See script lvmcreate_initrd(8). lvmcreate_initrd creates a new compressed initial ramdisk in /boot/initrd.gz. The initial ramdisk contains all nec­ essary binaries, shared libraries and a linuxrc file to switch to a logical volume based root filesystem. To build an initial ramdisk for a not running but generated kernel add the KernelVersion parameter (for eg. 2.3.25) on the command line. The necessary actions to change your system into a &dquot;root on logical volume&dquot; one are: Create a small (˜20MB) partition which is bios reachable to hold the /boot filesystem (if you already have a small partition based root filesystem this can as well be used). If you like to standalone boot from this partition in case of an emergency, copy all necessary binaries and libraries to that filesystem as well and create a corresponding /etc/lilo.conf entry. In order to be able to edit lilo.conf in case you booted standalone, you should move /etc/lilo.conf to /boot/lilo.conf and create a symbolic link to it in /etc instead. This is not needed if you have a boot/root floppy which contains the LVM binaries and the library in addition. Create all logical volumes you need (for root, usr, opt etc.), create filesystems in them, mount them and transfer all files from the partition based filesystems into the logical volumes based ones. You have to setup your /etc/lilo.conf with a boot configuration like: <verb>image = /boot/vmlinuz initrd = /boot/initrd.gz root = /dev/YourVG/YourRootLV label = rootonlv append = &dquot;ramdisk_size=8192&dquot; </verb> Replace YourVG and YourRootLV by your actual volume group and root logical volume names. In addition to that your /etc/fstab in your root logical volume has to contain: <verb>/dev/YourVG/YourRootLV / ext2 defaults 0 1 /dev/YourBootPartition /boot ext2 defaults 0 2 /dev/YourVG/YourUsrLV /usr ext2 defaults 0 3 /dev/YourVG/YourOptLV /opt ext2 defaults 0 4 </verb> etc. You can use other supported filesystem types as well (reiserfs for eg.) in case you generated support for those into your kernel. Run lilo, reboot and try... The partitions containing the former /usr, /opt etc. filesystems can now be used as physical volumes. pvcre­ ate(8) them and add them for eg. to YourVG. lvcmcreate_initrd return 0 for success. 1 is returned in all other cases. Mit etwas Mut und Pioniergeist, läßt sich sogar ein System zusammenstellen, dass /boot und die Root ebenfalls in logischen Volumes hält. Siehe dazu <sect1>Ex- und importieren von VG's <p> Beispiel: Die VG 'tmpvg' wird auf ein anderes System übertragen. Dies bedeutet, dass z.B. eine externe Platte oder ein RAID an einem anderen Computer betrieben werden soll. <verb>vgexport tmpvg </verb> Ab jetzt ist die VG tmpvg im System nicht mehr sichtbar. Man sollte sich vorher gemerkt haben, auf welchem Device sie vorhanden war! Auf dem neuen System, kann die VG (unter Angabe eines neuen Namens) aus dem Device importiert werden, im Beispiel als newvg von /dev/hdc1: <verb>vgimport newvg /dev/hdc1 </verb> <sect1>LVM Stripe Sets <p> <sect2>Anlegen einer LV mit Stripes <p> <verb>vgextend vg00 /dev/loop7 lvcreate -i 2 -L20M -n striped vg00 </verb> <sect2>Umwandeln eines non-striped LVM in ein striped LVM <p> Sie können lediglich ein Stripe Set anlegen und dann Ihre Daten von einem bestehenden LV dorthin verschieben. (Ist das richtig??? -richard) <sect2>Mein ge-striped-es LV arbeitet extrem langsam. <p> Wenn Sie zwei oder mehr Physikalische Volumes (PVs) verwenden, die alle auf Partitionen auf der gleichen Festplatte basieren, dann werden Sie keine Performance Vorteile erzielen. Es ist zwar völlig zulässig mehere Partitionen der gleichen Platte als PVs zu verwenden, (this only makes sense for next free allocated logical volumes on those physical volumes). Bei IDE Platten bringen Stripe Sets nur bedingte Geschwindigkeitsvorteile, da auf Master und Slave Platte eines Adapters nicht parallel zugegriffen werden kann. <sect2>Question about order of drives in a lvm volume <p> I'm using quite a few ide-drives in a raid0 volume (hda -> hdh) and I came to think of that it would be good to know in which order I added the drives to the volume in case I need to remove one from the volume, is there any way I can get the order in which the drives are placed in the raid0 volume? (In a list like hda, hdc, hdb, hdg, ... etc) please try &dquot;lvdisplay -v /dev/YourVG/YourLV | less&dquot; and have a look at the information about distribution of the volume over the physical volumes. Tell me if that answers your question. BTW: if your RAID0 volume is spread over all the disks, you can't remove a disk because you can't remove a stripe without destroying the total volume. <sect1>Spiegelung von LVM Volumes <p> LVM selbst unterstützt keine Spiegelung sondern kümmert sich nur um die dynamische Belegung des Speicherplatzes. Die Spiegelung von Logischen Volumes kann durch den Einsatz von RAID Hardware oder der Verwendung von MD, einem Software RAID, erreicht werden. Diese Trennung sorgt für eine einfachere und damit stabilere Systemarchitektur. Aus diesem Grund ist auch keine Integration der beiden Funktionen vorgesehen. MD erweitert den Kernel um die Möglichkeit der RAID 1, 4 und 5 Softwarespiegelung. LVM kann problemlos über MD eingesetzt werden. Alternativ kann sich der Einsatz von leichter zu Administrierender RAID Hardware anbieten. LVM erweitert die RAID Hardware so um die Flexibilität der dynamischen Speicherplatz Managments. (Siehe Kapitel "Referenzen" für Verweise auf RAID Literatur). <sect1>Andere Filesysteme und LVM <p> <sect2>ReiserFS <p> Einige Benutzer setzen ReiserFS zusammen mit LVM produktiv ein. Generelle Unverträglichkeiten gibt es nicht. <sect1>RAW Devices mit LVM <p> <sect2>Anlegen eines RAW devices <p> <sect1>LVM deaktivieren <p> http://sdb.suse.de/sdb/de/html/lvm.html Bezieht sich auf SuSE Linux: Version 6.3 Symptom: Sie haben in YaST den Punkt &dquot;Logical Volume Manager konfigurieren&dquot; ausgewählt. Die darauf folgende Frage haben Sie mit &dquot;Nein&dquot; beantwortet. Jedoch sucht der LVM beim Booten immer nach Logical Volumes. Ursache: Ein Fehler sorgt dafür, daß auch beim Beantworten der obigen Frage mit &dquot;Nein&dquot; der LVM beim Booten gestartet wird. Lösung: Löschen Sie einfach die Datei /etc/lvmtab und das Verzeichnis /etc/lvmtab.d. Auf der Kommandozeile können Sie das als root folgendermaßen machen: <verb>rm -r /etc/lvmtab* </verb> Jetzt wird beim Booten nicht mehr nach Logical Volumes gesucht. <sect1>Mehrere (LVM) Partitionen auf einer Festplatte <p> Für Test- und Übungskonfigurationen können Sie mehr als eine LVM Partition auf einer Festplatte haben. Dies ist im Fall eines Stripe Sets aber nicht zu empfehlen, da Sie eine Performance Einbusse haben werden. <sect1>ext2 Volumes Online vergrössern <p> Es gibt einen <url url="http://www-mddsp.enel.ucalgary.ca/People/adilger/online-ext2/" name="Kernel Patch"> der die Erweiterung eines gemounteten und aktiven ext Volumes ermöglicht. <sect1>Snapshots <p> Snapshots are virtual copies of logical volumes. Such a copy is read only and doesn't change when you write to the cloned volume. This is often used for backups: If you backup a filesystem while it's in use, you may end up with an inconsistant or incomplete backup. (after you wrote the first half of your filesystem to tape, someone moves a file from the second half to the first one, so you miss it when you write the second half to tape, for example.) If you have snapshots, you create the snapshot at one moment and then write the (read only) snapshot to tape. Support for multiple snapshot logical volumes per original logical volume to for eg. enable consistent online backups or recovery in filesystems and database systems. (lvremove, lvcreate, lvchange,lvextend,lvreduce) <verb>&dquot;lvcreate --size 100m --snapshot --name snap /dev/vg00/lvol1&dquot; </verb> creates a snapshot logical volume named /dev/vg00/snap wich gains access to the contents of /dev/vg00/lvol1 at snapshot logical volume creation time. <verb>lvcreate </verb> <verb> {-l/--extents LogicalExtentsNumber | </verb> <verb> -L/--size LogicalVolumeSize[kKmMgGtT]} </verb> <verb> [-c/--chunksize ChunkSize] </verb> <verb> -s/--snapshot -n/--name SnapshotLogicalVolumeName </verb> <verb> LogicalVolumePath [PhysicalVolumePath...] </verb> Die 'size' gibt dabei an, wieviel sich am Originalfilesystem ändern darf bevor der Snapshot unbrauchbar wird. Im Idealfall also die Size genausogroß wählen wie das Originalfilesystem. Im Augenblick sind die Snapshots unter LVM noch nicht beständig, d.h. sie überleben keinen Reboot oder eine Volumegroup Deaktivierung. Die Beständigkeit wird in einer der nächsten Versionen hinzugefügt. <sect1>Austauschen einer defekten Festplatte <p> <sect>Installieren der Sourcen <p> <sect1>Patchen des Kernels <p> <sect1>Compilieren der LVM-Tools <p> <sect1>Benutzen des lvm-RPM <p> <sect>Funktionsweise von LVM (detailiert) <p> <sect>Diagnose <p> <sect1>Was bedeuten die Ausgaben der einzelnen display Befehle? <p> pvdisplay -v , vgdisplay -v, lvdisplay -v, vgscan -v (vg database aktualisieren), lvscan -v, pvscan -v <sect1>Warum kann ich keine Volume Group "mygroup" anlegen? <p> Mögliche Ursachen: <itemize> <item>Sie können keine Volume Group anlegen, derren Namen es schon gibt. <item>Sie können augenblicklich nicht mehr als 99 Volume Groups anlegen. <item>Sie können nur initialisierte Physical Volumes verwenden (siehe pvcreate(8). </itemize> <sect1>Warum funktioniert das Anlegen eines Physikalischen Volumes (PV) mit pvcreate(8) nicht? <p> Haben Sie beim anlegen der Partition mit fdisk(8) die Id der Partition auf 0x8e gesetzt? (Ältere Version von LVM haben die Id 0xfe verwendet). Eventuell meldet pvcreate(8), dass das PV bereits initalisiert wurde. Sie können die Operation erzwingen, indem Sie die Option &dquot;pvcreate -f[f] ...&dquot; verwenden. (Vorsicht: Verwenden Sie dies nicht bei einem Physikal Volume, dass zu einer anderen Volume Group gehört!) <sect1>Warum kann ich ein Logisches Volume (LV) nicht erweitern? <p> Your volume group is full or you've already reached the maximum logical volume size in that volume group. Logical volume size is limited by the size of the physical extents times their maximum amount, which only can be set at volume group creation time. The default physical extent size is 4MB which limits ;-) logical volumes to a maximum of 256 Gigabyte (see vgcreate(8), vgdisplay(8)). If your volume group isn't full or you didn't reach the current logical volume size limit, your logical volume may have striped or contiguous allocation policy. Have a look at the physical volumes with vgdisplay or pvdisplay(8) to figure out, if there are not enough free (contiguous) physical extents. <sect1>Ich kann ein oder mehrere Logische Volumes nicht von einem Physikalischen Volume mit pvmove(8) wegschieben. Warum? <p> Look at the free space on all destination disks you want to use (or which are implicit used) AND at the attributes of the logical volumes to be moved. You can't move a contiguous logical volume when there isn't enough free contiguous space on any destination disk. In this case you can think about changing from contiguous allocation policy to next free and do the attribute change with lvchange(8). You can't move a striped logical volume either, if there isn't enough space for the complete stripe on any destination physical volume. You can't move to physical volumes which are NOT allocatable. Think about changing this with pvchange(8). <sect1>Warum kann ich eine Volume Group / ein Logisches Volume nicht umbenennen? <p> Volume Groups und/oder Logische Volumes müssen vor dem Umbennen deaktiviert werden. (siehe auch lvrename(8), vgrename(8)). <sect1>Während eines Systemabsturzes lief gerade ein LVM Befehl. Was nun ...? <p> Bring your system back online and look at the volume group backup files in /etc/lvmconf. There's at least one called /etc/lvmconf/VolumeGroupName.conf and possible more in the backup history called /etc/lvmconf/VolumeGroupName.conf.*.old. You can use these backup files to bring the configuration back to the one before the crash (see vgcfgrestore(8)). <sect1>Warum sind Logische Volumes auf eine Grösse von 256 GB beschränkt? <p> This is NO absolute limit but it depends on the physical extent size you configured at volume group creation time. Please use option -s of the vgcreate command to give a larger physical extent size. For example with a physical extent size of 524288 KB (512 MB) you are able to map a logical volume of 32 Terabyte. Remember that current Linux kernels are limited to 1 Terabyte. <sect1>Warum kann ich meine Volume Group VGxy nicht aufteilen? <p> (Why can't i split my volume group my_vg? ) The physical volumes you want to split of into another volume group may NOT have logical extents of logical volumes staying in the original volume group you started with. Please use pvmove to seperate the logical volumes. <sect1>Warum kann ich meine zwei VGs VGx und VGy nicht zusammenführen (mergen)? <p> (Why can't i merge my two volume groups my_vg1 and my_vg2? ) A merged volume group can't go beyond the physical or logical volume limits of the destination volume group. This means for eg. that you can't merge my_vg1 with 20 logical volumes and my_vg2 with 30 logical volumes getting my_vg1, if my_vg1 has a 31 logical volume limit. You are only able to merge (up to now) volume groups with equal physical extent sizes. <sect1>Wie kann zugriffs-intensive Teile eines LV auf ein anderes Physikalisches Volume verschieben? <p> (How can i move parts of my logical volume with very intensive i/o to a different physical volume? ) Please look at pvmove(8) and use the logical extent syntax to do the job. <sect1>Ich kann ein LV nicht erstellen und vgdisplay verweisst auf ein Limit von 256 LVs ... <p> ... es handelt sich aber erst um mein 211tes Logisches Volume. Was ist das Problem? Das Maximum von 256 Logischen Volumes (LV) bezieht sich auf die LVs aller Volume Groups (VG). Sie müssen also eventuell LVs in anderen VGs löschen, bevor Sie ihr neue LV anlegen können. <sect>Referenz <p> <sect1>Kommandos-Übersicht <p> Prefix: <itemize> <item>pv, vg, lv </itemize> Befehle: <itemize> <item><prefix>create, <prefix>remove, <prefix>display, <prefix>change </itemize> Schalter: <itemize> <item>-v ( = verbose = ausführliche Ausgabe) </itemize> Exitcode: <itemize> <item>0 OK <item>>0 Fehler </itemize> Kommandos <itemize> <item>pvcreate: Anlegen (formatieren) eines PV <item>vgcreate: Anlegen einer VG <item>lvcreate: Anlegen eines LV <item>pvdisplay: Anzeige einer PV, Option -v <item>vgdisplay: Anzeige einer VG, Option -v <item>lvdisplay: Anzeige einer LV, Option -v <item>pvmove: Verschieben der PE von einer PV zu einer anderen innerhalb einer VG <item>lvextend: eine LV in der Größe ändern (macht beim Filesystem noch keinen Sinn) <item>Shutdown & Boot <item>vgchange -a n: Deaktivieren von VG's <item>vgscan: Suche alle potentiellen Devices nach VG's ab <item>vgchange -a y: Aktivieren von VG's <item>vgexport: Eine VG aus dem System entfernen (ohne Löschen) <item>vgimport: Eine exportierte VG im System einbinden </itemize> <sect1>deutsche und englische Version des Howtos <p> Die deutsche Version des "LVM Howto" und der englische "Beginners Guide to LVM" existieren als unabhängige Howtos, die allerdings immer wieder aneinander angeglichen werden. Wir haben diese Arbeitsweise der "Übersetzung in eine Richtung" vorgezogen, damit sich deutschsprachige LVM User leichter einbringen können. Dies hat allerdings zur Folge, dass die Inhalte der beiden Dokumente abweichen können. Die aktuellste Version dieses Howtos finden Sie unter <htmlurl url="http://litefaden.com/lite00/lvm/" name="http://litefaden.com/lite00/lvm/">. <sect1>Quellen <p> <itemize> <item>'man lvm' und man pages der einzelnen Befehle <item><url url="http://linux.msede.com/lvm/ " name="LVM Homepage"> <item> <url url="http://linux.msede.com/lvm/mlist/archive/" name="Archiv der LVM Mailing Liste "> <item> <url url="http://sdb.suse.de/sdb/de/html/keylist.LVM.html" name="SuSE Support Datenbank: Stichwort LVM "> <item> <url url="ftp://linux.msede.com/lvm/howto/" name="Beginners Guide to LVM (en) von Peter Wüstefeld"> <item> <url url="http://www.linuxfocus.org/Deutsch/January1999/article21.html" name="Installation und Konfiguration eines RAID Systemes"> <item> <url url="http://www.kinderwunsch.net/marvelinux/DE-Software-RAID-HowTo/DE-Software-RAID-HOWTO.html" name="Installation und Konfiguration eines RAID Systemes"> <item> <url url="http://linas.org/linux/Software-RAID/Software-RAID.html (en)" name="MD Software-RAID HOWTO englisch"> <item> <url url="http://devlinux.com/projects/reiserfs/" name="Homepage ReiserFS"> </itemize> <sect1>Credits <p> Heinz Mauelshagen <linux-lvm@ez-darmstadt.telekom.de> für LVM. Klaus Franken <Klaus.Franken@fth2.siemens.de> für Howto Version 0.2, die Basis für die Arbeit an diesem Howto. Peter Wüstefeld <Peter.Wuestefeld@resnova.de> <sect2>Danke für den Input von ... <p> <itemize> <item>Jan Niehusmann <list039@gondor.com> </itemize> <sect1>Author und Feedback <p> Feedback, Ergänzungen, neue Kapitel , Übersetzungen von Textstellen bitte an Richard Heider <htmlurl url="mailto:lvm-howto@litefaden.com" name="<lvm-howto@litefaden.com> ">senden. Bei Anmerkungen und Fehlerverbesserungen bitte Howto-Version und Kapitel angeben. $Id: lvm-howto-de.sgml,v 1.0.2.2 2000/04/05 08:14:35 rhj Exp $ </article>