|
Um LVM gleich nach dem Systemstart zur Verfügung zu haben, muss dies
innerhalb des Init-V-Prozesses gestartet werden. Bei SuSE ist der
Befehl vgchange -a y bereits in /etc/init.d/boot enthalten. Um das
LVM-System ordnungsgemäß zu beenden, ist noch vgchange -a n in der
Datei /etc/init.d/halt enthalten, die beim Herunterfahren ausgeführt wird.
Auch bei Mandrake sind in den aktuellen Versionen die entsprechenden
Befehle integriert. Bei Red Hat muss unter Umständen noch nachgebessert
werden. Sehen Sie dazu auch das LVM-HOWTO auf der LVM-Website, aufgelistet
im Literaturverzeichnis. Um zu überprüfen, ob Ihre Distribution
ebenfalls schon beim Start LVM aktiviert, führen Sie als root lsmod aus.
Ist in der aufgeführten Liste das Modul lvm-mod enthalten, ist dies der
Fall. Alternativ können Sie auch das Verzeichnis /proc/lvm, das nur bei
aktiviertem LVM existiert, aufrufen.
Danach können Logical Volumes genauso wie herkömmliche Partitionen mit Hilfe
eines beliebigen Editors in /etc/fstab eingefügt werden, damit diese automatisch
beim Booten in den Verzeichnisbaum eingehängt werden. Gehen Sie dabei sehr
vorsichtig vor, bei eventuellen Fehleintragungen könnte es sonst sein, dass Ihr
System nicht mehr startet.
/etc/fstab
|
/dev/volg1/logv1 /lvm-test ext2 defaults 0 2
|
Danach stehen die Partitionen wie bei dem oben genannten Beispiel unter
dem Verzeichnis /lvm-test zur Verfügung.
|
Um Daten von einem Physical Volume zu einem anderen Physical Volume
zu verschieben, um zum Beispiel die betreffende Partition danach aus
der Volume Group zu entfernen, gibt es das Kommando pvmove. Mit dem
folgenden Befehl werden alle Daten vom Physical Volume /dev/hdb6 auf
den freien, noch zur Verfügung stehenden Platz der anderen Physical
Volumes der gleichen Volume Group verschoben. Voraussetzung ist
allerdings, dass die restlichen Physical Volumes der Volume Group
noch genügend Speicherplatz zur Verfügung stellen, um diese Daten
aufnehmen zu können.
root@linux ~#
pvmove -v /dev/hdb6
|
Danach könnte man mit
root@linux ~#
vgreduce volg1 /dev/hdb6
|
die Partition aus der Volume Group entfernen und anderweitig benutzen.
Um die Daten auf ein bestimmtes Physical Volume zu verschieben, gibt
man dieses als zweites Physical Volume an.
root@linux ~#
pvmove -v /dev/hdb6 /dev/hdb7
|
|
Um eine Volume Group oder ein Logical Volume umzubenennen, gibt es die
beiden Kommandos vgrename und lvrename.
root@linux ~#
vgrename /dev/volg1 /dev/volgroup1
root@linux ~#
lvrename /dev/volgroup1/logv1 /dev/volgroup1/logvol1
|
Danach müssen Sie eventuell den Eintrag in der Datei /etc/fstab ändern.
|
Beim Anlegen einer Volume Group besteht die Möglichkeit die Größe
der Physical Extents vorzugeben. Standardmäßig ist die Größe von
4 Megabyte eingestellt. Um eine selbst definierte Größe zu erhalten,
kann man dies beim Erstellen einer Volume Group mit der
Option -s angeben. Es sind Größen von 8 Kilobyte bis 16 Gigabyte
möglich.
root@linux ~#
vgcreate -s 8k volg2 /dev/hdb7
|
Nachträglich lässt sich die Größe der Physical Extents nicht ändern. Da
je Logical Volume nur 65563 Physical Extents verwaltet werden können,
beschränkt die Größe der Physical Extents auch die Größe der Logical
Volumes.
|
Um nähere Details zu Physical Volumes, Volume Groups oder Logical
Volumes zu erhalten, gibt es die Kommandos pvdisplay, vgdisplay und
lvdisplay.
root@linux ~#
pvdisplay /dev/hdb5
root@linux ~#
vgdisplay /dev/volg1
root@linux ~#
lvdisplay /dev/volg1/logv1
|
Ergänzend gibt es noch Scan-Kommandos, um das System nach LVM-Volumes
etc. abzusuchen und aufzulisten.
Dieser Befehl erstellt eine Liste über alle Physical
Volumes.
Dieser Befehl erstellt eine Liste aller Volume Groups. Daneben werden
die notwendigen Dateien /etc/lvmtab und /etc/lvmtab.d erzeugt.
Dieser Befehl erstellt eine Liste aller Logical Volumes.
|
Mit den beiden Kommandos lvremove und vgremove lassen sich Logical
Volumes beziehungsweise Volume Groups aus dem System entfernen. Zu
beachten ist, dass nur ausgehängte Logical Volumes entfernt werden
können. Führen Sie dazu folgende Befehle aus. Dabei muss die
entsprechende Volume Group noch aktiv sein. Dieses Beispiel geht
davon aus, dass das Logical Volume über das Verzeichnis /lvm-test
gemountet ist.
root@linux ~#
umount /lvm-test
root@linux ~#
lvremove /dev/volg1/logv1
|
Nach dem Deaktivieren der Volume Group, können Sie dann schließlich
auch mit dem Befehl vgremove die Volume Group löschen, vorausgesetzt
es existieren keine weiteren Logical Volumes innerhalb dieser Volume
Group mehr.
root@linux ~#
vgchange -a n /dev/volg1
root@linux ~#
vgremove /dev/volg1
|
|
Um auch LVM für die Root-Partition nutzen zu können, ist es notwendig,
dass der Kernel das Modul lvm-mod schon vor dem Zugriff auf die Root-
Partition geladen hat, sonst ist ein Zugriff darauf nicht möglich. Dafür
ist ein Kernel mit fest integriertem LVM-Modul oder eine
Initial-RAM-Disk erforderlich. Die aktuellen Versionen der
SuSE-Distribution bieten bei der Installation die Möglichkeit, auch eine
LVM-Partition für die Root-Partition zu erstellen.
LVM auch für die Root-Partition zu verwenden, birgt einige Gefahren in
sich und kann Ihr ganzes System unbrauchbar machen. Außerdem kann es
bei späteren Distributions-Updates zu Komplikationen kommen. Zusätzlich
kann es bei einer Beschädigung des Dateisystems der Root-Partition
aufwändiger sein, dieses wiederherzustellen. Eine Umstellung der
Root-Partition auf LVM ist deshalb nur erfahrenen Linux-Anwendern zu
empfehlen. Daher rate ich in der Regel davon ab. Des Weiteren übernehme
ich keine Garantie für die hier beschriebene Vorgehensweise. Wollen Sie
dennoch Ihre Root-Partition auf LVM aufsetzen und sind sich der Gefahren
bewusst, sollten Sie vorher unbedingt zur Sicherheit ein Backup Ihrer
Daten und der Systempartition anlegen.
Eine der einfachsten und sichersten Möglichkeiten LVM für die
Root-Partition einzurichten, ist die Verwendung einer so genannten
Live-Distribution. Dies ist eine Linux-Distribution, die komplett von einer
CD läuft und die keiner Installation bedarf und damit vollkommen ohne
Festplatte auskommt. Dies ermöglicht ein komfortables Arbeiten an der
inaktiven Root-Partition. Bei anderen Verfahren wären Komplikationen mit
der gemounteten Root-Partition nicht auszuschließen, da die meisten
Programme, wie zum Beispiel resize2fs, ein ausgehängtes Dateisystem
voraussetzen, und ein umount kann man nicht einfach auch für die
Systempartition anwenden.
Eine weit verbreitete und sehr empfehlenswerte Distribution dieser Art
ist Knoppix, das Sie unter http://www.knopper.net/knoppix/ beziehen können. Das
hier beschriebene Verfahren bezieht sich ausschließlich auf die Verwendung
einer Live-Distribution. Um Knoppix zu starten, booten Sie von der
Knoppix-CD. Mit der Eingabetaste am Bootprompt gelangen Sie zum
KDE-Desktop, mit der Eingabe von knoppix 2 in eine Textkonsole. Da Knoppix
ein vollständiges Linux-Betriebssystem ist, bringt es eine vielfältige
Auswahl an Tools mit, unter anderem das Programm Partition Image, das Sie
mit partimage in einer Shell starten. Damit können Sie gleich die dringend
zu empfehlende Sicherung Ihrer Root-Partition durchführen, in dem Sie ein
Abbild dieser Partition in eine Image-Datei speichern. Diese Image-Datei
speichern Sie dann am besten auf einen gesonderten Datenträger. Falls etwas
schief gehen sollte, können Sie den Zustand der Root-Partition zum Zeitpunkt
der Sicherung wiederherstellen, indem Sie die Image-Datei wieder
zurückspielen. Sichern Sie zusätzlich noch Ihre Datenpartitionen.
Das hier beschriebene Verfahren geht von folgender Systemkonfiguration
auf einer 1,6 GB großen Festplatte aus:
/dev/hda1 swap (Swap-Partition) 192 MB /dev/hda2 / (Root-Partition) 1,5 GB /dev/hda3 boot (Boot-Partition) 20 MB
|
Haben Sie noch eine freie Partition inklusive entsprechendem Speicherplatz,
entfällt die folgende Verkleinerung der Root-Partition. Sie können auf der
entsprechenden Partition dann gleich ein Logical Volume für die
Root-Partition anlegen.
Damit die Root-Partition auf LVM aufsetzen kann, ist es erforderlich, erst ein
neues Logical Volume zu erstellen und dann die komplette Root-Partition darauf
zu kopieren. In diesem Falle wird dazu die Root-Partition verkleinert, um
neuen Speicherplatz frei zu machen. Aus diesem Speicherplatz wird dann eine
neue Partition erstellt, die später die Root-Partition aufnehmen wird. Daher
darf hier die aktuelle Root-Partition nicht einmal die Hälfte der Partition in
Anspruch nehmen. Zum Verkleinern der Partition nehmen Sie am besten das
Programm GNU Parted. Gestartet wird es auf der Kommandozeile mit parted gefolgt
von dem jeweiligen Device.
root@linux ~#
parted /dev/hda
(parted) p # zeigt die aktuelle Partitionstabelle an
Minor Start End Type Filesystem Flags
1 0,031 192,137 primary linux-swap 3 192,938 214,539 primary ext2 boot 2 252,000 1549,406 primary ext2
|
Um die Root-Partition zu verkleinern, gibt man in Parted die Partitionsnummer,
hier zum Beispiel die Nummer zwei, und den Start sowie das Ende der Partition
in Megabyte an. Achten Sie darauf, dass der freiwerdende Speicherplatz etwas
größer wird als die Root-Partition, damit alle Daten später von der
Systempartition dorthin kopiert werden können.
(parted) resize 2 252.000 850
|
Danach muss aus dem freigewordenen Speicherplatz eine neue Partition angelegt
werden. Das folgende Kommando erstellt eine neue primäre Partition aus dem
restlichen Plattenplatz nach der Root-Partition.
(parted) mkpart primary 851 1550
(parted) p
Minor Start End Type Filesystem Flags
1 0,031 192,137 primary linux-swap 3 192,938 214,539 primary ext2 boot 2 252,000 850,000 primary ext2 4 850,500 1549,406 primary lvm
(parted) q
|
Nach dem Verlassen von GNU Parted starten Sie Ihr altes System neu.
Nach dem Neustart erstellen Sie ein Logical Volume ohne Dateisystem aus
der gesamten Größe der neuen Partition /dev/hda4. Sehen Sie dazu
gegebenenfalls den Abschnitt "LVM-System einrichten". Nun müssen Sie
die komplette Root-Partition auf das neue Logical Volume kopieren. Dazu
booten Sie erneut Knoppix. In diesem Beispiel wurde das Logical Volume
rootlv genannt, dieses befindet sich in der Volume Group rootvg.
root@linux ¯#
root@linux # vgscan
root@linux ~#
vgchange -a y
root@linux ~#
dd if=/dev/hda2 of=/dev/rootvg/rootlv
root@linux ~#
sync
|
Nach dem Kopiervorgang, der einige Zeit in Anspruch nehmen kann, mounten Sie
das Logical Volume unter dem Verzeichnis /root-lvm und ändern eine Zeile in
der Datei /root-lvm/etc/fstab mit dem Editor Emacs.
root@linux ~#
mkdir /root-lvm
root@linux ~#
mount /dev/rootvg/rootlv /root-lvm
root@linux ~#
emacs /root-lvm/etc/fstab
|
Diese Zeile
/root-lvm/etc/fstab
|
/dev/hda2 / ext2 defaults 1 1
|
wird geändert zu dieser
/root-lvm/etc/fstab
|
/dev/rootvg/rootlv / ext2 defaults 1 1
|
Danach booten Sie wieder Ihr altes System. Falls der Kernel Ihrer Distribution
ohne fest integrieter LVM-Funktion besteht, müssen Sie noch eine Initial-RAM-Disk
erstellen, aus der beim Systemstart das LVM-Modul geladen wird. Beachten Sie,
dass das folgende Kommando nur eine Initial-RAM-Disk mit einem LVM-Modul erstellt.
Bei manchen Distributionen ist es erforderlich, vorher noch das Programmpaket
binutils zu installieren.
root@linux ~#
lvmcreate_initrd
|
Danach sollte sich die Initial-RAM-Disk im Verzeichnis /boot befinden. Als
nächstes müssen Sie Ihren Boot-Manager wie zum Beispiel Lilo anpassen. Fügen Sie
dazu etwa folgenden Eintrag in die Datei /etc/lilo.conf hinzu.
/etc/lilo.conf
|
image = /boot/vmlinuz
label = lvm
root = /dev/rootvg/rootlv
initrd = /boot/initrd.gz
ramdisk = 8192
|
Kopieren Sie anschließend am besten gleich diese Datei auch in die neue Root-Partition.
Danach können Sie lilo ausführen.
root@linux ~#
mkdir /root-lvm
root@linux ~#
mount /dev/rootvg/rootlv /root-lvm
root@linux ~#
cp /etc/lilo.conf /root-lvm/etc/lilo.conf
root@linux ~#
lilo
|
Danach starten Sie Ihr System neu und booten unter der Angabe von lvm am
Lilo-Bootprompt von der neuen Root-Partition. Wenn das Booten von dem neuen
Logical Volume, auf der sich nun die Root-Partition befindet, gelingt und alles
einwandfrei funktioniert, können Sie die alte Root-Partition als Physical Volume
definieren und der Volume Group rootvg hinzufügen. Vorher sollten Sie jedoch Ihr
neues System gründlich prüfen. Wollen Sie die Root-Partition mittels LVM
nachträglich vergrößern, können Sie mit dem Befehl lvextend unter Ihrem neuen
System die Partition vergrößern. Um danach auch das darin befindliche Dateisystem
fehlerfrei vergrößern zu können, müssen Sie wieder Knoppix booten und resize2fs
dann dort für die inaktive Root-Partition ausführen.
|
LVM unterstützt den RAID-Level 0, auch Stripe-Set genannt, bei dem die
Daten alternierend auf verschiedene Festplatten in geteilte Datenblöcke
gespeichert werden. Dies führt zu einem ernormen Geschwindigkeitszuwachs,
vor allem beim Lesezugriff, bei dem sich die Datenrate fast verdoppeln
kann. Sehen Sie dazu auch das RAID-HOWTO von SelfLinux. Um RAID 0 unter
LVM nutzen zu können, muss auf zwei oder mehr Festplatten jeweils ein
Physical Volume eingerichtet werden. Danach fasst man diese als eine
Volume Group zusammen und erstellt mit folgendem Kommando daraus ein
Logical Volume.
root@linux ~#
lvcreate -n lvstriped -L 1000M -i 2 volg1
|
Die Option -i 2 bewirkt, dass das Logical Volume aus zwei Physical
Volumes erstellt wird. Um keine Geschwindigkeitseinbußen zu bekommen,
müssen Sie darauf achten, dass alle Physical Volumes immer auf
verschiedene Festplatten liegen.
|
LVM kann man auch mit anderen RAID-Leveln kombinieren. Hierzu richtet
man auf dem betreffenden /dev/md*-Device ein Physical Volume ein
und benutzt dieses wie gewohnt.
|
|
Wie schon erwähnt lasst sich LVM alternativ zu Partitionen auch
mit Loopback-Devices verwenden. Dies hat den Vorteil die
Festplatte nicht umpartitionieren zu müssen, und eignet sich somit ideal
um LVM erst einmal zu testen. Jedoch sollte man wegen der Datensicherheit
und Performance bei späteren ernsthaften Verwendungen von LVM, wenn
möglich, richtige Partitionen verwenden. Denn mit Loopback-Devices werden
die Daten innerhalb einer Datei abgelegt, die wiederum in einem Dateisystem
einer gewöhnlichen Partition liegt. Ein löschen dieser Datei würde dann
zum Verlust aller Daten führen. Zu beachten ist, dass eine Volume Group
eine Mindestgröße von 20 Megabyte haben muss.
Als erstes ist es notwendig die erforderliche Datei als Container für die
Daten zu erstellen. Dies geschieht mit dem folgenden Befehl.
root@linux ~#
dd if=/dev/zero of=/lvm-test/.lvmcontainer bs=1024 count=51200
|
Dieser Befehl erstellt eine 50 Megabyte große Datei im Verzeichnis
/lvm-test. Optional habe ich diese Datei mit einem Punkt am Anfang
versehen, damit sie als versteckte Datei in der Normalansicht nicht zu
sehen ist. Als nächstes muss nun diese Datei mit einem Loopback-Device
verbunden werden.
root@linux ~#
losetup /dev/loop1 /lvm-test/.lvmcontainer
|
Danach kann auf diese Datei über /dev/loop1 als gewöhnliches
Block-Device zugegriffen werden, und darauf wie auf einer herkömmlichen
Partition ein Physical Volume erstellt werden. Falls das Loopback-Device
nicht mehr benötigt wird kann es mit
root@linux ~#
losetup -d /dev/loop1
|
wieder von der Datei gelöst werden.
Dieser Eintrag in der Datei /etc/fstab würde schon beim Systemstart
automatisch die Datei /lvm-test/.lvmcontainer per Loopback-Device
über das Verzeichnis /lvm-test mounten.
/etc/fstab
|
/lvm-test/.container /lvm-test ext2 defaults,loop 0 0
|
|
Man kann ein Logical Volume auch als Swap-Partition benutzen. Dazu
muss man lediglich das betreffende Logical Volume mit mkswap formatieren
und mit swapon aktivieren. Falls jedoch die Volume Group, innerhalb der
das Logical Volume erstellt wurde, aus mehreren Partitionen besteht, ist
es möglich, dass damit auch die LVM-Swap-Partition über mehrere Partitionen
verteilt ist, was den Zugriff auf die Swap-Partition verlangsamt.
root@linux ~#
lvcreate -n swaplv -L 500M volg1
root@linux ~#
mkswap /dev/volg1/swaplv
root@linux ~#
swapon /dev/volg1/swaplv
|
Damit die Swap-Partition automatisch beim Systemstart aktiviert wird, tragen
Sie folgende Zeile in die Datei /etc/fstab ein.
/etc/fstab
|
/dev/volg1/swaplv swap swap defaults 0 0
|
Existiert bereits eine Swap-Partition, und wollen Sie diese Swap-Partition
noch zusätzlich weiter verwenden, können Sie mit der unten angegebenen
Option pri=1 bewirken, dass beide Swap-Partitionen gleichwertig behandelt
werden. Dies kann zu einer Performancesteigerung nach dem Prinzip von
RAID 0 führen, falls beide Partitionen auf verschiedenen Festplatten
liegen. Zwei Swap-Partitionen auf einer Festplatte sollte man vermeiden,
da sich dann beide gegenseitig ausbremsen würden.
/etc/fstab
|
/dev/volg1/swaplv swap swap defaults,pri=1 0 0
/dev/hda8 swap swap defaults,pri=1 0 0
|
|
Ein Snapshot ist eine Kopie, die man von einem Logical Volume als
Backup anlegen kann. Dazu dient wiederum der Befehl lvcreate mit der
speziellen Option -s oder --snapshot.
root@linux ~#
lvcreate -L 500M --snapshot -n mysnap /dev/volg1/logv1
|
Danach steht der identische Inhalt des Logical Volume /dev/volg1/logv1
unter /dev/volg1/mysnap bereit. Dabei ist zu beachten, dass der
Snapshot einen Teil des Speicherplatzes der Volume Group belegt.
Die Option -L 500M gibt nicht etwa die eigentliche Größe des Snapshot
an, sondern wie viel sich am Original ändern darf, bevor der Snapshot
ungültig wird.
|
Es besteht die Möglichkeit, vorhandene lokale Volume Groups auf einen
anderen Computer weiterzubenutzen, falls man die lokale Festplatte, auf
der sich die betreffenden Physical Volumes einer Volume Group befinden,
in den anderen Rechner einbauen will. Vorher muss man allerdings die
entsprechende Volume Group aus dem System entfernen. Um dies zu
bewirken, gibt es den Befehl vgexport, der, nachdem man die
entsprechende Volume Group deaktiviert hat, diese ordnungsgemäß aus dem
System entfernt. Man kann zudem gegebenenfalls noch mit pvscan
überprüfen, welche Physical Volumes zu welcher Volume Group gehören.
root@linux ~#
pvscan
root@linux ~#
umount /lvm-test
root@linux ~#
vgchange -a n /dev/volg1
root@linux ~#
vgexport /dev/volg1
|
Ist die Festplatte in den anderen Rechner eingebaut, kann man analog dazu
mit vgimport, der Angabe eines Namens und der Physical
Volumes die Volume Group auf diesem Computer wieder weiterverwenden.
Voraussetzung ist natürlich, dass auch dort ein funktionierendes LVM-System
vorhanden ist.
root@linux ~#
vgimport newvg /dev/hdb5 /dev/hdb6
root@linux ~#
vgchange -a y /dev/newvg
root@linux ~#
mkdir /lvm-test
root@linux ~#
mount -t ext2 /dev/newvg/logv1 /lvm-test
|
|
Die Möglichkeit ein Dateisystem im laufendem Zustand zu vergrößern ist
vor allem im Server-Betrieb sehr praktisch, da man die Downtime dieses
Servers sehr gering halten kann, und dieser sehr schnell wieder zur
Verfügung steht. Das Programm resize2fs ist nur in der Lage die
Größe eines Dateisystems zu verändern, wenn dieses gerade nicht im
Verzeichnisbaum gemountet ist. Daneben gibt es noch zusätzlich das
Programm ext2online, das ext2-Dateisysteme auch im gemountetem Zustand
verändern kann. Dafür ist jedoch zur Zeit noch ein Kernel-Patch
erforderlich, den man inklusive dem Programm unter
http://sourceforge.net/projects/ext2resize/ downloaden kann.
Veränderungen am Kernel sind jedoch mit Vorsicht auszuführen.
Aktuell gibt es diese Möglichkeit auch für ext3. Alternativ kann
man das Dateisystem reiserfs verwenden, das man auch im gemountetem
Zustand vergrößern kann. Eine Verkleinerung dieses Dateisystems ist
jedoch auch hier nur möglich, wenn es vorher mit umount
ausgehängt wurde. Diese Funktion ist allerdings noch relativ neu,
eventuelle Bugs sind deswegen nicht auszuschließen.
root@linux ~#
lvcreate -n logv2 -L 500M volg1
root@linux ~#
mkfs -t reiserfs /dev/volg1/logv2
root@linux ~#
mount -t reiserfs /dev/volg1/logv2 /lvm-test
root@linux ~#
lvextend -L 1000M /dev/volg1/logv2
root@linux ~#
resize_reiserfs /dev/volg1/volg2
|
Um das Dateisystem wieder zu verkleinern, muss es vorher mit
umount ausgehängt werden.
root@linux ~#
lvreduce -L 500M /dev/volg1/logv2
root@linux ~#
umount /lvm-test
root@linux ~#
resize_reiserfs /dev/volg1/logv2
root@linux ~#
mount -t reiserfs /dev/volg1/logv2 /lvm-test
|
|
|
|