【Windows】廃棄するストレージのデータを SDelete コマンドで完全に消去する

1. SDelete とは?

SDelete は Windows Sysinternals が提供しているツールの1つであり、基本的にはファイルやフォルダを削除するコマンドラインツールです。

※ Windows Sysinternals とは、Windows トラブルシューティング ツールの総称です。いろいろと便利な Windows用ツールが提供されています。

主な用途は以下の2つです。

1. ファイルやフォルダを削除する。

  • 通常の「ファイルの削除」という操作は、データそのものを削除するのではなく、データの存在している位置情報をクリアしているに過ぎません。そのため、そのストレージが第三者の手に渡った場合、割と簡単に元のデータが見られてしまいます。
  • 一方 sdelete の削除処理では、削除対象となるファイルまたはフォルダが配置されていたストレージ上の領域を 別の値で上書き する処理も行ってくれます。

2. 指定したドライブの空き領域を 0 で上書きする。

  • 「空き領域」には過去に削除したファイルのデータが残っている可能性があります。そうした領域を 0 で上書きする(-z オプション)ことによって、第三者がそのストレージを解析して残っているデータを抽出することを防ぎます。
  • 空き領域に対する操作なので、既存のデータが壊されることはありません。
  • あらかじめドライブ上のファイル・フォルダを削除した上で sdelete を実行すれば、今まで存在していたデータが占有していた領域全てを 0 で上書きしてくれます(-z オプション)。
  • ストレージを捨てる直前にこの操作を行うことで、そのストレージから過去のデータが読み出される可能性は著しく下がります。

本ページでは 2 の使い方について説明します。ストレージデバイスを捨てる前に、ちゃんとデータを消しておこうという趣旨で使います。

参考

2. SDelete の導入

(1) SDelete のページのダウンロードリンクをクリックします。

SDelete.zip ファイルがダウンロードされます。

(2) SDelete.zip ファイルを解凍してできた SDelete フォルダを任意のパスに配置します。SDeleteフォルダの内容

sdelete.exe と sdelete64.exe の2つの実行ファイルが入っています。64bit の Windows ならどちらを使ってもよいでしょう。

また、これらのファイルを C:\Windows\System32 以下に貼り付ければパスが通るので、コマンドプロンプトもしくは PowerShell において、どこからでもパスなしで実行することができます。

3. SDelete で USBメモリを完全に消去する手順

対象とするストレージは、HDD・SSD など何でもよいのですが、ここでは USBメモリを想定します。

ここで説明する作業を行うことによってUSBメモリ内のデータ全て 0 で上書きし、その上で捨てるというシナリオです。

尚、本記事の操作は How to zero out a storage disk using SDELETE in Windows – YouTube を大いに参考にしていますので、興味のある人はこちらも参照してください。

1. USBメモリを Windows パソコンに接続する

まずは、USBメモリを Windows パソコンに接続します。

2. USBメモリの「ディスクの番号」を調べる

後の操作で必要になるため、USBメモリを表す「ディスクの番号」を調べます。

(1) コマンドプロンプトまたは PowerShell を管理者権限で立ち上げます。

(2) 以下のコマンドを入力して実行します。

wmic diskdrive list brief

その PC に接続されているストレージが表示されるので、その中から今回対象とする USBメモリを探し、DeviceID列 の末尾の番号を確認します。後でこの番号を使います。DeviceID の末尾の番号を確認します
(相当古いUSBメモリです)

この画像の場合は、2行目が USBメモリなので「1」となります。

3. USBメモリ上の「ボリューム(または「パーティション」)」を削除する

ここで、USBメモリ上の「ボリューム(またはパーティション)」を削除します。
この操作により、USBメモリ上のデータは全て削除された状態になり、これらの領域がそのまま sdelete が処理の対象とする「空き領域」となります。

ここでは diskpart コマンドを利用してこれらの処理を行うので、引き続きコマンドプロンプトまたは PowerShell 上での作業になります。(「ディスクの管理」ツールを使って行うこともできます)

diskpart コマンドを開始します。

diskpart

ボリュームを一覧表示します。

DISKPART> list volume

以下のように表示されるので、USBメモリに該当する行の一番左にある「Volume 3」のところを見ます。この「3」がボリューム番号であることが分かります。ボリューム一覧

この 3番のボリュームを選択します。

DISKPART> select volume 3

ここでもう一度、ボリューム一覧表示すると、選択されているボリュームの一番左に「*」が表示されるので、念の為確認しておきます。

DISKPART> list volume

このボリュームを削除します。

DISKPART> delete volume

更にもう一度、ボリューム一覧表示して、削除したボリュームの状況を見ておきます。

DISKPART> list volume

以下が実際の画面です。Volume 3 は削除されたはずですが、まだ表示はされています(利用不可とはなっています)。Volume 3 が削除された後

ボリュームが削除できなかった場合

ボリュームの削除でエラーが出た場合は(実際ありました)、以下の手順でパーティションを削除します。

ディスク(接続されたストレージ)を一覧表示します。

DISKPART> list disk

以下が実際に実行した画面です。USBメモリに該当する行のディスク番号を確認します。ディスク一覧

USBメモリに該当するディスクを選択します。

先程ディスク番号が「1」だと分かったので、「1」を指定して以下のコマンドを実行します。

DISKPART> select disk 1

以下のコマンドを実行して、このディスクのパーティションを含めた全ての情報を消去します。

DISKPART> clean

4. sdelete コマンドで空き領域を 0 で上書きします

ここまでの操作で、USBメモリ内のデータは表面上なくなり「空き領域」となりました(実際には、まだデータが残っています)。

まず、sdelete コマンドがあるフォルダに移動します(自分の配置したフォルダに移動してください)。

cd Path\To\Sdelete-Folder

sdelete コマンドを実行して、「空き領域(= 全領域)」を 0 で上書きします。

この時、一番うしろの引数として、最初に確認した「ディスク番号」を指定します。

.\sdelete -z 1
  • sdelete の -z オプションは、ドライブレター(E: など)を指定することもできますが、この時点でボリューム(もしくはパーティション)が削除されているので、ディスク番号で指定する必要があります。
  • -p オプションで上書き回数を指定することもできます(デフォルトは1回)。

5. USBメモリ内のデータを確認する

バイナリエディタと呼ばれるツールで、USBメモリ内の状況を確認します。

ここでは、HxD を使います。

(1) HxD を管理者権限で起動します。

(2) [Tools]メニュー – [Open disk…] を選択します。[Tools] – [Open disk…]

(3) 目的のストレージ(ディスク)を選択して [OK]ボタンを押します。

ストレージの状況によって、[Logical disks] 側で選択するのか [Physical disks] 側で選択するのか違ってきます。目的のストレージを選択します

(4) USBメモリ内のデータを最初から見ていき、0 で上書きされているか確認します。

スクロールして下まで見てみましょう。0 で上書きされていれば OK です。
これなら安心してUSBメモリを捨てることができます。

これでも元のデータが読み込まれるのではないかと不安な場合は、sdelete コマンドの -p オプションで上書き回数を指定しましょう。デフォルトは1回になっています。USBメモリ内が 0 で上書きされているか確認します

参考