`scrub(1)`,但可以从偏移量恢复

`scrub(1)`,但可以从偏移量恢复

我需要擦洗几个非常大的硬盘。但是,我无法从桌面上执行此操作。我需要在移动中通过笔记本电脑进行操作。一次通过scrub(1)硬盘驱动器需要一天多的时间,但我不可能让我的笔记本电脑静止那么长时间。

scrub(1)本身不支持任何类型的偏移命令行参数。

有没有办法做scrub(1)(写入随机字节),但可以恢复的方式?基本上,当我中断它时,该命令需要打印出偏移量,并且它需要接受偏移量参数才能恢复。

答案1

dd可以强制生成进度报告(通过用 发出信号SIGUSR1),并且可以被告知开始编写部分内容(使用seek

然后,您只需要一个随机字节源,例如 /dev/urandom

答案2

您可以使用ddrescuecryptsetup

truncate -s $(blockdev --getsize64 /dev/sdx) sdx-zero
cryptsetup open --type plain --cipher aes-xts-plain64 sdx-zero sdx-random
ddrescue /dev/mapper/sdx-random /dev/sdx sdx-scrub.map

要恢复、保留sdx-scrub.map,然后再次重复相同的命令即可。

如果您每次都使用相同的密码,此方法也可以进行验证:

cmp /dev/mapper/sdx-random /dev/sdx && echo OK || echo FAIL

但是,要使其可恢复,您必须使用cmp -i SKIP -n LIMIT.

通过验证,该过程将花费两倍的时间。未经验证,您就拥有了薛定谔的磨砂膏。


在上面的示例中,/dev/sdx是要清理的驱动器。

sdx-zero是一个仅包含零的稀疏文件,大小与/dev/sdx.它必须由正确支持稀疏文件的文件系统支持,ext4/xfs/btrfs 可以工作,tmpfs/fat/ntfs 则不能。

cryptsetup将零加密为随机数据,因此/dev/mapper/sdx-random充满随机数据的可查找块设备也是如此(与/dev/urandom不可查找的不同)。

ddrescue从 中读取随机数据sdx-random并将其写入到 中/dev/sdx,从而在跟踪 中的进度的同时对其进行清理sdx-scrub.map。它还会向您显示进度条以及错误(如果有)。

如果您不想每次都输入密码,您也可以创建一个密钥文件:

printf "%s" $(uuidgen) > sdx-scrub.key

仅生成密钥文件一次并在调用之间保留它,然后只需添加--key-file sdx-scrub.keycryptsetup命令中即可。


也可以看看https://unix.stackexchange.com/a/352378/30851

相关内容