Linux fdisk: Unterschied zwischen den Versionen
| (2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 3: | Zeile 3: | ||
==Master Boot Record== | ==Master Boot Record== | ||
| − | + | Bei einer MBR-partitionierten Platte liegen im ersten Sektor – 512 Byte – der Bootcode, die Partitionstabelle und eine Kennung. Bei GPT-Platten ist dieser Sektor ebenfalls belegt, enthält dann aber nur einen Schutzeintrag. | |
| − | |||
{{#drawio:mbr-1}} | {{#drawio:mbr-1}} | ||
| Zeile 11: | Zeile 10: | ||
===Bootcode=== | ===Bootcode=== | ||
| − | + | 446 Byte groß. Hier liegt die erste Stufe des Bootloaders. Bei GRUB 2 ist das nur ein Sprungbefehl in den Bereich hinter dem MBR. | |
| − | |||
===Partitionstabelle=== | ===Partitionstabelle=== | ||
| − | + | 64 Byte groß, aufgeteilt in vier Einträge zu je 16 Byte. Vier Einträge bedeuten vier primäre Partitionen – mehr sieht der MBR nicht vor. Jeder Eintrag ist so aufgebaut: | |
| − | |||
{| class="wikitable" | {| class="wikitable" | ||
| Zeile 35: | Zeile 32: | ||
|} | |} | ||
| − | + | Ausgewertet werden heute nur die beiden LBA-Felder. Die CHS-Angaben stammen aus der Zeit, als das BIOS die Geometrie brauchte, und sind bei großen Platten schlicht falsch. Anfang und Länge sind je 32 Bit breit; bei 512-Byte-Sektoren ergibt das 2 TiB als größte adressierbare Platte – genau diese Grenze hat GPT abgelöst. | |
| − | |||
===Kennung=== | ===Kennung=== | ||
| − | + | 2 Byte groß, die letzten beiden Byte des Sektors. Auf der Platte stehen die Byte <code>55 AA</code>. Wird sie mit <code>od -x</code> ausgelesen, erscheint <code>aa55</code>, weil dieses Werkzeug 16-Bit-Wörter little endian ausgibt. | |
| − | |||
===Wichtige Partitionstypen=== | ===Wichtige Partitionstypen=== | ||
| Zeile 65: | Zeile 60: | ||
==Den MBR ansehen== | ==Den MBR ansehen== | ||
| − | + | Den ersten Sektor auslesen und als Hexdump anzeigen. <code>hexdump -C</code> zeigt die Byte in der Reihenfolge, in der sie auf der Platte stehen. | |
| − | + | =Ersten Sektor als Hexdump= | |
| + | *dd if=/dev/sdb bs=512 count=1 status=none | hexdump -C | ||
| − | + | Mit <code>od</code> geht es ebenfalls, dann aber byteweise statt in 16-Bit-Wörtern: | |
| + | |||
| + | =Ersten Sektor byteweise mit od= | ||
| + | *od -A d -t x1 -N 512 /dev/sdb | ||
Interessant sind drei Stellen: der Beginn bei 0x000, die Tabelle ab 0x1BE und die Kennung bei 0x1FE. | Interessant sind drei Stellen: der Beginn bei 0x000, die Tabelle ab 0x1BE und die Kennung bei 0x1FE. | ||
| Zeile 97: | Zeile 96: | ||
|} | |} | ||
| − | + | Die vier Byte bei 0x1B8 (<code>7b 9a 3b 98</code>) sind die Disk-Signatur, die <code>fdisk</code> als ''Disk identifier'' anzeigt. Ab 0x1CE folgen die Einträge 2 bis 4, hier alle leer. | |
| − | |||
==Primäre, erweiterte und logische Partitionen== | ==Primäre, erweiterte und logische Partitionen== | ||
| − | {{#drawio: | + | {{#drawio:fdsik-1}} |
''Abbildung 2: Aufteilung einer MBR-Platte'' | ''Abbildung 2: Aufteilung einer MBR-Platte'' | ||
| − | + | Der MBR kennt genau vier Einträge. Einer davon darf eine '''erweiterte Partition''' sein: ein Container ohne eigenes Dateisystem, in dem die '''logischen Partitionen''' in einer verketteten Liste verwaltet werden. Logische Partitionen werden immer ab 5 nummeriert, auch wenn nur drei primäre existieren. Der Kernel führt für sd-Geräte höchstens 15 Partitionen je Platte. | |
| − | |||
| − | |||
| − | |||
==fdisk, der Partitionstabelleneditor== | ==fdisk, der Partitionstabelleneditor== | ||
| Zeile 116: | Zeile 111: | ||
===List-Modus=== | ===List-Modus=== | ||
| − | + | Zeigt die Partitionstabelle, ohne etwas zu ändern. | |
| + | |||
| + | =Partitionstabelle einer Platte anzeigen= | ||
| + | *fdisk -l /dev/sdb | ||
| + | |||
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors | Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors | ||
Disk model: QEMU HARDDISK | Disk model: QEMU HARDDISK | ||
| Zeile 129: | Zeile 128: | ||
/dev/sdb2 1050624 2097151 1046528 511M 83 Linux | /dev/sdb2 1050624 2097151 1046528 511M 83 Linux | ||
| − | + | Gerechnet wird in '''Sektoren''', nicht mehr in Zylindern. Ältere Anleitungen zeigen hier noch Köpfe, Spuren und Zylinder – diese Darstellung ist seit util-linux 2.26 verschwunden. Die Zeile ''Disklabel type'' verrät das Schema: <code>dos</code> für MBR, <code>gpt</code> für GPT. | |
| − | |||
===Interaktiver Modus=== | ===Interaktiver Modus=== | ||
| − | + | Öffnet die Platte zur Bearbeitung. Solange nicht mit <code>w</code> geschrieben wird, passiert auf der Platte nichts; <code>q</code> verwirft alles. | |
| − | + | ||
| + | =Platte interaktiv bearbeiten= | ||
| + | *fdisk /dev/sdb | ||
| + | |||
Befehl (m für Hilfe): | Befehl (m für Hilfe): | ||
| − | + | Innerhalb des interaktiven Modus stehen unter anderem diese Tasten zur Verfügung: | |
| − | |||
| − | |||
{| class="wikitable" | {| class="wikitable" | ||
| Zeile 148: | Zeile 147: | ||
|- | |- | ||
| <code>p</code> || Partitionstabelle anzeigen | | <code>p</code> || Partitionstabelle anzeigen | ||
| + | |- | ||
| + | | <code>l</code> || bekannte Partitionstypen auflisten | ||
|- | |- | ||
| <code>n</code> || neue Partition anlegen | | <code>n</code> || neue Partition anlegen | ||
| Zeile 155: | Zeile 156: | ||
| <code>t</code> || Partitionstyp ändern | | <code>t</code> || Partitionstyp ändern | ||
|- | |- | ||
| − | | <code>a</code> || Bootflag umschalten | + | | <code>a</code> || Bootflag umschalten |
|- | |- | ||
| <code>F</code> || freien Platz anzeigen | | <code>F</code> || freien Platz anzeigen | ||
|- | |- | ||
| <code>i</code> || Details zu einer Partition | | <code>i</code> || Details zu einer Partition | ||
| + | |- | ||
| + | | <code>e</code> || Partition vergrößern | ||
|- | |- | ||
| <code>v</code> || Tabelle prüfen | | <code>v</code> || Tabelle prüfen | ||
| Zeile 167: | Zeile 170: | ||
| <code>g</code> || neue leere GPT-Tabelle anlegen (siehe eigenen Artikel) | | <code>g</code> || neue leere GPT-Tabelle anlegen (siehe eigenen Artikel) | ||
|- | |- | ||
| − | | <code> | + | | <code>x</code> || Expertenmodus |
|- | |- | ||
| <code>w</code> || schreiben und beenden | | <code>w</code> || schreiben und beenden | ||
| Zeile 175: | Zeile 178: | ||
====Eine primäre Partition anlegen==== | ====Eine primäre Partition anlegen==== | ||
| + | |||
| + | Nach <code>n</code> fragt fdisk nach Typ, Nummer und Grenzen. Beide Vorgaben lassen sich mit der Eingabetaste übernehmen; der Vorschlag ist immer der erste freie Sektor. Die Größe gibt man als <code>+250M</code> oder <code>+2G</code> an, statt Sektoren auszurechnen. | ||
Befehl (m für Hilfe): n | Befehl (m für Hilfe): n | ||
| Zeile 187: | Zeile 192: | ||
Eine neue Partition 1 des Typs „Linux" und der Größe 250 MiB wurde erstellt. | Eine neue Partition 1 des Typs „Linux" und der Größe 250 MiB wurde erstellt. | ||
| − | + | ====Eine erweiterte Partition anlegen==== | |
| − | |||
| − | + | Bei <code>n</code> statt <code>p</code> die Taste <code>e</code> wählen. Die erweiterte Partition bekommt selbst kein Dateisystem. | |
Befehl (m für Hilfe): n | Befehl (m für Hilfe): n | ||
| Zeile 204: | Zeile 208: | ||
====Logische Partitionen anlegen==== | ====Logische Partitionen anlegen==== | ||
| + | |||
| + | Sind alle vier primären Einträge vergeben, legt <code>n</code> automatisch eine logische Partition ab Nummer 5 an. | ||
Befehl (m für Hilfe): n | Befehl (m für Hilfe): n | ||
| Zeile 213: | Zeile 219: | ||
Eine neue Partition 5 des Typs „Linux" und der Größe 250 MiB wurde erstellt. | Eine neue Partition 5 des Typs „Linux" und der Größe 250 MiB wurde erstellt. | ||
| − | + | Der erste Sektor liegt 2048 Sektoren hinter dem Anfang der erweiterten Partition. Der Platz davor nimmt den Verkettungssektor auf. | |
====Den Partitionstyp ändern==== | ====Den Partitionstyp ändern==== | ||
| + | |||
| + | <code>t</code> ändert die Systemkennung einer Partition. Der Typ ist nur eine Kennzeichnung – er legt kein Dateisystem an und hindert niemanden daran, etwas anderes darauf zu schreiben. Trotzdem gehört er gesetzt: <code>8e</code> für LVM und <code>fd</code> für RAID sind das, wonach Werkzeuge und Init-System suchen. | ||
Befehl (m für Hilfe): t | Befehl (m für Hilfe): t | ||
| Zeile 223: | Zeile 231: | ||
Der Typ der Partition „Linux" wurde in „Linux LVM" geändert. | Der Typ der Partition „Linux" wurde in „Linux LVM" geändert. | ||
| − | + | ====Schreiben oder verwerfen==== | |
| − | |||
| − | + | <code>w</code> schreibt die Tabelle und beendet fdisk. | |
Befehl (m für Hilfe): w | Befehl (m für Hilfe): w | ||
| Zeile 233: | Zeile 240: | ||
Synchronisiere Platten. | Synchronisiere Platten. | ||
| − | + | <code>q</code> beendet ohne zu schreiben – alle Änderungen sind dann verworfen. | |
Befehl (m für Hilfe): q | Befehl (m für Hilfe): q | ||
| Zeile 239: | Zeile 246: | ||
==Ausrichtung== | ==Ausrichtung== | ||
| − | + | Aktuelle Versionen beginnen die erste Partition bei Sektor '''2048''', also bei 1 MiB. Der Grund sind Platten mit 4-KiB-Sektoren, die Erase-Blöcke von SSDs und die Stripes von RAID-Verbünden. Eine falsch ausgerichtete Partition führt dazu, dass jeder Schreibzugriff zwei physische Blöcke berührt statt einen. Prüfen lässt sich das an der Spalte ''Start'' in der Ausgabe von <code>fdisk -l</code>: steht dort 2048, stimmt die Ausrichtung. | |
| − | |||
| − | |||
==Nach dem Schreiben: den Kernel informieren== | ==Nach dem Schreiben: den Kernel informieren== | ||
| Zeile 250: | Zeile 255: | ||
Der Kernel benutzt noch die alte Tabelle. | Der Kernel benutzt noch die alte Tabelle. | ||
| − | + | Ursache ist fast immer eine gemountete Partition oder ein aktives Swap auf derselben Platte. Solange die alte Tabelle gilt, arbeitet das System mit den alten Grenzen weiter. Entweder man löst die Blockade und liest die Tabelle neu ein, oder man startet neu. | |
| − | |||
| − | + | =Partitionstabelle neu einlesen= | |
| + | *partprobe /dev/sdb | ||
Aktuelle Version vom 19. August 2026, 16:52 Uhr
Eine Platte muss aufgeteilt werden, bevor Dateisysteme darauf entstehen können. Wie diese Aufteilung abgelegt wird, regelt das Partitionsschema. Dieser Artikel behandelt den MBR und das Werkzeug fdisk. Das neuere Schema GPT und der zugehörige Editor gdisk sind in einem eigenen Artikel beschrieben.
Master Boot Record
Bei einer MBR-partitionierten Platte liegen im ersten Sektor – 512 Byte – der Bootcode, die Partitionstabelle und eine Kennung. Bei GPT-Platten ist dieser Sektor ebenfalls belegt, enthält dann aber nur einen Schutzeintrag.
Abbildung 1: Aufbau des MBR und eines Partitionseintrags
Bootcode
446 Byte groß. Hier liegt die erste Stufe des Bootloaders. Bei GRUB 2 ist das nur ein Sprungbefehl in den Bereich hinter dem MBR.
Partitionstabelle
64 Byte groß, aufgeteilt in vier Einträge zu je 16 Byte. Vier Einträge bedeuten vier primäre Partitionen – mehr sieht der MBR nicht vor. Jeder Eintrag ist so aufgebaut:
| Byte | Länge | Inhalt |
|---|---|---|
| 0 | 1 | Bootindikator: 0x80 = aktiv, 0x00 = inaktiv |
| 1–3 | 3 | Anfang der Partition in CHS-Notation |
| 4 | 1 | Partitionstyp (Systemkennung) |
| 5–7 | 3 | Ende der Partition in CHS-Notation |
| 8–11 | 4 | Anfang der Partition als LBA |
| 12–15 | 4 | Länge der Partition in Sektoren |
Ausgewertet werden heute nur die beiden LBA-Felder. Die CHS-Angaben stammen aus der Zeit, als das BIOS die Geometrie brauchte, und sind bei großen Platten schlicht falsch. Anfang und Länge sind je 32 Bit breit; bei 512-Byte-Sektoren ergibt das 2 TiB als größte adressierbare Platte – genau diese Grenze hat GPT abgelöst.
Kennung
2 Byte groß, die letzten beiden Byte des Sektors. Auf der Platte stehen die Byte 55 AA. Wird sie mit od -x ausgelesen, erscheint aa55, weil dieses Werkzeug 16-Bit-Wörter little endian ausgibt.
Wichtige Partitionstypen
| Hex | Bedeutung |
|---|---|
| 83 | Linux |
| 82 | Linux Swap |
| 8e | Linux LVM |
| fd | Linux RAID autodetect |
| ef | EFI System Partition |
| ee | GPT Protective (Platte ist in Wahrheit GPT-partitioniert) |
| 05 / 0f | erweiterte Partition |
Den MBR ansehen
Den ersten Sektor auslesen und als Hexdump anzeigen. hexdump -C zeigt die Byte in der Reihenfolge, in der sie auf der Platte stehen.
Ersten Sektor als Hexdump
- dd if=/dev/sdb bs=512 count=1 status=none | hexdump -C
Mit od geht es ebenfalls, dann aber byteweise statt in 16-Bit-Wörtern:
Ersten Sektor byteweise mit od
- od -A d -t x1 -N 512 /dev/sdb
Interessant sind drei Stellen: der Beginn bei 0x000, die Tabelle ab 0x1BE und die Kennung bei 0x1FE.
000001b0 00 00 00 00 00 00 00 00 7b 9a 3b 98 00 00 80 20 000001c0 21 00 83 ef 1c 10 00 08 00 00 00 00 10 00 00 00 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
Der erste Eintrag beginnt bei 0x1BE und lässt sich Byte für Byte lesen:
| Byte | Wert | Bedeutung |
|---|---|---|
| 0 | 80 |
aktiv (bootfähig) |
| 1–3 | 20 21 00 |
Anfang in CHS |
| 4 | 83 |
Typ Linux |
| 5–7 | ef 1c 10 |
Ende in CHS |
| 8–11 | 00 08 00 00 |
Start-LBA 2048 (little endian) |
| 12–15 | 00 00 10 00 |
1048576 Sektoren = 512 MiB |
Die vier Byte bei 0x1B8 (7b 9a 3b 98) sind die Disk-Signatur, die fdisk als Disk identifier anzeigt. Ab 0x1CE folgen die Einträge 2 bis 4, hier alle leer.
Primäre, erweiterte und logische Partitionen
Abbildung 2: Aufteilung einer MBR-Platte
Der MBR kennt genau vier Einträge. Einer davon darf eine erweiterte Partition sein: ein Container ohne eigenes Dateisystem, in dem die logischen Partitionen in einer verketteten Liste verwaltet werden. Logische Partitionen werden immer ab 5 nummeriert, auch wenn nur drei primäre existieren. Der Kernel führt für sd-Geräte höchstens 15 Partitionen je Platte.
fdisk, der Partitionstabelleneditor
fdisk teilt eine Platte in Partitionen ein, löscht bestehende und ändert deren Systemkennung. Es gibt zwei Betriebsarten: den List-Modus und den interaktiven Modus.
List-Modus
Zeigt die Partitionstabelle, ohne etwas zu ändern.
Partitionstabelle einer Platte anzeigen
- fdisk -l /dev/sdb
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors Disk model: QEMU HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x983b9a7b Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 1050623 1048576 512M 83 Linux /dev/sdb2 1050624 2097151 1046528 511M 83 Linux
Gerechnet wird in Sektoren, nicht mehr in Zylindern. Ältere Anleitungen zeigen hier noch Köpfe, Spuren und Zylinder – diese Darstellung ist seit util-linux 2.26 verschwunden. Die Zeile Disklabel type verrät das Schema: dos für MBR, gpt für GPT.
Interaktiver Modus
Öffnet die Platte zur Bearbeitung. Solange nicht mit w geschrieben wird, passiert auf der Platte nichts; q verwirft alles.
Platte interaktiv bearbeiten
- fdisk /dev/sdb
Befehl (m für Hilfe):
Innerhalb des interaktiven Modus stehen unter anderem diese Tasten zur Verfügung:
| Taste | Wirkung |
|---|---|
m |
Hilfe anzeigen |
p |
Partitionstabelle anzeigen |
l |
bekannte Partitionstypen auflisten |
n |
neue Partition anlegen |
d |
Partition löschen |
t |
Partitionstyp ändern |
a |
Bootflag umschalten |
F |
freien Platz anzeigen |
i |
Details zu einer Partition |
e |
Partition vergrößern |
v |
Tabelle prüfen |
o |
neue leere MBR-Tabelle anlegen |
g |
neue leere GPT-Tabelle anlegen (siehe eigenen Artikel) |
x |
Expertenmodus |
w |
schreiben und beenden |
q |
beenden ohne zu schreiben |
Eine primäre Partition anlegen
Nach n fragt fdisk nach Typ, Nummer und Grenzen. Beide Vorgaben lassen sich mit der Eingabetaste übernehmen; der Vorschlag ist immer der erste freie Sektor. Die Größe gibt man als +250M oder +2G an, statt Sektoren auszurechnen.
Befehl (m für Hilfe): n
Partitionstyp
p Primär (0 primär, 0 erweitert, 4 frei)
e Erweitert (Container für logische Partitionen)
Wählen (Vorgabe p): p
Partitionsnummer (1-4, Vorgabe 1): 1
Erster Sektor (2048-2097151, Vorgabe 2048):
Letzter Sektor, +/-Sektoren oder +/-Größe{K,M,G,T,P} (2048-2097151, Vorgabe 2097151): +250M
Eine neue Partition 1 des Typs „Linux" und der Größe 250 MiB wurde erstellt.
Eine erweiterte Partition anlegen
Bei n statt p die Taste e wählen. Die erweiterte Partition bekommt selbst kein Dateisystem.
Befehl (m für Hilfe): n
Partitionstyp
p Primär (1 primär, 0 erweitert, 3 frei)
e Erweitert (Container für logische Partitionen)
Wählen (Vorgabe p): e
Partitionsnummer (2-4, Vorgabe 2): 2
Erster Sektor (514048-2097151, Vorgabe 514048):
Letzter Sektor, +/-Sektoren oder +/-Größe{K,M,G,T,P} (514048-2097151, Vorgabe 2097151):
Eine neue Partition 2 des Typs „Extended" und der Größe 773 MiB wurde erstellt.
Logische Partitionen anlegen
Sind alle vier primären Einträge vergeben, legt n automatisch eine logische Partition ab Nummer 5 an.
Befehl (m für Hilfe): n
Alle Primärpartitionen sind in Verwendung.
Logische Partition wird hinzugefügt 5
Erster Sektor (516096-2097151, Vorgabe 516096):
Letzter Sektor, +/-Sektoren oder +/-Größe{K,M,G,T,P} (516096-2097151, Vorgabe 2097151): +250M
Eine neue Partition 5 des Typs „Linux" und der Größe 250 MiB wurde erstellt.
Der erste Sektor liegt 2048 Sektoren hinter dem Anfang der erweiterten Partition. Der Platz davor nimmt den Verkettungssektor auf.
Den Partitionstyp ändern
t ändert die Systemkennung einer Partition. Der Typ ist nur eine Kennzeichnung – er legt kein Dateisystem an und hindert niemanden daran, etwas anderes darauf zu schreiben. Trotzdem gehört er gesetzt: 8e für LVM und fd für RAID sind das, wonach Werkzeuge und Init-System suchen.
Befehl (m für Hilfe): t Partitionsnummer (1,2,5, Vorgabe 5): 5 Hex code oder Alias (Typ L zum Auflisten aller): 8e Der Typ der Partition „Linux" wurde in „Linux LVM" geändert.
Schreiben oder verwerfen
w schreibt die Tabelle und beendet fdisk.
Befehl (m für Hilfe): w Die Partitionstabelle wurde verändert. Rufe ioctl() um Partitionstabelle neu einzulesen. Synchronisiere Platten.
q beendet ohne zu schreiben – alle Änderungen sind dann verworfen.
Befehl (m für Hilfe): q
Ausrichtung
Aktuelle Versionen beginnen die erste Partition bei Sektor 2048, also bei 1 MiB. Der Grund sind Platten mit 4-KiB-Sektoren, die Erase-Blöcke von SSDs und die Stripes von RAID-Verbünden. Eine falsch ausgerichtete Partition führt dazu, dass jeder Schreibzugriff zwei physische Blöcke berührt statt einen. Prüfen lässt sich das an der Spalte Start in der Ausgabe von fdisk -l: steht dort 2048, stimmt die Ausrichtung.
Nach dem Schreiben: den Kernel informieren
Ist eine Partition der Platte gerade in Benutzung, kann der Kernel die neue Tabelle nicht sofort übernehmen und fdisk meldet:
WARNUNG: Neueinlesen der Partitionstabelle führte zu Fehler 16: Device or resource busy. Der Kernel benutzt noch die alte Tabelle.
Ursache ist fast immer eine gemountete Partition oder ein aktives Swap auf derselben Platte. Solange die alte Tabelle gilt, arbeitet das System mit den alten Grenzen weiter. Entweder man löst die Blockade und liest die Tabelle neu ein, oder man startet neu.
Partitionstabelle neu einlesen
- partprobe /dev/sdb

