我有一个加密的 Ubuntu 14.04 桌面设置。加密的根分区是使用 Ubuntu 安装程序默认参数创建的(选择“擦除磁盘并安装 Ubuntu”和“加密新的 Ubuntu 安装”)。这部分工作正常(它在启动时要求输入密码并打开根分区和交换分区)。
后来我添加了第二个驱动器,使用存储在根分区上的密钥文件单独加密。目的是让它在根分区打开时自动打开。为此,第二个驱动器被添加到 crypttab(通过 UUID)并将其加密文件系统添加到 fstab(通过标签、挂载点/stg
)。
在启动时,输入主解密密码后,我得到了这个:安装 /stg 时出错。按 S 跳过安装或按 M 进行手动恢复。
奇怪的是,如果我按米只需运行mount -a
,它就会成功挂载。我没有看到 中有任何可疑之处/var/log/syslog
。
这是怎么回事?我可以检查什么来诊断问题?
[UPD - 增加了一些细节]该驱动器sdb
具有一个分区的 MBR 分区表。使用以下命令初始化加密文件系统:
cryptsetup luksFormat /dev/sdb1 /root/stg.key
cryptsetup luksOpen /dev/sdb1 stg_crypt -d/root/stg.key
mkfs.ext4 /dev/mapper/stg_crypt -Lstg-tmp
在/etc/crypttab中(为简洁起见,实际的 uuid 用文本“uuid-of-...”替换):
# this entry was created by Ubuntu installer
sda5_crypt UUID=uuid-of-sda5 none luks,discard
# this entry was added by me
stg_crypt UUID=uuid-of-sdb1 /root/stg.key luks,discard
/etc/fstab:
# these entries were created by Ubuntu installer
/dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1
UUID=uuid-of-sda1 /boot ext2 defaults 0 2
/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0
# this entry was added by me
LABEL=stg-tmp /stg ext4 errors=remount-ro 1 2
答案1
有趣的是,用设备路径替换中的标签引用fstab
可以解决问题!即:LABEL=stg-tmp
更改为/dev/mapper/stg_crypt
。
我还尝试了 UUID 引用,但没有用。因此,显然启动期间的 LABEL 和 UUID 引用对物理分区有效,但对加密分区无效。但它们mount -a
对任何分区都有效。
作为解决方案,这并不是很令人满意(例如,它缺乏解释)但它解决了当前的问题,所以我想现在还可以。
答案2
首先想到的是,intramfs 没有看到密钥文件(正常行为)
一些修复包括:
像这里提到的那样,为 /stg 添加/创建备用密码
为 Luks 添加回退功能 (向下滚动到添加后备密码部分)
添加 dd if=/dev/usbkey bs=512 skip=4 count=8 | cryptsetup luksOpen /dev/md0 luksVolume --key-file=- && mount /dev/mapper/luksVolume /mnt/
在创建或使用 cryptsetup-reencrypt 时(在 repos 中但不是默认安装的)