====== partinfo ======
Zeigt die vollständige Partitionstabelle einer Disk an, inklusive freier Bereiche.
→ [[lyxos:shell|Shell-Übersicht]] · [[lyxos:cmd:diskinfo|diskinfo]] · [[lyxos:cmd:mountp|mountp]] · [[lyxos:cmd:gpt|gpt]]
----
===== Syntax =====
partinfo
^ Parameter ^ Typ ^ Beschreibung ^
| ''disk-id'' | int | Laufwerksnummer (0-basiert, aus ''diskinfo'') |
----
===== Beschreibung =====
''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 : sectors ( 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 |
===== Was bedeutet "FAT32 MBR"? =====
Der Typ-String besteht aus zwei unabhängigen Teilen:
* **FAT32** — der Partitionstyp-Byte im MBR-Eintrag. LyxOS setzt Typ ''0x0C'' (FAT32 LBA). Das ist nur eine Markierung — sie sagt, was erwartet wird, formatiert aber nichts.
* **MBR** — das Partitionierungsschema. Die Disk hat einen klassischen MBR (Master Boot Record) bei LBA 0 mit einer 4-Einträge-Partitionstabelle. Das Gegenstück ist GPT.
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 '' 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.
----
===== Beispiel-Ausgaben =====
**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
----
===== Syscall-Details =====
^ 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
→ 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:
- Prüft LBA 1 auf GPT-Signatur ''EFI PART'' → wenn erkannt, GPT-Einträge lesen
- Wenn kein GPT: prüft LBA 0 auf MBR-Signatur ''0x55AA'' → MBR-Einträge lesen
- Ergebnis-Array wird nach Start-LBA sortiert (''dm_sort'')
- Lücken zwischen Einträgen werden beim Ausgeben als ''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);
}
----
===== Partitionsnummerierung =====
Die ''#''-Spalte ist die maßgebliche Nummerierung für ''mountp'' und ''mkfat32 ''. 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.
----
===== Hinweise =====
* ''partinfo'' und ''gpt'' sind unabhängig: ''partinfo'' liest MBR **und** GPT, ''gpt'' liest nur GPT.
* Die ''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''.
* Maximale Einträge intern: 16 (''DM_MAX = 16'' in ''diskmap.lyx''). Auf Disks mit sehr vielen Partitionen werden überschüssige Einträge stumm weggelassen.
----
===== Verwandte Befehle =====
| [[lyxos:cmd:diskinfo|diskinfo]] | Laufwerke auflisten |
| [[lyxos:cmd:mountp|mountp]] | Partition per Nummer (aus partinfo) mounten |
| [[lyxos:cmd:mkfat32|mkfat32]] | Partition per Nummer formatieren |
| [[lyxos:cmd:gpt|gpt]] | GPT-Disk scannen und alle FAT-Partitionen mounten |
| [[lyxos:cmd:part|part]] | MBR-Partitionseintrag schreiben |