scrub(1)
,但可以從偏移量恢復
我需要擦洗幾個非常大的硬碟驅動器。但是,我不能從桌面上做到這一點。我需要在移動中使用筆記型電腦進行操作。單次通過
scrub(1)
硬碟驅動器需要超過一天的時間,但我無法讓我的筆記型電腦長時間靜止不動。
scrub(1)
本身不支持任何類型的偏移命令行參數。有沒有辦法做
scrub(1)
(寫入隨機字節),但可以恢復的方式?基本上,當我中斷命令時,該命令需要列印出偏移量,並且它需要接受一個偏移量參數才能恢復。
dd
可以強制生成進度報告(通過SIGUSR1
用seek
然後,您只需要一個隨機字節源,例如 /dev/urandom
你可以使用
ddrescue
andcryptsetup
: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
命令中。