You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 24.04.1 LTS TPM全磁盘加密环境下添加解密口令以调整交换分区大小的问题

Ubuntu 24.04.1 LTS TPM全磁盘加密环境下添加解密口令以调整交换分区大小的问题

我太懂你现在的困境了——用TPM做全磁盘加密的Ubuntu,平时启动全靠自动解锁,根本没设置手动口令,现在要调swap分区得进live环境解锁,但recovery key不被live系统认,直接跑luksAddKey又要现有口令,连dmsetup拿的都不是正经主密钥,确实挺闹心的。

先给你捋明白为啥dmsetup输出的不是主密钥:Ubuntu用TPM加密时,是靠systemd-cryptsetup的logon机制自动从TPM里取密钥的,dmsetup显示的只是这个密钥的系统引用标识,不是LUKS的原始主密钥,所以没法直接拿来用。

不过好在系统正常启动后分区已经解锁了,我们可以蹭这个“已解锁”的状态,用系统当前正在用的密钥来加新的手动口令,具体步骤如下:

  1. 确认加密数据分区的映射名称
    先跑lsblk命令,找到你的加密分区(比如你说的/dev/nvme0n1p4)对应的映射名,一般是ubuntu-data或者带UUID后缀的名字(比如ubuntu-data-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。也可以用cryptsetup status确认:

    sudo cryptsetup status ubuntu-data
    

    输出里会明确显示映射名和对应的原始分区。

  2. 找到系统临时存的解锁密钥文件
    系统正常解锁分区后,会把从TPM拿到的密钥临时存在/run/systemd/cryptsetup/<映射名称>/keyfile路径下,比如映射名是ubuntu-data,那路径就是/run/systemd/cryptsetup/ubuntu-data/keyfile。这个文件只有root能访问,而且是临时的,重启就没了,所以必须在当前正常启动的系统里操作。

  3. 用临时密钥文件添加新LUKS口令
    执行下面的命令(记得把<映射名称>换成你实际的映射名,分区路径也对应改):

    sudo cryptsetup luksAddKey /dev/nvme0n1p4 /run/systemd/cryptsetup/<映射名称>/keyfile
    

    之后系统会提示你输入新的口令,再重复确认一次就行——这里不用输现有口令,因为临时密钥文件已经帮你完成认证了。

  4. 验证新口令是否有效
    你可以重启系统,或者做个Ubuntu live USB启动,然后试试用新口令解锁分区:

    sudo cryptsetup luksOpen /dev/nvme0n1p4 mydata
    

    要是能成功解锁,说明新口令生效了。

  5. 调整swap分区大小
    现在就可以在live环境下解锁分区后,用GParted图形工具或者命令行(先swapoff /dev/mapper/ubuntu-swap,调整分区大小后再mkswap重新格式化swap)来扩容swap,满足休眠需求了。

注意事项

  • 操作过程别断电,防止分区损坏;
  • 新口令一定要记牢,原有的TPM恢复密钥也别丢,留着以防万一。

备注:内容来源于stack exchange,提问作者Peter N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:44:41