「ディスクの完全消去」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
31行目: 31行目:
 
[[Wikipedia:Random number generation]] を参照してください。
 
[[Wikipedia:Random number generation]] を参照してください。
   
  +
{{Warning|ブロックデバイス暗号化が使われているパーティションにランダムなデータや暗号化されたデータ以外が含まれている場合、暗号化ドライブの使用パターンを解析することができ、ファイルシステムレベルの暗号化と大して変わらなくなります。真剣にブロックデバイス暗号化をセットアップしたい場合はランダムではない {{ic|/dev/zero}} やシンプルなパターン (badblocks など) を使ってはいけません。}}
{{Warning|If Block device encryption is mapped on a partition that contains anything else than random/encrypted data, disclosure of usage patterns on the encrypted drive is possible and weakens the encryption being comparable with filesystem-level-encryption. Never use /dev/zero, simple patterns (badblocks, eg.) or other unrandom data before setting up Block device encryption if you are serious about it!}}
 
   
 
== 対象の選択 ==
 
== 対象の選択 ==
68行目: 68行目:
 
[[Wikipedia:Dd (Unix)#Block size]], [http://people.redhat.com/msnitzer/docs/io-limits.txt blocksize io-limits] も見て下さい。
 
[[Wikipedia:Dd (Unix)#Block size]], [http://people.redhat.com/msnitzer/docs/io-limits.txt blocksize io-limits] も見て下さい。
   
[[Wikipedia:Advanced Format|Advanced Format]] のハードドライブを使用している場合、ブロックサイズをデフォルトの512バイトよりも大きく指定することを推奨します。高速に書き換え処理を行うために、あなたの使用しているドライブの物理的なジオメトリにブロックサイズを合わせて下さい。''dd'' コマンドにブロックサイズオプションを追加することで指定できます (例: 4KB の場合 {{ic|<nowiki>bs=4096</nowiki>}})。
+
[[Advanced Format]] のハードドライブを使用している場合、ブロックサイズをデフォルトの512バイトよりも大きく指定することを推奨します。高速に書き換え処理を行うために、あなたの使用しているドライブの物理的なジオメトリにブロックサイズを合わせて下さい。''dd'' コマンドにブロックサイズオプションを追加することで指定できます (例: 4KB の場合 {{ic|<nowiki>bs=4096</nowiki>}})。
   
 
''fdisk'' は全てのディスクの物理セクタと論理セクタのサイズを出力します。
 
''fdisk'' は全てのディスクの物理セクタと論理セクタのサイズを出力します。
86行目: 86行目:
 
A block storage devices contains sectors and a size of a single sector that can be used to calculate the whole size of device in bytes. You can do it by multiplying sectors with size of the sector.
 
A block storage devices contains sectors and a size of a single sector that can be used to calculate the whole size of device in bytes. You can do it by multiplying sectors with size of the sector.
   
  +
''dd'' コマンドを使ってパーティションを消去するパラメータの例:
As an example we use the parameters with the ''dd'' command to wipe a partition:
 
   
 
# dd if=''data_source'' of=/dev/sdX bs=''sector_size'' count=''sector_number'' seek=''partitions_start_sector''
 
# dd if=''data_source'' of=/dev/sdX bs=''sector_size'' count=''sector_number'' seek=''partitions_start_sector''
97行目: 97行目:
 
}}
 
}}
   
  +
''fdisk'' の出力の最初の行からディスク容量と論理セクタがわかります:
The first line of the ''fdisk'' output shows the disk size in bytes and logical sectors:
 
   
 
Disk /dev/sdX: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors
 
Disk /dev/sdX: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors
   
To calculate size of a single logical sector use {{ic|echo $((2000398934016 / 3907029168))}} or use data from the second line of ''fdisk'' output:
+
論理セクタのサイズを計算するには {{ic|echo $((2000398934016 / 3907029168))}} を実行するか ''fdisk'' の出力の2行目のデータを利用してください:
 
 
 
Units: sectors of 1 * 512 = 512 bytes
 
Units: sectors of 1 * 512 = 512 bytes
   
  +
物理セクタの計算については3行目を使います:
To calculate physical sectors that will make it work faster we can use the third line:
 
   
 
Sector size (logical/physical): 512 bytes / 4096 bytes
 
Sector size (logical/physical): 512 bytes / 4096 bytes
147行目: 147行目:
 
消去した後にブロックデバイスの暗号化をセットアップしたい場合、データソースとして暗号を使用して消去を行うべきでしょう。最低でも擬似乱数によるデータを使って下さい。
 
消去した後にブロックデバイスの暗号化をセットアップしたい場合、データソースとして暗号を使用して消去を行うべきでしょう。最低でも擬似乱数によるデータを使って下さい。
   
  +
ランダムなデータを使わない場合、ディスクの書き込み速度によって実行時間が変わります。ランダムなデータが必要な場合、ランダムデータを生成するシステムの性能とエントロピーのソースによって実行時間は変わります。
For data that is not truly random your disk's writing speed should be the only limiting factor. If you need random data, the required system performance to generate it may extremely depend on what you choose as source of entropy.
 
   
 
=== ランダムではないデータ ===
 
=== ランダムではないデータ ===
199行目: 199行目:
 
書き込み速度や残り時間を表示するには {{Pkg|pv}} を使用:
 
書き込み速度や残り時間を表示するには {{Pkg|pv}} を使用:
   
# pv --timer --rate /dev/zero > /dev/sd"X"
+
# pv --timer --rate --stop-at-size -s "$(blockdev --getsize64 /dev/sd"XY" )" /dev/zero > /dev/sd"XY"
 
{{Tip|The {{ic|cp}} and the {{ic|cat}} command are the fastest. But as an alternative you can create a small partition in just a few megabytes on the device that need to be wiped and use the {{ic|time}} command in front of them to find out which of them will work faster on your device.}}
 
   
 
=== dd ===
 
=== dd ===
207行目: 205行目:
 
[[Core Utilities#dd]] を参照してください。
 
[[Core Utilities#dd]] を参照してください。
   
  +
{{Warning|以下のコマンドで確認は取られません。実行する前に対象ドライブあるいはパーティションが正しいことをよく確認してください。}}
{{Warning|There is no confirmation regarding the sanity of this command so '''repeatedly check''' that the correct drive or partition has been targeted. Make certain that the {{ic|<nowiki>of=...</nowiki>}} option points to the target drive and not to a system disk.}}
 
   
  +
[[Wikipedia:ja:/dev/zero|/dev/zero]] ストリームを使用してディスク上の全ての領域をゼロバイトで埋める:
Zero-fill the disk by writing a zero byte to every addressable location on the disk using the [[Wikipedia:/dev/zero|/dev/zero]] stream. {{ic|iflag}} and {{ic|oflag}} as below will try to disable buffering, which is senseless for a constant stream.
 
   
# dd if=/dev/zero of=/dev/sdX iflag=nocache oflag=direct bs=4096
+
# dd if=/dev/zero of=/dev/sdX bs=4096
   
もしくは [[Wikipedia:/dev/random|/dev/urandom]] ストリームを使用:
+
もしくは [[乱数生成#/dev/random|/dev/urandom]] ストリームを使用:
 
# dd if=/dev/urandom of=/dev/sdX bs=4096
 
# dd if=/dev/urandom of=/dev/sdX bs=4096
   
229行目: 227行目:
 
=== wipe ===
 
=== wipe ===
   
ファイルの消去に特化しているツールで、arch のリポトリからインストールできます。クイックワイプを実行するには以下のようなコマンドを使用します:
+
ファイルの消去に特化しているツールで、{{Pkg|wipe}} パッケーインストールできます。クイックワイプを実行するには以下のようなコマンドを使用します:
   
 
$ wipe -r -q /path/to/wipe
 
$ wipe -r -q /path/to/wipe
247行目: 245行目:
 
=== Badblocks ===
 
=== Badblocks ===
   
badblocks でディスク消去を行うには、破壊的な [[en2:Badblocks#read-write_Test|read-write テスト]]を実行します:
+
badblocks でディスク消去を行うには、破壊的な [[Badblocks#読み書きテスト (破壊的)|read-write テスト]]を実行します:
   
 
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive>
 
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive>
281行目: 279行目:
 
オペレーティングシステムや実行プログラム、あるいは[[Wikipedia:Journaling file system|ジャーナリングファイルシステム]]は暗号化されていないデータをブロックデバイスの至る所にコピーする可能性があります。暗号化されていないディスクに書き込みを行う場合にのみ関係してきます。
 
オペレーティングシステムや実行プログラム、あるいは[[Wikipedia:Journaling file system|ジャーナリングファイルシステム]]は暗号化されていないデータをブロックデバイスの至る所にコピーする可能性があります。暗号化されていないディスクに書き込みを行う場合にのみ関係してきます。
   
  +
ディスク上のデータの位置を正確に把握することができるのであれば、エントロピープールさえ十分ならランダムデータによる消去は驚くほど高速に行われます。
If the data can get exactly located on the disk and was never copied anywhere else, wiping with random data can be thoroughgoing and impressively quick as long there is enough entropy in the pool.
 
   
 
{{ic|/dev/urandom}} を使って [[Dm-crypt/デバイスの暗号化#キーの管理|LUKS キースロットを消去]]する cryptsetup が良い例です。
 
{{ic|/dev/urandom}} を使って [[Dm-crypt/デバイスの暗号化#キーの管理|LUKS キースロットを消去]]する cryptsetup が良い例です。
303行目: 301行目:
 
==== 残留磁気 ====
 
==== 残留磁気 ====
   
A single, full overwrite with zeros or random data does not lead to any recoverable data on a modern high-density storage device.[http://www.howtogeek.com/115573/htg-explains-why-you-only-have-to-wipe-a-disk-once-to-erase-it/] Indications otherwise refer to single residual bits; reconstruction of byte patterns is generally not feasible.[https://web.archive.org/web/20120102004746/http://www.h-online.com/newsticker/news/item/Secure-deletion-a-single-overwrite-will-do-it-739699.html] See also [https://www.google.com/search?tbs=bks:1&q=isbn:9783540898610], [http://security.stackexchange.com/questions/26132/is-data-remanence-a-myth/26134#26134] and [http://www.nber.org/sys-admin/overwritten-data-guttman.html].
+
最近の高密度なストレージデバイスでは一回ゼロやランダムデータで上書きした時点でデータは全て消去されます [http://www.howtogeek.com/115573/htg-explains-why-you-only-have-to-wipe-a-disk-once-to-erase-it/]。残されたビットからバイトパターンを復元することは基本的に不可能です [https://web.archive.org/web/20120102004746/http://www.h-online.com/newsticker/news/item/Secure-deletion-a-single-overwrite-will-do-it-739699.html][https://www.google.com/search?tbs=bks:1&q=isbn:9783540898610], [http://security.stackexchange.com/questions/26132/is-data-remanence-a-myth/26134#26134], [http://www.nber.org/sys-admin/overwritten-data-guttman.html] も参照してください。
 
Overwriting old magnetic storage devices (e.g. floppy disks, magnetic tape, early-generation hard drives) only once can instead allow the wiped data to be reconstructed by analyzing the measured [[Wikipedia:Remanence|residual magnetics]], due to much lower [[Wikipedia:Memory storage density|memory storage density]]. Such devices can get disassembled in a cleanroom and then analyzed with equipment like a [[Wikipedia:Magnetic force microscope|magnetic force microscope]]. This method of data recovery requires however substantial financial resources. For this reason, it is advisable to overwrite old storage devices multiple times; [[Wikipedia:Degaussing#Degaussing magnetic data storage media|degaussing]] is another practiced countermeasure, and to ensure that data has been completely erased, most resources even advise physical destruction.
 

2017年1月27日 (金) 23:27時点における版

関連記事

ディスクワイプを行うには全てのビットに新しいデータを書き込みます。

ノート: この記事における"ディスク"にはループバックデバイスも含めます。

一般的なユースケース

デバイス上に残っているデータを全て消去

デバイスを完全に、二度と復旧できないように消去する最も一般的な理由としては、デバイスを廃棄するまたは売り飛ばす場合が考えられます。デバイス上に (暗号化されていない) データが残っている可能性を考えると、簡単にデータをとり出される前に対処しておいたほうが良いでしょう。データを盗むことはファイルリカバリソフトウェアなどを使えば朝飯前です。

ディスク上の全てのデータを素早く消去したいという場合、/dev/zero のようなシンプルなパターンを使うのが一番効率がよく、それでいて十分なランダム性を確保できます。詳しくはデータの残留で説明しています。

ビットを全て上書きしてデータを消去すると通常のシステムの機能 (標準の ATA/SCSI コマンドなど) やハードウェアのインターフェイスでリカバリすることはできなくなります。上で述べたようなファイルリカバリソフトウェアがデータを復旧させようとしたら、プロプライエタリなストレージハードウェアの機能を使う必要が出てきます。

HDD の場合、ドキュメントになってないドライブコマンドが存在するとか、デバイスのコントローラやファームウェアを弄って再配置セクタ (S.M.A.R.T. が使用を止めた不良セクタ) を読み出すなどしないかぎり、データの復旧は不可能になります。

ディスク消去には物理ストレージの形式によって様々な問題が存在します。中でもフラッシュメモリデバイスや旧式の磁気ストレージ (古い HDD や、フロッピーディスク、テープなど) は注意する必要があります。

ブロックデバイス暗号化の準備

完全に消去した領域にディスク暗号化を設定したいという場合、暗号強度が高い乱数生成器 (Random Number Generator、以下 RNG と呼称します) による、ランダムデータを使用するべきでしょう。

Wikipedia:Random number generation を参照してください。

警告: ブロックデバイス暗号化が使われているパーティションにランダムなデータや暗号化されたデータ以外が含まれている場合、暗号化ドライブの使用パターンを解析することができ、ファイルシステムレベルの暗号化と大して変わらなくなります。真剣にブロックデバイス暗号化をセットアップしたい場合はランダムではない /dev/zero やシンプルなパターン (badblocks など) を使ってはいけません。

対象の選択

ノート: Fdisk は GPT でフォーマットされたデバイスでは動作しません。代わりに gdisk (gptfdisk) を使って下さい。

fdisk を使うことでユーザーが読み取りアクセスできる全ての読み書きデバイスを見つけることができます。

/dev/sdX などのデバイスで始まる行の出力をチェックしてください。

以下は Linux システムを起動するようにフォーマットされた HDD の例です:

# fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00ff784a

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      206847      102400   83  Linux
/dev/sda2          206848   488397167   244095160   83  Linux

4GB USB メモリードライブに書き込まれた Arch のインストールメディアの例:

# fdisk -l
Disk /dev/sdb: 4075 MB, 4075290624 bytes, 7959552 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x526e236e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           0      802815      401408   17  Hidden HPFS/NTFS

コンピュータの重要なデータが間違って破損してしまうのが心配であれば、仮想環境などの分離された環境 (VirtualBox, VMWare, QEMU など) を使用してディスクドライブを直接接続するか、あるいは消去する必要があるストレージディスクだけを接続してライブメディア (USB, CD, PXE など) から起動してください。

ブロックサイズの選択

Wikipedia:Dd (Unix)#Block size, blocksize io-limits も見て下さい。

Advanced Format のハードドライブを使用している場合、ブロックサイズをデフォルトの512バイトよりも大きく指定することを推奨します。高速に書き換え処理を行うために、あなたの使用しているドライブの物理的なジオメトリにブロックサイズを合わせて下さい。dd コマンドにブロックサイズオプションを追加することで指定できます (例: 4KB の場合 bs=4096)。

fdisk は全てのディスクの物理セクタと論理セクタのサイズを出力します。

もしくは sysfs によっても情報を得ることができます:

/sys/block/sdX/size
/sys/block/sdX/queue/physical_block_size
/sys/block/sdX/queue/logical_block_size
/sys/block/sdX/sdXY/alignment_offset
/sys/block/sdX/sdXY/start
/sys/block/sdX/sdXY/size

消去するブロックを手動で計算

以下では消去するべきデータ領域を決定する例を示します。

A block storage devices contains sectors and a size of a single sector that can be used to calculate the whole size of device in bytes. You can do it by multiplying sectors with size of the sector.

dd コマンドを使ってパーティションを消去するパラメータの例:

# dd if=data_source of=/dev/sdX bs=sector_size count=sector_number seek=partitions_start_sector

Here you will see only a part of output of fdisk -l /dev/sdX with root, showing the example partition information:

Device     Boot      Start        End         Sectors     Size  Id Type
/dev/sdXA            2048         3839711231  3839709184  1,8T  83 Linux
/dev/sdXB            3839711232   3907029167  67317936    32,1G  5 Extended

fdisk の出力の最初の行からディスク容量と論理セクタがわかります:

Disk /dev/sdX: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors

論理セクタのサイズを計算するには echo $((2000398934016 / 3907029168)) を実行するか fdisk の出力の2行目のデータを利用してください:

Units: sectors of 1 * 512 = 512 bytes

物理セクタの計算については3行目を使います:

Sector size (logical/physical): 512 bytes / 4096 bytes

To get disk size in the physical sectors you will need the known disk size in bytes divided with size of a single physical sector echo $((2000398934016 / 4096)), you can get size of the storage device or partition on it even with the blockdev --getsize64 /dev/sd"XY" command.

ノート:
  • In the examples below we will use the logical sector size.
  • You can even wipe unallocated disk space with a dd command by calculating the difference between the end of one and start of the next partition.

/dev/sdXA パーティションを消去する場合、使用する論理セクタのパラメータは以下のようになります:

Start=2048
End=3839711231
BytesInSector=512

seek= オプションでデバイスのパーティションの開始アドレスを使ってください:

# dd if=data_source of=/dev/sd"X" bs=${BytesInSector} count=${End} seek=${Start}

パーティションの名前を使用:

LogicalSectors=3839709184
# dd if=data_source of=/dev/sd"XA" bs=${BytesInSector} count=${LogicalSectors}

もしくは、ディスク全体を消去するには:

AllDiskPhysicalSectors=488378646
PhysicalSectorSizeBytes=4096
# dd if=data_source of=/dev/sd"X" bs=${PhysicalSectorSizeBytes} count=${AllDiskPhysicalSectors} seek=0
ノート: The count= option not necessary when wiping the physical limited area e.g. sd"XY" or sd"X" from begin to the end but will show an error about out of free space when will try to write outside of limits.

データソースの選択

先に述べた通り、重要なデータを消去したいときは、必要に応じて手段を選ぶことができます。

消去した後にブロックデバイスの暗号化をセットアップしたい場合、データソースとして暗号を使用して消去を行うべきでしょう。最低でも擬似乱数によるデータを使って下さい。

ランダムなデータを使わない場合、ディスクの書き込み速度によって実行時間が変わります。ランダムなデータが必要な場合、ランダムデータを生成するシステムの性能とエントロピーのソースによって実行時間は変わります。

ランダムではないデータ

大抵は /dev/zero などのシンプルなパターンで上書きするので安全です。高速にディスク消去をしたい場合は十分でしょう。

警告: 異常に高速にドライブに書き込みが行われる場合、透過圧縮がされている可能性があります。この場合、全てのブロックが消去されるとは限りません。フラッシュメモリデバイスはこの"機能"を持っていることが多々あります。

パターン書き込みのテスト

Badblocks はシンプルなパターンをデバイスのブロックに書き込むことができ、壊れた領域がないか検索してチェックすることができます (memtest86* がメモリで行うのと同じようなテストです)。

アクセス可能なブロック全てにパターンが書き込まれるため、効率的にデバイスを消去することができます。

ランダムデータ

ランダムまたは擬似的にランダムなデータをソースとして使う場合、乱数生成を見て下さい。

ノート: #ランダムではないデータ の警告に書いたようにデバイスが透過的に圧縮している場合、圧縮しづらいデータ (ランダムデータ) は書き込みが遅くなります。しかしながら、ランダムなデータは #データの残留 がありません。最大書き込み速度がボトルネックにならないのであれば、ランダムデータによるディスク消去で残留を完全に無視できます。

暗号データ

フルディスク暗号化用にドライブを準備する際に、高品質なエントロピーを使用する必要はありません。暗号化されたデータストリームを使うことで間に合います。例えば、AES を使ってパーティションを暗号化する場合、ファイルシステムを作成する前に同じ暗号を使っtえディスクを消去することで、使用している領域と空き領域を判断することができなくなります。

対象の上書き

選択したドライブをユーティリティを使って上書きします。都合に合わせて選択してください。単一のファイルだけ削除したい場合、ディスクの完全消去/Tips and tricks#単体ファイルの消去に以下で説明しているユーティリティの追加説明があります。

出力のリダイレクト

出力をリダイレクトすることで空き領域にファイルを作成するだけでなく、デバイスやパーティションを消去することもできます。

以下の例では他のユーティリティの stdout をリダイレクトしてパーティションやブロックデバイスを書き換えています:

$ cat /dev/urandom > /dev/sd"XY"
cat: write error: No space left on device
$ xz -z0 /dev/urandom -c > /dev/sd"XY"
xz: (stdout): Write error: No space left on device
$ dd if=/dev/urandom > /dev/sd"XY"
dd: writing to ‘standard output’: No space left on device
20481+0 records in
20480+0 records out
10485760 bytes (10 MB) copied, 2.29914 s, 4.6 MB/s

ファイルコピーコマンド cp でもデバイスを書き換えられます:

$ cp /dev/urandom /dev/sd"XY"
 cp: error writing ‘/dev/sd"XY"’: No space left on device
 cp: failed to extend ‘/dev/sd"XY"’: No space left on device

書き込み速度や残り時間を表示するには pv を使用:

# pv --timer --rate --stop-at-size -s "$(blockdev --getsize64 /dev/sd"XY" )" /dev/zero > /dev/sd"XY"

dd

Core Utilities#dd を参照してください。

警告: 以下のコマンドで確認は取られません。実行する前に対象ドライブあるいはパーティションが正しいことをよく確認してください。

/dev/zero ストリームを使用してディスク上の全ての領域をゼロバイトで埋める:

# dd if=/dev/zero of=/dev/sdX bs=4096

もしくは /dev/urandom ストリームを使用:

# dd if=/dev/urandom of=/dev/sdX bs=4096

dd が No space left on device と報告したら処理は完了です:

dd: writing to ‘/dev/sdb’: No space left on device
7959553+0 records in
7959552+0 records out
4075290624 bytes (4.1 GB) copied, 1247.7 s, 3.3 MB/s

巨大なドライブを高速に消去する方法は、以下を見て下さい:

wipe

ファイルの消去に特化しているツールで、wipe パッケージでインストールできます。クイックワイプを実行するには以下のようなコマンドを使用します:

$ wipe -r -q /path/to/wipe

参照: man ページ

shred

shred個別のファイルやデバイスを安全に消去することができる Unix コマンドです。たとえ特殊な機械を使っても復元するのは難しく、あるいは不可能になります。shred は3つのパスを使って、擬似乱数データをデバイスに書き込みます。パスは増やしたり減らしたりできます。

以下のコマンドはデフォルト設定で shred を実行して進捗を表示します:

# shred -v /dev/sdX

もしくは /dev/urandom のエントロピーだけを使って1つのパスで shred を実行することも可能です:

# shred --verbose --random-source=/dev/urandom -n1 /dev/sdX

Badblocks

badblocks でディスク消去を行うには、破壊的な read-write テストを実行します:

# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive>

hdparm

警告: USB で接続したデバイスで Secure Erase ATA コマンドを実行してはいけません。詳しくは https://ata.wiki.kernel.org/index.php/ATA_Secure_Erasehttp://www.tomshardware.co.uk/answers/id-1984547/secure-erase-external-usb-hard-drive.html を参照。

hdparmATA Secure Erase をサポートしています。これはディスクをゼロで埋めるのと機能的には同一です。ただし、ハードドライブのファームウェアによって処理されるのが違っていて、"隠しデータ領域"も含まれます。そのため、今日における"ローレベルフォーマット"コマンドとして考えても良いでしょう。このコマンドを実行することで SSD ドライブは生産時のパフォーマンスを発揮することができると言われていますが、十分な消去とまでは言えない可能性もあります (#フラッシュメモリを参照)。

ドライブによっては、メーカーによって定義されたパターンを使用する Enhanced Secure Erase がサポートされていることがあります。hdparm -I の出力で Enhanced 消去が利用できると表示される場合、デバイスにはハードウェア暗号化機能が備わっており、消去は暗号鍵だけで実行されます。

ATA Secure Erase の使用法に関する詳細はソリッドステートドライブ/メモリセルの消去Linux ATA wiki を見て下さい。

secure-delete

AURsecure-deleteAUR パッケージには安全な消去のためのユーティリティが複数含まれています。例えば sfill は特定のマウントポイントの空き領域だけを消去します。例:

# sfill -v /

詳しくは ツールのリスト を見て下さい。

データの残留

Wikipedia:Data remanence を参照してください。

たとえデータの削除・消去を行った後でも、データが残留している可能性は存在します。

一回だけでなく複数回、繰り返しディスクに(ランダムな)データを書き込むことで残留データを消去できるかもしれませんが、複数回書き換えることでハードディスクドライブのデータを復元できる可能性が劇的に減るわけではありません。#残留磁気を見て下さい。

オペレーティングシステム、プログラム、ファイルシステム

オペレーティングシステムや実行プログラム、あるいはジャーナリングファイルシステムは暗号化されていないデータをブロックデバイスの至る所にコピーする可能性があります。暗号化されていないディスクに書き込みを行う場合にのみ関係してきます。

ディスク上のデータの位置を正確に把握することができるのであれば、エントロピープールさえ十分ならランダムデータによる消去は驚くほど高速に行われます。

/dev/urandom を使って LUKS キースロットを消去する cryptsetup が良い例です。

ハードウェア特有の問題

フラッシュメモリ

ライトアンプリフィケーションなどの機能があるために、フラッシュメモリを完全に消去するのは厄介です。デバイスのコントローラチップから見えるデータと、オペレーティングシステムから見えるデータの間には、透過的な抽象レイヤーが多数存在しており、データの書き込まれる場所が食い違っているために、特定のブロックやファイルを消去したとしても確実にデータが書き換えられているとは限りません。

(SandForce の全ての SSD に搭載されている) 透過圧縮などの"機能"は /dev/zero などのパターンストリームを圧縮してしまうことがあり、信じられないほど速く消去が終わってしまった場合、圧縮されてしまっている可能性があります。

Flash メモリデバイスを解体して、チップのハンダ付けを取り除き、中に入っているコントローラを使わずにデータの中身を解析することは 単純なハードウェア だけで簡単に行えてしまいます。データ復旧会社は安価にこれをしています。

詳細は次を参照: Reliably Erasing Data From Flash-Based Solid State Drives

不良セクタ

ハードドライブが不良セクタを認識すると、セクタへのアクセスが遮断され、ソフトウェアからはその領域に書き込みできなくなります。それによって、完全な書き換えがその領域にまで及ばない可能性があります。ただし、ブロックサイズから考えて、理論上、その領域からリカバリできるサイズはあくまで数 KB ほどしかありません。

残留磁気

最近の高密度なストレージデバイスでは一回ゼロやランダムデータで上書きした時点でデータは全て消去されます [1]。残されたビットからバイトパターンを復元することは基本的に不可能です [2][3], [4], [5] も参照してください。