====== gpt ======
Scannt eine GPT-Disk und mountet alle FAT-kompatiblen Partitionen automatisch.
→ [[lyxos:shell|Shell-Übersicht]] · [[lyxos:cmd:partinfo|partinfo]] · [[lyxos:cmd:vol|vol]] · [[lyxos:cmd:mountp|mountp]]
----
===== Syntax =====
gpt
^ Parameter ^ Typ ^ Beschreibung ^
| ''disk-id'' | int | Laufwerksnummer (0-basiert) |
| ''vol-start'' | int | Erste Volume-ID für die gemounteten Partitionen |
----
===== Beschreibung =====
''gpt'' liest den GPT-Header (LBA 1) der angegebenen Disk, identifiziert alle FAT-kompatiblen Partitionen (ESP und Microsoft Basic Data) und mountet sie nacheinander als Volumes ''vol-start'', ''vol-start+1'', usw.
**Ausgabe:**
// Erfolg:
2 volume(s) mounted
[0] ESP LBA=2048 sz=204800 sectors
[1] Data LBA=206848 sz=317440 sectors
// Kein GPT:
not a GPT disk
**Beispiele:**
// GPT-Disk 1 scannen, Volumes ab ID 10 vergeben
lyx> gpt 1 10
2 volume(s) mounted
[0] ESP LBA=2048 sz=204800 sectors
[1] Data LBA=206848 sz=317440 sectors
// Volume 11 (zweite Partition) als aktiv setzen
lyx> vol 11
Switch to vol 11... OK
lyx> ls
(Dateien auf der GPT-Data-Partition)
// MBR-Disk — kein GPT
lyx> gpt 0 0
not a GPT disk
----
===== GPT-Erkennung =====
''gpt'' überprüft die ersten 8 Bytes von LBA 1 auf die Signatur ''EFI PART'':
Byte 0–7: 69 70 73 32 80 65 82 84 → "EFI PART"
E F I ' ' P A R T
Stimmt die Signatur überein, liest der Kernel:
* **Offset 72** (8 Byte): LBA des Partition-Entry-Arrays
* **Offset 80** (4 Byte): Anzahl der Partition-Einträge
* **Offset 84** (4 Byte): Größe eines Eintrags — muss 128 Byte sein
Jeder Eintrag beginnt mit einem 16-Byte-Typ-GUID. Erkannte Typen:
^ GUID ^ Name ^ ''gpt''-Ausgabe ^
| C12A7328-F81F-11D2-BA4B-00A0C93EC93B | EFI System Partition | ''ESP'' |
| EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 | Microsoft Basic Data | ''Data'' |
Alle anderen Einträge werden ignoriert. Leere Einträge (erste 8 Bytes des Typ-GUIDs sind null) werden übersprungen. Maximal 8 FAT-kompatible Partitionen werden erkannt (''GPT_MAX_PARTS = 8'').
----
===== Syscall-Details =====
^ Feld ^ Wert ^
| Syscall nr | 87 |
| Kernel-Funktion | ''VfsGptMount(disk_id, vol_id_start)'' |
| a0 | disk_id |
| a1 | vol_id_start |
| Rückgabe | Anzahl gemounteter Partitionen, oder −1 wenn kein GPT |
Nach erfolgreichem Mount gibt der Kernel ''VfsGptPrintInfoR3()'' aus (über vmm_op41, sichtbar in Ring-3).
**Kernel-Implementierung** (''kernel/vfs.lyx''):
pub fn VfsGptMount(disk_id: int64, vol_id_start: int64): int64 {
var n: int64 := GptScan(disk_id);
if (n < 0) { return -1; }
var mounted: int64 := 0;
var i: int64 := 0;
while (i < n) {
var lba: int64 := GptPartLbaStart(i);
if (VfsMountDisk(vol_id_start + i, disk_id, lba)) {
mounted := mounted + 1;
}
i := i + 1;
}
return mounted;
}
**Shell-Implementierung** (''shell/shell.lyx''):
fn cmd_gpt(b: int64, offset: int64): void {
var disk_id: int64 := token_int(b, offset, 1);
var vol_start: int64 := token_int(b, offset, 2);
var n: int64 := lyx_gpt(disk_id, vol_start);
if (n < 0) {
r3_puts("not a GPT disk\n");
} else {
r3_puti(n); r3_puts(" volume(s) mounted\n");
}
}
----
===== GPT vs. MBR =====
^ ^ GPT (''gpt'') ^ MBR (''part'' + ''mountp'') ^
| Partitionsanzahl | bis zu 128 (erkannt: max. 8 FAT) | 4 primäre Slots |
| Erkennung | LBA 1, "EFI PART" Signatur | LBA 0, 0x55AA Signatur |
| Auto-Mount | alle FAT-Partitionen auf einmal | manuell per ''mountp'' |
| Einsatz | moderne Disks, UEFI-Boot | ältere Disks, einfache Setups |
----
===== Hinweise =====
* Die Volume-IDs ''vol-start'' bis ''vol-start + n − 1'' werden belegt. Vorhandene Volumes an diesen IDs werden überschrieben.
* Nach ''gpt'' ist kein explizites ''vol'' mehr nötig, um die Partitionen anzusprechen — allerdings ist das aktive Arbeits-Volume noch nicht gewechselt. ''vol '' oder ''vol '' ist danach nötig.
* ''gpt'' und ''partinfo'' scannen unabhängig voneinander: ''partinfo'' nutzt das ''diskmap''-Modul (unterstützt beide MBR und GPT), ''gpt'' nutzt das ''gpt''-Modul (nur GPT).
* Wenn ''gpt'' 0 zurückgibt ("0 volume(s) mounted"), wurde zwar eine GPT erkannt, aber keine ESP- oder Data-Partition gefunden. Das passiert z.B. bei Disks, die nur Linux-Partitionen enthalten.
----
===== Verwandte Befehle =====
| [[lyxos:cmd:partinfo|partinfo]] | Partition-Layout mit freien Bereichen anzeigen |
| [[lyxos:cmd:vol|vol]] | Ein gemountetes Volume als aktiv setzen |
| [[lyxos:cmd:mountp|mountp]] | Einzelne Partition per Nummer mounten |
| [[lyxos:cmd:mount|mount]] | Partition per LBA-Adresse mounten |
| [[lyxos:cmd:diskinfo|diskinfo]] | Verfügbare Laufwerke auflisten |