Root-Partition online vergrößern

Die Root-Partition vergrößern – das klingt schon mal scary. Aber dann auch noch online – das heißt ohne Live-CD, während des Betriebs? Warum um alles in der Welt sollte man sowas machen wollen? Ganz einfach, man stelle sich einen Server vor, bei dem die Root-Partition vergrößert werden soll und zu dem man keinen physischen Zugang hat. Voilà, das Szenario.

HINWEIS: Diese Methode funktioniert nur, wenn der zusätzliche Speicherplatz direkt an die zu vergrößernde Partition anschließt!

HINWEIS: Die hier vorgestellte Methode wurde von mir auf einem CentOS-Server live und erfolgreich angewendet, trotzdem gibt’s wie immer keine Garantie – und man sollte ein Backup in der Hinterhand haben.

Während viele Websites sagen, dass es nicht möglich wäre, die Partition ohne Live-CD oder Rettungssystem zu vergrößern, habe ich auf dem Blog von RaftaMan eine Anleitung gefunden, die genau das ermöglicht. Um einen Neustart des Systems kommt man zwar nicht herum (der Kernel muss die neue Partitionsgröße einlesen bevor man das Filesystem daran anpassen kann), aber es geht alles ohne von CD zu booten.

Also, los geht’s:

1
fdisk -l

zeigt uns die Devices und darauf enthaltenen Partitionen an. Um eine Partition zu bearbeiten müssen wir zunächst in fdisk das Device aufrufen:

1
fdisk /dev/sda

würde jetzt für die erste Festplatte stehen. Auf der Befehlszeile drücken wir nun „p“ und „Enter“, worauf uns noch einmal (zur Sicherheit) die Partitionen angezeigt werden:

1
2
3
4
5
6
7
Command (m for help): p
Disk /dev/sda: 5218 MB, 5218304000 bytes
255 heads, 63 sectors/track, 634 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
    Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         634     5092573+  83  Linux

Den Anfangssektor unbedingt merken oder aufschreiben, wird er falsch gesetzt kann das alle Daten unbrauchbar machen! Diese Partition müssen wir jetzt löschen (oh ja, richtig gehört), aber keine Angst es gehen dabei keine Daten verloren solange der Anfangssektor gleich und die Partition nachher größer als vorher ist. Also geben wir jetzt ein „d“ und „Enter“ ein, worauf wir nach der Nummer der Partition gefragt werden. Da die Zählung bei 1 beginnt also in unserem Fall eine 1. Und noch mal „Enter“.

Als nächstes erstellt man eine neue Partition mit „n“ und „Enter“. Dabei nutzt man den gleichen Partitionstyp und den gleichen Startsektor wie bei der Ausgangspartition. Der Endsektor kann innerhalb der angezeigten Grenzen beliebig gewählt werden, sollte aber größer sein als der Ursprüngliche, damit die Partition keine Daten verliert.

1
2
3
4
5
6
7
8
9
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-934, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-934, default 934): 850

Falls die Ausgangspartition das „boot“-Flag gesetzt hatte, müssen wir das auch hier wieder setzen:

1
2
Command (m for help): a
Partition number (1-4): 1

Schlussendlich schreiben wir die Änderungen mit „w“ und „Enter“ in die Partitionstabelle. Die Bestätigung sollte fast sofort erscheinen und uns darauf hinweisen, dass ein Neustart erforderlich ist.

1
2
3
4
5
6
7
8
9
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

Nach dem Neustart, den wir direkt durchführen, kann das Filesystem problemlos live an die neue Partitionsgröße angepasst werden:

1
2
3
4
5
resize2fs /dev/sda1
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/sda1 to 1522150 (4k) blocks.
The filesystem on /dev/sda1 is now 1522150 blocks long.

Und fertig. Der neue Speicherplatz steht vollständig zur Verfügung.