/ 自体を暗号化してしまう場合の話.この場合,key を /boot/luks_key に置いて(/boot は暗号化しない),
[/etc/crypttab]
hoge_crypt UUID=(略) /boot/luks_key luks
だと,key file が initrd から見えず,/ を mount できない状態になる.
- /dev/sda1: /boot (ext4)
- /dev/sda5: crypt+lvm
- hoge-root: / (btrfs)
- hoge-swap_1: swap
を想定する場合,/boot/luks_key に key を置くことにすると,
[/etc/crypttab]
sda5_crypt UUID=(sda5 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev
という設定で /dev/sda5 の luksOpen が initrd の段階で可能になる.passdev に /dev/disk/by-uuid/(sda1 uuid):luks_key という引数が渡され,passdev は /dev/disk/by-uuid/(sda1 uuid):luks_key の中身を返す(?)らしい.
あとは
% sudo update-initramfs -u -k all
で initrd の中の conf/conf.d/cryptroot が
[conf/conf.d/cryptroot]
target=sda5_crypt,source=UUID=(sda5 uuid),key=/dev/disk/by-uuid/(sda1 uuid):luks_key,rootdev,lvm=hoge-root,keyscript=/lib/cryptsetup/scripts/passdev
target=sda5_crypt,source=UUID=(sda5 uuid),key=/dev/disk/by-uuid/(sda1 uuid):luks_key,lvm=hoge-swap_1,keyscript=/lib/cryptsetup/scripts/passdev
という感じで適切に生成され,あとは起動時に initrd 中の scripts/local-top/cryptroot が適切に処理してくれる.
追記(2017/4/18)
逆に / として利用しない crypt device を起動時に自動 open するには passdev を使ってはいけない(使えない).sda5_crypt に / があるとすると,
[/etc/crypttab]
sda5_crypt UUID=(sda5 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev
sda6_crypt UUID=(sda6 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev
これだと sda6_crypt が open されない.以下のようにする必要がある.
[/etc/crypttab]
sda5_crypt UUID=(sda5 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev
sda6_crypt UUID=(sda6 uuid) /boot/luks_key luks