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

part MBR-Partition anlegen (vor mkfat32 Form 1)
partinfo Partitionstabelle anzeigen (Nummerierung für Form 1)
mountp Partition manuell per Nummer mounten
vol Volume wechseln
gpt GPT-Disk scannen