Windows PEとバッチファイルでデータ消去USBを作成

ノートパソコン処分用に作成したものなので、HDDを複数マウントしているパソコンでの運用は想定していません。

メインのパソコンに接続している複数のHDDのうち1台とか、任意のどれかをデータ消去するには要改造ですね。


どちらかと言うと業務用。

レンタルやリースのパソコンを業者に引き渡す前のデータ消去に使おうと思ったのですが、データ消去ソフトを貸し出してくれるとのことなのでお役御免・・・供養です。


USBに回復ドライブやシステム修復ディスクを適用すればブート時にコマンドプロンプトを使用できるのですが、今後も再利用するかもしれないことを考えると、手順をバッチ化してしまいたい。

なので、USBにWindows PEを導入して使うことにしました。

WindowsPE導入時のトラブルについてはこちらを参照。



消去用のコマンドは色々あるみたいですね。
Cipher、SDelete、clean all・・・


悪戯コマンドとしてすっかり有名になってしまった「cmd /c rd /s /q c:」は単にディレクトリを全て削除するだけなので、データ復旧ソフトや専門知識のある人が技術を駆使すれば復旧が可能みたいです。

HDDなりSSDなり廃棄するのであれば、このコマンドを実行した上で、全セクタに0書き込みとかしないと不十分かも。



Cipher

0⇒1⇒ランダムの計3回、上書き回数は固定。
その分時間がかかりますが。3~4時間ぐらい?

ただしWindowsPEには実装されていないので、CipherをPE側に別途導入する必要があります。

C:\WinPE_amd64\mount\Windows\System32
↑に直接、今使っているPC内の「Cipher.exe」をコピペすればOK


SDelete

Microsoftが配布しているデータ消去用ツール
様々なオプションが用意されており、上書き回数も指定可能です。2時間ちょっと。

こちらもCipher同様、SDelete.exe(OSによってはSDelete64.exe)をsystem32直下に入れる必要があります。


diskpart clean all

diskpartコマンドに用意されているので、これは何もせずとも最初から使えます。
0を1回だけ、オプションは特にありません。90分ぐらい?

進捗ゲージみたいなものが無いので、どれぐらい進んでいるか分かりづらい・・・
バイナリエディタで確認すると、全て0になっていましたよ。



今回は「clean all」を使おうと思います。



WindowsPEそのものの設定などは下記を参考にさせて頂きました。

WindowsPEの作り方,アプリケーションの追加方法
Qiita @ta_b0_ 様



WindowsPE用のUSBに書き込むファイルは下の2つです。


[wipe_hdd.bat]



大元となるbatです。
「データを消しても良いか」と最終確認を行い、OKだったらデータ消去します。

データ消去は「diskpart clean all」を使いたかったのですが、これってbatに直接書き込めない・・・?

調べてみると、別のテキストファイルにプログラムを記述して、batから呼び出せばdiskpartコマンドを使えるみたいですね。

Diskpart スクリプト例
Microsoft Docs 様

なので「wipe_diskpart.txt」を別途作成。内容は下記の通り。



[wipe_diskpart.txt]



たったの3行。
ディスクを選択し、データを消して、終わる。
データ消去が完了するとバッチファイル側の処理に戻るので、何らかのキーを押せばシャットダウンされます。

進捗ゲージも無いので、少しでも分かりやすいようデータ消去開始時と終了時に時刻を表示しております。




WindowsPE起動直後にbatを起動させたいので、startnet.cmdに「start d:wipe_hdd.bat」を追記します。※ 要マウント

「startnet.cmd」が存在するディレクトリは設定によって異なると思いますが、System32直下にある筈です。

ちなみに私は↓↓↓でした。
C:\WinPE_amd64\mount\Windows\System32\startnet.cmd


Wpeinit および Startnet.cmd:WinPE のスタートアップ スクリプトを使用します。
Microsoft Docs 様



一連の動作の流れとしては、
処分したいパソコンを起動。
 ↓
ブートメニューでUSBを選択。
 ↓
WindowsPEが起動するのを待つ。
 ↓
「HDD Wipe OK?」が表示されたら「Y」キーを入力。
 ↓
データ消去開始。
 ↓
「hit any key」が表示されたら、どれでもいいのでキーを入力するとシャットダウン。
これでデータ消去完了です。お疲れ様でした。



複数のHDDから任意のものを消去するには・・・

diskpart_1.txtには「selectdisk 1」、diskpart_2.txtには「selectdisk 1」という風に
10個ぐらいdiskpart_x.txtを予め用意しておいて、batでディスク番号を入力すると、その番号のdiskpart_x.txtが読み込まれる・・・

みたいな形式にすれば、できるようになるんじゃないでしょうか。
すごい力技ですね。

batからdiskpartに、うまいこと引数を受け渡しできればいいんですけど。



もう何度も書いていますが、使用に関してはは自己責任です。
編集中に実行してしまった場合は「n」キーを押してください。

使い方を誤って、必要なデータを削除してしまった等の苦情は受け付けません。