The crypttab entry named the md RAID array UUID (61bd6eaf-...) where a luks entry takes the LUKS container UUID (cd86c728-...), so systemd-cryptsetup@entropy.service could never produce /dev/mapper/entropy and the fstab entry could not resolve either; the volume only appeared when a desktop session let udisks2 unlock it, which kept the broken boot path hidden for a year. The keyfile was wrong as well: 27 bytes, i.e. the 26-character passphrase plus a trailing newline, and cryptsetup hashes the file whole. Records the host config as dankserver/host/{crypttab,fstab} (the dankclaw/host precedent), rewrites the Entropy Volume page to own the chain, the UUID law and the keyfile contract, and comments out the now-unmountable /dev/md0 line. Proven on the host: /etc/{crypttab,fstab} byte-identical to the repo copies, reboot into 7.0.0-42-generic mounts /mnt/entropy from /dev/mapper/entropy, all 12 containers returned, frank-archon back to 141 t/s (was 6.7 t/s on a wedged amdgpu queue). ./tests/run.sh: ALL TESTS PASSED (749).
69 lines
3.1 KiB
Markdown
69 lines
3.1 KiB
Markdown
---
|
|
type: reference
|
|
description: "Dankserver's /mnt/entropy volume: the LUKS/array chain, the crypttab + fstab boot path, and the containers bound to it"
|
|
tags:
|
|
- dankserver
|
|
timestamp: 2026-10-31
|
|
---
|
|
|
|
# Entropy Volume
|
|
|
|
`/mnt/entropy` is the ext4 filesystem on the LUKS container holding `/dev/md0`
|
|
(RAID6, seven disks). The media stack's data lives there, so the mount is a boot
|
|
dependency for those containers rather than a convenience.
|
|
|
|
## Chain
|
|
|
|
```text
|
|
/dev/md0 <- mdadm (its mdadm.conf ARRAY is what makes md0 exist at boot)
|
|
-> LUKS UUID=cd86c728-459e-4f3a-bcc2-41ecf84685ec keyfile: /etc/entropy
|
|
-> /dev/mapper/entropy <- systemd-cryptsetup@entropy.service
|
|
-> ext4 at /mnt/entropy <- mnt-entropy.mount, from /etc/fstab
|
|
```
|
|
|
|
## Files that own it
|
|
|
|
| Repo file | Installs to | Produces at boot |
|
|
|---|---|---|
|
|
| `dankserver/host/crypttab` | `/etc/crypttab` | `systemd-cryptsetup@entropy.service` → `/dev/mapper/entropy` |
|
|
| `dankserver/host/fstab` | `/etc/fstab` | `mnt-entropy.mount` (mountpoint `dank:dankserver`, `0755`) |
|
|
|
|
Deploy a change by copying the file onto the host, then
|
|
`systemctl daemon-reload && update-initramfs -u`. The initramfs step is not
|
|
optional: the cryptsetup hook bakes `/etc/crypttab` into the initrd, and the
|
|
array is unlocked there, before the real root mounts. `scripts/mount-entropy.sh`
|
|
(`udisksctl unlock` + `mount`) stays as the manual path for a volume that was
|
|
never unlocked; on a correct boot it is redundant.
|
|
|
|
## Law
|
|
|
|
**`crypttab`'s device field takes the LUKS UUID, never the md array UUID.**
|
|
`blkid` prints both on adjacent lines for a RAID-backed container, and the file
|
|
shipped since 2025 carried the array UUID (`61bd6eaf-…`) where the LUKS container
|
|
is `cd86c728-…`. The generator produced a perfectly valid unit pointing at a
|
|
device that never appears, so the mapper came into existence only through a
|
|
desktop `udisks2` session — the volume looked mounted on every login while every
|
|
boot failed to mount it. The matching `fstab` line named the same wrong UUID
|
|
directly instead of the mapper.
|
|
|
|
**A LUKS keyfile is hashed whole, so a trailing newline is a different
|
|
passphrase.** The shipped `/etc/entropy` was 27 bytes — 26 characters plus `\n` —
|
|
and `cryptsetup` rejected it even after the UUID was corrected. Keyfiles stay
|
|
`0600` with no trailing newline; prove it with
|
|
`cryptsetup open --test-passphrase --key-file /etc/entropy UUID=…` *before*
|
|
relying on it for a boot.
|
|
|
|
**Prove a mount fix with the artifacts systemd generates, not with a live
|
|
mount.** The regenerated `systemd-cryptsetup@entropy.service` naming the right
|
|
device, `findmnt /mnt/entropy` sourcing `/dev/mapper/entropy`, and a matching
|
|
checksum between the repo copy and the host copy are the evidence. A mount that
|
|
exists because someone logged in proves nothing about the boot path — that
|
|
exactly describes the year this bug survived.
|
|
|
|
## Consumers
|
|
|
|
`jellyfin`, `copyparty`, and `plex` bind paths under `/mnt/entropy`; with the
|
|
volume absent they start `active (healthy)` against empty directories, which is
|
|
how a missing 91 TiB volume hides. See [[Dankserver Stack]] for the stack and
|
|
[[Storage Policy]] for what may be written here.
|