Opslag, profielmap en kluis
FAQ › EUZOS Desktop › Opslag · English
Wat is het?
De regel "niets lokaal" betekent: niets lokaal dat leesbaar is zonder in te loggen. EUZOS gebruikt 8 GiB van de interne schijf voor het systeem; de rest is partitie 2, Profielen, met één versleutelde map (een vak) per gebruiker. De sleutel van die map staat niet op de pc: hij staat in de kluis van de gebruiker op de profielserver en wordt bij het inloggen opgehaald. Zonder in te loggen toont de schijf niets anders dan een onversleutelde header (hoeveel mappen, hoe groot, wanneer laatst gebruikt).
De onderdelen:
- Schijven: AHCI (interne SATA), NVMe (interne SSD op PCIe), virtio-blk (de schijf van een virtuele machine) en USB-opslag. Lezen mag altijd; schrijven naar of wissen van een interne schijf vraagt een getypte bevestiging en kan alleen tot de volgende herstart.
- Partities: GPT met item 1 = EUZOS-systeem (EFI), item 2 = Profielen, item 3 = EUZOS gereserveerd.
- Profielmap (
profiledir): de versleutelde map van de ingelogde gebruiker; in de Verkenner is dat Mijn bestanden. - Kluis (
vault): kleine geheimen van de gebruiker, versleuteld op de profielserver (de gegevenssleutel van de map, Microsoft-verversingstokens). apps/: een gedeeld, ondertekend, onversleuteld vak op partitie 2 voor app-pakketten zoals Chromium (zie Bureaublad en apps).
Hoe doe ik…?
Hoe zie ik welke schijven de pc heeft?
disks: alle USB-opslag (partities, labels, de opstartstick, die beschermd is, en of hij een installatiedoel mag zijn) en de interne SATA-schijven (AHCI) en NVMe-SSD's, alleen-lezen: model, serienummer, grootte, tabel. ahci en nvme tonen de controllers in detail. Op het bureaublad toont Instellingen › Hardware processor, geheugen, opslag en apparaten.
Gebruikt EUZOS UAS (USB Attached SCSI) voor USB 3-schijven?
Ja, als het kan: een USB 3-SSD of -behuizing die UAS aanbiedt (interface 08/06/62), op een SuperSpeed-poort van een xHCI-controller met bulk streams, krijgt UAS met meerdere opdrachten tegelijk (disks toont UAS na de grootte; het opstartlog toont "UAS, N streams, depth D"). Anders, en voor behuizingen waarvan bekend is dat UAS misgaat, gebruikt het apparaat Bulk-Only Transport (BOT), zoals voorheen. Op een USB 2.0-poort wordt UAS nog niet gebruikt. Gebouwd uit de clean-room-spec docs/drivers/specs/uas.md; hardwaretest volgt.
Hoe zie ik de indeling van de opstartschijf en partitie 2?
storage (of storage plan): de opstartschijf (station, model, serienummer, grootte), de GPT, de systeemeis (8 GiB: ESP + gereserveerd; profielen vanaf sector …), de header van partitie 2 (generatie, mappen, standaardquotum, grootste vrije stuk) en, als partitie 2 ontbreekt, de precieze opdracht om hem te maken.
Hoe voeg ik partitie 2 toe aan een bestaande installatie?
Een nieuwe installatie maakt alle drie GPT-items en een lege header vanzelf. Op een oudere installatie:
storage planom te zien wat er zou gebeuren;storage create CONFIRM-<serienummer> [quota=<GiB>].
De opdracht toont de GPT voor en na. Hij schrijft alleen de GPT-sectoren (LBA 1–33 en de laatste 33 sectoren: eerst de reserve, dan de primaire, elk geflusht en teruggelezen) en de header van partitie 2. Nooit LBA 0 (de beschermende MBR) en nooit iets van partitie 1. Zonder de juiste code wordt er niets geschreven. Het standaardquotum is een kwart van de partitie, hooguit 64 GiB. quotum= is de oude schrijfwijze van quota=.
Hoe ruim ik oude profielmappen op?
storage cleanup verwijdert mappen die 90 dagen niet zijn gebruikt (dat gebeurt ook bij elke opening). Hun checkpoints worden met nullen overschreven, zodat ze zelfs met de sleutel niet meer opengaan. De open map wordt nooit verwijderd; zonder geloofwaardige klok wordt niets verwijderd.
Hoe kijk ik in mijn eigen profielmap?
profiledir (of profiledir info) toont of hij open is, de generatie, het aantal bestanden en bytes, de gebruikte blokken en de vrije ruimte. profiledir usage toont de gebruikte MiB van het quotum. profiledir list [pad], read <pad> (grootte en SHA-256), stat <pad>, en de schrijfopdrachten write, mkdir, mkdirs, delete, deltree, rename, copy werken alleen op de map van de ingelogde gebruiker. Op het bureaublad toont de Verkenner bestanden/ als Mijn bestanden; apps/ en systeem/ blijven verborgen.
Hoe test ik de versleuteling op deze pc?
profiledir test maakt een tijdelijke map van 64 MiB met een willekeurige sleutel die alleen in het geheugen staat, schrijft 4 MiB, sluit en opent opnieuw, leest terug, schrijft en leest 20 MiB in brokken van 64 KiB met SHA-256, hernoemt, probeert een verkeerde sleutel en verwijdert alles weer. Hij raakt de map van de ingelogde gebruiker nooit aan en laat niets achter.
Hoe zie of wis ik wat er in mijn kluis staat?
vault (of vault list) toont de soorten geheimen die voor de ingelogde gebruiker zijn opgeslagen, zonder inhoud en zonder account-id's. vault delete <soort> wist er één. Het wissen van opslag-sleutel is crypto-shredding: de profielmap gaat dan op geen enkele pc meer open; bij de volgende login maakt de server een nieuwe sleutel, dus een nieuwe, lege map.
Waarom kan ik niet naar een interne schijf schrijven?
De AHCI- en NVMe-drivers weigeren standaard elke schrijfopdracht (euzos_ata::allowed, libs/nvme::allowed). Voor SATA: ahci unlock <poort> WIPE-<serienummer> ontgrendelt één poort tot de herstart (nooit de opstartschijf); ahci lock <poort> vergrendelt hem weer. Voor NVMe is er geen aparte ontgrendelopdracht: alleen het installatieprogramma (install … n<nr> WIPE-<serienummer> WIPE-ALL of het grafische installatieprogramma) ontgrendelt hem. Zonder de code toont ahci unlock <poort> alleen wat de code zou zijn.
Hoe wis ik een interne SATA-schijf?
Na het ontgrendelen: ahci wipe <poort> [--thorough] WIPE-<serienummer> WIPE-ALL. Zonder de woorden toont hij alleen het plan. Snel (standaard): SANITIZE, Security Erase, TRIM die nullen teruggeeft (met een steekproef), pas daarna overschrijven. Grondig (--thorough, voor een schijf die het bedrijf verlaat): alleen SANITIZE, Security Erase of overschrijven, nooit TRIM. Daarna leest hij steekproeven terug. Als een wisbeurt onderbroken is (bijv. stroomuitval) en de schijf vergrendeld is met het tijdelijke wiswachtwoord, haalt ahci wipelock <poort> dat weg. In het installatieprogramma is dezelfde keuze snel of grondig wissen (zie Installatieprogramma).
Sinds 27-10-2026 schrijft EUZOS Engelse namen voor configuratiebestanden, sleutels, waarden en bevestigingswoorden (bijvoorbeeld
WIPE-…,environment=inPROFILE.TXT); de oude Nederlandse namen (hier oud genoemd) worden nog gelezen en geaccepteerd (docs/ENGLISH.md).
Details
Indeling van de interne schijf
| GPT-item | Bereik | Inhoud | Toegang |
|---|---|---|---|
| 1. EUZOS-systeem (EFI) | 1 MiB – 1 GiB + 1 MiB | bootloader, kernel, firmware, sleutels van de pc | alleen de kernel |
| 3. EUZOS gereserveerd | einde ESP – 8 GiB | vrij voor het systeem (A/B-kernels, app-pakketten); nog niet in gebruik | niemand |
| 2. Profielen | 8 GiB – einde | één versleuteld vak per gebruiker | alleen de eigen map van de gebruiker, via de kernel |
De kleinste ondersteunde interne schijf is 32 GB. Partities 2 en 3 hebben eigen type-GUID's (namen EUZOS-profielen, EUZOS-gereserveerd) met de attributen "vereiste partitie" en "geen block-IO-protocol", zodat geen installatieprogramma, partitieprogramma of de Verkenner de ruimte als vrij ziet.
Header van partitie 2
Blokken 0 en 1 zijn twee kopieën (A/B) van de header, elk met SHA-256 en een generatie; de geldige met de hoogste generatie telt. Erin staan het standaardquotum en tot 56 vakken: map-id, instantie, eerste blok, aantal blokken (het quotum), dag van aanmaken en laatste gebruik, soort (1 profielmap, 2 apps/). Blokken 2 en 3 bevatten het offline-kluisje (zie Inloggen). De map-id wordt met HKDF van de gegevenssleutel afgeleid, dus mapnamen verraden niets.
Bestandssysteem en versleuteling
libs/profiledir: een copy-on-write-boom met twee checkpoints, blokken van 4 KiB. Elk blok is ChaCha20-Poly1305 (RFC 8439) met een sleutel per sessie (HKDF-SHA256, RFC 5869) en een teller als nonce; de bijbehorende gegevens binden map-id, instantie, bloknummer en versie. Elke verwijzing draagt de Poly1305-tag van het blok waarnaar ze wijst (een Merkle-boom). Schrijven is een transactie; stroomuitval laat de vorige of de nieuwe toestand achter, nooit een kapotte. De generatie wordt elke minuut en bij afmelden in de kluis bewaard (opslag-versie), zodat het terugzetten van een oude kopie van de hele map wordt opgemerkt.
Openen bij inloggen (profile_dir::on_login, eigen thread): de gegevenssleutel uit de kluis halen, de map-id berekenen, het vak zoeken of maken, de generatie controleren, de boom doorlopen. Er is hooguit één map tegelijk open. Sluiten op elk afmeldpad (profile_dir::close): sleutels uit het geheugen (gewist bij Drop), generatie naar de kluis.
Wat er in de map staat
| Pad | Wat |
|---|---|
bestanden/ | Mijn bestanden (Documenten, Afbeeldingen, Downloads, Bureaublad, …) |
apps/<app>/ | /data van een Linux-app (bijv. het Chromium-profiel) |
systeem/microsoft/<id> | verversingstoken van een Microsoft-account |
systeem/mail/<hash> | mailcache (begrensd) |
systeem/instellingen/browsergegevens | on/off (oud aan/uit wordt nog gelezen): Instellingen › Privacy › Browsergegevens bewaren op deze pc (standaard uit) |
systeem/browser/geschiedenis | geschiedenis van de EUZOS-browser (alleen als browsergegevens aan staat) |
Deze paden zijn namen op schijf en blijven Nederlands.
Wat wel en niet beschermd is
Beschermd: een uitgebouwde schijf lezen zonder in te loggen; een andere gebruiker op dezelfde pc; gewijzigde, verwisselde of oude blokken; de hele map terugzetten; een op de server gewiste sleutel. Niet beschermd: schade aan de header (beschikbaarheid), wat de header verraadt (aantal, grootte, dagen), het schrijfpatroon, iemand met de sleutel en schrijftoegang, een gehackte kernel of een koudgeheugenaanval terwijl iemand is ingelogd. Zie USER-STORAGE.md.
De kluis
crate::vault roept de profielserver aan met het pc-token van de sessie. Soorten:
opslag-sleutel: de gegevenssleutel van 32 bytes van de profielmap. De server maakt hem bij de eerste ophaling; vanaf de pc kan hij niet worden gezet.opslag-versie: de generatie van de profielmap (bescherming tegen terugzetten).ms-refresh:<id>: het verversingstoken van een Microsoft-account.
Een geheim is hooguit 8 KiB. Geheimen worden bewaard in een type dat zichzelf wist; het logboek krijgt hooguit de soort, nooit de inhoud of de id. Een server zonder kluis antwoordt 404 en de pc doet dan wat hij deed voordat de kluis bestond.
Schijfdrivers
- AHCI (
kernel/src/ahci.rs,libs/ata): pas bij het eerste gebruik opgezet (ahci,disks, het installatieprogramma), niet bij het opstarten. Eén opdrachtslot, een time-out op elke wachtlus; na een fout wordt de poort opnieuw gestart. Lezen (IDENTIFY, READ DMA EXT, READ VERIFY, SMART READ DATA / RETURN STATUS) mag altijd; schrijven (WRITE DMA EXT, FLUSH, TRIM) alleen met eenUnlock; SANITIZE en SECURITY ERASE alleen met eenWipeOrder; al het andere nooit. - NVMe (
kernel/src/nvme.rs,libs/nvme): hetzelfde model. Schrijven (Write, Flush, Write Zeroes, Dataset Management) alleen met eenUnlock; Format NVM en Sanitize alleen met eenWipeOrder. Wissen bij installatie: Format NVM met cryptografisch wissen, anders wissen van gebruikersgegevens, anders Write Zeroes, daarna een steekproef (eerste en laatste 64 sectoren en 1000 willekeurige) dieEMPTYmoet opleveren. Blokken van 4096 bytes werken via read-modify-write. Met Intel RST (RAID-modus) is de NVMe meestal toch als eigen apparaat zichtbaar; zit hij verborgen achter RST, dan moet de firmware op AHCI worden gezet. - virtio-blk (
kernel/src/virtio_blk.rs,libs/virtio; ondersteund sinds 28-10-2026, QEMU/KVM en cloudservers): hetzelfde model als NVMe. Schrijven alleen naWIPE-<serienummer> WIPE-ALL(een schijf zonder serienummer wordt nooit beschreven) of binnen de opstartpartitie; de opstartschijf is nooit een doel (inmake run-aarch64start EUZOS van zijn eigen image als virtio-schijf[v0]). Wissen door de installer: overschrijven met nullen, daarna de steekproef. Zie VIRTIO.md. - USB-opslag en de Verkenner (
libs/storage): partities (GPT, MBR of een kaal volume) en één API over FAT32 en exFAT; NTFS wordt herkend maar (nog) niet gelezen. Zie Verkenner.
Naslag
Consoleopdrachten
| Opdracht | Argumenten | Wat het doet |
|---|---|---|
disks | – | USB-opslag, interne SATA- en NVMe-schijven (alleen-lezen); oude naam schijven |
storage | [plan] | GPT van de opstartschijf, systeemindeling, header van partitie 2; oude naam opslag |
storage create | CONFIRM-<serienummer> [quota=<GiB>] | partities 2 en 3 maken op een bestaande installatie; oud maak, quotum= |
storage cleanup | – | mappen verwijderen die 90 dagen ongebruikt zijn; oud opruimen |
profiledir | [info] | toestand van de open map; oude naam profielmap |
profiledir usage | – | gebruikte MiB van het quotum; oud gebruik |
profiledir list | [pad] | een map tonen (d = map); oud lijst |
profiledir read | <pad> | grootte en SHA-256 van een bestand; oud lees |
profiledir stat | <pad> | soort, naam, grootte |
profiledir write | <pad> <tekst> | tekst naar een bestand schrijven; oud schrijf |
profiledir mkdir | <pad> | één map maken; oud map |
profiledir mkdirs | <pad> | alle mappen van het pad maken; oud mappen |
profiledir delete | <pad> | een bestand of lege map wissen; oud wis |
profiledir deltree | <pad> | wissen met inhoud; oud wisboom |
profiledir rename | <van> <naar> | hernoemen; oud hernoem |
profiledir copy | <van> <naar> | brok voor brok kopiëren; oud kopie |
profiledir data | – | Linux-apps met /data in de map |
profiledir test | – | zelftest met een tijdelijke map; oud proef |
vault | [list] | soorten in de kluis; oude naam kluis, oud lijst |
vault delete | <soort> | één geheim wissen; oud wis |
ahci | – | overzicht van controller en poorten |
ahci identify | <poort> | IDENTIFY-gegevens in hex |
ahci read | <poort> <lba> [n] | n = 1..8 sectoren in hex; oud lees |
ahci unlock | <poort> [WIPE-<serienummer>] | ontgrendelen voor schrijven tot de herstart (nooit de opstartschijf); oud ontgrendel |
ahci lock | <poort> | terug naar alleen-lezen; oud vergrendel |
ahci writetest | <poort> <lba> | één sector schrijven, teruglezen, herstellen (alleen ontgrendelde poort); oud schrijftest |
ahci wipe | <poort> [--thorough] [WIPE-<serienummer> WIPE-ALL] | de hele schijf veilig wissen; zonder de woorden alleen het plan; oud wis, --grondig |
ahci wipelock | <poort> | het tijdelijke wiswachtwoord weghalen na een onderbroken wisbeurt; oud wisslot |
nvme | – | controller, versie, CAP/CC/CSTS, Identify, namespace, laatste fout, tellers |
nvme read | <nr> <sector> [n] | n = 1..8 sectoren van 512 bytes in hex (n<nr> mag ook); oud lees |
nvme speed | <nr> [MiB] | leessnelheid (standaard 256 MiB in brokken van 1 MiB); oud snelheid |
vblk | – | virtio-schijven: features, grootte, serienummer, wachtrij, opstartschijf, tellers (beide architecturen) |
vblk read | <nr> <sector> [n] | n = 1..8 sectoren van 512 bytes in hex |
vblk speed | <nr> [MiB] | sequentieel lezen en 1000 willekeurige leesacties van 4 KiB |
vblk check | <nr> | mag deze virtio-schijf een installatiedoel zijn (nooit de opstartschijf) |
vblk test | <nr> WIPE-<serienummer> WIPE-ALL | alleen testbuild: destructieve schrijf/flush/terugleestest op een kladschijf |
ahci en nvme (en dus storage/profiledir) bestaan alleen op x86-64. Installeren op een interne schijf (install <url> a<poort>|n<nr> …) staat op de pagina Installatieprogramma.
Functies en modules
| Functie / module | Rol |
|---|---|
crate::profile_dir::on_login, profile_dir::close, profile_dir::save_generation | openen bij inloggen, sluiten bij afmelden, de generatie bewaren |
crate::profile_dir::read, write, list, delete, create_dir, is_open, usage | kernel-API op de map van de ingelogde gebruiker |
crate::profile_dir::Channel (read, write, create_dirs, list, info, create_dir, rename, delete, delete_tree), Reader, Writer | toegang per sessie, streams in brokken |
crate::profile_dir::command, profile_dir::storage_command | profiledir en storage |
crate::profile_dir::open_offline, install_offline, offline_table | offline-kluisje (offline inloggen) |
crate::vault::fetch, vault::store, vault::delete, vault::list, vault::command | de kluisclient |
crate::ahci::command, crate::nvme::command, crate::install::disks | schijfopdrachten |
euzos_ata::unlock_code, euzos_ata::confirm_code, euzos_ata::WIPE_ALL, euzos_ata::GptLock, euzos_ata::WipeMode | bevestigingscodes en schrijfsloten |
euzos_nvme::GptLock, libs/nvme::allowed | schrijfslot voor NVMe |
euzos_profiledir::header, block, dir, apps, offline, dir_id | partitieheader, blokversleuteling, bestandssysteem, vak apps/, offline-kluisje |
euzos_disk::gpt (read, system_layout, plan_profiles) | GPT lezen en plannen |
euzos_storage::partitions, Volume, safe_name | USB-opslag voor de Verkenner |
Configuratiebestanden en gegevens op schijf
| Waar | Sleutel / inhoud | Betekenis |
|---|---|---|
| GPT-item 2 / 3 | type-GUID's, namen EUZOS-profielen, EUZOS-gereserveerd | partities Profielen en gereserveerd |
| Partitie 2, blokken 0/1 | header A/B | vakken en standaardquotum |
| Partitie 2, blokken 2/3 | offline-kluisje A/B | offline inloggen |
systeem/instellingen/browsergegevens (in de map) | on / off (oud aan / uit) | browsergegevens bewaren op deze pc |
Bevestigingswoorden
| Woord | Gebruikt door | Betekenis |
|---|---|---|
WIPE-<serienummer> (oud WIS-<serienummer>) | ahci unlock, ahci wipe, install … a<poort>/n<nr> | precies deze interne schijf ontgrendelen (letters, cijfers en - van het serienummer; minstens 4 tekens) |
WIPE-ALL (oud ALLES-WISSEN) | ahci wipe, install | toestemming om alles te wissen |
CONFIRM-<serienummer> (oud BEVESTIG-<serienummer>) | storage create | toestemming om de GPT van de opstartschijf bij te werken |
--thorough (oud --grondig) | ahci wipe | grondig wissen (geen TRIM) |
Sinds 27-10-2026 schrijft EUZOS Engelse namen voor configuratiebestanden, sleutels, waarden en bevestigingswoorden (bijvoorbeeld
WIPE-…,environment=inPROFILE.TXT); de oude Nederlandse namen (hier oud genoemd) worden nog gelezen en geaccepteerd (docs/ENGLISH.md).
API-eindpunten (gebruikt door de pc)
| Methode | Pad | Doel |
|---|---|---|
GET | /api/kluis?token=<pc-token> | de soorten tonen (regels soort=) |
GET | /api/kluis/<soort>?token=… | een geheim ophalen (opslag-sleutel wordt bij de eerste ophaling gemaakt) |
PUT | /api/kluis/<soort>?token=… | een geheim opslaan |
DELETE | /api/kluis/<soort>?token=… | een geheim wissen |
Dit zijn de routes die de kernel nu aanroept: het oude Nederlandse pad /api/kluis (server/profile/src/legacy.rs). De server bedient dezelfde handlers ook onder het Engelse pad /api/vault en /api/vault/{kind} (server/profile/src/lib.rs). De volledige lijst staat op de API-pagina van de profielserver. Fouten: 401 token niet meer geldig, 404 server zonder kluis, 409 vol, 413 te groot, 429.
Protocolberichten en formaten
| Formaat | Waar | Opmerkingen |
|---|---|---|
| Blok (4096 bytes) | libs/profiledir/src/block.rs | 0..8 versie, 8..24 sessie, 24..32 teller, 32..4080 ChaCha20-inhoud, 4080..4096 Poly1305-tag |
| Bijbehorende gegevens | idem | EUZOS-PM1 ‖ map-id ‖ instantie ‖ bloknummer ‖ versie |
| Antwoord kluislijst | crate::vault::list | regels soort=<soort> (hooguit 16 gelezen) |
Zie ook
- Inloggen · Verkenner · Installatieprogramma · Bureaublad en apps
- docs/USER-STORAGE.md
- docs/NVME.md
- docs/OFFLINE-LOGIN.md
- docs/PROFILE-PROTOCOL.md, "The vault"
EUZOS