Wie binde ich eine neue Festplatte in ein laufendes Linux-System ein?

Hier kommt jetzt einer der großen Vorteile des mount-Prinzips zutage.

Unter Linux ist es ohne weiteres möglich, einen kompletten Verzeichnisbaum auf eine andere Partition zu verschieben, ohne dass sich auch nur ein Pfadname für die Programme ändert - und das ohne Tricks oder Editieren von hundert Konfigurationsdateien.

Wie das geht, wird hier kurz erläutert. Es gibt mehrere Möglichkeiten.

Szenario

Du hast Linux "nur mal zum Testen" installiert und willst aber jetzt etwas mehr daraus machen, weil es Dir gefällt. Du hast eine Partition /dev/hda1 für DOS/Windows, eine Partition /dev/hda2 für Linux und eine Partition /dev/hda3 für Linux-SWAP. hda2 ist viel zu klein geworden und Du hast Dir eine zweite Festplatte gekauft, die jetzt unter Linux /dev/hdb heißt und die Du für einen Teil des laufenden Linux benutzen willst, wir nehmen mal als Beispiel das /usr Verzeichnis.

Dass sämtliche Aktionen als root erfolgen müssen, muss man ja wohl nicht extra erwähnen. Dass man vorher alles unnötige runterfahren sollte, am besten mit telinit S (Single-User-Modus), ist wohl auch klar. Und dass man so etwas eigentlich NIE ohne Backup wenigstens von /etc und Deiner Daten (/home/*) macht.

Vorkehrungen

Erstelle mit Deinem Lieblingspartitionierer (ich nehme cfdisk, das Ur-fdisk ist aber auch nicht unbedingt falsch) auf der neuen Platte eine Partition:

$ fdisk /dev/hdb
Command (m for help): n
New Partition: (p)rimary (e)xtended: p
Partition number: 1
First Cylinder (1-XXXX): 1
Last Cylinder or ... ([[1]-XXXX): XXXX  (Größe auswählen)
Command (m for help): p

Newbiehinweis: Mit "hdparm -i /dev/hierdeineplatte_zb_hdc"  lässt sich auch "entfernt" die Info über die Anzahl der Cylinder abrufen.

Jetzt sollte Deine Partition erscheinen. Bisher wurden noch keine Änderungen gemacht: die werden erst mit w geschrieben!

Command (m for help): w

Wenn es keine Fehlermeldungen gibt, kannst du ohne Neustart auf der neuen Partition ein DateiSystem anlegen ("formatieren" im DOS-Jargon):

mke2fs /dev/hdb1             oder
mkreiserfs /dev/hdb1         oder
....

Wenn er hiermit fertig ist, hast Du eine fertige Partition. Du musst Dir jetzt nur noch klar sein, wie bzw. wo du sie benutzen willst.

Erstelle Dir ein Verzeichnis, in dem Du die neue Partition sehen willst (z.B. /newdisk). Trage in die Datei /etc/fstab Folgendes ein:

/dev/hdb1       /newdisk   XXXXXX    defaults        1       2

wobei Du "XXXXXX" durch ext2 oder reiserfs oder Deinen Dateisystemtyp ersetzt, je nach dem, was Du benutzt hast.

Diese Zeile hängt die neue Partition beim Booten dann automatisch in das Verzeichnis /newdisk ein. Aber halt - Du brauchst nicht neustarten. Einfach einmal

mount /newdisk

oder

mount /dev/hdb1

eingeben, den Rest holt er sich aus der Datei fstab, die Du ja gerade angepasst hast. Jetzt müsste ein

df

eigentlich unter anderem Deine neue Partition anzeigen - die ja noch völlig leer ist. Jetzt suchst Du dir eine der folgenden Möglichkeiten aus. Am besten lese sie alle einmal durch und benutze die, die Du dir am ehesten zutraust.

Suche Dir ein paar Verzeichnisse, die überquellen und die Du gerne auf der neuen Partition hättest. Ich nehme hier jetzt als Beispiel /home, /usr/X11 und /var/spool. Erstelle Unterverzeichnisse auf der neuen Partition, die ja jetzt unter /newdisk hängt. Diese können beliebig heißen, aber sinngemäß wären natürlich "passende" Namen. Dann kopiere alle Dateien aus den diversen Verzeichnissen in diese neu angelegten.

$ mkdir /newdisk/usrX11; cp -ax /usr/X11/* /newdisk/usrX11
$ mkdir /newdisk/spool; cp -ax /var/spool/* /newdisk/spool
$ mkdir /newdisk/home; cp -ax /home/* /newdisk/home

Wenn alles angekommen ist, d.h. es keine Fehlermeldungen gab, und Du die obigen Aktionen auch als root ausgeführt hast, sollte die neue Partition folgendermaßen aussehen:

drwxr-xr-x   2 root     root         1024 Feb 21 22:08 home
drwxr-xr-x   3 root     root         1024 Feb 21 22:18 spool
drwxr-xr-x   2 root     root         1024 Feb 21 22:28 usrX11

Wenn du überall mal reingeguckt hast, und alles normal aussieht, (prüfen mit z.B. ls -R /usr/X11 | wc ; ls -R /newdisk/usrX11 | wc. wc zählt die Anzahl Wörter (hier: Dateien), wenn die identisch sind, dürfte alles in Ordnung sein), kannst du die Originalverzeichnisse löschen:

$ rm -rfv /usr/X11 /var/spool /home

Hier zeigt sich, wieso man alles runterfahren soll: Jetzt hängt dein System für kurze Zeit "in der Luft". Aber das ändert sich schon wieder: Wir legen für alle drei Verzeichnisse symbolische Links auf die Originalplätze.

$ ln -s /newdisk/usrX11 /usr/X11
$ ln -s /newdisk/spool /var/spool
$ ln -s /newdisk/home /home

Möglichkeit zwei: Ein Verzeichnis komplett verschieben, Partition dann dort mounten

Einfacher als vorher: Wir schieben einfach komplett /usr auf die neue Partition und mounten dann die neue Partition direkt als /usr. Also:

/dev/hdb1       /usr    XXXXXX    defaults        1       1

in die /etc/fstab eintragen, und dann

$ mv /usr /usr.old      # Altes /usr umbenennen
$ mkdir /usr            # neues erstellen
$ mount /usr            # Neue Partition in /usr einklinken
$ cp -ax /usr.old /usr  # Alles rüberschaufeln
$ rm -rf /usr.old       # wenn es erfolgreich war, löschen (*)

Fertig. (*) Das kann man auch später machen, wenn das neue System getestet wurde und läuft. Das "unflexible" hier ist, daß man sich einen Verzeichnisbaum aussuchen muss, den man komplett auf die neue Partition schiebt. Das "Stückeln" (hier ein bischen, dort ein bischen) von der Lösung 1 geht nicht.

Achtung: Wenn mit dieser Methode die root-Partition verschoben wird, muss der Bootvorgang angepasst werden (z.B. LILO oder GRUB). Siehe auch PartitionenVerschieben (Verschieben einer root-Partition).

Möglichkeit drei: QtParted (kostet kein Geld)

Man besorge sich 'ne aktuelle KNOPPIX-CD und boote mit dieser. In einer Konsole als root "qtparted" starten und damit dann fröhlich partitionieren.

Möglichkeit vier: Partition Magic (kostet Geld)

Man besorge sich Partition Magic von Powerquest (http://www.powerquest.com). Partition Magic kann Linux-Partitionen genauso behandeln wie DOS-, Win95-, NT- und OS/2-Partitionen, d.h. vergrößern/verkleinern, verschieben, und so weiter, und in der letzten mir bekannten Version gab es auf der CD auch zwei Diskettenimages, von denen man eine DOS-Version booten kann, so dass man nicht erst Windows installieren muss, um seine Linux-Partitionen zu bearbeiten. :-)

Möglichkeit fünf: Logical Volume Manager (LVM)

Der LVM für Linux, seit 2.4 offiziell im Kernel, hätte dieses Problem elegant vermeiden können, wenn man ihn von vornherein benutzt hätte.

Der LVM schiebt eine zusätzliche Schicht zwischen Partitionen und Dateisysteme (oder ersetzt, optional, auch das Partitionenprinzip), und fügt statdessen Volumes ein. Ein Volume hat gegenüber einer Partition folgende Vorteile:

Haken 1: Die Anwendung ist nicht trivial. Man muss sich etwas reinarbeiten, das ist aber bei jedem Volume Management System so. Wenn man viel partitioniert und Flexibilität benötigt, dann ist das auf jeden Fall eine gute Alternative.

Haken 2: Es gibt keine Möglichkeit (abgesehen vom Backup + Restore), eine bestehende fixe Partitionierung in ein Volume-Set umzuwandeln und auch keine Bestrebungen diesbezüglich, da sich der Aufwand nicht lohnt (diejenigen, die den LVM einsetzen, haben i.A. sowieso tägliche Backups - also spielt man halt ein Backup zurück, was man gerade gemacht hat).

Nachspiel

Wenn der ganze Vorgang beendet ist, fährt man sein System mit init 3 wieder hoch, und freut sich. Dass das alles - falls fdisk nicht gemeckert hat - ohne einen einzigen Neustart von sich ging, ist doch selbstverständlich.

NeueFestplatte (zuletzt geändert am 2008-03-29 00:47:58 durch ip-62-143-25-135)