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