Linux fdisk: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
=Master Boot Record=
+
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 <code>fdisk</code>. Das neuere Schema '''GPT''' und der zugehörige Editor <code>gdisk</code> sind in einem eigenen Artikel beschrieben.
*Jede Festplatte hat einen Masterbootrecord, dies ist ein 512 Byte grosser Bereich am Anfang der Festplatte.  
+
 
;Dieser ist folgendermassen aufgebaut.
+
==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}}
 +
''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.
 +
 +
{| class="wikitable"
 +
! 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 <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===
 +
 +
{| class="wikitable"
 +
! 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
 +
|}
  
=Der 512 Byte grosse MBR besteht aus=
+
==Den MBR ansehen==
==Bootcode==
 
*446 Byte groß.
 
*Hier wird die erste Stufe des Bootloaders unter Linux plaziert!
 
  
==Partitionstabelle==
+
# dd if=/dev/sdb bs=512 count=1 status=none | hexdump -C
*64 Byte gross
 
*enthält die Kenndaten von 4 primären Partition.
 
*Die jeweils 16 Byte Bereiche beinhalten
 
**Bootindikator
 
**Angang der Partion in der CHS und LBS Notation
 
** Partitionstyp
 
**Ende der Partition in CHS Format
 
**Länge der Partition.
 
  
==Kennung==
+
<code>hexdump -C</code> zeigt die Byte in der Reihenfolge, in der sie auf der Platte stehen. Mit <code>od</code> geht es ebenfalls, dann aber byteweise statt in Wörtern:
*2 Byte gross
 
*enthält immer den Wert AA55
 
  
=Anzeigen des MBRs=
+
# od -A d -t x1 -N 512 /dev/sdb
*od -N 512 -x /dev/nvme0n1
 
<pre>
 
0000000 c033 d08e 00bc 8e7c 8ec0 bed8 7c00 00bf
 
0000020 b906 0200 f3fc 50a4 1c68 cb06 b9fb 0004
 
0000040 bebd 8007 007e 7c00 0f0b 0e85 8301 10c5
 
0000060 f1e2 18cd 5688 5500 46c6 0511 46c6 0010
 
0000100 41b4 aabb cd55 5d13 0f72 fb81 aa55 0975
 
0000120 c1f7 0001 0374 46fe 6610 8060 107e 7400
 
0000140 6626 0068 0000 6600 76ff 6808 0000 0068
 
0000160 687c 0001 1068 b400 8a42 0056 f48b 13cd
 
0000200 839f 10c4 eb9e b814 0201 00bb 8a7c 0056
 
0000220 768a 8a01 024e 6e8a cd03 6613 7361 fe1c
 
0000240 114e 0c75 7e80 8000 840f 008a 80b2 84eb
 
0000260 3255 8ae4 0056 13cd eb5d 819e fe3e 557d
 
0000300 75aa ff6e 0076 8de8 7500 fa17 d1b0 64e6
 
0000320 83e8 b000 e6df e860 007c ffb0 64e6 75e8
 
0000340 fb00 00b8 cdbb 661a c023 3b75 8166 54fb
 
0000360 5043 7541 8132 02f9 7201 662c 0768 00bb
 
0000400 6600 0068 0002 6600 0868 0000 6600 6653
 
0000420 6653 6655 0068 0000 6600 0068 007c 6600
 
0000440 6861 0000 cd07 5a1a f632 00ea 007c cd00
 
0000460 a018 07b7 08eb b6a0 eb07 a003 07b5 e432
 
0000500 0005 8b07 acf0 003c 0974 07bb b400 cd0e
 
0000520 eb10 f4f2 fdeb c92b 64e4 00eb 0224 f8e0
 
0000540 0224 49c3 766e 6c61 6469 7020 7261 6974
 
0000560 6974 6e6f 7420 6261 656c 4500 7272 726f
 
0000600 6c20 616f 6964 676e 6f20 6570 6172 6974
 
0000620 676e 7320 7379 6574 006d 694d 7373 6e69
 
0000640 2067 706f 7265 7461 6e69 2067 7973 7473
 
0000660 6d65 0000 6300 9a7b 983b e6cc 0000 2080
 
0000700 0021 1cef 0c10 0800 0000 f000 0002 1c00
 
0000720 0c11 fe83 ffff f800 0002 1800 3b9b 0000
 
0000740 0000 0000 0000 0000 0000 0000 0000 0000
 
0000760 0000 0000 0000 0000 0000 0000 0000 aa55
 
</pre>
 
  
=Partitonstabelle=
+
Interessant sind drei Stellen: der Beginn bei 0x000, die Tabelle ab 0x1BE und die Kennung bei 0x1FE.
{{#drawio:fdsik-1}}
 
=fdisk der Partitionstabelleneditor für Linux=
 
fdisk teilt eine  Festplatte in verschiedene Partitionen ein, löscht
 
bestehende Partitionen oder gibt vorhandenen Partitionen eine andere
 
Systemkennung.fdisk kennt zwei modi interaktiv und list Modus
 
  
==List Modus==
+
000001b0  00 00 00 00 00 00 00 00  7b 9a 3b 98 00 00 80 20
  root@zero:~# fdisk -l /dev/sdb
+
  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
  Platte /dev/sdb: 1073 MByte, 1073741824 Byte
+
  000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  255 Köpfe, 63 Sektoren/Spuren, 130 Zylinder
+
  000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
  Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
 
  Disk identifier: 0x20aaf2c3
 
   
 
    Gerät boot.    Anfang        Ende    Blöcke  Id System
 
  /dev/sdb1              1          65      522081  83 Linux
 
  /dev/sdb2              66        130      522112+ 83 Linux
 
  
==Interaktiver Modus==
+
Der erste Eintrag beginnt bei 0x1BE und lässt sich Byte für Byte lesen:
root@zero:~# fdisk  /dev/sdb
 
 
Befehl (m für Hilfe):
 
  
 +
{| class="wikitable"
 +
! Byte !! Wert !! Bedeutung
 +
|-
 +
| 0 || <code>80</code> || aktiv (bootfähig)
 +
|-
 +
| 1–3 || <code>20 21 00</code> || Anfang in CHS
 +
|-
 +
| 4 || <code>83</code> || Typ Linux
 +
|-
 +
| 5–7 || <code>ef 1c 10</code> || Ende in CHS
 +
|-
 +
| 8–11 || <code>00 08 00 00</code> || Start-LBA 2048 (little endian)
 +
|-
 +
| 12–15 || <code>00 00 10 00</code> || 1048576 Sektoren = 512 MiB
 +
|}
  
===Kommandos===
+
*Die vier Byte bei 0x1B8 (<code>7b 9a 3b 98</code>) sind die Disk-Signatur, die <code>fdisk</code> als ''Disk identifier'' anzeigt.
<pre>
+
*Ab 0x1CE folgen die Einträge 2 bis 4, hier alle leer.
Command (m for help): m
 
 
Help:
 
 
  DOS (MBR)
 
  a  toggle a bootable flag
 
  b  edit nested BSD disklabel
 
  c  toggle the dos compatibility flag
 
  
  Generic
+
==Primäre, erweiterte und logische Partitionen==
  d  delete a partition
 
  F  list free unpartitioned space
 
  l  list known partition types
 
  n  add a new partition
 
  p  print the partition table
 
  t  change a partition type
 
  v  verify the partition table
 
  i  print information about a partition
 
  e  resize a partition
 
  T  discard (trim) sectors
 
  
  Misc
+
{{#drawio:part-1}}
  m  print this menu
+
''Abbildung 2: Aufteilung einer MBR-Platte''
  u  change display/entry units
 
  x  extra functionality (experts only)
 
  
  Script
+
*Der MBR kennt genau vier Einträge. Einer davon darf eine '''erweiterte Partition''' sein.
  I  load disk layout from sfdisk script file
+
*Die erweiterte Partition ist nur ein Container ohne eigenes Dateisystem. In ihr werden die '''logischen Partitionen''' in einer verketteten Liste verwaltet.
  O  dump disk layout to sfdisk script file
+
*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.
  
  Save & Exit
+
==fdisk, der Partitionstabelleneditor==
  w  write table to disk and exit
 
  q  quit without saving changes
 
  
  Create a new label
+
<code>fdisk</code> teilt eine Platte in Partitionen ein, löscht bestehende und ändert deren Systemkennung. Es gibt zwei Betriebsarten: den List-Modus und den interaktiven Modus.
  g  create a new empty GPT partition table
 
  G  create a new empty SGI (IRIX) partition table
 
  o  create a new empty MBR (DOS) partition table
 
  s  create a new empty Sun partition table
 
  
</pre>
+
===List-Modus===
  
===Die Partitionstabelle anzeigen===
+
# fdisk -l /dev/sdb
  Befehl (m für Hilfe): p
+
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
 
   
 
   
  Platte /dev/sdb: 1073 MByte, 1073741824 Byte
+
  Device    Boot  Start    End Sectors  Size Id Type
  255 Köpfe, 63 Sektoren/Spuren, 130 Zylinder
+
/dev/sdb1          2048 1050623 1048576  512M 83 Linux
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
+
  /dev/sdb2        1050624 2097151 1046528  511M 83 Linux
  Disk identifier: 0x20aaf2c3
+
 
 +
*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.
 +
*''Disklabel type'' verrät das Schema: <code>dos</code> für MBR, <code>gpt</code> für GPT.
 +
 
 +
===Interaktiver Modus===
 +
 
 +
  # fdisk /dev/sdb
 
   
 
   
    Gerät boot.     Anfang        Ende    Blöcke  Id  System
+
  Befehl (m für Hilfe):
  /dev/sdb1              1          65      522081  83  Linux
+
 
  /dev/sdb2              66        130      522112+  83  Linux
+
Solange nicht mit <code>w</code> geschrieben wird, passiert auf der Platte nichts. <code>q</code> verwirft alles.
 +
 
 +
====Die wichtigsten Kommandos====
 +
 
 +
{| class="wikitable"
 +
! Taste !! Wirkung
 +
|-
 +
| <code>m</code> || Hilfe anzeigen
 +
|-
 +
| <code>p</code> || Partitionstabelle anzeigen
 +
|-
 +
| <code>n</code> || neue Partition anlegen
 +
|-
 +
| <code>d</code> || Partition löschen
 +
|-
 +
| <code>t</code> || Partitionstyp ändern
 +
|-
 +
| <code>a</code> || Bootflag umschalten (nur MBR)
 +
|-
 +
| <code>F</code> || freien Platz anzeigen
 +
|-
 +
| <code>i</code> || Details zu einer Partition
 +
|-
 +
| <code>v</code> || Tabelle prüfen
 +
|-
 +
| <code>o</code> || neue leere MBR-Tabelle anlegen
 +
|-
 +
| <code>g</code> || neue leere GPT-Tabelle anlegen (siehe eigenen Artikel)
 +
|-
 +
| <code>O</code> / <code>I</code> || Layout als sfdisk-Skript sichern / laden
 +
|-
 +
| <code>w</code> || schreiben und beenden
 +
|-
 +
| <code>q</code> || beenden ohne zu schreiben
 +
|}
 +
 
 +
====Eine primäre Partition anlegen====
  
===Partitionen löschen===
+
  Befehl (m für Hilfe): n
  Befehl (m für Hilfe): d
+
Partitionstyp
  Partitionsnummer (1-4): 2
+
    p  Primär (0 primär, 0 erweitert, 4 frei)
  Befehl (m für Hilfe): d
+
    e  Erweitert (Container für logische Partitionen)
  Partition 1 ausgewählt
+
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
 
   
 
   
===Neue Partitionen anlegen===
+
Eine neue Partition 1 des Typs „Linux" und der Größe 250 MiB wurde erstellt.
===Eine primäre Partition anlegen===
+
 
 +
*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.
 +
 
 +
====Eine erweiterte Partition anlegen====
 +
 
 
  Befehl (m für Hilfe): n
 
  Befehl (m für Hilfe): n
  Befehl  Aktion
+
  Partitionstyp
     e      Erweiterte
+
     p  Primär (1 primär, 0 erweitert, 3 frei)
     p      Primäre Partition (1-4)
+
     e  Erweitert (Container für logische Partitionen)
  p
+
  Wählen (Vorgabe p): e
  Partitionsnummer (1-4): 1
+
  Partitionsnummer (2-4, Vorgabe 2): 2
  Erster Zylinder (1-130, Vorgabe: 1):  
+
  Erster Sektor (514048-2097151, Vorgabe 514048):  
  Benutze den Standardwert 1
+
  Letzter Sektor, +/-Sektoren oder +/-Größe{K,M,G,T,P} (514048-2097151, Vorgabe 2097151):  
Last Zylinder, +Zylinder or +size{K,M,G} (1-130, Vorgabe: 130): +250M
+
 +
Eine neue Partition 2 des Typs „Extended" und der Größe 773 MiB wurde erstellt.
 +
 
 +
====Logische Partitionen anlegen====
  
===Eine erweiterte Partition anlegen===
 
 
  Befehl (m für Hilfe): n
 
  Befehl (m für Hilfe): n
  Befehl Aktion
+
  Alle Primärpartitionen sind in Verwendung.
    e      Erweiterte
+
  Logische Partition wird hinzugefügt 5
    p      Primäre Partition (1-4)
+
  Erster Sektor (516096-2097151, Vorgabe 516096):  
e
+
  Letzter Sektor, +/-Sektoren oder +/-Größe{K,M,G,T,P} (516096-2097151, Vorgabe 2097151): +250M
Partitionsnummer (1-4): 2
+
  Erster Zylinder (34-130, Vorgabe: 34):  
+
  Eine neue Partition 5 des Typs „Linux" und der Größe 250 MiB wurde erstellt.
  Benutze den Standardwert 34
+
 
Last Zylinder, +Zylinder or +size{K,M,G} (34-130, Vorgabe: 130):  
+
*Der erste Sektor liegt 2048 Sektoren hinter dem Anfang der erweiterten Partition. Der Platz davor nimmt den Verkettungssektor auf.
  Benutze den Standardwert 130
 
  
===Logische Partitionen anlegen===
+
====Den Partitionstyp ändern====
Befehl (m für Hilfe): n
 
Befehl  Aktion
 
    l      Logische Partition (5 oder größer)
 
    p      Primäre Partition (1-4)
 
l
 
Erster Zylinder (34-130, Vorgabe: 34):
 
Benutze den Standardwert 34
 
Last Zylinder, +Zylinder or +size{K,M,G} (34-130, Vorgabe: 130): +250M
 
Befehl (m für Hilfe): n     
 
Befehl  Aktion
 
    l      Logische Partition (5 oder größer)
 
    p      Primäre Partition (1-4)
 
l
 
Erster Zylinder (67-130, Vorgabe: 67):
 
Benutze den Standardwert 67
 
Last Zylinder, +Zylinder or +size{K,M,G} (67-130, Vorgabe: 130):
 
Benutze den Standardwert 130
 
  
===Den Dateisystemtyp einer Partition ändern===
 
 
  Befehl (m für Hilfe): t
 
  Befehl (m für Hilfe): t
  Partitionsnummer (1-6): 6
+
  Partitionsnummer (1,2,5, Vorgabe 5): 5
  Hex code (L um eine Liste anzuzeigen): l
+
  Hex code oder Alias (Typ L zum Auflisten aller): 8e
 
   
 
   
  0 Leer            1e  Verst. W95 FAT1 80  Old Minix      bf  Solaris       
+
  Der Typ der Partition „Linux" wurde in „Linux LVM" geändert.
  1  FAT12          24  NEC DOS        81  Minix / old Lin c1  DRDOS/sec (FAT-
+
 
  2  XENIX root      39  Plan 9          82  Linux Swap / So c4  DRDOS/sec (FAT-
+
*Der Typ ist nur eine Kennzeichnung. Er legt kein Dateisystem an und hindert niemanden daran, etwas anderes darauf zu schreiben.
  3  XENIX usr      3c  PartitionMagic  83  Linux          c6  DRDOS/sec (FAT-
+
*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.
  4  FAT16 <32M      40  Venix 80286    84  OS/2 verst. C:- c7  Syrinx       
 
  5  Erweiterte      41  PPC PReP Boot  85  Linux erweitert da  Nicht-DS-Daten
 
  6  FAT16          42  SFS            86  NTFS volume set db  CP/M / CTOS / 
 
  7  HPFS/NTFS      4d  QNX4.x          87  NTFS volume set de  Dell Utility 
 
  8  AIX            4e  QNX4.x 2nd part 88  Linux Plaintext df  BootIt       
 
  9  AIX bootfähig  4f  QNX4.x 3rd part 8e Linux LVM       e1  DOS access   
 
  a  OS/2 Bootmanage 50  OnTrack DM      93  Amoeba          e3  DOS R/O       
 
  b  W95 FAT32      51  OnTrack DM6 Aux 94  Amoeba BBT      e4  SpeedStor     
 
  c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          eb  BeOS fs       
 
  e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  GPT           
 
  f  W95 Erw. (LBA)  54  OnTrackDM6      a5  FreeBSD        ef  EFI (FAT-12/16/
 
10  OPUS            55  EZ-Drive        a6  OpenBSD        f0  Linux/PA-RISC b
 
11  Verst. FAT12    56  Golden Bow      a7  NeXTSTEP        f1  SpeedStor     
 
12  Compaq Diagnost 5c  Priam Edisk    a8  Darwin UFS      f4  SpeedStor     
 
14  Verst. FAT16 <3 61  SpeedStor      a9  NetBSD          f2  DOS sekundär 
 
16  Verst. FAT16    63  GNU HURD / SysV ab  Darwin boot    fb  VMware VMFS   
 
17  Verst. HPFS/NTF 64  Novell Netware  b7  BSDI fs        fc  VMware VMKCORE
 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap      fd Linux raid auto
 
1b  Verst. W95 FAT3 70  DiskSecure Mult bb  Boot Wizard ver fe  LANstep       
 
1c  Verst. W95 FAT3 75  PC/IX          be  Solaris boot    ff  BBT 
 
 
Hex code (L um eine Liste anzuzeigen):c
 
Der Dateisystemtyp der Partition 6 ist nun c (W95 FAT32 (LBA)
 
  
===Ende ohne Speichern der Änderungen===
+
====Schreiben oder verwerfen====
Befehl (m für Hilfe): q
 
 
root@zero:~#
 
  
===Die Tabelle auf die Festplatte schreiben und das Programm beenden===
 
 
  Befehl (m für Hilfe): w
 
  Befehl (m für Hilfe): w
  Die Partitionstabelle wurde verändert!
+
  Die Partitionstabelle wurde verändert.
 
 
  Rufe ioctl() um Partitionstabelle neu einzulesen.
 
  Rufe ioctl() um Partitionstabelle neu einzulesen.
 +
Synchronisiere Platten.
 +
 +
Ohne Schreiben:
 +
 +
Befehl (m für Hilfe): q
 +
 +
==Ausrichtung==
 +
 +
*Aktuelle Versionen beginnen die erste Partition bei Sektor '''2048''', also bei 1 MiB.
 +
*Der Grund: Platten mit 4-KiB-Sektoren, Erase-Blöcke von SSDs und 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'' – und an den Werten, die der Kernel meldet:
 +
 +
$ cat /sys/block/sdb/queue/optimal_io_size
 +
$ cat /sys/block/sdb/queue/physical_block_size
 +
 +
==Nach dem Schreiben: den Kernel informieren==
 +
 +
Ist eine Partition der Platte in Benutzung, kann der Kernel die Tabelle nicht neu einlesen:
 +
 
  WARNUNG: Neueinlesen der Partitionstabelle führte zu Fehler 16: Device or resource busy.
 
  WARNUNG: Neueinlesen der Partitionstabelle führte zu Fehler 16: Device or resource busy.
  Der Kernel benutzt noch die alte Tabelle.
+
 
  Die neue Tabelle wird beim nächsten Neustart verwendet
+
*Ursache ist fast immer eine gemountete Partition, ein aktives Swap oder ein LVM- beziehungsweise RAID-Verbund, der die Platte belegt.
 +
*Abhilfe, ohne neu zu starten:
 +
 
 +
# partprobe /dev/sdb
 +
  # partx -u /dev/sdb
 +
# blockdev --rereadpt /dev/sdb
 +
 
 +
*Was die Platte festhält, zeigt:
 +
 
 +
# lsblk /dev/sdb
 +
# fuser -m /dev/sdb1
 +
 
 +
==Partitionstabelle sichern und zurückspielen==
 +
 
 +
Vor jedem Eingriff eine Sicherung anlegen – und zwar auf ein anderes Medium.
 +
 
 +
MBR mitsamt Bootcode:
 +
 
 +
# dd if=/dev/sdb of=/mnt/backup/sdb-mbr.bin bs=512 count=1
 +
 
 +
Nur die Partitionstabelle, in lesbarer Form:
 +
 
 +
# sfdisk -d /dev/sdb > /mnt/backup/sdb.sfdisk
 +
  # sfdisk /dev/sdb < /mnt/backup/sdb.sfdisk
 +
 
 +
*Die sfdisk-Datei ist reiner Text und lässt sich vor dem Zurückspielen ansehen und bearbeiten.
 +
 
 +
==Weitere Werkzeuge==
 +
 
 +
{| class="wikitable"
 +
! Werkzeug !! Zweck
 +
|-
 +
| <code>lsblk</code> || Baum aus Platten, Partitionen und Mountpunkten
 +
|-
 +
| <code>blkid</code> || UUID, Label und Dateisystemtyp je Partition
 +
|-
 +
| <code>parted</code> || Partitionieren mit Größenangaben statt Sektoren, auch skriptfähig
 +
|-
 +
| <code>gdisk</code> / <code>sgdisk</code> || Gegenstücke zu fdisk für GPT-Platten
 +
|-
 +
| <code>partx</code> || Partitionen einzeln beim Kernel an- und abmelden
 +
|-
 +
| <code>wipefs</code> || Signaturen von Dateisystemen und Partitionstabellen entfernen
 +
|}

Version vom 19. August 2026, 16:12 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.
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

# dd if=/dev/sdb bs=512 count=1 status=none | hexdump -C

hexdump -C zeigt die Byte in der Reihenfolge, in der sie auf der Platte stehen. Mit od geht es ebenfalls, dann aber byteweise statt in Wörtern:

# 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

part-1
empty app.diagrams.net chart

Abbildung 2: Aufteilung einer MBR-Platte

  • Der MBR kennt genau vier Einträge. Einer davon darf eine erweiterte Partition sein.
  • Die erweiterte Partition ist nur ein Container ohne eigenes Dateisystem. In ihr werden die logischen Partitionen in einer verketteten Liste verwaltet.
  • 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

# 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.
  • Disklabel type verrät das Schema: dos für MBR, gpt für GPT.

Interaktiver Modus

# fdisk /dev/sdb

Befehl (m für Hilfe):

Solange nicht mit w geschrieben wird, passiert auf der Platte nichts. q verwirft alles.

Die wichtigsten Kommandos

Taste Wirkung
m Hilfe anzeigen
p Partitionstabelle anzeigen
n neue Partition anlegen
d Partition löschen
t Partitionstyp ändern
a Bootflag umschalten (nur MBR)
F freien Platz anzeigen
i Details zu einer Partition
v Tabelle prüfen
o neue leere MBR-Tabelle anlegen
g neue leere GPT-Tabelle anlegen (siehe eigenen Artikel)
O / I Layout als sfdisk-Skript sichern / laden
w schreiben und beenden
q beenden ohne zu schreiben

Eine primäre Partition anlegen

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.
  • 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.

Eine erweiterte Partition anlegen

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

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

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.
  • 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.

Schreiben oder verwerfen

Befehl (m für Hilfe): w
Die Partitionstabelle wurde verändert.
Rufe ioctl() um Partitionstabelle neu einzulesen.
Synchronisiere Platten.

Ohne Schreiben:

Befehl (m für Hilfe): q

Ausrichtung

  • Aktuelle Versionen beginnen die erste Partition bei Sektor 2048, also bei 1 MiB.
  • Der Grund: Platten mit 4-KiB-Sektoren, Erase-Blöcke von SSDs und 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 – und an den Werten, die der Kernel meldet:
$ cat /sys/block/sdb/queue/optimal_io_size
$ cat /sys/block/sdb/queue/physical_block_size

Nach dem Schreiben: den Kernel informieren

Ist eine Partition der Platte in Benutzung, kann der Kernel die Tabelle nicht neu einlesen:

WARNUNG: Neueinlesen der Partitionstabelle führte zu Fehler 16: Device or resource busy.
  • Ursache ist fast immer eine gemountete Partition, ein aktives Swap oder ein LVM- beziehungsweise RAID-Verbund, der die Platte belegt.
  • Abhilfe, ohne neu zu starten:
# partprobe /dev/sdb
# partx -u /dev/sdb
# blockdev --rereadpt /dev/sdb
  • Was die Platte festhält, zeigt:
# lsblk /dev/sdb
# fuser -m /dev/sdb1

Partitionstabelle sichern und zurückspielen

Vor jedem Eingriff eine Sicherung anlegen – und zwar auf ein anderes Medium.

MBR mitsamt Bootcode:

# dd if=/dev/sdb of=/mnt/backup/sdb-mbr.bin bs=512 count=1

Nur die Partitionstabelle, in lesbarer Form:

# sfdisk -d /dev/sdb > /mnt/backup/sdb.sfdisk
# sfdisk /dev/sdb < /mnt/backup/sdb.sfdisk
  • Die sfdisk-Datei ist reiner Text und lässt sich vor dem Zurückspielen ansehen und bearbeiten.

Weitere Werkzeuge

Werkzeug Zweck
lsblk Baum aus Platten, Partitionen und Mountpunkten
blkid UUID, Label und Dateisystemtyp je Partition
parted Partitionieren mit Größenangaben statt Sektoren, auch skriptfähig
gdisk / sgdisk Gegenstücke zu fdisk für GPT-Platten
partx Partitionen einzeln beim Kernel an- und abmelden
wipefs Signaturen von Dateisystemen und Partitionstabellen entfernen