luks2 分区必须显式指定 --pbkdf argon2id 才能兼容 tpm2 auto-unlock,因默认 pbkdf2 会导致 systemd-cryptenroll 拒绝绑定;需验证 pbkdf 类型、tpm2 设备节点、initramfs 模块及 pcr 策略一致性。

LUKS2 分区创建时必须启用 --pbkdf argon2id 才能兼容 TPM2 auto-unlock
TPM2 绑定密钥依赖 LUKS2 的 keyslot 类型和 PBKDF 参数,而默认 cryptsetup luksFormat 在某些发行版(如 Debian 12、Ubuntu 22.04+)仍可能用 pbkdf2,这会导致后续 systemd-cryptenroll 拒绝绑定 TPM2 —— 报错类似 Cannot enroll TPM2 token: Not supported。
- 创建时显式指定
--type luks2 --pbkdf argon2id --iter-time 5000,--iter-time建议 ≥2000ms,太低会触发 TPM2 策略校验失败 - 避免用
--pbkdf pbkdf2或省略--pbkdf(依赖 distro 默认值,不可靠) - 验证是否生效:
cryptsetup luksDump /dev/sdX1 | grep -A5 "PBKDF",输出中应含argon2id和非零Time cost
systemd-cryptenroll --tpm2-device=auto 失败的常见原因
不是所有 TPM2 设备都能直接 auto-detect;即使 tpm2_getcap properties.tpm 显示正常,systemd-cryptenroll 仍可能卡在策略生成或密钥导入阶段。
- 确认内核已加载
tpm_tis或tpm_crb驱动:dmesg | grep -i tpm应有TPM2 device detected -
/dev/tpmrm0必须存在且可读 —— 某些 BIOS 启用 TPM 后需手动 reboot 一次才能暴露该设备节点 - UEFI Secure Boot 开启时,部分主板(如某些 Dell XPS)会限制 PCR 7 使用,改用
--tpm2-pcrs=0,2,4,7不够稳妥;优先试--tpm2-pcrs=0,2,4(跳过 PCR 7) - 若报
Failed to open TPM2 device: No such file or directory,别急着装 tpm2-tss:先检查ls /dev/tpm*,再确认systemd-cryptenroll是否为 v252+(旧版不支持--tpm2-device=auto)
initramfs 中必须包含 systemd-cryptsetup 和 tpm2-tss 模块
即便 enrollment 成功,boot 时仍可能卡在 “Unlocking LUKS2 device…” —— 这通常不是密码输错,而是 initramfs 缺少 TPM2 解锁运行时依赖。
- Debian/Ubuntu:运行
update-initramfs -u -k all前,确保/etc/crypttab第四列含tpm2(如root UUID=xxx none luks,tries=3,timeout=60,remove=1,tpm2) - Fedora/RHEL:需手动在
/etc/dracut.conf.d/tpm2.conf加install_items+=" /usr/lib/systemd/systemd-cryptsetup ",再执行dracut -f - 验证 initramfs 内容:
lsinitrd /boot/initramfs-$(uname -r).img | grep -E "(cryptsetup|tss|tpm)",至少应见systemd-cryptsetup、libtss2*和/dev/tpmrm0设备节点
PCR 策略变更后无法自动解锁,但不会提示具体哪条 PCR 不匹配
TPM2 auto-unlock 是“全或无”策略:只要一个 PCR 值与 enrollment 时记录的不符(比如 kernel 更新触发 PCR 7 变更,或 BIOS 设置微调影响 PCR 0),整个解锁就静默失败,回落到密码输入。
- 调试时加内核参数
rd.debug=1 rd.break=pre-mount,进 emergency shell 后手动跑systemd-cryptenroll --tpm2-device=/dev/tpmrm0 --tpm2-pcrs=0,2,4 /dev/sdX1,观察是否报 PCR mismatch - 不要盲目重 enroll —— 先用
tpm2_pcrread sha256:0,2,4对比当前 PCR 值和cryptsetup luksDump中 token 段里的pcr0/pcr2字段 - 最稳妥的长期策略是固定 PCR 组合(如只用 0+2),并禁用可能扰动 PCR 7 的功能(如 Secure Boot + Measured Boot 混用)
真正麻烦的从来不是第一次配通,而是半年后某次 BIOS 升级或内核更新悄悄改了 PCR 0 —— 它不报错,只让你凌晨三点对着黑屏输密码。










