WSLでローレベルフォーマット(物理フォーマット)


Why?

最近HDDを買い替えたので、古いHDDを物理フォーマットして売ってしまおうと思いツールを探したんですが、どうもWindowsだとフリーで使い勝手のいいツールがなさそう。
(強いて挙げるならSeagateのSeaToolsですが、zero fillしか出来なさそう?)

最近はWSLからWindowsのファイルシステムに簡単にアクセスできるし、これはWSLでいけるのでは?と思ってやってみました。

ディスクのアタッチ

対応しているFilesystemの違いで、WSLに直接マウントするのは難しい。
そもそもフォーマットさえできれば良いので今回はとりあえずアタッチしてブロックデバイスとして認識出来るようにします。

ここらへんはMicrosoftのドキュメントを参考にしました。

https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-mount-disk

※一応事前に対象のディスクからボリュームを削除しておくといいかも

  1. PowerShellを管理者権限で起動
  2. 削除対象のディスクを調べる
>  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
  1. DeviceIDを指定してWSLにアタッチ
> wsl --mount \\.\PHYSICALDRIVE6 --bare

成功するとWindowsのディスク管理からはこのように赤いマークがついてオフラインに見えます。

デバイス名の確認

一応きちんとアタッチされてるか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ぐらいでやっています。

https://ja.wikipedia.org/wiki/データの完全消去#要求される上書き回数

  1. 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時間以上かかりました・・・