如果我有一个未加密的分区(如 /dev/hd1)并希望对其进行加密,但又想保留该分区中的所有内容,我该怎么做?
答案1
似乎没有现成的解决方案。Truecrypt 只为 Windows 提供系统加密,dm-crypt 会覆盖分区。最好的办法是将该分区中的所有内容移动到备份中cp -a
,使用 luks/dm-crypt 创建加密分区,然后将所有内容移回。
答案2
由于这在谷歌搜索结果中排名靠前,因此添加解决方案:
通过 LUKS 进行加密 http://www.johannes-bauer.com/linux/luksipc/
答案3
cryptsetup 重新加密
我刚刚偶然发现了这个相当老的问题,我想指出的是密码设置已经获得了cryptsetup 重新加密选项。文档列出了示例重新加密设备:
加密 LUKS2 设备(就地)。确保最后 32 MiB /dev/plaintext未使用(例如:不包含文件系统数据):
cryptsetup reencrypt --encrypt --type luks2 --reduce-device-size 32m /dev/plaintext_device
文档中还有更多示例,例如首先初始化设备并让设备联机,在使用时对其进行加密。此外,重新加密似乎具有弹性,因为它可以停止和重新启动,从而允许复杂的用例。
请注意,luks 标头仍然需要编写,因此适用大小限制,这意味着你应该非常在尝试此操作之前,请谨慎并最好测试您的特定场景(例如,在另一台具有合理测试数据的设备上)。该--reduce-device-size
选项包含有关此操作的更多信息。
重新加密时,该工具将输出有关大小、速度和预计到达时间 (ETA) 的信息,在我看来,这非常方便用户使用。
工作流
一般工作流程如下:
- 将现有文件系统/数据的大小调整为比周围的块设备小 32MiB(例如在 btrfs 运行中
btrfs fi resize -32m /mnt
) - 制作绝对 100% 确定该设备没有以任何其他方式安装或打开(如果您有管理在设备上运行,这将是一个问题,因为它会在设备写入时尝试恢复)
- 重新加密设备(例如
cryptsetup reencrypt --encrypt --type luks2 --reduce-device-size 32m /dev/sda4
) - 就是这样,你现在可以
cryptsetup open
像往常一样,使用块设备的 UUID(块设备本身现在有一个从 luks 层派生的 UUID),例如在你的启动过程/initrd 中 - 可能将文件系统的大小调整回底层块设备提供的最大大小(例如在 btrfs 运行中
btrfs fi resize max /mnt
)
答案4
实际上,您可以从普通文件系统分区转换为 dm-crypt。
但它很危险,而且很麻烦。
这里有一个过时的教程: https://help.ubuntu.com/community/EncryptedFilesystemHowto7
Dm-crypt 将一个块映射到另一个块,因此理论上是可行的。Luks 是一个用户友好的容器,它内部使用 dm-crypt。luks 分区包含一个标头和一个 dm-crypt 分区,加密文件系统实际上位于该分区中。
警告:
如果您选择使用 Luks,那么您的任务将更加艰巨,并且您需要确切知道 dm-crypt 数据相对于官方分区的开始应该领先多少。
无论如何,如果你的系统在此过程中崩溃或停止,你将丢失数据
更多参考:
http://www.richardneill.org/a22p-mdk11-0.php#encrypt2
http://www.saout.de/tikiwiki/tiki-index.php?page=EncryptExistingDevice