如何在不备份/恢复现有数据的情况下加密外部磁盘?

如何在不备份/恢复现有数据的情况下加密外部磁盘?

我有一个 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 reencryptLUKS2:

# 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手册页所说:

在使用此工具之前,请务必确保您有可靠的备份。

相关内容