#This file was created by Wed Apr 5 09:40:14 2000 #LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team \lyxformat 2.15 \textclass linuxdoc \language german \inputencoding latin1 \fontscheme default \graphics default \paperfontsize 10 \spacing single \papersize Default \paperpackage a4 \use_geometry 0 \use_amsmath 0 \paperorientation portrait \secnumdepth 4 \tocdepth 3 \paragraph_separation indent \defskip medskip \quotes_language english \quotes_times 2 \papercolumns 1 \papersides 1 \paperpagestyle default \layout Title \added_space_top vfill \added_space_bottom vfill Logical Volume Manager (LVM) Howto - deutsche Version \layout Author Richard Heider \layout Date 1.0 ($Revision: 1.1 $), $Date: 2004/02/16 14:41:31 $ \layout 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. \layout Standard \begin_inset LatexCommand \tableofcontents \end_inset \layout Section Grundlagen \layout Standard 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. \layout Subsection Was ist LVM? \layout Standard 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. \layout Standard Der Logical Volume Driver 0.8final ist seit Linux 2.3.47 Bestandteil des Standard Kernels. \layout Standard 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. \layout Subsubsection Vorteile von LVM \layout Itemize Filesysteme und damit Dateien können grösser sein, als die verwendeten Festplatt en . \layout Itemize Es können viele Partitionen angelegt werden; 256 insgesamt. \layout Itemize 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. \layout Itemize Filesysteme können in Stripe Sets auf mehrere (SCSI) Platten verteilt werden wodurch eine besser I/O Geschwindigkeit erreicht werden kann. \layout Itemize Devices können mit sprechenden Namen versehen werden (z.B. für Kunden-ID). \layout Itemize Die Filesysteme können dem wächsenden Platzbedarf bei Bedarf angepasst werden. Bestimmte Filesysteme können erweitert werden ohne sie komplett neu aufsetzen/f ormatieren zu müssen, falls ein entsprechendes Tool existiert. \layout Itemize 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. \layout Subsubsection Wer braucht LVM? \layout Standard 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 \begin_inset Quotes eld \end_inset Raid0 \begin_inset Quotes erd \end_inset die Zugriffe auf mehrere Platten zu verteilen um performanter zu sein. \layout Subsection Funktionsweise des LVM \layout Standard 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. \layout Standard Am Anfang steht natürlich auch beim LVM die real existierende Festplatte oder die Festplatten Partition. Sie wird mit \emph on Physical Volume (PV) \emph toggle bezeichnet. Diese wird zu Beginn in eine \emph on Volume Group (VG) \emph toggle aufgenommen, dies ist ein Pool des gesamten zur Verfügung stehenden Speicherpla tzes. Aus diesem Pool werden nun \emph on logische Volumes (LV) \emph toggle nach Bedarf erzeugt. Das Betriebsystem greift nun auf diese logischen Partitionen ( \emph on LV \emph toggle ) anstelle der reellen Partitionen ( \emph on PV \emph toggle ) 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. \layout Standard Der LVM erlaubt wesentliche Eingriffe, wie hinzufügen von PVs und erweitern von LVs sogar im laufenden System. Dies setzt natürlich \begin_inset Quotes eld \end_inset Hot-Swapable \begin_inset Quotes erd \end_inset Hardware voraus, die für den Ein- und Ausbau in einem laufenden System konzipiert wurde. \layout Standard 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. \layout Subsection Abkürzungen \layout Itemize LVM: Logical Volume Manager \layout Itemize PV: Physical Volume = Festplatte oder Partition \layout Itemize PE: Physical Extend = Belegungseinheit des PV, Block \layout Itemize VG: Volume Group \layout Itemize LV: Logical Volume = virtuelle Partition ( /dev/VolumeGroupName/LogicalVolumeNam e ); Dies ist die logische Einheit, die Träger des Filesystems ist. \layout Itemize LE: Logical Extend = Belegungseinheit des LV, Block \layout Itemize VGDA: Volume Group Descriptor Area = reservierter Bereich auf dem PV für die Datenbank mit den PE <==> LE Zuordnungen. \layout Subsection Warnung \layout Standard 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 umkonfigur ieren. \layout Subsection Haftung \layout Standard Für die hier vorgestellten Verfahren übernehme ich keine Haftung. Arbeiten Sie nie ohne Backup! \layout Subsection Copyright \layout Standard Dieses Dokument ist urheberrechtlich geschützt. Das Copyright liegt bei Richard Heider. \layout Standard Das Dokument darf gemäß der GNU \begin_inset LatexDel \url{ \end_inset http://www.tu-harburg.de/dlhp/HOWTO/DE-GPL.html \begin_inset LatexDel }{ \end_inset General Public License \begin_inset LatexDel } \end_inset 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. \layout Section Erstinstallation von LVM - ein einfaches Scenario \layout Standard 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. \layout Subsection Annahmen \layout Standard 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). \layout Standard 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: \layout Itemize Da wir die LVs erst unter dem laufenden System einrichten können, installieren wir zuerst ein möglichst minimales Linux. \layout Itemize Unter diesem System initialisieren wir den LVM, die Logischen Volumes und legen die neuen Filesysteme an. \layout Itemize Die bestehenden Verzeichnisse /usr /opt und /home werden auf die neuen Filesyste me verschoben. \layout Itemize Das System wird so eingerichtet, dass die neuen Filesysteme automatisch beim Systemstart gemountet werden. \layout Itemize Die Linux Installation kann jetzt auf ein vollständiges System erweitert werden. \layout Subsection Planung der Filesysteme \layout Standard In diesem Beispiel wird nur eine einfache Planung vorgegeben. Weitergehende Überlegungen finden Sie später im Kapitel \begin_inset Quotes eld \end_inset komplexere Überlegungen und Planungen \begin_inset Quotes erd \end_inset . \layout Standard 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: \layout Standard ***TABLE*** \layout Standard \added_space_top 0.3cm \added_space_bottom 0.3cm \LyXTable multicol5 8 3 0 0 -1 -1 -1 -1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 0 8 1 0 "" "" 8 1 0 "" "" 8 1 1 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 1 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" Filesystem \newline Grösse \newline Mountpoint \newline /dev/hda2 \newline 470 MB \newline / \newline /dev/hda1 \newline 30 MB \newline /boot \newline /dev/vg01/lvol1 \newline 1,5 GB \newline /usr \newline /dev/vg01/lvol2 \newline 500 MB \newline /opt \newline /dev/vg01/lvol3 \newline 10 GB \newline /home \newline freier Plattenplatz \newline 27,5 GB \newline (wird bei Bedarf zur Erweiterung der vorhanden LVs verwendet) \newline \newline \newline \layout Standard ***TABLE*** \layout Standard 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. \layout Subsection Vorgehensweise \layout Standard Im Beispiel werden nur die relevanten Optionen der Befehle erwähnt. Für die komplette Syntax lesen Sie bitte die Man Pages. \layout Subsubsection Betriebsystem Installation und Partitionieren der Festplatten. \layout Standard 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: \layout Standard ***TABLE*** \layout Standard \added_space_top 0.3cm \added_space_bottom 0.3cm \LyXTable multicol5 7 4 0 0 -1 -1 -1 -1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 8 1 0 "" "" 8 1 0 "" "" 8 1 0 "" "" 8 1 1 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" Platte \newline Partition \newline Grösse \newline Id/Typ der Partition \newline hda \newline /dev/hda1 \newline 30 MB \newline 0x83 Linux native \newline hda \newline /dev/hda2 \newline 470 MB \newline 0x83 Linux native \newline hda \newline /dev/hda3 \newline 19,5 GB \newline 0x8e Linux LVM \newline \newline \newline \newline \newline hdb \newline /dev/hdb1 \newline 100 MB \newline 0x82 (Linux swap) \newline hdb \newline /dev/hdb2 \newline 19,9 GB \newline 0x8e Linux LVM \layout Standard ***TABLE*** \layout Subsubsection Aktivieren des LVM \layout Standard 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. \layout Verbatim vgscan \layout Subsubsection Physical Volumes anlegen \layout Standard 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: \layout Verbatim pvcreate /dev/hda3 \newline pvcreate /dev/hdb2 \layout Subsubsection Volume Groups anlegen \layout Standard Jetzt legen wir mit 'vgcreate ' unsere Volume Group an und nennen sie \begin_inset Quotes eld \end_inset vg01 \begin_inset Quotes erd \end_inset : \layout Verbatim vgcreate vg01 /dev/hda3 /dev/hdb2 \layout Subsubsection Logische Volumes anlegen. \layout Standard 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 \begin_inset Quotes eld \end_inset verteilen \begin_inset Quotes erd \end_inset können, als wir bei vgcreate in die Volume Group \begin_inset Quotes eld \end_inset hineingesteckt \begin_inset Quotes erd \end_inset haben, und zwar in Form der beiden Partitionen hda3 und hdb2. (lvcreate -L -n ). \layout Verbatim lvcreate -L 1500M -n lvol1 vg01 \newline lvcreate -L 500M -n lvol2 vg01 \newline lvcreate -L 10G -n lvol3 vg01 \layout Subsubsection Filesysteme anlegen \layout Standard 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. \newline Mit mke2fs legen wir die ext2 Filesysteme an: \layout Verbatim mke2fs /dev/vg01/lvol1 \newline mke2fs /dev/vg01/lvol2 \newline mke2fs /dev/vg01/lvol3 \layout Subsubsection Filesysteme verwenden \layout Standard Trotz der minimalen Linux Installation liegen wahrscheinlich schon eine Dateien in den Ordnern /usr /opt und /home. Wir müssen diese \begin_inset Quotes eld \end_inset alten \begin_inset Quotes erd \end_inset Verzeichnisse also zuerst umbenennen und dann die Mountpoints anlegen, bevor wir die \begin_inset Quotes eld \end_inset neuen \begin_inset Quotes erd \end_inset Filesyssteme mounten können. Anschliessend müssen wir die Inhalte der \begin_inset Quotes eld \end_inset alten \begin_inset Quotes erd \end_inset Verzeichnisse in die \begin_inset Quotes eld \end_inset neuen \begin_inset Quotes erd \end_inset 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. \layout Verbatim mv /usr /usr.old \newline mv /opt /opt.old \newline mv /home /home.old \newline mkdir /usr \newline mkdir /opt \newline mkdir /home \newline mount /dev/vg01/lvol1 /usr \newline mount /dev/vg01/lvol2 /opt \newline mount /dev/vg01/lvol3 /home \newline cp -avx /usr.old/* /usr \newline cp -avx /opt.old/* /opt \newline cp -avx /home.old/* /home \layout Subsubsection fstab anpassen \layout Standard 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: \layout Verbatim /dev/vg01/lvol1 /usr ext2 defaults 1 2 \newline /dev/vg01/lvol2 /opt ext2 defaults 1 2 \newline /dev/vg01/lvol3 /home ext2 defaults 1 2 \layout Subsubsection Programmpackete nachinstallieren \layout Standard 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. \layout Section Arbeiten mit LVM \layout Standard Hier werden die wesentlichen Administationsvorgänge beschrieben. \layout Subsection Booten \layout Standard Eventuell muss das LVM-Modul geladen werden. Normalerweise können die gespeicherte LVM-Konfiguration in den Dateien/Verzeich nissen /etc/lvmtab, /etc/lvmconf, /etc/lvmtab.d wieder benutzt werden: \layout Verbatim vgchange -a y \layout Standard 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. \layout Verbatim vgscan -v \layout Standard Es ist Zweckmässig vgscan jedesmal beim booten, vor dem Arbeiten mit logischen Volumes automatisch zu starten. Danach ebenfalls mit vgchange -a y aktivieren. \layout Subsection Shutdown \layout Standard 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: \layout Verbatim vgchange -a n \layout Subsection Anlegen einer Volume Group (VG) \layout Standard 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: \layout Verbatim vgcreate -v vg00 /dev/loop7 \layout Subsection Umbenennen einer Volume Group (VG) \layout Standard 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. \layout Verbatim vgchange -a n vg00 \newline vgrename vg00 myvg \newline vgchange -a y myvg \layout Subsection Vorbereiten der Physical Volume (PV) \layout Standard 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: \layout Verbatim pvcreate /dev/loop7 \layout Standard Falls sich dort schon ein PV konfiguriert wurde, zum Überschreiben ev. Parameter -f oder -ff angeben. \layout Subsection Hinzufügen eines PV zu einer VG \layout Standard Erstellen Sie die Partition und setzen Sie die Partions ID auf 0x8e um sie als LVM Partition zu kennzeichnen. Beispiel für \begin_inset Quotes eld \end_inset sda1 \begin_inset Quotes erd \end_inset und \begin_inset Quotes eld \end_inset vg01 \begin_inset Quotes erd \end_inset : \layout Verbatim [FDISK BEISPIEL FEHLT NOCH] \newline pvcreate /dev/sda1 \newline vgextend vg01 /dev/sda1 \layout Standard Die erste Partition wird mit 'vgcreate vg01 /dev/sda1' hinzugefügt, da die Volume Group dann ja noch nicht existiert. \layout Subsection Entfernen eines PV aus einer VG \layout Verbatim pvmove /dev/sdx1 \newline vgreduce vg0x /dev/sdx1 \layout Subsection Verlagerung eines PV auf ein anderes PV \layout Standard Manchmal ist es Notwendig, die Daten von ein einem physikalischen Volume auf ein anderes zu Verschieben. Gründe dafür können sein, \layout Itemize dass Sie eine auf Loop-Devices basierende Testkonfiguration in eine performanter e Konfiguration umwandeln wollen, in der die PVs auf eigenen Platten liegen. \layout Itemize dass Sie eine Festplatte ausbauen oder durch eine neuere (grössere) ersetzen wollen. \layout Standard 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 :-) \layout Standard Beispiel 1: hda1 in vg0x soll \begin_inset Quotes eld \end_inset frei gemacht \begin_inset Quotes erd \end_inset werden, damit die Festplatte ausgebaut werden kann: \layout Verbatim pvmove /dev/hda1 \newline vgreduce vg0x /dev/hda1 \layout Standard 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. \layout Verbatim (Ggf. mit fdisk Partition-ID von hda1 auf 0xfe setzen) \newline pvcreate -v /dev/hda1 \newline vgextend -v vg00 /dev/hda1 \newline pvmove -v /dev/loop7 /dev/hda1 \newline vgreduce -v vg00 /dev/loop7 \layout Subsection Anlegen und Benutzen eines Logical Volume (LV) \layout Standard 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. \layout Standard Beispiel: LV mit dem Namen test mit 10 MB in der VG vg00: \layout Verbatim lvcreate -v \protected_separator -L10M -n test vg00 \layout Standard LVM legt damit ein Block-Device /dev/vg00/test an, auf das jetzt normal zugegriffen werden kann: \layout Verbatim mkfs -t ext2 /dev/vg00/test \newline mount /dev/vg00/test /tmp/lvmtest/mnt0 \layout Standard (... und/oder fstab Eintrag) \layout Subsection Vergrössern eines Logischen Volumes (LV) \layout Standard Sie können ein LV /dev/test_vg/test_lv auf 1600MB erweitern, in dem Sie eine relative Grössenangabe verwenden \layout Verbatim "lvextend -L+100 /dev/test_vg/test_lv" \layout Standard oder eine absolute Grössenangabe \layout Verbatim "lvextend -L1600 /dev/test_vg/test_lv" \layout Standard Beispiel zusammen mit Erweiterung des Filesystems: \layout Verbatim lvextend -L+3G /dev/vg01/lvol01 \newline e2fsadm -L+3G /dev/vg01/lvol01 \layout Standard Eventuell /var/state/nfs/devtab anpassen falls nfs freigabe bestand. (Warum??? - Bitte um Input - richard) \layout Subsection Verkleinern eines logischen Volumes (LV) \layout Standard Das LV '/dev/test_vg/test_lv' soll um 700 LEs auf 900 LEs verkleinert werden. Die logical Extents können relativ angegeben werden: \layout Verbatim "lvreduce -l-700 /dev/test_vg/test_lv" \layout Standard oder die gewünschte Grösse kann in absoluten PEs angegeben werden: \layout Verbatim "lvreduce -l900 /dev/test_vg/test_lv" \layout Subsection Umbenennen eines Logischen Volumes (LV) \layout Standard Nur geschlossene LVs können umbenannt werden. Vergessen Sie nicht nach dem Umbennen ggf. Ihren Eintrag in '/etc/fstab' zu ändern. \layout Verbatim "lvchange -an /dev/whatever/test_lv" \newline "lvrename \protected_separator /dev/whatever/test_lv \protected_separator /dev/whatever/whatvolume" \newline "lvchange -ay /dev/whatever/whatvolume" \layout Standard Alternativ kann folgender Aufruf von lvrename verwendet werden: \layout Verbatim "lvrename \protected_separator whatever test_lv whatvolume" \layout Subsection Anpassen der Grösse eine ext2 Filesystems \layout Standard 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 \begin_inset LatexDel \htmlurl{ \end_inset http://www.powerquest.com/ \begin_inset LatexDel }{ \end_inset www.powerquest.com \begin_inset LatexDel } \end_inset . \layout Verbatim e2fsadm -L+100 /dev/test_vg/another_test_lv \newline \layout Subsection Anlegen eines Swap-Devices \layout Standard Es soll ein 50 MB Volume in vg00 zur Verwendung als Swap Partition erzeugt und verwendet werden. \layout Verbatim lvcreate -L50M -n swap1 vg00 \newline mkswap /dev/vg00/swap1 \newline swapon /dev/vg00/swap1 \layout Standard Eintrag in /etc/fstab: \layout Verbatim /dev/vg00/swap1 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator swa \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator swap \protected_separator \protected_separator \protected_separator defaults \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 0 0 \layout Subsection Test Konfigurationen mit Loop-Devices \layout Standard 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: \layout Itemize LVM erkennt anscheinend nur /dev/loop7 . \layout Itemize Eine Volume-Group (VG) muß mindestens 20 MB groß sein. \layout Standard Einrichtung: \layout Standard Datei in bestimmter Größe anlegen: \layout Verbatim dd if=/dev/zero of=/tmp/lvmtest/loop bs=1024 count=21000 \layout Standard Loop-Device konfigurieren: \layout Verbatim losetup /dev/loop7 /tmp/lvmtest/loop \layout Standard Jetzt kann man auf /dev/loop7 wie auf ein normales Block-Device zugreifen. Wird /dev/loop7 nicht mehr gebraucht, mit Loop-Device konfigurieren: \layout Verbatim losetup -d /dev/loop7 \layout Standard die Verbindung lösen; danach kann die Datei /tmp/lvmtest/loop gelöscht werden. \layout Section komplexere Überlegungen und Konfigurationen \layout Subsection Überlegungen zur Volumegroup \layout Quote Dies sind einige Überlegungen warum man mehr als einer Volumegroup verwenden will und wie man sich seine Volume Groups organisiert. Auf vielen \begin_inset Quotes eld \end_inset einfachen \begin_inset Quotes erd \end_inset 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 \begin_inset Quotes eld \end_inset billigen \begin_inset Quotes erd \end_inset IDE Speicherplatz und \begin_inset Quotes eld \end_inset performanteren \begin_inset Quotes erd \end_inset SCSI Speicherplatz oder Speicherplatz auf einem (redundanten) Hardware RAID. \layout Standard Mehrere PVs in einer Volume Group erhöhen das statistische Ausfallrisiko. \layout Standard Nur wenige oder sogar nur ein PV in einer VG schränken die Flexibilität in der Speicherzuordnung ein. \layout Standard \begin_inset Quotes eld \end_inset Removable Disks \begin_inset Quotes erd \end_inset 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 "kira" mal temporär an "dax" gehängt wird. Würden beide Systeme ihre erste Volume-Group vg00 nennen, wäre das nicht so einfach. \layout Standard 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. \layout Subsection Booten von einem logical Volume \layout Standard Linux benötigt zum booten mindestens ein boot volume, das nicht auf LVM basiert. (Für Details siehe Kapitel \begin_inset Quotes eld \end_inset Booten von einem logical Volume \begin_inset Quotes erd \end_inset .) Es empfiehlt sich aber auch das root volume auf einer gewöhnlichen Partition zu haben. \newline \layout Standard Can i have my root filesystem in a logical volume? \layout Standard 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). \layout Standard lvmcreate_initrd creates a new compressed initial \protected_separator ramdisk \layout Standard in /boot/initrd.gz. \protected_separator The initial ramdisk contains all nec­ \layout Standard essary binaries, shared libraries and a \protected_separator linuxrc \protected_separator file \protected_separator to \layout Standard switch \protected_separator to \protected_separator a \protected_separator logical \protected_separator volume \protected_separator based root filesystem. \protected_separator To \layout Standard build an initial ramdisk for a not running \protected_separator but \protected_separator generated \layout Standard kernel add the KernelVersion parameter (for eg. 2.3.25) on \layout Standard the command line. \layout Standard The necessary actions to change your system into \protected_separator a \protected_separator "root \layout Standard on logical volume" one are: \layout Standard Create \protected_separator a \protected_separator small (~20MB) partition which is bios reachable \layout Standard to hold the /boot filesystem (if you already have a \protected_separator small \layout Standard partition based root filesystem this can as well be used). \layout Standard If you like to standalone boot from this partition in case of an emergency, copy all necessary binaries and libraries \layout Standard to that filesystem as \protected_separator well \protected_separator and \protected_separator create \protected_separator a \protected_separator corresponding \layout Standard /etc/lilo.conf \protected_separator \protected_separator entry. \protected_separator In \protected_separator order \protected_separator to \protected_separator be \protected_separator able \protected_separator to \protected_separator edit \layout Standard lilo.conf in case you booted standalone, you \protected_separator should \protected_separator move \layout Standard /etc/lilo.conf \protected_separator to \protected_separator /boot/lilo.conf \protected_separator and create a symbolic \layout Standard link to it in /etc instead. \protected_separator This is \protected_separator not \protected_separator needed \protected_separator if \protected_separator you \layout Standard have \protected_separator a \protected_separator boot/root \protected_separator floppy which contains the LVM binaries \layout Standard and the library in addition. \layout Standard Create all logical volumes you need (for \protected_separator root, \protected_separator usr, \protected_separator opt \layout Standard etc.), create filesystems in them, mount them and transfer \layout Standard all files from the partition based \protected_separator filesystems \protected_separator into \protected_separator the \layout Standard logical volumes based ones. \layout Standard You have to setup your /etc/lilo.conf with a boot configuration like: \layout Verbatim image = /boot/vmlinuz \newline initrd = /boot/initrd.gz \newline root = /dev/YourVG/YourRootLV \newline label = rootonlv \newline append = "ramdisk_size=8192" \layout Standard Replace \protected_separator YourVG and YourRootLV by your actual volume group \layout Standard and root logical volume names. \protected_separator In addition to \protected_separator that \protected_separator your \layout Standard /etc/fstab in your root logical volume has to contain: \layout Verbatim /dev/YourVG/YourRootLV \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator / \protected_separator \protected_separator \protected_separator \protected_separator ext2 \protected_separator \protected_separator defaults \protected_separator \protected_separator 0 \protected_separator \protected_separator 1 \newline /dev/YourBootPartition \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator /boot ext2 \protected_separator \protected_separator defaults \protected_separator \protected_separator 0 \protected_separator \protected_separator 2 \newline /dev/YourVG/YourUsrLV \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator /usr \protected_separator ext2 \protected_separator \protected_separator defaults \protected_separator \protected_separator 0 \protected_separator \protected_separator 3 \newline /dev/YourVG/YourOptLV \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator /opt \protected_separator ext2 \protected_separator \protected_separator defaults \protected_separator \protected_separator 0 \protected_separator \protected_separator 4 \layout Standard etc. \layout Standard You \protected_separator can \protected_separator use \protected_separator other \protected_separator supported \protected_separator filesystem \protected_separator types as well \layout Standard (reiserfs for eg.) in case you generated support for those \layout Standard into your kernel. \protected_separator Run lilo, reboot and try... \layout Standard The \protected_separator partitions \protected_separator containing \protected_separator the \protected_separator former \protected_separator /usr, \protected_separator /opt etc. \layout Standard filesystems can now be used as \protected_separator physical \protected_separator volumes. \protected_separator pvcre­ \layout Standard ate(8) them and add them for eg. to YourVG. \layout Standard lvcmcreate_initrd \protected_separator return 0 for success. 1 is returned in \layout Standard all other cases. \layout Standard 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 \begin_inset LatexCommand \htmlurl[http://www.freenet.de/y.e.t.i./]{http://www.freenet.de/y.e.t.i./} \end_inset \layout Subsection Ex- und importieren von VG's \layout Standard 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. \layout Verbatim vgexport tmpvg \layout Standard 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: \layout Verbatim vgimport newvg /dev/hdc1 \layout Subsection LVM Stripe Sets \layout Subsubsection Anlegen einer LV mit Stripes \layout Verbatim vgextend vg00 /dev/loop7 \newline lvcreate -i 2 -L20M -n striped vg00 \layout Subsubsection Umwandeln eines non-striped LVM in ein striped LVM \layout Standard Sie können lediglich ein Stripe Set anlegen und dann Ihre Daten von einem bestehenden LV dorthin verschieben. (Ist das richtig??? -richard) \layout Subsubsection Mein ge-striped-es LV arbeitet extrem langsam. \layout Standard 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. \layout Subsubsection Question about order of drives in a lvm volume \layout Standard 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? \layout Standard (In a list like hda, hdc, hdb, hdg, ... etc) please try "lvdisplay -v /dev/YourVG/YourLV | less" 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. \layout Subsection Spiegelung von LVM Volumes \layout Standard 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 Softwarespiegelu ng. 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 \begin_inset Quotes eld \end_inset Referenzen \begin_inset Quotes erd \end_inset für Verweise auf RAID Literatur). \layout Subsection Andere Filesysteme und LVM \layout Subsubsection ReiserFS \layout Standard Einige Benutzer setzen ReiserFS zusammen mit LVM produktiv ein. Generelle Unverträglichkeiten gibt es nicht. \layout Subsection RAW Devices mit LVM \layout Subsubsection Anlegen eines RAW devices \layout Subsection LVM deaktivieren \layout Standard http://sdb.suse.de/sdb/de/html/lvm.html \layout Standard Bezieht sich auf SuSE Linux: Version 6.3 \layout Standard Symptom: Sie haben in YaST den Punkt "Logical Volume Manager konfigurieren" ausgewählt. Die darauf folgende Frage haben Sie mit "Nein" beantwortet. Jedoch sucht der LVM beim Booten immer nach Logical Volumes. \layout Standard Ursache: Ein Fehler sorgt dafür, daß auch beim Beantworten der obigen Frage mit "Nein" der LVM beim Booten gestartet wird. \layout Standard Lösung: Löschen Sie einfach die Datei /etc/lvmtab und das Verzeichnis /etc/lvmta b.d. Auf der Kommandozeile können Sie das als root folgendermaßen machen: \layout Verbatim rm -r /etc/lvmtab* \layout Standard Jetzt wird beim Booten nicht mehr nach Logical Volumes gesucht. \layout Subsection Mehrere (LVM) Partitionen auf einer Festplatte \layout Standard 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. \layout Subsection ext2 Volumes Online vergrössern \layout Standard Es gibt einen \begin_inset LatexDel \url{ \end_inset http://www-mddsp.enel.ucalgary.ca/People/adilger/online-ext2/ \begin_inset LatexDel }{ \end_inset Kernel Patch \begin_inset LatexDel } \end_inset , der die Erweiterung eines gemounteten und aktiven ext Volumes ermöglicht. \layout Subsection Snapshots \layout Standard Snapshots are virtual copies of logical volumes. Such a copy is read only \layout Standard 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. \layout Standard Support for multiple snapshot logical volumes per original logical volume to for eg. enable consistent online backups or recovery in filesystems and database systems. \layout Standard (lvremove, lvcreate, lvchange,lvextend,lvreduce) \layout Verbatim "lvcreate --size 100m --snapshot --name snap /dev/vg00/lvol1" \layout Standard 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. \newline \layout Verbatim lvcreate \layout Verbatim \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator {-l/--extents LogicalExtentsNumber | \layout Verbatim \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator -L/--size LogicalVolumeSize[kKmMgGtT]} \layout Verbatim \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator [-c/--chunksize ChunkSize] \layout Verbatim \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator -s/--snapshot -n/--name SnapshotLogicalVolumeName \layout Verbatim \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator LogicalVolumePath [PhysicalVolumePath...] \layout Standard 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. \layout Standard 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. \layout Subsection Austauschen einer defekten Festplatte \layout Section Installieren der Sourcen \layout Subsection Patchen des Kernels \layout Standard Das Patchfile, hier /tmp/linux-2.2.12.lvm-0.8i.patch, ist in der Source-Distribution von LVM enthalten. Patch einspielen mit: \layout Standard cd /usr/src/linux \layout Standard patch -p1 < linux-2.2.12.lvm-0.8i.patch \layout Standard make oldconfig \layout Standard LVM kann auch als Modul gebaut werden, es sollte auch die /proc-Filesystemunters tützung aktiviert werden: \layout Standard * \layout Standard * Additional Block Devices \layout Standard * \layout Standard Logical volume manager (LVM) support (CONFIG_BLK_DEV_LVM) [N/y/m/?] (NEW) m \newline \layout Standard CONFIG_BLK_DEV_LVM: \newline \layout Standard This driver lets you combine several hard disks, hard disk partitions \layout Standard or even multiple devices into a volume group. Imagine a volume group as \layout Standard a kind of virtual disk. Logical volumes, which can be thought of as \layout Standard virtual partitions, can be created in the volume group. \layout Standard You can resize volume groups and logical volumes after creation time, \layout Standard corresponding to new capacity needs. Logical volumes are accessed as \layout Standard block devices named /dev/VolumeGroupName/LogicalVolumeName. \layout Standard For details see /usr/src/linux/Documentaion/LVM-HOWTO. \layout Standard To get the newest software see . \layout Standard Logical volume manager (LVM) support (CONFIG_BLK_DEV_LVM) [N/y/m/?] (NEW) M \layout Standard LVM information in proc filesystem (CONFIG_LVM_PROC_FS) [N/y/?] (NEW) Y \layout Standard Nachdem dieser Kernel aktiv ist, kann das LVM-Modul durch modprobe lvm geladen werden, siehe /var/log/messages und lsmod. \layout Standard Damit das LVM-Modul automatisch geladen werden kann, in /etc/conf.modules eintragen: \layout Standard alias block-major-58 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator lvm \layout Standard alias char-major-109 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator lvm \layout Subsection Compilieren der LVM-Tools \layout Subsection Benutzen des lvm-RPM \layout Section Funktionsweise von LVM (detailiert) \layout Standard Aus logischer Sicht stellt LVM ein Block-Device, z.B. /dev/vg00/test zur Verfügung. Das Block-Device ist in Blöcke zu 4MB (per Default) unterteilt, sogenannte Logical Extents (LE). \layout Standard Die Verwaltung des Speicherplatzes erfolgt in Blöcken, so genannten Extents. Das physikalische Volume ( \emph on PV \emph toggle ) wird in \emph on physikalische Extents (PE) \emph toggle aufgeteilt. Das logische Volume (LV) besteht aus logischen Extents (LE). Jeder logische Block (LE) verweist auf einen physikalischen Block (PE) gleicher Grösse. \layout Standard Die PV's sind genauso in Blöcke zu 4MB unterteilt, sogenannte Physical Extents (PE). \layout Standard \protected_separator \layout Standard LVM erstellt (und pflegt) intern eine Tabelle, in der jeder LE eine PE zugeordne t wird. \layout Standard \protected_separator \layout Standard Bsp: \layout Standard \protected_separator \layout Standard \protected_separator \layout Standard $ lvdisplay -v /dev/vg00/test \protected_separator \layout Standard --- Logical volume --- \layout Standard LV Name \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator /dev/vg00/test \layout Standard VG Name \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator vg00 \layout Standard LV Write Access \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator read/write \layout Standard LV Status \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator available \layout Standard LV # \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 1 \layout Standard # open \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 1 \layout Standard LV Size \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 12 MB \layout Standard Current LE \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 3 \layout Standard Allocated LE \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 3 \layout Standard Allocation \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator next free \layout Standard Read ahead sectors \protected_separator \protected_separator \protected_separator 120 \layout Standard Block device \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 58:0 \layout Standard \protected_separator \layout Standard --- Distribution of logical volume on 1 physical volume \protected_separator --- \layout Standard PV Name \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator PE on PV \protected_separator \protected_separator \protected_separator \protected_separator reads \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator writes \layout Standard /dev/loop7 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 3 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 9 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 440 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \layout Standard \protected_separator \layout Standard --- logical volume i/o statistic --- \layout Standard 9 reads \protected_separator 440 writes \layout Standard \protected_separator \layout Standard --- Logical extents --- \layout Standard LE \protected_separator \protected_separator \protected_separator PV \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator PE \protected_separator \protected_separator \protected_separator \protected_separator reads \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator writes \layout Standard 00000 /dev/loop7 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 00004 \protected_separator 7 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 440 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \layout Standard 00001 /dev/loop7 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 00005 \protected_separator 0 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 0 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \layout Standard 00002 /dev/loop7 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 00006 \protected_separator 2 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator 0 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \newline \newline \layout Standard If for example the capacity of a LV gets too small and your VG containing \layout Standard this LV is full, you could add another PV to that VG and simply extend \layout Standard the LV afterwards. \layout Standard If you reduce or delete a LV you can use the freed capacity for different \layout Standard LVs in the same VG. \newline \layout Standard The above scenario looks like this: \layout Verbatim /------------------------------------------ \backslash \newline | \protected_separator /--PV2--- \backslash \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator VG 1 \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator /--PVn--- \backslash \protected_separator \protected_separator \protected_separator | \newline | \protected_separator |-VGDA---| \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator |-VGDA-- | \protected_separator \protected_separator \protected_separator | \newline | \protected_separator |PE1PE2..| \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator |PE1PE2..| \protected_separator \protected_separator \protected_separator | \newline | \protected_separator | \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator \protected_separator ...... \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator | \newline | \protected_separator | \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator | \newline | \protected_separator | \protected_separator \protected_separator \protected_separator /----------------------- \backslash \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator | \newline | \protected_separator | \protected_separator \protected_separator \protected_separator \backslash -------LV 1------------/ \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator \protected_separator | \newline | \protected_separator | \protected_separator \protected_separator ..PEn| \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator | \protected_separator \protected_separator ..PEn| \protected_separator \protected_separator \protected_separator | \newline | \protected_separator \backslash --------/ \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \protected_separator \backslash --------/ \protected_separator \protected_separator \protected_separator | \newline \backslash ------------------------------------------/ \layout Standard PV 1 could be /dev/sdc1 sized 3GB \layout Standard PV n could be /dev/sde1 sized 4GB \layout Standard VG 1 could be test_vg \layout Standard LV 1 could be /dev/test_vg/test_lv \layout Standard VGDA is the volume group descriptor area holding the LVM metadata \layout Standard PE1 up to PEn is the number of physical extents on each disk(partition) \layout Standard Ausblick \layout Standard Version LVM 0.8 soll auch Mirror unterstützen. \layout Section Diagnose \layout Subsection Was bedeuten die Ausgaben der einzelnen display Befehle? \layout Standard pvdisplay -v , vgdisplay -v, lvdisplay -v, vgscan -v (vg database aktualisieren) , lvscan -v, pvscan -v \layout Subsection Warum kann ich keine Volume Group \begin_inset Quotes eld \end_inset mygroup \begin_inset Quotes erd \end_inset anlegen? \layout Standard Mögliche Ursachen: \layout Itemize Sie können keine Volume Group anlegen, derren Namen es schon gibt. \layout Itemize Sie können augenblicklich nicht mehr als 99 Volume Groups anlegen. \layout Itemize Sie können nur initialisierte Physical Volumes verwenden (siehe pvcreate(8). \layout Subsection Warum funktioniert das Anlegen eines Physikalischen Volumes (PV) mit pvcreate(8) nicht? \layout Standard Haben Sie beim anlegen der Partition mit fdisk(8) die Id der Partition auf 0x8e gesetzt? \layout Standard (Ältere Version von LVM haben die Id 0xfe verwendet). \layout Standard Eventuell meldet pvcreate(8), dass das PV bereits initalisiert wurde. Sie können die Operation erzwingen, indem Sie die Option "pvcreate -f[f] ..." verwenden. (Vorsicht: Verwenden Sie dies nicht bei einem Physikal Volume, dass zu einer anderen Volume Group gehört!) \layout Subsection Warum kann ich ein Logisches Volume (LV) nicht erweitern? \layout Standard 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. \layout Standard 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 allocatio n 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. \layout Subsection Ich kann ein oder mehrere Logische Volumes nicht von einem Physikalischen Volume mit pvmove(8) wegschieben. Warum? \layout Standard 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. \layout Standard 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). \layout Standard 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). \layout Subsection Warum kann ich eine Volume Group / ein Logisches Volume nicht umbenennen? \layout Standard Volume Groups und/oder Logische Volumes müssen vor dem Umbennen deaktiviert werden. (siehe auch lvrename(8), vgrename(8)). \layout Subsection Während eines Systemabsturzes lief gerade ein LVM Befehl. Was nun ...? \layout Standard 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)). \layout Subsection Warum sind Logische Volumes auf eine Grösse von 256 GB beschränkt? \layout Standard 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. \layout Subsection Warum kann ich meine Volume Group VGxy nicht aufteilen? \layout Standard (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. \layout Subsection Warum kann ich meine zwei VGs VGx und VGy nicht zusammenführen (mergen)? \layout Standard (Why can't i merge my two volume groups my_vg1 and my_vg2? ) \layout Standard 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. \layout Subsection Wie kann zugriffs-intensive Teile eines LV auf ein anderes Physikalisches Volume verschieben? \layout Standard (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. \layout Subsection Ich kann ein LV nicht erstellen und vgdisplay verweisst auf ein Limit von 256 LVs ... \layout Standard ... es handelt sich aber erst um mein 211tes Logisches Volume. Was ist das Problem? \layout Standard 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. \layout Section Referenz \layout Subsection Kommandos-Übersicht \layout Standard Prefix: \layout Itemize pv, vg, lv \layout Standard Befehle: \layout Itemize create, remove, display, change \layout Standard Schalter: \layout Itemize -v ( = verbose = ausführliche Ausgabe) \layout Standard Exitcode: \layout Itemize 0 OK \layout Itemize >0 Fehler \layout Standard Kommandos \layout Itemize pvcreate: Anlegen (formatieren) eines PV \layout Itemize vgcreate: Anlegen einer VG \layout Itemize lvcreate: Anlegen eines LV \layout Itemize pvdisplay: Anzeige einer PV, Option -v \layout Itemize vgdisplay: Anzeige einer VG, Option -v \layout Itemize lvdisplay: Anzeige einer LV, Option -v \layout Itemize pvmove: Verschieben der PE von einer PV zu einer anderen innerhalb einer VG \layout Itemize lvextend: eine LV in der Größe ändern (macht beim Filesystem noch keinen Sinn) \layout Itemize Shutdown & Boot \layout Itemize vgchange -a n: Deaktivieren von VG's \layout Itemize vgscan: Suche alle potentiellen Devices nach VG's ab \layout Itemize vgchange -a y: Aktivieren von VG's \layout Itemize vgexport: Eine VG aus dem System entfernen (ohne Löschen) \layout Itemize vgimport: Eine exportierte VG im System einbinden \layout Subsection deutsche und englische Version des Howtos \layout Standard Die deutsche Version des \begin_inset Quotes eld \end_inset LVM Howto \begin_inset Quotes erd \end_inset und der englische \begin_inset Quotes eld \end_inset Beginners Guide to LVM \begin_inset Quotes erd \end_inset existieren als unabhängige Howtos, die allerdings immer wieder aneinander angeglichen werden. Wir haben diese Arbeitsweise der \begin_inset Quotes eld \end_inset Übersetzung in eine Richtung \begin_inset Quotes erd \end_inset vorgezogen, damit sich deutschsprachige LVM User leichter einbringen können. Dies hat allerdings zur Folge, dass die Inhalte der beiden Dokumente abweichen können. \layout Standard Die aktuellste Version dieses Howtos finden Sie unter \begin_inset LatexDel \htmlurl{ \end_inset http://litefaden.com/lite00/lvm/ \begin_inset LatexDel }{ \end_inset http://litefaden.com/lite00/lvm/ \begin_inset LatexDel } \end_inset . \layout Subsection Quellen \layout Itemize 'man lvm' und man pages der einzelnen Befehle \layout Itemize \begin_inset LatexDel \url{ \end_inset http://linux.msede.com/lvm/ \begin_inset LatexDel }{ \end_inset LVM Homepage \begin_inset LatexDel } \end_inset \layout Itemize \begin_inset LatexDel \url{ \end_inset http://linux.msede.com/lvm/mlist/archive/ \begin_inset LatexDel }{ \end_inset Archiv der LVM Mailing Liste \begin_inset LatexDel } \end_inset \layout Itemize \begin_inset LatexDel \url{ \end_inset http://sdb.suse.de/sdb/de/html/keylist.LVM.html \begin_inset LatexDel }{ \end_inset SuSE Support Datenbank: Stichwort LVM \begin_inset LatexDel } \end_inset \layout Itemize \begin_inset LatexDel \url{ \end_inset ftp://linux.msede.com/lvm/howto/ \begin_inset LatexDel }{ \end_inset Beginners Guide to LVM (en) von Peter Wüstefeld \begin_inset LatexDel } \end_inset \layout Itemize \begin_inset LatexDel \url{ \end_inset http://www.linuxfocus.org/Deutsch/January1999/article21.html \begin_inset LatexDel }{ \end_inset Installation und Konfiguration eines RAID Systemes \begin_inset LatexDel } \end_inset \layout Itemize \begin_inset LatexDel \url{ \end_inset http://www.kinderwunsch.net/marvelinux/DE-Software-RAID-HowTo/DE-Software-RAID-HOW TO.html \begin_inset LatexDel }{ \end_inset Installation und Konfiguration eines RAID Systemes \begin_inset LatexDel } \end_inset \layout Itemize \begin_inset LatexDel \url{ \end_inset http://linas.org/linux/Software-RAID/Software-RAID.html (en) \begin_inset LatexDel }{ \end_inset MD Software-RAID HOWTO englisch \begin_inset LatexDel } \end_inset \layout Itemize \begin_inset LatexDel \url{ \end_inset http://devlinux.com/projects/reiserfs/ \begin_inset LatexDel }{ \end_inset Homepage ReiserFS \begin_inset LatexDel } \end_inset \layout Subsection Credits \layout Standard Heinz Mauelshagen für LVM. \layout Standard Klaus Franken für Howto Version 0.2, die Basis für die Arbeit an diesem Howto. \layout Standard Peter Wüstefeld \layout Subsubsection Danke für den Input von ... \layout Itemize Jan Niehusmann \layout Subsection Author und Feedback \layout Standard Feedback, Ergänzungen, neue Kapitel , Übersetzungen von Textstellen bitte an Richard Heider \layout Standard \begin_inset LatexDel \htmlurl{ \end_inset mailto:lvm-howto@litefaden.com \begin_inset LatexDel }{ \end_inset \begin_inset LatexDel } \end_inset senden. Bei Anmerkungen und Fehlerverbesserungen bitte Howto-Version und Kapitel angeben. \layout Standard $Id: lvm-howto-de.lyx,v 1.1 2004/02/16 14:41:31 agk Exp $ \the_end