← Alle artikelen

Twee besturingssystemen, vier partities en een EFI-partitie op de verkeerde plek, omgezet naar één LUKS-versleutelde btrfs-pool over de hele schijf. Terwijl het systeem draaide, en met hibernation die bleef werken.

Een versleutelde laptopschijf herindelen zonder herinstallatie

Mijn laptop had destijds twee besturingssystemen naast elkaar, een EFI-partitie midden op de schijf en een rootpartitie die te klein werd. Het doel: één versleutelde pool over de hele schijf, LUKS-wachtwoord bij het opstarten en daarna gewoon inloggen. Zonder herinstallatie, met behoud van VPN-configuratie, SSH-sleutels, tmux-instellingen en kube-contexten.

Later ben ik voor werk volledig overgestapt naar Ubuntu. De technieken uit dit artikel (groeien met een gemount root, LUKS en btrfs vergroten, en een bootloader verplaatsen) zijn onafhankelijk van de distributie.

Het plan in stappen

  1. Inventariseren en backuppen: LUKS-header, alle partitietabellen, fstab, crypttab, bootloaderconfig en een tarball van de EFI-partitie.
  2. Root verhuizen naar de partitie die moest blijven.
  3. Een nieuwe EFI-partitie aan het eind van de schijf, /boot daarheen, bootloader opnieuw installeren.
  4. De oude EFI-partitie weghalen, die tussen root en de vrije ruimte in zat.
  5. Groeien met / gemount: partitie vergroten met sfdisk --no-reread, de kernel informeren met partx, dan cryptsetup resize en btrfs filesystem resize max.

Elk script draaide eerst als proef en voerde pas met --execute iets uit. Een Ventoy-stick met een live-image lag klaar als vangnet.

Hibernation die bleef werken

Een swapfile op btrfs voor hibernation werkt met een vaste resume_offset. Groeien met btrfs resize max verplaatst geen bestaande extents, dus de offset bleef geldig. Een multi-device btrfs had dat wel gebroken; daarom viel die optie af.

Valkuilen

  • btrfs filesystem show als gewone gebruiker meldt size 0 ... MISSING. Dat is een rechtenkwestie, geen kapot bestandssysteem. Controleer als root.
  • Na een verhuizing van de thuismap was de verkeerde kubelogin geïnstalleerd: een tool met bijna dezelfde naam, voor een ander platform. De foutmelding unknown command "oidc-login" leek een loginprobleem, maar het was een ontbrekend binary.

Labels op de inlogschermen

Het LUKS-scherm en het inlogscherm zagen er identiek uit, waardoor het onduidelijk was welk wachtwoord je moest typen. Ik maakte kopieën van beide thema's met een duidelijk onderschrift. Kopieën, omdat updates de originele thema's overschrijven.