我需要擦洗几个非常大的硬盘。但是,我无法从桌面上执行此操作。我需要在移动中通过笔记本电脑进行操作。一次通过scrub(1)
硬盘驱动器需要一天多的时间,但我不可能让我的笔记本电脑静止那么长时间。
scrub(1)
本身不支持任何类型的偏移命令行参数。
有没有办法做scrub(1)
(写入随机字节),但可以恢复的方式?基本上,当我中断它时,该命令需要打印出偏移量,并且它需要接受偏移量参数才能恢复。
答案1
dd
可以强制生成进度报告(通过用 发出信号SIGUSR1
),并且可以被告知开始编写部分内容(使用seek
)
然后,您只需要一个随机字节源,例如 /dev/urandom
答案2
您可以使用ddrescue
和cryptsetup
:
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.key
到cryptsetup
命令中即可。