mkfat32
Formatiert eine Partition oder einen Sektorbereich als FAT32 und mountet sie automatisch.
→ Shell-Übersicht · part · mountp · vol
Syntax
mkfat32 hat zwei Formen:
Form 1 — nach Partitionsnummer (empfohlen):
mkfat32 <disk-id> <part-nr>
Form 2 — nach Sektorbereich (raw LBA):
mkfat32 <disk-id> <lba-start> <anzahl-sektoren>
| 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, nichtpart_nrodervol_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
Fat32Formatintern fehlschlagen.
