Partition mit fdisk vergrößern

Eine Partition unter Linux ohne grafische Hilfsmittel und nur mit "fdisk" zu vergrößern scheint inzwischen eine richtige Herausforderung geworden zu sein. Das hört sich seltsam an, ist aber in Zeiten wo überall LVM zum Einsatz kommt und scheinbar jeder nur noch "lvresize" verwendet somit in der Tat gar nicht so außergewöhnlich. Da "parted" nicht in jeder Umgebung verfügbar ist, hier eine kleine Anleitung...

LVM hat zwar viele Vorteile doch sollte man trotz lvresize nicht vergessen, dass unter so manchem LVM auch klassische Partitionen liegen. Moderne Administratoren greifen daher gerne zu parted da es im Vergleich zu fdisk als angenehmer bewertet wird - allerdings steht parted in der Praxis jedoch nicht immer zur Verfügung (beispielsweise in einem Rettungssystem oder einer Minimalumgebung). In jedem Fall sollte die Veränderung von Partitionsgrößen nur mit größter Sorgfalt erfolgen da ansonsten Datenverlust droht. Daneben ist es ratsam vorher eine vollständige Datensicherung durchzuführen. Zudem muss die betreffende Partition vor den nachfolgenden Schritten unbedingt mittels umount ausgehängt werden.

Bei einem gängigen Szenario könnte die Ausgangssituation folgendermaßen aussehen wenn man diese mit fdisk betrachtet:

tux:~ # fdisk -l /dev/vdb

Disk /dev/vdb: 42.9 GB, 42949672960 bytes
16 heads, 63 sectors/track, 83220 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x679c8ab5

Device Boot Start End Blocks Id System
/dev/vdb1 63 43754 22020768 83 Linux

tux:~ #

Die wichtigsten Angaben der vorigen Ausgabe sind der Beginn der Partition (Sektor bzw. Zylinder, z.B. 63) sowie der Dateisystem-Typ (z.B. 83). Denn um eine Partition mit fdisk zu vergrößern muss man diese löschen und neu anlegen. Dabei ist es äußerst wichtig den gleichen Beginn der Partition (gleicher Sektor bzw. Zylinder) zu wählen. Beim Löschen der Partition werden - anders als oftmals gedacht - keine Daten gelöscht, es wird lediglich die Partitionstabelle der Festplatte angepasst. Gleiches gilt natürlich auch für das Anlegen einer neuen Partition - sofern die korrekten Start- und Endwerte angegeben werden. Ein zu kleiner Endwert für eine Partition ist übrigens ebenso ein Problem sofern das Dateisystem der Partition nicht verkleinert wird.

Um die bestehende Partition /dev/vdb1 auf die maximale Größe der Festplatte zu erweitern sind mit fdisk somit folgende Befehle erforderlich:

tux:~ # fdisk /dev/vdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help):
d
Selected partition 1

Command (m for help):
n
Command action
e extended
p primary partition (1-4)

p
Partition number (1-4): 1
First cylinder (1-83220, default 1): 63
Last cylinder, +cylinders or +size{K,M,G} (63-83220, default 83220): 83220

Command (m for help):
w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

tux:~ #

Anschließend kann man sich das Ergebnis mit nachfolgendem Aufruf ansehen:

tux:~ # fdisk -l /dev/vdb

Disk /dev/vdb: 42.9 GB, 42949672960 bytes
16 heads, 63 sectors/track, 83220 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x679c8ab5

Device Boot Start End Blocks Id System
/dev/vdb1 63 83220 41911632 83 Linux

tux:~ #

Um danach noch das ext4-Dateisystem auf die maximale Größe der Partition zu erweitern ist dieser Befehl erforderlich:

tux:~ # resize2fs /dev/vdb1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vdb1 to 10477908 (4k) blocks.
The filesystem on /dev/vdb1 is now 10477908 blocks long.

tux:~ #

Abschließend kann die Partition /dev/vdb1 wieder mittels mount eingehängt werden - eine größere Partition ganz ohne Datenverlust.