![整个磁盘加密似乎在普通模式下不起作用,但在 LUKS 下可以正常工作。为什么?](https://linux22.com/image/794497/%E6%95%B4%E4%B8%AA%E7%A3%81%E7%9B%98%E5%8A%A0%E5%AF%86%E4%BC%BC%E4%B9%8E%E5%9C%A8%E6%99%AE%E9%80%9A%E6%A8%A1%E5%BC%8F%E4%B8%8B%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%8C%E4%BD%86%E5%9C%A8%20LUKS%20%E4%B8%8B%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%E3%80%82%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在开发一个需要安装在嵌入式设备上的极简 Linux 发行版。目前安装过程的工作方式是安装程序本身就是 Linux,带有基于 busybox 的 initramfs 和一些附加工具(例如 cryptsetup)。磁盘布局非常简单 - 单个分区。不需要 LVM。目前,安装程序会清除磁盘,创建单个分区,然后使用“dd”从映像填充此分区。我知道我应该用随机数据填充磁盘,但为了本示例的目的,让我们忽略这一点。我想做的是:
dd if=/dev/zero of=/dev/sdb bs=1M count=200
cryptsetup --cipher=<some cipher:some hash> --offset=0 open --type plain /dev/sdb encvolume
mkfs.ext4 /dev/mapper/encvolume
mount /dev/mapper/encvolume /mnt
echo "SECRET INFO" > /mnt/SECRET
umount /mnt
cryptsetup close encvolume
当然,系统要求我输入密码。有趣的是,当我再次尝试使用完全相同的 cryptsetup open 命令解锁驱动器时,它不起作用:fdisk 报告 /dev/sdb 上没有有效分区,好像加密失败了。
另一方面,类似的命令,但使用 Luks 似乎运行正常:
dd if=/dev/zero of=/dev/sdb bs=1M count=200
cryptsetup --cipher=<some cipher:some hash> luksFormat /dev/sdb
cryptsetup luksOpen /dev/sdb encvolume
mkfs.ext4 /dev/mapper/encvolume
mount /dev/mapper/encvolume /mnt
echo "SECRET INFO" > /mnt/SECRET
umount /mnt
cryptsetup luksClose encvolume
cryptsetup luksOpen /dev/sdb encvolume
mount /dev/mapper/encvolume /mnt
我猜我遗漏了一些从我原来的“cryptsetup open”命令间接派生的元数据,而解密时缺少这些元数据?如果可能的话,我更愿意使用纯文本模式。我会很感激大家的建议。