Zeigt die vollständige Partitionstabelle einer Disk an, inklusive freier Bereiche.
→ Shell-Übersicht · diskinfo · mountp · gpt
partinfo <disk-id>
| Parameter | Typ | Beschreibung |
|---|---|---|
disk-id | int | Laufwerksnummer (0-basiert, aus diskinfo) |
partinfo gibt eine tabellarische Übersicht aller Partitionen und freien Bereiche auf disk-id aus. Es erkennt sowohl MBR- als auch GPT-formatierte Disks und zeigt die Partitionsart an.
Im Gegensatz zu diskinfo (nur Laufwerke) oder gpt (nur GPT-FAT-Partitionen) liefert partinfo das vollständige Layout inklusive aller Lücken zwischen Partitionen.
Ausgabe-Format:
Disk <id>: <sektoren> sectors (<MB> MB) [GPT|MBR]
# Start End Sectors MB Type
--- ---------- ---------- ---------- ------ ---------------
- 0 2047 2048 1 free
1 2048 524287 522240 255 FAT32 MBR
Spalten:
| Spalte | Beschreibung |
|---|---|
# | Partitionsnummer (1-basiert) für verwendbare Partitionen; - für freie Bereiche und GPT-Metadaten |
Start | Erster LBA-Sektor |
End | Letzter LBA-Sektor (inklusive) |
Sectors | Anzahl der Sektoren |
MB | Größe in Megabyte (Sektoren ÷ 2048) |
Type | Partitionstyp (siehe unten) |
Partitionstypen:
| Typ-String | Bedeutung | Zählt als Partition? |
|---|---|---|
free | Freier, nicht partitionierter Bereich | nein |
ESP | EFI System Partition (GPT GUID C12A7328-…) | ja |
FAT32/Data | Microsoft Basic Data (GPT GUID EBD0A0A2-…) | ja |
FAT32 MBR | MBR-Partition Typ 0x0B oder 0x0C | ja |
MBR Part | Sonstige MBR-Partition (nicht FAT32) | ja |
GPT Part | Unbekannte GPT-Partition | ja |
GPT meta | GPT-Metadaten-Bereich (Header + Partition-Array) | nein |
Der Typ-String besteht aus zwei unabhängigen Teilen:
0x0C (FAT32 LBA). Das ist nur eine Markierung — sie sagt, was erwartet wird, formatiert aber nichts.
Der Zusatz „MBR“ bezieht sich also auf die Diskstruktur, nicht auf den Dateisystemtyp. Eine MBR-partitionierte Disk mit einer FAT32-Partition zeigt FAT32 MBR. Eine GPT-Disk mit einer FAT32-Datenpartition zeigt FAT32/Data (GPT-eigene Bezeichnung).
FAT32 ohne MBR (Superfloppy):
Wenn eine Disk mit mkfat32 1 0 <sektoren> ohne vorheriges part formatiert wird, sitzt die FAT32-BPB direkt bei LBA 0 — keine Partitionstabelle. partinfo erkennt dann weder MBR noch GPT und gibt keine Partitionseinträge aus. mountp ist in diesem Fall nicht möglich; der LBA-Start 0 muss für mount manuell angegeben werden.
MBR-Disk:
lyx> partinfo 1
Disk 1: 524288 sectors (256 MB) MBR
# Start End Sectors MB Type
--- ---------- ---------- ---------- ------ ---------------
- 0 2047 2048 1 free
1 2048 524287 522240 255 FAT32 MBR
GPT-Disk:
lyx> partinfo 1
Disk 1: 1048576 sectors (512 MB) GPT
# Start End Sectors MB Type
--- ---------- ---------- ---------- ------ ---------------
- 0 33 34 0 GPT meta
1 34 2047 2014 0 GPT meta
2 2048 206847 204800 100 ESP
3 206848 524287 317440 155 FAT32/Data
- 524288 1048575 524288 256 free
Disk nicht vorhanden:
lyx> partinfo 9
Disk not present
| Feld | Wert |
|---|---|
| Syscall nr | 88 |
| Kernel-Funktion | VfsDiskMap(disk_id) → DiskmapPrintR3(disk_id) |
| a0 | disk_id |
| Rückgabe | immer 0 |
| Ausgabe-Kanal | vmm_op41 (Framebuffer + COM1) |
Kernel-Aufrufkette:
partinfo <disk-id>
→ lyx_partinfo(disk_id) [shell.lyx, Syscall nr=88]
→ VfsDiskMap(disk_id) [vfs.lyx]
→ DiskmapPrintR3(disk_id) [diskmap.lyx]
→ dm_scan(disk_id) [liest LBA 0 und/oder LBA 1]
→ dm_sort() [sortiert nach Start-LBA]
→ dm_print_row(...) [gibt jede Zeile via vmm_op41 aus]
DiskmapPrintR3 intern (kernel/diskmap.lyx):
pub fn DiskmapPrintR3(disk_id: int64): void {
dm_total := DiskSectorCount(disk_id);
if (dm_total <= 0) { dm_puts("Disk not present\n"); return; }
dm_count := 0;
dm_scan(disk_id);
// Header ausgeben ...
// Für jede Partition + Lücke dm_print_row() aufrufen
// Lücken (start > prev_end + 1) werden als type=0 (free) eingefügt
}
Der Scan läuft zweistufig:
EFI PART → wenn erkannt, GPT-Einträge lesen0x55AA → MBR-Einträge lesendm_sort)free-Zeilen eingefügt
Shell-Implementierung (shell/shell.lyx):
fn lyx_partinfo(disk_id: int64): int64 {
poke64(g_r3sc + R3_OFF_NR, 88);
poke64(g_r3sc + R3_OFF_A0, disk_id);
return lyx_trigger();
}
fn cmd_partinfo(b: int64, offset: int64): void {
var disk_id: int64 := token_int(b, offset, 1);
lyx_partinfo(disk_id);
}
Die #-Spalte ist die maßgebliche Nummerierung für mountp und mkfat32 <disk> <part-nr>. Gezählt werden nur echte Partitionen (Typen 1–5 in der internen Diskmap), nicht freie Bereiche (Typ 0) und nicht GPT-Metadaten (Typ 6):
Typ-Konstanten in diskmap.lyx:
1 = ESP → zählt als Partition
2 = FAT32/Data(GPT) → zählt als Partition
3 = FAT32 MBR → zählt als Partition
4 = MBR Part → zählt als Partition
5 = GPT Part → zählt als Partition
6 = GPT meta → KEIN #
0 = free → KEIN #
DiskmapFindPart(disk_id, part_no, out_sectors) verwendet dieselbe Nummerierung.
partinfo und gpt sind unabhängig: partinfo liest MBR und GPT, gpt liest nur GPT.Sectors-Spalte ist für freie Bereiche korrekt (inkl. erster und letzter Sektor), die MB-Spalte rundet ab (sectors ÷ 2048) — ein Bereich von 2047 Sektoren zeigt 0 MB.DM_MAX = 16 in diskmap.lyx). Auf Disks mit sehr vielen Partitionen werden überschüssige Einträge stumm weggelassen.