WSLでローレベルフォーマット(物理フォーマット)
最近HDDを買い替えたので、古いHDDを物理フォーマットして売ってしまおうと思いツールを探したんですが、どうもWindowsだとフリーで使い勝手のいいツールがなさそう。
(強いて挙げるならSeagateのSeaToolsですが、zero fillしか出来なさそう?)
最近はWSLからWindowsのファイルシステムに簡単にアクセスできるし、これはWSLでいけるのでは?と思ってやってみました。
ディスクのアタッチ
対応しているFilesystemの違いで、WSL側に直接マウントするのは難しい。
そもそもフォーマットさえできれば良いので今回はとりあえずアタッチしてブロックデバイスとして認識出来るようにします。
ここらへんはMicrosoftのドキュメントを参考にしました。
※一応事前に対象のディスクからボリュームを削除しておくといいかも
- PowerShellを管理者権限で起動
- 削除対象のディスクを調べてDeviceIDを確認する
> GET-CimInstance -query "SELECT * from Win32_DiskDrive"
DeviceID Caption Partitions Size Model
-------- ------- ---------- ---- -----
\\.\PHYSICALDRIVE6 TOSHIBA MQ01ABD100 SCSI Disk Device 0 1000202273280 TOSHIBA MQ01ABD100 SCSI Disk Device
- DeviceIDを指定してWSLにアタッチ
> wsl --mount \\.\PHYSICALDRIVE6 --bare
成功するとWindowsのディスク管理からはこのように赤いマークがついてオフラインに見えます。
デバイス名の確認
ここからはWSL側で作業していきます。
まずはきちんとアタッチされてるか一応lsblkで確認しておきます。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdc 8:32 0 931.5G 0 disk
└─sdc1 8:33 0 16M 0 part
アタッチされたデバイス名とモデルもfdiskで間違いがないことを確認しておきます。
> sudo fdisk -l
Disk /dev/sdc: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: MQ01ABD100
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
OK!
フォーマット
いよいよ削除します。
乱数による上書きはかつては2回以上が目安だったらしいですが、Wikiを確認するとどうも最近の集積度の高いHDDだと1回やれば十分みたいな記載もあるので、自分は1回+zero fillぐらいでやっています。
- wslでshredコマンド(削除)を実行
$ sudo shred -n 1 -z -v /dev/sdc
shred: /dev/sdc: pass 1/2 (random)...
shred: /dev/sdc: pass 1/2 (random)...115MiB/932GiB 0%
shred: /dev/sdc: pass 1/2 (random)...260MiB/932GiB 0%
shred: /dev/sdc: pass 1/2 (random)...414MiB/932GiB 0%
shred: /dev/sdc: pass 1/2 (random)...557MiB/932GiB 0%
shred: /dev/sdc: pass 1/2 (random)...710MiB/932GiB 0%
shred: /dev/sdc: pass 1/2 (random)...867MiB/932GiB 0%
shred: /dev/sdc: pass 1/2 (random)...1021MiB/932GiB 0%
以上です。
かなり時間が掛かるのでUSBで繋ぐ場合は3.0以上の環境を用意しておくと多少早くなるかと思います。
今回は用意したケーブルが2.0までしか対応していなかったので30MB/secぐらいしか出ず、2回(ランダム1回, zero fillで1回)でおよそ15時間以上かかりました・・・
Discussion