Scrub

scrub(1),但可以從偏移量恢復

  • October 10, 2020

我需要擦洗幾個非常大的硬碟驅動器。但是,我不能從桌面上做到這一點。我需要在移動中使用筆記型電腦進行操作。單次通過scrub(1)硬碟驅動器需要超過一天的時間,但我無法讓我的筆記型電腦長時間靜止不動。

scrub(1)本身不支持任何類型的偏移命令行參數。

有沒有辦法做scrub(1)(寫入隨機字節),但可以恢復的方式?基本上,當我中斷命令時,該命令需要列印出偏移量,並且它需要接受一個偏移量參數才能恢復。

dd可以強制生成進度報告(通過SIGUSR1seek

然後,您只需要一個隨機字節源,例如 /dev/urandom

你可以使用ddrescueand 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.keycryptsetup命令中。


另請參閱https://unix.stackexchange.com/a/352378/30851

引用自:https://unix.stackexchange.com/questions/613813