一旦我已经在我的 HDD 上安装了一个正在运行的 Linux 系统,并保存了未加密的实时数据。是否有任何合理的方法可以对整个 HDD 进行适当的 dm 加密? (无需备份然后恢复或转移到新的文件系统。)
如果可以的话有什么办法可以网上办理吗?即能够在一个小时左右的时间内操作我的 Linux 系统,从而加密所有数据?
答案1
如果您 (a) 有足够的可用磁盘空间并且 (b) 使用 LVM,您可以:
- 进行备份。
- 重新阅读步骤 1,这次不要忽略它。
- 重新阅读步骤 1,请记住我还没有实际测试过这一点。不过,它应该可以工作!
- 缩小当前物理体积 (
pvresize
) - 调整底层分区的大小。不幸的是,为了重新读取分区表,您可能必须重新启动(它正在使用中)。
- 创建一个新分区,在其上设置 dm-crypt。在其上放置一个物理卷。
- 您现在可以用来
pvmove
实际在线移动数据。 - 在移动过程中,请确保更新 initramfs 以引导加密卷。特别是如果您要加密所有内容。
- 准备好恢复磁盘(例如 Live CD)。重新启动,确保它出现
- 从卷组中删除旧的 pv,并对其进行安全覆盖。
- 您现在也可以在其上设置 dm-crypt,并将其作为第二个 pv 添加到同一个 vg 中。
如果您不使用 LVM,那么它可能毫无希望。您当然可以使用 rsync 将数据从一个文件系统复制到另一个文件系统,但您需要在机器空闲时进行最终同步(否则,当您尝试复制文件时,文件会发生变化)。
答案2
答案3
工具应该存在,但我无法提供名称或 URL。但如果你不害怕:-)那就一点也不困难。您所要做的就是从未加密的设备读取数据并写入加密的设备。除非您之前调整文件系统的大小以使其小一些,否则您无法使用 LUKS。当然,这不适用于正在安装的设备(即使安装了 ro,也可能不起作用)。核心功能(没有任何防止崩溃的保护)是这样的(是的,我刚刚成功尝试过):
for((i=0;i<100;i++)); do
echo "Copying block with offset ${i} to tmpfs"
dd if=/dev/storage2/test of=/mnt/tmpfs/cryptoblock skip=$i bs=10M count=1 &>/dev/null
echo "Copying block with offset ${i} from tmpfs"
dd if=/mnt/tmpfs/cryptoblock of=/dev/mapper/crypt_test seek=$i bs=10M count=1
done
明显的改进需求是:将块复制到非易失性介质并记录它们的偏移量。如果发生崩溃,您可以手动复制中断事务的块,并以下一个块的偏移量作为起始值启动循环。