Wie binde ich eine neue Festplatte in ein laufendes Linux-System ein?
Inhaltsverzeichnis
-
Wie binde ich eine neue Festplatte in ein laufendes Linux-System ein?
- Szenario
- Vorkehrungen
- Möglichkeit eins: Mehrere Verzeichnisse von vollen Partitionen auf die neue Platte verschieben, Links zurücklegen
- Möglichkeit zwei: Ein Verzeichnis komplett verschieben, Partition dann dort mounten
- Möglichkeit drei: QtParted (kostet kein Geld)
- Möglichkeit vier: Partition Magic (kostet Geld)
- Möglichkeit fünf: Logical Volume Manager (LVM)
- Nachspiel
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.
Möglichkeit eins: Mehrere Verzeichnisse von vollen Partitionen auf die neue Platte verschieben, Links zurücklegen
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:
- Volumes müssen nicht an Mediengrenzen enden/beginnen (man kann also problemlos eine 20G, eine 10GB und eine 6GB Festplatte in 25+4+7 GB "Partitionen" aufteilen und formatieren).
- Volumes sind, falls das Dateisystem es unterstützt (ext2 und reiserfs tun es), sogar *im laufenden Betrieb* in der Größe änderbar und verschiebbar, auf jeden Fall aber, wenn sie 'offline' sind.
- Volumes unterstützen Striping, ähnlich RAID.
- Volumes sind *nachträglich* noch veränderbar, wenn man z.B. eine neue Platte gekauft hat oder eine austauschen möchte.
- Wenn die Hardware das kann, unterstützen Volumes den Live-Austausch von Medien (Hotswapping), ohne umount!
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.