net-it.de

Dieses Dokument beschreibt, wie wichtige Partitionen eines RedHat 7.1 Samba-Fileservers nach dem Einbau einer zusätzlichen Festplatte mit Hilfe von LVM (s.u.) komplett auf ReiserFS umgestellt wurden. Eine der Partitionen wurde dann um den Speicherplatz der neuen Festplatte erweitert. Während der gesamten Prozedur blieben die Daten auf den betroffenen Partitionen erhalten.

Ausgangszustand des Servers:

/dev/hda: Maxtor 4W100H (93,3 GB)
PartitionGrößeKennungDateisystemMountpunkt
/dev/hda1100M83 (Linux)ext2/
/dev/hda293G05 (Extended)
/dev/hda5100M83 (Linux)ext2(Kopie von /dev/hda1)
/dev/hda6200M83 (Linux)ext2/var
/dev/hda7265M82 (Linux swap)swap
/dev/hda893G83 (Linux)ext2/usr

Endzustand des Servers:

physisch:

/dev/hda: Maxtor 4W100H (93,3 GB)
/dev/hdb: Samsung SV1204H (111,8 GB, unpartitioniert)
PartitionGrößeKennungDateisystemMountpunkt
/dev/hda1100M83 (Linux)ext2/
/dev/hda293G05 (Extended)
/dev/hda5100M83 (Linux)ext2(Kopie von /dev/hda1)
/dev/hda693G8e (Linux LVM)

logisch:

/dev/vg01 (204,8 GB)
VolumeGrößeFilesystemMountpunkt
/dev/vg01/lvol1100Mreiserfs/var
/dev/vg01/lvol2256Mswap
/dev/vg01/lvol3204Greiserfs/usr

Begriffe / Abkürzungen

LVMLogical Volume Manager
PVPhysical VolumePartitionen oder Festplatten, deren Kapazität dem LVM zugeordnet ist
VGVolume Groupaus PV's bestehender Speicherpool
PEPhysical Extendkleinste Zuordnungseinheit der Speicherkapazität der VG
LVLogical Volumeaus zugeordneten PE's bestehender, nutzbarer Speicherplatz (vergleichbar mit einer Partition)

Vorbereitungen und Einbau der Festplatte

Die Unterstützung von LVM und ReiserFS hängt von der Existenz je zweier Komponenten ab: Die Kernel-Unterstützung in Form von Modulen und die sogenannten Userspace-Tools. Nach dem Update des Kernels auf die aktuellste Version (2.4.18-18.7.x) wurden die Pakete reiserfs-utils-3.x.0j-3.rpm und lvm-1.0.3-4.rpm nachinstalliert. Diese befinden sich z.B. auf den CD's 1 (reiserfs-utils) und 3 (lvm) der Distribution RedHat 7.3.

Nach der Datensicherung aller essentiellen Daten des Servers erfolgte das Herunterfahren und der Einbau der zweiten Festplatte. Da auf dem Mainboard dieses Beispiels nur der erste IDE-Kanal mit Ultra-DMA-Unterstützung läuft, wurde die neue Festplatte als Slave an den ersten IDE-Bus mitangeschlossen - unter Beachtung der korrekten Jumper-Stellung beider Festplatten.

Ablauf

Nach dem Wiederhochfahren des Servers wurde mit

# init 1

in den Einzelbenutzermodus gewechselt. Die komplette neue Festplatte wurde ohne Partitionierung wird mit

# pvcreate -v /dev/hdb

zum PV gemacht. über

# pvdisplay /dev/hdb

lassen sich der Zustand und die Daten des PV überprüfen. Um einer Einschränkung der VG auf die maximale Grösse von 256 GB vorzubeugen wurde mit

# vgcreate -s 32M -v vg01 /dev/hdb

eine VG mit dem Namen "vg01" erzeugt, deren Zuordnungseinheit (PE) 32 MB groß ist und die zunächst nur die neue Festplatte umfasst. Damit hat diese VG eine maximale Größe von 2 TB. Das lässt sich mit

# pvdisplay

jederzeit nachprüfen. Mit

# vgscan
# vgchange -a y

wird die VG aktiviert und dem Kernel bekannt gemacht. vgscan erzeugt dazu in /etc Dateien und Verzeichnisse (/ect/lvmtab, /etc/lvmtab.d und /etc/lvmconf), die die aktuelle Struktur abbilden. Nach einem Neustart betrachtet der LVM trotz der Existenz dieser Dateien alle VG's als deaktiviert. Daher finden sich diese Befehle auch im Systemstartskript /etc/rc.sysinit wieder. Außerdem existiert jetzt ein Verzeichnis /dev/vg01, in dem die device-Dateien der LV's und die device-Datei group abgelegt werden. Mit

# lvcreate -v -C -L 192M vg01
# lvcreate -v -C -L 256M vg01
# lvcreate -v -C -L 50G vg01

wurden in der VG drei LV's mit den Namen "lvol1", "lvol2" und "lvol3" mit fortlaufender Belegung des Speicherplatzes erzeugt. Von der Erzeugung des großen LV als Striped LV wurde wegen der fehlenden späteren Erweiterungsmöglichkeiten mittels LVM 1 abgesehen - die bequeme Erweiterbarkeit von Striped LV'S wird erst in LVM 2 implementiert sein. Da die Belegung immer in ganzen PE's erfolgt, haben diese LV's eine Größe von 6, 8 und 1600 PE's. Nach dem Formatieren mit

# mkreiserfs /dev/vg01/lvol1
# mkreiserfs /dev/vg01/lvol3
# mkswap /dev/vg01/lvol2

wurden die Dateisysteme /usr und /var sowie die Swappartition in die neuen LV's verlagert:

# mkdir /mnt/newusr
# mkdir /mnt/newvar
# mount -t reiserfs /dev/vg01/lvol1 /mnt/newvar
# mount -t reiserfs /dev/vg01/lvol3 /mnt/newusr
# cp -a /usr/* /mnt/newusr
# cp -a /var/* /mnt/newvar
# swapoff -a
# swapon /dev/vg01/lvol2
# umount /mnt/newvar
# umount /mnt/newusr
# umount /var
# umount /usr
# mount -t reiserfs /dev/vg01/lvol1 /var
# mount -t reiserfs /dev/vg01/lvol3 /usr

Da jetzt bis auf die Größe von "lvol3" der Endzustand bereits erreicht ist, wurden alle notwendigen Änderungen an den Scriptdateien vorgenommen, die beim Systemstart bzw. beim Herunterfahren beteiligt sind. In der Datei /etc/fstab sind die drei betroffenen Zeilen zu ändern:

vorher

/dev/hda8   /usr   ext2   defaults   1 2
/dev/hda6   /var   ext2   defaults   1 2
/dev/hda8   swap   swap   defaults   0 0

nachher

/dev/vg01/lvol3   /usr   reiserfs   defaults   1 0
/dev/vg01/lvol1   /var   reiserfs   defaults   1 0
/dev/vg01/lvol2   swap   swap       defaults   0 0

Die Änderung des sechsten Feldes auf den Wert 0 bewirkt, das diese Dateisysteme bei einem Neustart nicht automatisch durch "fsck" überprüft werden.

Das Systemstartskript /etc/rc.sysinit rechnet nicht mit einer logischen Swap-Partition, daher muss die Initialisierung des Swapspace erst nach dem Aktivieren von LVM erfolgen. Nach dem Auskommentieren der Zeile an ihrer ursprünglichen Position wurde sie direkt hinter der Initialisierung von LVM neu eingefügt. Der Test -e /proc/lvm (existiert die Datei oder das Verzeichnis /proc/lvm?) in der if-Bedingung der LVM-Initialisierung soll testen, ob der Kernel LVM kann (LVM ist entweder fest einkompiliert oder das Modul wurde geladen). Da aber der jetzt erst folgende Aufruf von "vgscan" das Modul erst lädt, schlägt dieser Test u.U. fehl. Daher wurde dieser Test geändert.

vorher

[...]
# Start up swapping.
action $"Activating swap partitions: " swapon -a -e
[...]
# LVM initialization
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action $"Setting up LVM:" /sbin/vgscan && /sbin/vgchange -a y
fi
[...]

nachher

[...]
# Start up swapping.
# action $"Activating swap partitions: " swapon -a -e
[...]
# LVM initialization
if [ -x /sbin/vgscan -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action $"Setting up LVM:" /sbin/vgscan && /sbin/vgchange -a y
fi
action $"Activating swap partitions: " swapon -a -e
[...]

Im Skript /etc/init.d/halt wurde unmittelbar vor dem Neustart bzw. Ausschalten die Deaktivierung der VG eingefügt.

vorher

[...]
done

# Now halt or reboot.
echo $"$message"
[...]

nachher

[...]
done

# Disabling LVM availability
vgchange -a n

# Now halt or reboot.
echo $"$message"
[...]

Nach einem Neustart zur Überprüfung des Bootvorgangs wurden mit

# init 1
# fdisk /dev/hda

im Einzelbenutzermodus die drei jetzt überflüssigen Partitionen (6,7, und 8) gelöscht und an deren Stelle eine neue (6) erzeugt. Dieser wurde die Partitionskennung "8e (Linux LVM)" zugewiesen. Mit

# pvcreate /dev/hda6

wurde diese als PV deklariert. In die VG wurde sie mit

# vgextend -v vg01 /dev/hda6

aufgenommen. Anschließend wurden alle drei LV's an den Anfang vom PV /dev/hda6 verschoben:

# pvmove -v -n lvol1 /dev/hdb /dev/hda6
# pvmove -v -n lvol2 /dev/hdb /dev/hda6
# pvmove -v -n lvol3 /dev/hdb /dev/hda6

(Ein einfacher Aufruf von "pvmove -v /dev/hdb" hätte dasselbe Ergebnis gehabt - Die Vorgehensweise in Schritten macht jedoch deutlicher, was geschieht) Durch Addition der noch freien PE's auf beiden PV's (zu ermitteln über pvdisplay) und Multiplikation mit 32 ergibt sich der Wert in Megabyte, um den jetzt "lvol3" vergrößert werden muss. Mit

# lvextend -v -L +158112M /dev/vg01/lvol3
# resize_reiserfs -s +158112M /dev/vg01/lvol3

wurden das LV und das Dateisystem im laufenden Betrieb (mounted) vergrößert.

zuletzt geändert am 8.11.2004: joerg trawinski

Valid XHTML 1.1! Valid CSS!

© 2004 net-it.de impressum