====== 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 |