我有一个 ext4 未加密的外部 USB 磁盘:
/dev/sda1 3.6T 2.9T 613G 83% /data
我希望加密该磁盘而不丢失数据。我将此磁盘从 Raspberry3 迁移到 Raspberry4,因为我现在希望加密以获得更好的性能。
我读到文件系统堆叠级加密和块设备级加密,但 LUKS 似乎是最安全的并且是 Debian 标准。
我读过这个指南:
警告!以下命令将删除您正在加密的分区上的所有数据。您将丢失所有信息!因此,在键入以下任一命令之前,请确保将数据备份到外部源,例如 NAS 或硬盘。
# cryptsetup -y -v luksFormat /dev/xvdc
我无法将 4 TB 数据复制到另一个磁盘,因为我没有那么大容量的磁盘。
如何在不备份/恢复现有数据的情况下加密该磁盘?是否可以?
答案1
这是可能的,但对于所有就地转换,都存在一定的数据丢失风险。
要为 LUKS 标头腾出空间,除非您打算使用外部标头,否则必须首先缩小文件系统(resize2fs
如果是 ext4,则使用)。对于 LUKS1,您应该将其缩小 2MiB。对于 LUKS2,您可以将其缩小 4M、16M 或最多 64M。如果您打算使用高级功能(dm-integrity),您可能需要进一步缩小它。
除了缩小分区之外,如果磁盘分区布局允许的话,您还可以增大分区。
使用离线cryptsetup-reencrypt
实用程序加密现有数据:(并非所有发行版都安装,可能位于单独的包中,否则从源获取)
# cryptsetup-reencrypt --new --type luks1 --reduce-device-size 2M /dev/sdXn
Enter new passphrase:
Verify passphrase:
[A wild progress bar appears.]
使用在线cryptsetup reencrypt
LUKS2:
# cryptsetup reencrypt --new --reduce-device-size 16M /dev/sdXn
WARNING!
========
This will overwrite data on LUKS2-temp-2c9761be-a765-4349-aa0a-553203e534f1.new irrevocably.
Are you sure? (Type uppercase yes):
Enter passphrase for LUKS2-temp-2c9761be-a765-4349-aa0a-553203e534f1.new:
Verify passphrase:
[A wild progress bar appears.]
因此,只要在整个过程中没有发生电源或电缆故障,这种方法就可以工作。
正如cryptsetup-reencrypt
手册页所说:
在使用此工具之前,请务必确保您有可靠的备份。