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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:セキュリティ Category:ファイルシステム en:Securely wipe disk {{Related articles start}} {{Related|ファイルリカバリ}} {{Related3...」)
 
(他言語へのリンクを追加)
 
(5人の利用者による、間の24版が非表示)
2行目: 2行目:
 
[[Category:ファイルシステム]]
 
[[Category:ファイルシステム]]
 
[[en:Securely wipe disk]]
 
[[en:Securely wipe disk]]
  +
[[es:Securely wipe disk]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|ディスクの完全消去/ヒントとテクニック}}
 
{{Related|ファイルリカバリ}}
 
{{Related|ファイルリカバリ}}
{{Related3|Benchmarking disk wipes|ディスク消去のベンチマーク}}
+
{{Related2|ベンチマーク/データストレージデバイス|ディスク消去のベンチマーク}}
{{Related4|Frandom}}
+
{{Related|Frandom}}
 
{{Related|ディスク暗号化#ディスクの準備}}
 
{{Related|ディスク暗号化#ディスクの準備}}
 
{{Related|dm-crypt}}
 
{{Related|dm-crypt}}
 
{{Related articles end}}
 
{{Related articles end}}
ディスクワイプを行うにてのビットに新しいデータを書き込ます。
+
ディスクワイプは、すべてのビットに新しいデータを書き込むことによって行われます。
   
{{Note|この記事における"ディスク"にはループバックデバイスも含めます。}}
+
{{Tip|この記事における"ディスク"にはループバックデバイスも含めます。}}
   
 
== 一般的なユースケース ==
 
== 一般的なユースケース ==
  +
 
=== デバイス上に残っているデータを全て消去 ===
 
=== デバイス上に残っているデータを全て消去 ===
デバイスを完全に、二度と復旧できないように消去する最も一般的な理由としては、デバイスを廃棄するまたは売り飛ばす場合が考えられます。デバイス上に (暗号化されていない) データが残っている可能性を考えると、簡単にデータをとり出される前に対処しておいたほうが良いでしょう。データを盗むことは[[ファイルリカバリ]]ソフトウェアなどを使えば朝飯前です。
 
   
  +
デバイスを完全に、二度と復旧できないように消去する最も一般的な理由としては、デバイスを廃棄するまたは売り飛ばす場合が考えられます。デバイス上に (暗号化されていない) データが残っている可能性を考えると、簡単にデータをとり出される前に対処しておいたほうが良いでしょう。データを盗むことは [[ファイルリカバリ]] ソフトウェアなどを使えば朝飯前です。
ディスク上の全てのデータを素早く消去したいという場合、{{ic|/dev/zero}} のようなシンプルなパターンを使うのが一番効率がよく、それでいて十分なランダム性を確保できます。詳しくは[[#データの残留|データの残留]]で説明しています。
 
  +
  +
ディスク上の全てのデータを素早く消去したいという場合、{{ic|/dev/zero}} のようなシンプルなパターンを使うのが一番効率がよく、それでいて十分なランダム性を確保できます。詳しくは [[#データの残存性|データの残存性]] で説明しています。
   
 
ビットを全て上書きしてデータを消去すると通常のシステムの機能 (標準の ATA/SCSI コマンドなど) やハードウェアのインターフェイスでリカバリすることはできなくなります。上で述べたようなファイルリカバリソフトウェアがデータを復旧させようとしたら、プロプライエタリなストレージハードウェアの機能を使う必要が出てきます。
 
ビットを全て上書きしてデータを消去すると通常のシステムの機能 (標準の ATA/SCSI コマンドなど) やハードウェアのインターフェイスでリカバリすることはできなくなります。上で述べたようなファイルリカバリソフトウェアがデータを復旧させようとしたら、プロプライエタリなストレージハードウェアの機能を使う必要が出てきます。
26行目: 30行目:
   
 
=== ブロックデバイス暗号化の準備 ===
 
=== ブロックデバイス暗号化の準備 ===
  +
完全に消去した領域に[[ディスク暗号化#ブロックデバイスの暗号化|ディスク暗号化]]を設定したいという場合、暗号強度が高い乱数生成器 (Random Number Generator、以下 RNG と呼称します) による、[[#ランダムデータ|ランダムデータ]]を使用するべきでしょう。
 
  +
完全に消去した領域に [[ディスク暗号化#ブロックデバイスの暗号化|ディスク暗号化]] を設定したいという場合、暗号強度が高い乱数生成器 (Random Number Generator、以下 RNG と呼称します) による、[[#ランダムデータ|ランダムデータ]]を使用するべきでしょう。
   
 
[[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!}}
 
  +
  +
== データの残存性 ==
  +
  +
[[Wikipedia:ja:データの完全消去|データの完全消去]] も参照。データを削除したり消去したりしようとした後でも、データの表現が残っていることがあります。
  +
  +
=== オペレーティングシステム、プログラム、およびファイルシステム ===
  +
  +
オペレーティングシステム、実行されるプログラム、[[Wikipedia:ja:ジャーナリングファイルシステム|ジャーナリングファイルシステム]] は暗号化されていないデータをブロックデバイス全体にコピーする可能性があります。プレーンディスクに書き込む場合、これは上記のいずれかと関連している場合に限ります。
  +
  +
データがディスク上に正確に配置され、他の場所にコピーされていない場合、プールに十分なエントロピーがある限り、ランダムデータによるワイプは徹底的かつ驚くほど迅速に実行できます。
  +
  +
良い例は、{{ic|/dev/urandom}} を使用した [[dm-crypt/デバイスの暗号化#キーの管理|LUKS キースロットの消去]] を使用した cryptsetup です。
  +
  +
=== ハードウェア固有の問題 ===
  +
  +
==== フラッシュメモリー ====
  +
  +
[[Wikipedia:ja:ライトアンプリフィケーション|ライトアンプリフィケーション]] などの特性により、SSD を含むフラッシュメモリは信頼性の高いワイプの対象としては頑強なものとなっています。
  +
デバイスのコントローラチップとオペレーティングシステムから見たデータの間には、多くの透明な抽象化が存在するため、光景データがその場で上書きされることはなく、特定のブロックやファイルをワイプすることは信頼性がありません。
  +
  +
透過的な圧縮 (すべての SandForce SSD) などの他の "機能" は、ゼロまたは反復パターンを圧縮できるため、消去が信じられないほど高速である場合、これが原因である可能性があります。
  +
  +
[http://www.flash-extractor.com/manual/reader_models/ シンプルなハードウェア] を使用すると、コントローラを介さずにフラッシュ メモリデバイスを分解し、チップのはんだを外し、データコンテンツを分析することが問題なく実行できます。データ復旧会社は安いお金でそれを行います。
  +
  +
詳細については、次を参照してください:
  +
  +
* [[ソリッドステートドライブ/メモリセルの消去]]
  +
* [https://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf フラッシュベースのソリッドステートドライブから確実にデータを消去]
  +
* [[ディスクの完全消去#ターゲットを選択|ターゲットを選択]]
  +
  +
==== マークされた不良セクタ ====
  +
  +
ハードディスクは、あるセクターを不良と判断すると、その部分をコードで封鎖し、ソフトウェアでの書き込みを不可能にします。そのため、完全な上書きをすることはできません。しかし、ブロックサイズの関係で、これらのセクションは理論上回復可能な数キロバイトにしかならない。
  +
  +
==== 残留磁気 ====
  +
  +
ゼロやランダムなデータで1回だけ完全に上書きしても、最近の高密度ストレージデバイスでは復元可能なデータにはなりません。この操作を繰り返すことは、現在では必要ないことに注意してください。[https://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]、[https://security.stackexchange.com/questions/26132/is-data-remanence-a-myth/26134#26134]、[https://www.nber.org/sys-admin/overwritten-data-guttman.html]を参照してください。
   
 
== 対象の選択 ==
 
== 対象の選択 ==
{{Note|Fdisk will not work on [[GUID Partition Table|GPT]] formatted devices. Use gdisk ({{Pkg|gptfdisk}}) instead.}}
+
{{Note|Fdisk [[GUID Partition Table|GPT]] でフォーマットされたデバイスでは動作しません。代わりに gdisk ({{Pkg|gptfdisk}}) を使って下さい。}}
  +
fdisk を使うことでユーザーが読み取りアクセスできる全ての読み書きデバイスを見つけることができます。
Use fdisk to locate all read/write devices the user has read acess to.
 
   
  +
{{ic|/dev/sdX}} などのデバイスで始まる行の出力をチェックしてください。
Check the output for lines that start with devices such as {{ic|/dev/sdX}}.
 
   
  +
以下は Linux システムを起動するようにフォーマットされた HDD の例です:
This is an example for a HDD formatted to boot a linux system:
 
   
 
{{hc|# fdisk -l|<nowiki>Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors
 
{{hc|# fdisk -l|<nowiki>Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors
50行目: 92行目:
 
/dev/sda2 206848 488397167 244095160 83 Linux</nowiki>}}
 
/dev/sda2 206848 488397167 244095160 83 Linux</nowiki>}}
   
  +
4GB USB メモリードライブに書き込まれた Arch のインストールメディアの例:
Or the Arch Install Medium written to a 4GB USB thumb drive:
 
   
 
{{hc|# fdisk -l|<nowiki>Disk /dev/sdb: 4075 MB, 4075290624 bytes, 7959552 sectors
 
{{hc|# fdisk -l|<nowiki>Disk /dev/sdb: 4075 MB, 4075290624 bytes, 7959552 sectors
61行目: 103行目:
 
/dev/sdb1 * 0 802815 401408 17 Hidden HPFS/NTFS</nowiki>}}
 
/dev/sdb1 * 0 802815 401408 17 Hidden HPFS/NTFS</nowiki>}}
   
  +
コンピュータの重要なデータが間違って破損してしまうのが心配であれば、仮想環境などの分離された環境 (VirtualBox, VMWare, QEMU など) を使用してディスクドライブを直接接続するか、あるいは消去する必要があるストレージディスクだけを接続して[[Archiso|ライブメディア]] (USB, CD, PXE など) から起動してください。
If you are worried about unintentional damage of important data on the primary computer, consider using an isolated environment such as a virtual environment (VirtualBox, VMWare, QEMU, etc...) with direct connected disk drives to it or a single computer only with a storage disk(s) that need to be wiped booted from a [[Archiso|Live Media]](USB, CD, PXE, etc...).
 
   
 
== ブロックサイズの選択 ==
 
== ブロックサイズの選択 ==
   
See also [[Wikipedia:Dd (Unix)#Block size]], [http://people.redhat.com/msnitzer/docs/io-limits.txt blocksize io-limits].
+
[[Wikipedia:Dd (Unix)#Block size]], [https://people.redhat.com/msnitzer/docs/io-limits.txt blocksize io-limits] も見て下さい。
   
  +
[[Advanced Format]] のハードドライブを使用している場合、ブロックサイズをデフォルトの512バイトよりも大きく指定することを推奨します。高速に書き換え処理を行うために、あなたの使用しているドライブの物理的なジオメトリにブロックサイズを合わせて下さい。''dd'' コマンドにブロックサイズオプションを追加することで指定できます (例: 4KB の場合 {{ic|<nowiki>bs=4096</nowiki>}})
If you have a [[Wikipedia:Advanced Format|Advanced Format]] hard drive it is recommended that you specify a block size larger than the default 512 bytes. To speed up the overwriting process choose a block size matching your drive's physical geometry by appending the block size option to the ''dd'' command (i.e. {{ic|<nowiki>bs=4096</nowiki>}} for 4KB).
 
   
  +
''fdisk'' は全てのディスクの物理セクタと論理セクタのサイズを出力します。
''fdisk'' prints physical and logical sector size for every disk.
 
   
  +
もしくは sysfs によっても情報を得ることができます:
Alternatively sysfs does expose information:
 
 
/sys/block/sdX/size
 
/sys/block/sdX/size
 
/sys/block/sdX/queue/physical_block_size
 
/sys/block/sdX/queue/physical_block_size
81行目: 123行目:
 
=== 消去するブロックを手動で計算 ===
 
=== 消去するブロックを手動で計算 ===
   
  +
以下では消去するべきデータ領域を決定する例を示します。
In the following the determination of the data area to wipe is done in an example.
 
   
  +
ブロックストレージデバイスにはセクタがあり、1つのセクタのサイズはデバイス全体のサイズをバイト単位で計算するために使用することができます。セクタとセクタの大きさを掛け合わせることで計算できます。
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''
   
  +
ここでは、root で {{ic|fdisk -l /dev/sdX}} の出力の一部だけを表示し、パーティション情報の例を示しています。
Here you will see only a part of output of {{ic|fdisk -l /dev/sdX}} with root, showing the example partition information:
 
   
 
{{bc|Device Boot Start End Sectors Size Id Type
 
{{bc|Device Boot Start End Sectors Size Id Type
96行目: 138行目:
 
}}
 
}}
   
  +
''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
   
  +
ディスクサイズを物理セクタ単位で取得するには、既知のディスクサイズをバイト単位で1物理セクタのサイズに分割する必要があります {{ic|echo $((2000398934016 / 4096))}}, {{ic|blockdev --getsize64 /dev/sd "XY"}} コマンドでもストレージデバイスやパーティションのサイズを取得することができます。
To get size in the physical sectors you will need the known disk size in bytes divided with physical sectors {{ic|echo $((2000398934016 / 4096))}}, you can get size of the storage device or partition on it even with the {{ic|blockdev --getsize64 /dev/sdX(Y)}} command.
 
   
  +
{{Note|
{{Note|In the examples below we will use the logical sector size.}}
 
  +
* 以下の例では、論理セクタサイズを使用します。
  +
* 1つのパーティションの終わりと次のパーティションの始まりの差を計算することで、{{ic|dd}} コマンドで未割り当てのディスク領域を消去することも可能です。
  +
}}
   
  +
{{ic|/dev/sdXA}} パーティションを消去する場合、使用する論理セクタのパラメータは以下のようになります:
To wipe partition {{ic|/dev/sdXA}} the example parameters with logical sectors would be used like this:
 
   
  +
{{bc|1=Start=2048
# dd if=''data_source'' of=/dev/sdXA bs=512 count=3839709184 seek=2048
 
  +
End=3839711231
  +
BytesInSector=512}}
   
  +
{{ic|1=seek=}} オプションでデバイスのパーティションの開始アドレスを使ってください:
Or, to wipe the whole disk ({{ic|1=count=}} optional):
 
   
# dd if=''data_source'' of=/dev/sdX bs=512 count=3907029168 seek=0
+
# dd if=''data_source'' of=/dev/sd"X" bs=${BytesInSector} count=${End} seek=${Start}
   
  +
パーティションの名前を使用:
{{Warning|Without {{ic|1=count=}} or if {{ic|1=count=}} miss-configured to point outside of the possible size, it will show an error that the devices is ended and no future writes are possible when it comes to the end of it.}}
 
   
  +
{{bc|1=LogicalSectors=3839709184}}
== データソースの選択 ==
 
   
  +
# dd if=''data_source'' of=/dev/sd"XA" bs=${BytesInSector} count=${LogicalSectors}
As just said If you want to wipe sensitive data you can use anything matching your needs.
 
   
  +
もしくは、ディスク全体を消去するには:
If you want to setup block device encryption afterwards, you should always wipe at least with an encryption cipher as source or even pseudorandom data.
 
   
  +
{{bc|1=AllDiskPhysicalSectors=488378646
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.
 
  +
PhysicalSectorSizeBytes=4096}}
   
  +
# dd if=''data_source'' of=/dev/sd"X" bs=${PhysicalSectorSizeBytes} count=${AllDiskPhysicalSectors} seek=0
{{Note|Everything regarding [[Benchmarking disk wipes]] should get merged there.}}
 
   
  +
{{Note|物理的に限られた領域、例えば {{ic|sd "XY"}} や {{ic|sd "X"}} を最初から最後まで消去する場合は {{ic|1=count=}} オプションは必要ありませんが、制限外の書き込みをしようとすると空き容量不足のエラーが表示されることがあります。}}
=== ランダムではないデータ ===
 
Overwriting with {{ic|/dev/zero}} or simple patterns is considered secure in most resources. In the case of current HDD's it should be sufficient for fast disk wipes.
 
   
  +
== データソースを選択 ==
{{Warning|A drive that is abnormally fast in writing patterns or zeroing could be doing transparent compression. It is obviously presumable not all blocks get wiped this way. Some [[#Flash memory]] devices do "feature" that.}}
 
   
  +
機密データを消去するために、ニーズに合わせて任意のデータパターンを使用することができます。
==== パターン書き込みのテスト ====
 
[[#Badblocks]] can write simple patterns to every block of a device and then read and check them searching for damaged areas (just like memtest86* does with memory).
 
   
  +
=== ゼロ ===
As the pattern is written to every accesible block this effectively wipes the device.
 
   
  +
{{ic|/dev/zero}} や単純なパターンによる上書きは、ほとんどの状況で安全であると考えられています。今日のHDDでは、ディスクの消去には適切で高速だと判断されます。
=== ランダムデータ ===
 
   
  +
しかし、書き込みパターンや0化が異常に速いドライブは、透過的圧縮を行っている可能性があります。すべてのブロックがこの方法で消去されるわけではないことは明らかです。一部の [[ディスクの完全消去#フラッシュメモリー|フラッシュメモリー]] デバイスでは、そのような "機能" を備えています。
For differences between random and pseudorandom data as source, please see [[Random number generation]].
 
   
  +
その後、ブロックデバイスの暗号化を設定するには、暗号化を弱めないようにランダムなデータで領域を消去する必要があります (次章参照)
{{Note|Data that is hard to compress (random data) will get written slower, if the drive logic mentioned in the [[#Unrandom data]] warning tries compressing it. This should not lead to [[#Data remanence]] though. As maximum write-speed is not the performance-bottleneck it can get completely neglected while wiping disks with random data.}}
 
  +
  +
{{Warning|圧縮の対象であり、フラッシュメモリや SSD との併用に注意が必要、ブロック暗号化準備には上記の通り避けるべきです。}}
  +
  +
=== ランダムデータ ===
   
  +
{{ic|/dev/random}} を使った真のランダムデータソースは、エントロピー生成を待つのに時間がかかりすぎるため、大容量のワイプには非現実的です。{{ic|/dev/urandom}} は擬似ランダムデータの妥当なソースとして使うことができます。ソースとしてのランダムデータと擬似ランダムデータの違いについては、[[乱数生成]] を参照してください。
=== 暗号データ ===
 
   
  +
疑似ランダムデータ生成のもう一つの方法は、暗号化されたデータストリームを使用することである。例えば、ブロック暗号化用のデバイスを用意し、暗号化パーティションに AES を使用する場合、ファイルシステムを作成する前に同様の暗号で消去し、空き領域が使用領域と区別できないようにすることが適切です。
When preparing a drive for full-disk encryption, sourcing high quality entropy is usually not necessary. The alternative is to use an encrypted datastream. For example, if you will use AES for your encrypted partition, you would wipe it with an equivalent encryption cipher prior to creating the filesystem to make the empty space not distinguishable from the used space.
 
   
 
== 対象の上書き ==
 
== 対象の上書き ==
   
選択したドライブをユーティリティを使って上書きします。都合に合わせて選択してください。
+
選択したドライブをユーティリティを使って上書きします。都合に合わせて選択してください。単一のファイルだけ削除したい場合、[[ディスクの完全消去/ヒントとテクニック#単体ファイルの消去]] に以下で説明しているユーティリティの追加説明があります
   
=== dd ===
+
=== 出力のリダイレクト ===
   
  +
出力をリダイレクトすることで空き領域にファイルを作成するだけでなく、デバイスやパーティションを消去することもできます。
[[Core utilities#dd]] を参照してください。
 
   
  +
以下の例では他のユーティリティの [http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html stdout] をリダイレクトしてパーティションやブロックデバイスを書き換えています:
{{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.}}
 
   
  +
{{hc|$ cat /dev/urandom > /dev/sd"XY"|
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.
 
  +
cat: write error: No space left on device}}
   
  +
{{hc|$ xz -z0 /dev/urandom -c > /dev/sd"XY"|
# dd if=/dev/zero of=/dev/sdX iflag=nocache oflag=direct bs=4096
 
  +
xz: (stdout): Write error: No space left on device}}
   
  +
{{hc|1=$ dd if=/dev/urandom > /dev/sd"XY"|2=
Or the [[Wikipedia:/dev/random|/dev/urandom]] stream:
 
  +
dd: writing to ‘standard output’: No space left on device
# dd if=/dev/urandom of=/dev/sdX bs=4096
 
  +
20481+0 records in
  +
20480+0 records out
  +
10485760 bytes (10 MB) copied, 2.29914 s, 4.6 MB/s}}
   
  +
ファイルコピーコマンド {{ic|cp}} でもデバイスを書き換えられます:
The process is finished when dd reports, {{ic|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
 
   
  +
{{hc|$ 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}}
   
  +
書き込み速度や残り時間を表示するには {{Pkg|pv}} を使用:
Get the number of sectors ({{ic|NUM_BLOCKS}}), the sector size ({{ic|LOGIC_BLOCK_SIZE}}) and (optionally) total disk size in bytes ({{ic|DISK_SIZE}}), of the device to be wiped:
 
# fdisk -l /dev/sdX
 
Disk /dev/sdX: 21,5 GiB, '''23045603328''' bytes, '''45010944''' 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
 
   
  +
# pv --timer --rate --stop-at-size -s "$(blockdev --getsize64 /dev/sd"XY" )" /dev/zero > /dev/sd"XY"
and use them in the following command to randomize the drive/partition using a randomly-seeded AES cipher from [[OpenSSL]] (displaying the optional progress meter with {{Pkg|pv}}):
 
 
# openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt </dev/zero \
 
| pv -bartpes <DISK_SIZE> | dd bs=<LOGIC_BLOCK_SIZE> count=<NUM_BLOCKS> of=/dev/sdX
 
   
  +
=== dd ===
The command above creates a 128 byte encryption key seeded from {{ic|/dev/urandom}}. AES-256 in CTR mode is used to encrypt {{ic|/dev/zero}}'s output with the urandom key. Utilizing the cipher instead of a pseudorandom source results in very high write speeds and the result is a device filled with AES ciphertext.
 
   
  +
[[Core Utilities#dd]] を参照してください。
See also [[Dm-crypt/Drive preparation#dm-crypt wipe before installation]] for a similar approach.
 
   
  +
{{Warning|以下のコマンドで確認は取られません。実行する前に対象ドライブあるいはパーティションが正しいことをよく確認してください。}}
=== shred ===
 
   
  +
[[Wikipedia:ja:/dev/zero|/dev/zero]] ストリームを使用してディスク上の全ての領域をゼロバイトで埋める:
[https://www.gnu.org/software/coreutils/manual/html_node/shred-invocation.html ''shred''] is a Unix command that can be used to securely delete individual files or full devices so that they can be recovered only with great difficulty with specialised hardware, if at all. ''shred'' uses three passes, writing [[Random number generation|pseudo-random data]] to the device during each pass. This can be reduced or increased.
 
   
  +
# dd if=/dev/zero of=/dev/sdX bs=4096
The following command invokes shred with its default settings and displays the progress.
 
# shred -v /dev/sd''X''
 
   
  +
もしくは [[乱数生成#/dev/random|/dev/urandom]] ストリームを使用:
Alternatively, shred can be instructed to do only one pass, with entropy from e.g. {{ic|/dev/urandom}}.
 
# shred --verbose --random-source=/dev/urandom -n1 /dev/sd''X''
+
# dd if=/dev/urandom of=/dev/sdX bs=4096
   
  +
dd が {{ic|No space left on device}} と報告したら処理は完了です:
=== Badblocks ===
 
  +
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
   
  +
巨大なドライブを高速に消去する方法は、以下を見て下さい:
For letting badblocks perform a disk wipe, a destructive [[Badblocks#read-write_Test|read-write test]] has to be done:
 
  +
* [[ディスクの完全消去/ヒントとテクニック#dd - 高度な例]]では OpenSSL を使用します。
  +
* [[ディスクの完全消去/ヒントとテクニック#テンプレートファイルを使う]]ではランダムではないデータによって高速にデータを消去します。
  +
* [[Dm-crypt/ドライブの準備#インストール前に dm-crypt で消去]]では dm-crypt を使います。
   
  +
=== wipe ===
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive>
 
   
  +
ファイルの消去に特化しているツールで、{{Pkg|wipe}} パッケージでインストールできます。クイックワイプを実行するには以下のようなコマンドを使用します:
=== hdparm ===
 
   
  +
$ wipe -r -q /path/to/wipe
[[hdparm]] supports [http://tinyapps.org/docs/wipe_drives_hdparm.html ATA Secure Erase], which is functionally equivalent to zero-filling a disk. It is however handled by the hard-drive firmware itself, and includes "hidden data areas". As such, it can be seen as a modern-day "low-level format" command. [[SSD]] drives reportedly achieve factory performance after issuing this command, but may not be sufficiently wiped (see [[#Flash_memory]]).
 
   
  +
参照: [https://linux.die.net/man/1/wipe man ページ]
Some drives support '''Enhanced Secure Erase''', which uses distinct patterns defined by the manufacturer. If the output of {{ic|hdparm -I}} for the device indicates a manifold time advantage for the '''Enhanced''' erasure, the device probably has a hardware encryption feature and the wipe will be performed to the encryption keys only.
 
   
  +
=== shred ===
For detailed instructions on using ATA Secure Erase, see the [https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase Linux ATA wiki].
 
   
  +
[https://www.gnu.org/software/coreutils/manual/html_node/shred-invocation.html ''shred''] は[[#対象の上書き|個別のファイル]]やデバイスを安全に消去することができる Unix コマンドです。たとえ特殊な機械を使っても復元するのは難しく、あるいは不可能になります。''shred'' は3つのパスを使って、[[乱数生成|擬似乱数データ]]をデバイスに書き込みます。パスは増やしたり減らしたりできます。
=== secure-delete ===
 
   
  +
以下のコマンドはデフォルト設定で shred を実行して進捗を表示します:
The {{AUR|secure-delete}} package from [[AUR]] provides several utilites for secure erasion, including {{ic|sfill}}, which deletes only free space in a specified mount. For example:
 
  +
# shred -v /dev/sd''X''
   
  +
もしくは {{ic|/dev/urandom}} のエントロピーだけを使って1つのパスで shred を実行することも可能です:
# sfill -v /
 
  +
# shred --verbose --random-source=/dev/urandom -n1 /dev/sd''X''
   
  +
=== scrub ===
See [http://superuser.com/questions/19326/how-to-wipe-free-disk-space-in-linux the tools list] for more info.
 
   
  +
[https://github.com/chaos/scrub ''scrub''] は、データの取得をより困難にするために、ファイルまたはディスクデバイスにパターンを繰り返し書き込みます。
== データの残留 ==
 
   
  +
次のコマンドは、モード 1 のデフォルト設定でスクラブを呼び出し、NNSA ポリシーレター NAP-14.x に準拠したパターンを使用してターゲットデバイスを上書きします。これが最も効果的な方法です。
[[Wikipedia:Data remanence]] を参照してください。
 
   
  +
$ scrub /dev/sd''X''
The residual representation of data may remain even after attempts have been made to remove or erase the data.
 
   
  +
次のコマンドは、モード 2 のデフォルト設定でスクラブを呼び出し、NNSA ポリシーレター NAP-14.x に準拠したパターンを使用してターゲットファイルを上書きし、書き込まれたバイトを切り捨てて最後のファイルシステムブロックを埋めます。このモードには注意事項があります。詳細については、[https://linux.die.net/man/1/scrub ''manual''] を参照してください。
Residual data may get wiped by writing (random) data to the disk with a single or even more than one iteration. However, more than one iteration may not significantly decrease the possibility to reconstruct the data of hard disk drives. See [[#Residual magnetism]].
 
   
  +
$ scrub /path/to/''file'' # where ''file'' is a regular file
=== オペレーティングシステム、プログラム、ファイルシステム ===
 
   
  +
次のコマンドは、モード 3 のデフォルト設定でスクラブを呼び出し、ディレクトリを作成し、ファイルシステムがいっぱいになるまでそのディレクトリにファイルを埋め込みます。次に、NNSA ポリシーレター NAP-14.x に準拠したパターンを使用してファイルが scrub され、書き込まれたバイトが丸められて最後のファイルシステムブロックが埋められます。このモードには注意事項があります。詳細については、[https://linux.die.net/man/1/scrub ''manual''] を参照してください。
The operating system, executed programs or [[Wikipedia:Journaling file system|journaling file system]]s may copy your unencrypted data throughout the block device. When writing to plain disks this should only be relevant in conjunction with one of the above.
 
   
  +
$ scrub /path/to/''dir'' # where ''dir'' is a new directory name.
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.
 
   
  +
詳しい使用方法と情報については、[https://linux.die.net/man/1/scrub ''manual''] を参照してください。
A good example is cryptsetup using /dev/urandom for [[Dm-crypt/Device encryption#Keyslot_management|wiping the LUKS keyslots]].
 
   
  +
=== Badblocks ===
=== ハードウェア特有の問題 ===
 
   
  +
badblocks でディスク消去を行うには、破壊的な [[Badblocks#読み書きテスト (破壊的)|read-write テスト]]を実行します:
==== フラッシュメモリ ====
 
   
  +
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive>
[[Wikipedia:Write amplification|Write amplification]] and other characteristics make Flash memory a stubborn target for reliable wiping.
 
As there is a lot of transparent abstraction in between data as seen by a device's controller chip and the operating system sight data is never overwritten in place and wiping particular blocks or files is not reliable.
 
   
  +
=== hdparm ===
Other "features" like transparent compression (all SandForce SSD's) can compress your /dev/zero or pattern stream so if wiping is fast beyond belief this might be the case.
 
   
  +
{{warning|USB で接続したデバイスで Secure Erase ATA コマンドを実行してはいけません。詳しくは https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase や http://www.tomshardware.co.uk/answers/id-1984547/secure-erase-external-usb-hard-drive.html を参照。}}
Disassembling Flash memory devices, unsoldering the chips and analyzing data content without the controller in between is feasible without difficulty using [http://www.flash-extractor.com/manual/reader_models/ simple hardware]. Data recovery companys do it for cheap money.
 
   
  +
[[hdparm]] は [http://tinyapps.org/docs/wipe_drives_hdparm.html ATA Secure Erase] をサポートしています。これはディスクをゼロで埋めるのと機能的には同一です。ただし、ハードドライブのファームウェアによって処理されるのが違っていて、"隠しデータ領域"も含まれます。そのため、今日における"ローレベルフォーマット"コマンドとして考えても良いでしょう。このコマンドを実行することで [[SSD]] ドライブは生産時のパフォーマンスを発揮することができると言われていますが、十分な消去とまでは言えない可能性もあります ([[#フラッシュメモリ]]を参照)。
For more information see: [http://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf Reliably Erasing Data From Flash-Based Solid State Drives].
 
   
  +
ドライブによっては、メーカーによって定義されたパターンを使用する '''Enhanced Secure Erase''' がサポートされていることがあります。{{ic|hdparm -I}} の出力で '''Enhanced''' 消去が利用できると表示される場合、デバイスにはハードウェア暗号化機能が備わっており、消去は暗号鍵だけで実行されます。
==== 不良セクタ ====
 
   
  +
ATA Secure Erase の使用法に関する詳細は[[ソリッドステートドライブ/メモリセルの消去]]や [https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase Linux ATA wiki] を見て下さい。
If a hard drive marks a sector as bad, it cordons it off, and the section becomes impossible to write to via software. Thus a full overwrite would not reach it. However because of block sizes, these sections would only amount to a few theoretically recoverable KB.
 
   
==== 残留磁気 ====
+
=== blkdiscard ===
  +
  +
こちらを参照 [[ソリッドステートドライブ/メモリセルの消去#blkdiscard による一般的な方法]]
   
  +
== 参照 ==
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].
 
   
  +
* [https://superuser.com/questions/19326/how-to-wipe-free-disk-space-in-linux Linux の空き領域を消去する]
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.
 

2023年12月15日 (金) 16:04時点における最新版

関連記事

ディスクのワイプは、すべてのビットに新しいデータを書き込むことによって行われます。

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

一般的なユースケース

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

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

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

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

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

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

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

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

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

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

データの残存性

データの完全消去 も参照。データを削除したり消去したりしようとした後でも、データの表現が残っていることがあります。

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

オペレーティングシステム、実行されるプログラム、ジャーナリングファイルシステム は暗号化されていないデータをブロックデバイス全体にコピーする可能性があります。プレーンディスクに書き込む場合、これは上記のいずれかと関連している場合に限ります。

データがディスク上に正確に配置され、他の場所にコピーされていない場合、プールに十分なエントロピーがある限り、ランダムデータによるワイプは徹底的かつ驚くほど迅速に実行できます。

良い例は、/dev/urandom を使用した LUKS キースロットの消去 を使用した cryptsetup です。

ハードウェア固有の問題

フラッシュメモリー

ライトアンプリフィケーション などの特性により、SSD を含むフラッシュメモリは信頼性の高いワイプの対象としては頑強なものとなっています。 デバイスのコントローラチップとオペレーティングシステムから見たデータの間には、多くの透明な抽象化が存在するため、光景データがその場で上書きされることはなく、特定のブロックやファイルをワイプすることは信頼性がありません。

透過的な圧縮 (すべての SandForce SSD) などの他の "機能" は、ゼロまたは反復パターンを圧縮できるため、消去が信じられないほど高速である場合、これが原因である可能性があります。

シンプルなハードウェア を使用すると、コントローラを介さずにフラッシュ メモリデバイスを分解し、チップのはんだを外し、データコンテンツを分析することが問題なく実行できます。データ復旧会社は安いお金でそれを行います。

詳細については、次を参照してください:

マークされた不良セクタ

ハードディスクは、あるセクターを不良と判断すると、その部分をコードで封鎖し、ソフトウェアでの書き込みを不可能にします。そのため、完全な上書きをすることはできません。しかし、ブロックサイズの関係で、これらのセクションは理論上回復可能な数キロバイトにしかならない。

残留磁気

ゼロやランダムなデータで1回だけ完全に上書きしても、最近の高密度ストレージデバイスでは復元可能なデータにはなりません。この操作を繰り返すことは、現在では必要ないことに注意してください。[1] [2] [3] また、[4][5][6]を参照してください。

対象の選択

ノート: 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

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

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

ブロックストレージデバイスにはセクタがあり、1つのセクタのサイズはデバイス全体のサイズをバイト単位で計算するために使用することができます。セクタとセクタの大きさを掛け合わせることで計算できます。

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

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

ここでは、root で fdisk -l /dev/sdX の出力の一部だけを表示し、パーティション情報の例を示しています。

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

ディスクサイズを物理セクタ単位で取得するには、既知のディスクサイズをバイト単位で1物理セクタのサイズに分割する必要があります echo $((2000398934016 / 4096)), blockdev --getsize64 /dev/sd "XY" コマンドでもストレージデバイスやパーティションのサイズを取得することができます。

ノート:
  • 以下の例では、論理セクタサイズを使用します。
  • 1つのパーティションの終わりと次のパーティションの始まりの差を計算することで、dd コマンドで未割り当てのディスク領域を消去することも可能です。

/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
ノート: 物理的に限られた領域、例えば sd "XY"sd "X" を最初から最後まで消去する場合は count= オプションは必要ありませんが、制限外の書き込みをしようとすると空き容量不足のエラーが表示されることがあります。

データソースを選択

機密データを消去するために、ニーズに合わせて任意のデータパターンを使用することができます。

ゼロ

/dev/zero や単純なパターンによる上書きは、ほとんどの状況で安全であると考えられています。今日のHDDでは、ディスクの消去には適切で高速だと判断されます。

しかし、書き込みパターンや0化が異常に速いドライブは、透過的圧縮を行っている可能性があります。すべてのブロックがこの方法で消去されるわけではないことは明らかです。一部の フラッシュメモリー デバイスでは、そのような "機能" を備えています。

その後、ブロックデバイスの暗号化を設定するには、暗号化を弱めないようにランダムなデータで領域を消去する必要があります (次章参照)

警告: 圧縮の対象であり、フラッシュメモリや SSD との併用に注意が必要、ブロック暗号化準備には上記の通り避けるべきです。

ランダムデータ

/dev/random を使った真のランダムデータソースは、エントロピー生成を待つのに時間がかかりすぎるため、大容量のワイプには非現実的です。/dev/urandom は擬似ランダムデータの妥当なソースとして使うことができます。ソースとしてのランダムデータと擬似ランダムデータの違いについては、乱数生成 を参照してください。

疑似ランダムデータ生成のもう一つの方法は、暗号化されたデータストリームを使用することである。例えば、ブロック暗号化用のデバイスを用意し、暗号化パーティションに AES を使用する場合、ファイルシステムを作成する前に同様の暗号で消去し、空き領域が使用領域と区別できないようにすることが適切です。

対象の上書き

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

出力のリダイレクト

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

以下の例では他のユーティリティの 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

scrub

scrub は、データの取得をより困難にするために、ファイルまたはディスクデバイスにパターンを繰り返し書き込みます。

次のコマンドは、モード 1 のデフォルト設定でスクラブを呼び出し、NNSA ポリシーレター NAP-14.x に準拠したパターンを使用してターゲットデバイスを上書きします。これが最も効果的な方法です。

$ scrub /dev/sdX

次のコマンドは、モード 2 のデフォルト設定でスクラブを呼び出し、NNSA ポリシーレター NAP-14.x に準拠したパターンを使用してターゲットファイルを上書きし、書き込まれたバイトを切り捨てて最後のファイルシステムブロックを埋めます。このモードには注意事項があります。詳細については、manual を参照してください。

$ scrub /path/to/file # where file is a regular file

次のコマンドは、モード 3 のデフォルト設定でスクラブを呼び出し、ディレクトリを作成し、ファイルシステムがいっぱいになるまでそのディレクトリにファイルを埋め込みます。次に、NNSA ポリシーレター NAP-14.x に準拠したパターンを使用してファイルが scrub され、書き込まれたバイトが丸められて最後のファイルシステムブロックが埋められます。このモードには注意事項があります。詳細については、manual を参照してください。

$ scrub /path/to/dir # where dir is a new directory name.

詳しい使用方法と情報については、manual を参照してください。

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 を見て下さい。

blkdiscard

こちらを参照 ソリッドステートドライブ/メモリセルの消去#blkdiscard による一般的な方法

参照