How-To:Linux 硬碟資料抹除
在淘汰舊硬碟時,如果在未採用物理性破壞的情況下,為避免資料外洩往往得先進行資料抹除的動作,而這類操作其實在 Linux 上很容易就能夠做到。本文將說明兩款 Linux 上的相關工具,分別為 hdparm 以及 shred。這兩款工具事實上算是非常普遍的工具程式,在許多 Linux 發行版裡都可以找得到。使用者也可以藉由諸如 GParted Live 這類的免安裝版本,利用光碟或隨身碟啟動後,直接在任何電腦上進行操作。
1. hdparm
hdparm 是一款硬碟參數修改工具,它可以用來執行 IDE/SATA 介面硬碟所內建的 Secure Erase(安全抹除)指令。其操作流程如下:
首先需確認該硬碟是否支援 Secure Erase:
- sudo hdparm -I /dev/sda
輸出訊息應出現如下的「Security」項目,其中必須顯示「not frozen」(未凍結),才表示 Secure Erase 是可執行的,如果是「frozen」則無法執行 Secure Erase。解除凍結狀態的可行方法不一,一種方式是將系統暫停(suspend)再喚醒。或者以 IDE 介面的硬碟來說,可以嘗試藉由調整 master/slave 設定來解除。
Security: Master password revision code = 65534 supported not enabled not locked not frozen not expired: security count supported: enhanced erase
確認支援 Secure Erase 後,對硬碟設置 Security 功能的密碼,例如「1234」:
- sudo hdparm --user-master u --security-set-pass 1234 /dev/sda
然後使用相同的密碼執行 Secure Erase:
- sudo hdparm --user-master u --security-erase 1234 /dev/sda
這個指令會跑一段時間,結束時若無任何錯誤訊息即表示資料抹除完成。
2. shred
shred 是 GNU 核心工具組(GNU Coreutils)的一部分,它能夠重複用亂數值或零值將硬碟填滿,以達到資料抹除的目的。雖然同樣的作法其實可以用 dd 去完成,然而 shred 的效率更好,而且還能夠顯示處理進度。
shred 的操作指令相當簡單,基本的填滿硬碟指令如下:
- sudo shred -vz /dev/sda
參數「v」是顯示進度,「z」則是增加一道程序填入零值。由於 shred 預設為填入亂數值三次,因此上述指令代表三次亂數值和一次零值,總共填滿硬碟四次。
3. 兩款工具、方式的選擇
使用 hdparm 執行 Secure Erase 指令應該是最優先的選擇,不過出產年份過於久遠的 IDE 硬碟可能未包含 Secure Erase 功能。此外若是使用 USB 轉接線連接硬碟,則可能會造成 hdparm 的執行錯誤。
shred 可作為不錯的備案,不過一個具體的缺陷是它會略過無法寫入的磁區,在處理部份故障的硬碟時就會不夠完整。處理效率方面,兩種方式都會受到裝置本身的速度以及容量的影響,但基本上執行 Secure Erase 指令都會比用 shred 重複填滿來得快。
4. 其它參考資料:
- https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
- http://linux.die.net/man/8/hdparm
- http://linux.die.net/man/1/shred