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

Kal*_*Kal 4 scrub

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

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

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

Jas*_*sen 8

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

然后你只需要一个随机字节的来源,比如 /dev/urandom

  • 你也可以在 GNU 上使用 `status=progress` (2认同)

fro*_*utz 5

你可以使用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
Run Code Online (Sandbox Code Playgroud)

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

如果每次都使用相同的密码,此方法也允许验证:

cmp /dev/mapper/sdx-random /dev/sdx && echo OK || echo FAIL
Run Code Online (Sandbox Code Playgroud)

但是,要使其可恢复,您必须使用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
Run Code Online (Sandbox Code Playgroud)

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


另见https://unix.stackexchange.com/a/352378/30851