我有 2 个硬盘,每个 3TB。第一个驱动器充满了非常重要的内容。我使用以下技术加密了第二个 3TB 驱动器:
https://www.youtube.com/watch?v=J_g-W6hrkNA
并将文件从未加密的第一个驱动器复制到加密的第二个驱动器。我现在想加密第一个驱动器。我该如何去做呢?它包含内容,所以我假设如果我使用上面的链接对其进行加密,驱动器将被擦除?
答案1
您应该做的是安全地擦除原始驱动器以删除任何未加密的数据,然后设置加密并复制文件。
首先,您需要确保备份正确,因为您将完全擦除原始驱动器。使用如下命令擦除驱动器:
# dd if=/dev/urandom of=/dev/sdX bs=4096
sdX
您要擦除的驱动器在哪里。您可能想使用/dev/zero
urandom 代替/dev/urandom
,因为 urandom 会花费更长的时间,尽管它更安全。有关这方面的更多信息可以找到这里。确保擦除正确的驱动器,最好删除另一个驱动器,这样就不可能损坏它。
请注意,不可能恢复以这种方式擦除的数据(这就是重点)。
一旦安全擦除磁盘,不再保留未加密的数据,您就可以设置加密并复制数据。
答案2
就地加密是可能的,但很危险。到目前为止,只需擦除/格式化/mkfs它,然后用其他地方的文件重新填充它就更容易了。
对于就地方法,首先必须缩小文件系统,至少2MiB
为驱动器开头的 LUKS 标头腾出空间。为了安全起见,请将其缩小一点。
然后你必须记住,由于 LUKS 标头,加密容器上的所有数据至少有一个2MiB
偏移量。因此,未加密到加密容器的线性dd
副本将不起作用,因为每次写入都会覆盖尚未读取的数据。
为了避免这种情况,复制操作必须向后运行。中没有对此的直接支持dd
,但您可以seek=$x skip=$x count=1
在向后循环中使用它进行模拟,该循环$x
在每一步中减一,直到$x=0
。
/dev/sdx1
使用带有文件系统的设备的示例ext4
:
# make sure it's not mounted anywhere
umount /dev/sdx1
# backup the first 128MiB somewhere
dd bs=1M if=/dev/sdx1 of=/somewhere/sdx9.backup count=128
# shrink filesystem by 128MiB
resize2fs /dev/sdx1 $(($(blockdev --getsize64 /dev/sdx1)/1024/1024-128))M
# create encryption layer
cryptsetup luksFormat /dev/sdx1
cryptsetup luksOpen /dev/sdx1 luksx1
# dd backwards using GiBs of memory. Change math and bs for less memory usage.
for x in $(seq $(($(blockdev --getsize64 /dev/sdx1)/1024/1024/1024+1)) -1 0)
do
dd bs=1G iflag=fullblock seek=$x skip=$x count=1 \
if=/dev/sdx1 of=/dev/mapper/luksx1
done
# include backup for region previously overwritten by LUKS header
dd bs=1M if=/somewhere/sdx9.backup of=/dev/mapper/luksx1
# grow filesystem to full size
resize2fs /dev/mapper/luksx1
执行此操作之前,请先使用临时设备测试该过程。
如果该过程在任何时候被取消,这几乎是一个失败的原因,因为你最终得到的是半加密的东西。
有些前端几乎使用相同的方法。cryptsetup
它本身有一个重新加密程序,或者你可以试试你的运气http://www.johannes-bauer.com/linux/luksipc/。我更喜欢手动方法,只是因为我了解它的工作原理以及可能出现的问题。