Linux fdisk: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
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.
*[[mbr]]
+
 
=MBR Festplatten=
+
==Master Boot Record==
*Jede Festplatte hat einen Masterbootrecord, dies ist ein 512 Byte grosser Bereich am Anfang der Festplatte.  
+
 
;Dieser ist folgendermassen aufgebaut.
+
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. Jeder Eintrag ist so aufgebaut:
  
=Der 512 Byte grosse MBR besteht aus=
+
{| class="wikitable"
==Bootcode==
+
! Byte !! Länge !! Inhalt
*446 Byte groß.
+
|-
*Hier wird die erste Stufe des Bootloaders unter Linux plaziert!
+
| 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
 +
|}
  
==Partitionstabelle==
+
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.
*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==
+
===Kennung===
*2 Byte gross
 
*enthält immer den Wert AA55
 
  
=Anzeigen des MBRs=
+
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.
*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>
 
  
 +
===Wichtige Partitionstypen===
  
=fdisk der Partitionstabelleneditor für Linux=
+
{| class="wikitable"
fdisk teilt eine  Festplatte in verschiedene Partitionen ein, löscht
+
! Hex !! Bedeutung
bestehende Partitionen oder gibt vorhandenen Partitionen eine andere
+
|-
Systemkennung.fdisk kennt zwei modi interaktiv und list Modus
+
| 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
 +
|}
  
==List Modus==
+
==Den MBR ansehen==
  root@zero:~# fdisk -l /dev/sdb
+
 
 +
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.
 +
 
 +
  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:
 +
 
 +
{| 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
 +
|}
 +
 
 +
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==
 +
 
 +
{{#drawio:fdsik-1}}
 +
''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==
 +
 
 +
<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.
 +
 
 +
===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
 
   
 
   
  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
 
 
     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==
+
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.
root@zero:~# fdisk  /dev/sdb
 
 
Befehl (m für Hilfe):
 
  
 +
===Interaktiver Modus===
  
===Kommandos===
+
Öffnet die Platte zur Bearbeitung. Solange nicht mit <code>w</code> geschrieben wird, passiert auf der Platte nichts; <code>q</code> verwirft alles.
<pre>
 
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
+
=Platte interaktiv bearbeiten=
  d  delete a partition
+
*fdisk /dev/sdb
  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
+
Befehl (m für Hilfe):
  m   print this menu
 
  u  change display/entry units
 
  x  extra functionality (experts only)
 
  
  Script
+
Innerhalb des interaktiven Modus stehen unter anderem diese Tasten zur Verfügung:
  I  load disk layout from sfdisk script file
 
  O  dump disk layout to sfdisk script file
 
  
  Save & Exit
+
{| class="wikitable"
  w   write table to disk and exit
+
! Taste !! Wirkung
  q   quit without saving changes
+
|-
 +
| <code>m</code> || Hilfe anzeigen
 +
|-
 +
| <code>p</code> || Partitionstabelle anzeigen
 +
|-
 +
| <code>l</code> || bekannte Partitionstypen auflisten
 +
|-
 +
| <code>n</code> || neue Partition anlegen
 +
|-
 +
| <code>d</code> || Partition löschen
 +
|-
 +
| <code>t</code> || Partitionstyp ändern
 +
|-
 +
| <code>a</code> || Bootflag umschalten
 +
|-
 +
| <code>F</code> || freien Platz anzeigen
 +
|-
 +
| <code>i</code> || Details zu einer Partition
 +
|-
 +
| <code>e</code> || Partition vergrößern
 +
|-
 +
| <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>x</code> || Expertenmodus
 +
|-
 +
| <code>w</code> || schreiben und beenden
 +
|-
 +
| <code>q</code> || beenden ohne zu schreiben
 +
|}
  
  Create a new label
+
====Eine primäre Partition anlegen====
  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>
+
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.
  
===Die Partitionstabelle anzeigen===
+
  Befehl (m für Hilfe): n
  Befehl (m für Hilfe): p
+
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
 
   
 
   
  Platte /dev/sdb: 1073 MByte, 1073741824 Byte
+
  Eine neue Partition 1 des Typs „Linux" und der Größe 250 MiB wurde erstellt.
  255 Köpfe, 63 Sektoren/Spuren, 130 Zylinder
+
 
  Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
+
====Eine erweiterte Partition anlegen====
  Disk identifier: 0x20aaf2c3
+
 
 +
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
 +
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):  
 
   
 
   
    Gerät boot.     Anfang        Ende    Blöcke  Id  System
+
  Eine neue Partition 2 des Typs „Extended" und der Größe 773 MiB wurde erstellt.
  /dev/sdb1              1          65      522081  83  Linux
 
  /dev/sdb2              66        130      522112+  83  Linux
 
  
===Partitionen löschen===
+
====Logische Partitionen anlegen====
  Befehl (m für Hilfe): d
+
 
  Partitionsnummer (1-4): 2
+
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): d
+
 
Partition 1 ausgewählt
+
  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
 
   
 
   
===Neue Partitionen anlegen===
+
Eine neue Partition 5 des Typs „Linux" und der Größe 250 MiB wurde erstellt.
===Eine primäre Partition anlegen===
+
 
Befehl (m für Hilfe): n
+
Der erste Sektor liegt 2048 Sektoren hinter dem Anfang der erweiterten Partition. Der Platz davor nimmt den Verkettungssektor auf.
Befehl  Aktion
 
    e      Erweiterte
 
    p      Primäre Partition (1-4)
 
p
 
Partitionsnummer (1-4): 1
 
Erster Zylinder (1-130, Vorgabe: 1):
 
Benutze den Standardwert 1
 
Last Zylinder, +Zylinder or +size{K,M,G} (1-130, Vorgabe: 130): +250M
 
  
===Eine erweiterte Partition anlegen===
+
====Den Partitionstyp ändern====
Befehl (m für Hilfe): n
 
Befehl  Aktion
 
    e      Erweiterte
 
    p      Primäre Partition (1-4)
 
e
 
Partitionsnummer (1-4): 2
 
Erster Zylinder (34-130, Vorgabe: 34):
 
Benutze den Standardwert 34
 
Last Zylinder, +Zylinder or +size{K,M,G} (34-130, Vorgabe: 130):
 
Benutze den Standardwert 130
 
  
===Logische Partitionen anlegen===
+
<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): 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-
+
====Schreiben oder verwerfen====
  3  XENIX usr      3c  PartitionMagic  83  Linux          c6  DRDOS/sec (FAT-
 
  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===
+
<code>w</code> schreibt die Tabelle und beendet fdisk.
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.
 +
 +
<code>q</code> 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 <code>fdisk -l</code>: 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.
 
  WARNUNG: Neueinlesen der Partitionstabelle führte zu Fehler 16: Device or resource busy.
 
  Der Kernel benutzt noch die alte Tabelle.
 
  Der Kernel benutzt noch die alte Tabelle.
Die neue Tabelle wird beim nächsten Neustart verwendet
+
 
 +
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