====== mkfat32 ====== Formatiert eine Partition oder einen Sektorbereich als FAT32 und mountet sie automatisch. → [[lyxos:shell|Shell-Übersicht]] · [[lyxos:cmd:part|part]] · [[lyxos:cmd:mountp|mountp]] · [[lyxos:cmd:vol|vol]] ---- ===== Syntax ===== ''mkfat32'' hat zwei Formen: **Form 1 — nach Partitionsnummer** (empfohlen): mkfat32 **Form 2 — nach Sektorbereich** (raw LBA): mkfat32 ^ Parameter ^ Typ ^ Beschreibung ^ | ''disk-id'' | int | Laufwerksnummer (0-basiert) | | ''part-nr'' | int | Partitionsnummer (1-basiert, wie in ''partinfo'' angezeigt) | | ''lba-start'' | int | Erster Sektor des Bereichs (Form 2) | | ''anzahl-sektoren'' | int | Anzahl der Sektoren (Form 2) | Die Shell erkennt automatisch, welche Form gemeint ist: Fehlt das dritte Token, wird Form 1 (Partitionsnummer) verwendet. ---- ===== Beschreibung ===== ''mkfat32'' schreibt einen FAT32-Bootsektor auf die angegebene Partition oder den Sektorbereich. Nach erfolgreichem Formatieren wird die Partition **automatisch als Volume ''disk_id'' gemountet** — ein separates ''mount'' oder ''mountp'' ist nicht nötig. **Form 1 — nach Partitionsnummer:** Der Kernel sucht die n-te reale Partition auf ''disk_id'' über ''DiskmapFindPart(disk_id, part_nr, ...)'' (dieselbe Nummerierung wie in ''partinfo''). Dabei werden GPT- und MBR-Partitionen gemeinsam durchgezählt; freie Bereiche und GPT-Metadaten zählen nicht. Anschließend wird ''VfsMkFat32ByPart(disk_id, part_nr)'' aufgerufen. **Form 2 — raw LBA:** ''VfsMkFat32(disk_id, lba_start, sector_count)'' formatiert den angegebenen Bereich direkt, ohne eine Partitionstabelle zu konsultieren. Nützlich, wenn kein MBR/GPT vorhanden ist oder ein exakter LBA-Bereich formatiert werden soll. **Auto-Mount:** In beiden Fällen ruft der Kernel intern ''VfsMountDisk(disk_id, disk_id, lba_start)'' auf. Das frisch formatierte Volume ist danach unter der ID ''disk_id'' verfügbar. **Beispiele:** // Form 1: Partition #1 auf Disk 1 formatieren (nutzt partinfo-Nummerierung) lyx> mkfat32 1 1 Format disk 1 part 1... OK // Form 2: Sektorbereich explizit angeben lyx> mkfat32 1 2048 522240 Format disk 1 LBA 2048 sz=522240... OK Nach beiden Befehlen ist Volume 1 direkt verwendbar: lyx> vol 1 Switch to vol 1... OK lyx> ls (leeres FAT32-Dateisystem) ---- ===== Syscall-Details ===== **Form 1 (Partitionsnummer):** ^ Feld ^ Wert ^ | Syscall nr | 89 | | Kernel-Funktion | ''VfsMkFat32ByPart(disk_id, part_no)'' | | a0 | disk_id | | a1 | part_no (1-basiert) | | Rückgabe | 0 = Erfolg, −1 = Fehler | **Form 2 (raw LBA):** ^ Feld ^ Wert ^ | Syscall nr | 84 | | Kernel-Funktion | ''VfsMkFat32(disk_id, lba_start, sector_count)'' | | a0 | disk_id | | a1 | lba_start | | a2 | sector_count | | Rückgabe | 0 = Erfolg, −1 = Fehler | **Shell-Implementierung** (''shell/shell.lyx'', vereinfacht): fn cmd_mkfat32(b: int64, offset: int64): void { var disk_id: int64 := token_int(b, offset, 1); var arg2: int64 := token_int(b, offset, 2); // Drittes Token vorhanden? → Form 2 (raw LBA) var has3: bool := (peek8(token_start(b, offset, 3)) != 0); if (!has3) { // Form 1: arg2 = part_no r3_puts("Format disk "); r3_puti(disk_id); r3_puts(" part "); r3_puti(arg2); r3_puts("... "); var res: int64 := lyx_mkfat32_part(disk_id, arg2); if (res == 0) { r3_puts("OK\n"); } else { r3_puts("FAIL\n"); } } else { // Form 2: arg2 = lba_start, arg3 = sector_count var sectors: int64 := token_int(b, offset, 3); r3_puts("Format disk "); r3_puti(disk_id); r3_puts(" LBA "); r3_puti(arg2); r3_puts(" sz="); r3_puti(sectors); r3_puts("... "); var res: int64 := lyx_mkfat32(disk_id, arg2, sectors); if (res == 0) { r3_puts("OK\n"); } else { r3_puts("FAIL\n"); } } } ---- ===== Typische Workflows ===== **MBR-Disk neu partitionieren und formatieren:** lyx> diskinfo [1] Primary Slave 256 MB (524288 sectors) lyx> part 1 2048 524287 Partitioning disk 1 LBA 2048..524287 (522240 sectors)... OK lyx> mkfat32 1 1 Format disk 1 part 1... OK lyx> vol 1 Switch to vol 1... OK **GPT-Disk (nach ''gpt''-Scan bereits gemountet):** lyx> gpt 1 10 2 volume(s) mounted // Partitionen sind bereits als Vol 10 und 11 gemountet // Falls eine neu formatiert werden soll: lyx> mkfat32 1 2 Format disk 1 part 2... OK **Raw-LBA ohne Partitionstabelle (Superfloppy):** lyx> mkfat32 1 0 131072 Format disk 1 LBA 0 sz=131072... OK // FAT32-BPB sitzt direkt bei LBA 0 — keine MBR-Partitionstabelle davor // Volume 1 ist nach dem Format gemountet (auto-mount) lyx> vol 1 Switch to vol 1... OK Auf einer Superfloppy-Disk ist kein ''part'' nötig. Der Nachteil: ''partinfo'' erkennt weder MBR noch GPT und zeigt keine Partitionseinträge. ''mountp'' ist nicht möglich — beim nächsten Start muss ''mount 1 1 0'' manuell eingegeben werden. ---- ===== Hinweise ===== * **Auto-Mount-Volume-ID**: Das Volume bekommt immer die ID ''disk_id'', nicht ''part_nr'' oder ''vol_id_start''. Wenn auf Disk 1 formatiert wird, ist danach Vol 1 aktiv. * **Bestehende Daten**: Alle vorhandenen Dateien auf der Partition werden durch das Formatieren unwiederbringlich gelöscht. * **Mindestgröße**: FAT32 benötigt mindestens einige hundert Sektoren — bei sehr kleinen Bereichen kann ''Fat32Format'' intern fehlschlagen. ---- ===== Verwandte Befehle ===== | [[lyxos:cmd:part|part]] | MBR-Partition anlegen (vor mkfat32 Form 1) | | [[lyxos:cmd:partinfo|partinfo]] | Partitionstabelle anzeigen (Nummerierung für Form 1) | | [[lyxos:cmd:mountp|mountp]] | Partition manuell per Nummer mounten | | [[lyxos:cmd:vol|vol]] | Volume wechseln | | [[lyxos:cmd:gpt|gpt]] | GPT-Disk scannen |