WindowsやLinuxでファイルを完全消去する方法

WindowsやLinuxでファイルを完全消去する方法

WindowsやLinux環境でファイルを通常の操作で削除した場合、専用のデータ復元ツールを利用すれば、削除されて間もないファイルは意外と簡単に復元できてしまいます。

一般的なファイルであれば、たとえ復元されてもそれほど困りはしませんが、企業秘密などが記録されたファイルを消去するときは、万が一にも復元されないよう万全を期したいところです。

そこでここでは、WindowsとLinuxのそれぞれで、ファイルを復元できないよう完全消去する方法を解説します。

Windowsでファイルを完全消去

Windows環境でファイルを完全消去したいときは、Microsoftが提供している「Windows Sysinternals」に含まれるSDeleteツールを使った方法がおすすめです。

SDeleteツールは、ファイルを完全消去したり、ドライブの空き領域を完全消去できるコマンドラインツールで、以下のWebページからダウンロードできます。

SDelete - Sysinternals | Microsoft Learn

WindowsやLinuxでファイルを完全消去する方法

ダウンロードしたZIPファイルを展開して、任意のフォルダーに配置したら準備完了です。

WindowsやLinuxでファイルを完全消去する方法

SDeleteを使ってファイルを完全消去する手順は、以下のとおりです。

SDeleteツールはコマンドラインツールのため、ファイルを完全消去するときは、コマンドプロンプトやPowerShellから実行し、32bit版のWindowsでは「sdelete.exe」、64bit版のWindowsでは「sdelete64.exe」を利用します。

たとえば「D:¥test\file1.txt」を完全消去するときは、以下のように実行します。

> sdelete64.exe -nobanner "D:\test\file1.txt"

WindowsやLinuxでファイルを完全消去する方法

「D:\test」フォルダーとサブフォルダーを含めて完全消去するときは、以下のように実行します。

> sdelete64.exe -nobanner -s "D:\test"

WindowsやLinuxでファイルを完全消去する方法

複数のフォルダーやファイルを一括で完全消去したいときは、以下のようにバッチファイル化するのがおすすめです。

下のバッチファイルでは、ドラッグ&ドロップしたフォルダーやファイルを一括で完全消去できます。

@echo off
setlocal enabledelayedexpansion
set d=%~dp0
set logfile=%d%%~n0.log
set sdelete-path=D:\sdelete\sdelete64.exe

echo %date:/=%%time::=% >>%logfile%

for %%A in (%*) do (
  set attr=%%~aA
  if "!attr:~0,1!"=="d" (%sdelete-path% /s "%%A" >>%logfile%)
  if "!attr:~0,1!"=="-" (%sdelete-path% "%%A" >>%logfile%)
)
endlocal

なお、ファイル名に日本語が含まれるいると、ファイル単体での処理が正常に実行できないため、そのようなファイルは、フォルダーにまとめた上でバッチファイルにドラッグ&ドロップすれば正常に処理できます。

ちなみに、SDeleteツールでは既存のデータに影響を与えることなく、ドライブの空き領域だけを完全消去することもできます。

たとえば、Dドライブの空き領域を完全消去するときは、以下のように実行します。

> sdelete64.exe -nobanner -z D:

WindowsやLinuxでファイルを完全消去する方法

なお、ドライブの空き領域の完全消去には、数時間またはそれ以上かかることがあるのでご留意ください。

Linuxでファイルを完全消去

Linux環境ででファイルを完全消去したいときは、一般的なディストリビューションに標準でインストールされているshredコマンドを利用します。

たとえば「test.txt」というファイルを完全消去したいときは、以下のようにコマンドを実行します。(デフォルトでは、ファイル上に3回ランダムなデータを上書きして消去が行われます。)

# shred -v test.txt
shred: test.txt: pass 1/3 (random)...
shred: test.txt: pass 2/3 (random)...
shred: test.txt: pass 3/3 (random)...

削除対象にディスクのデバイスファイルを指定すれば、HDDやSSDといったディスク全体を消去することもできます。

また「-z」オプションを付けると、ランダムなデータを書き込んだ後にさらにゼロで上書きでき、「-n」オプションでランダムなデータを書き込む回数を指定することもできます。

あとがき

コマンド操作にそれほど抵抗がなければ、上に紹介した方法がシンプルでお勧めの方法です。ご活用あれ。