Mountet eine Partition per Partitionsnummer als VFS-Volume.
→ Shell-Übersicht · mount · partinfo · vol
mountp <vol-id> <disk-id> <part-nr>
| Parameter | Typ | Beschreibung |
|---|---|---|
vol-id | int | Volume-ID, unter der die Partition angesprochen wird |
disk-id | int | Laufwerksnummer (0-basiert, aus diskinfo) |
part-nr | int | Partitionsnummer (1-basiert, wie in partinfo angezeigt) |
mountp registriert eine Partition als VFS-Volume, ohne dass der genaue LBA-Startsektor bekannt sein muss. Die Partitionsnummer entspricht der #-Spalte in der partinfo-Ausgabe.
Intern verwendet der Kernel DiskmapFindPart(disk_id, part_nr, out_sectors), das die Partition über die Diskmap sucht — unabhängig davon, ob die Disk MBR oder GPT verwendet. Gefundene LBA-Start- und Sektoranzahl werden an VfsMountDisk weitergegeben.
Ausgabe:
Mount disk <disk_id> part <part_nr> as vol <vol_id>... OK
Schlägt die Suche fehl (Partitionsnummer ungültig oder Disk nicht erkannt), erscheint FAIL.
Beispiel:
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
lyx> mountp 1 1 1
Mount disk 1 part 1 as vol 1... OK
lyx> vol 1
Switch to vol 1... OK
| Feld | Wert |
|---|---|
| Syscall nr | 90 |
| Kernel-Funktion | VfsMountByPart(vol_id, disk_id, part_no) |
| a0 | vol_id |
| a1 | disk_id |
| a2 | part_no (1-basiert) |
| Rückgabe | 0 = Erfolg, −1 = Fehler |
Kernel-Implementierung (kernel/vfs.lyx):
pub fn VfsMountByPart(vol_id: int64, disk_id: int64, part_no: int64): bool {
var lba: int64 := DiskmapFindPart(disk_id, part_no, v_part_scratch);
if (lba < 0) { return false; }
return VfsMountDisk(vol_id, disk_id, lba);
}
v_part_scratch ist ein 8-Byte-Puffer in vfs.lyx (initialisiert in VfsInit via mmap). DiskmapFindPart schreibt dort die Sektoranzahl hinein — sie wird beim reinen Mount-Vorgang nicht benötigt.
Shell-Implementierung (shell/shell.lyx):
fn lyx_mount_part(vol_id: int64, disk_id: int64, part_no: int64): int64 {
poke64(g_r3sc + R3_OFF_NR, 90);
poke64(g_r3sc + R3_OFF_A0, vol_id);
poke64(g_r3sc + R3_OFF_A1, disk_id);
poke64(g_r3sc + R3_OFF_A2, part_no);
return lyx_trigger();
}
fn cmd_mountp(b: int64, offset: int64): void {
var vol_id: int64 := token_int(b, offset, 1);
var disk_id: int64 := token_int(b, offset, 2);
var part_no: int64 := token_int(b, offset, 3);
r3_puts("Mount disk "); r3_puti(disk_id);
r3_puts(" part "); r3_puti(part_no);
r3_puts(" as vol "); r3_puti(vol_id); r3_puts("... ");
var res: int64 := lyx_mount_part(vol_id, disk_id, part_no);
if (res == 0) { r3_puts("OK\n"); } else { r3_puts("FAIL\n"); }
}
Die Nummerierung in mountp ist identisch mit der #-Spalte von partinfo. Freie Bereiche und GPT-Metadaten-Bereiche (Typ GPT meta) bekommen keine Nummer und zählen nicht:
# Start End Sectors MB Type
--- ---------- ---------- ---------- ------ ---------------
- 0 33 34 0 free ← keine Nummer
- 34 2047 2014 0 GPT meta ← keine Nummer
1 2048 206847 204800 100 ESP ← part-nr 1
2 206848 524287 317440 155 FAT32/Data ← part-nr 2
- 524288 524287 0 0 free ← keine Nummer
mountp 2 1 2 mountet in diesem Fall die FAT32/Data-Partition als Volume 2.
mountp scannt die Partitionstabelle bei jedem Aufruf neu — es gibt keinen Cache.vol <vol-id> ist danach nötig.mkfat32 und gpt mounten automatisch. mountp ist für Partitionen, die bereits formatiert sind und die man nach einem Neustart erneut einbinden möchte.