「ディスクの完全消去」の版間の差分
(ページの作成:「Category:セキュリティ Category:ファイルシステム en:Securely wipe disk {{Related articles start}} {{Related|ファイルリカバリ}} {{Related3...」) |
|||
3行目: | 3行目: | ||
[[en:Securely wipe disk]] |
[[en:Securely wipe disk]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
+ | {{Related3|Securely wipe disk/Tips and tricks|ディスクの完全消去/Tips and tricks}} |
||
{{Related|ファイルリカバリ}} |
{{Related|ファイルリカバリ}} |
||
{{Related3|Benchmarking disk wipes|ディスク消去のベンチマーク}} |
{{Related3|Benchmarking disk wipes|ディスク消去のベンチマーク}} |
||
33行目: | 34行目: | ||
== 対象の選択 == |
== 対象の選択 == |
||
− | {{Note|Fdisk |
+ | {{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行目: | 51行目: | ||
/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行目: | 62行目: | ||
/dev/sdb1 * 0 802815 401408 17 Hidden HPFS/NTFS</nowiki>}} |
/dev/sdb1 * 0 802815 401408 17 Hidden HPFS/NTFS</nowiki>}} |
||
− | 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...). |
+ | 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...). |
== ブロックサイズの選択 == |
== ブロックサイズの選択 == |
||
− | + | [[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>}})。 |
||
− | 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 |
||
114行目: | 115行目: | ||
To wipe partition {{ic|/dev/sdXA}} the example parameters with logical sectors would be used like this: |
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}} |
||
+ | By using the starting address of the partition on the device by defining it in the {{ic|1=seek=}} option: |
||
− | Or, to wipe the whole disk ({{ic|1=count=}} optional): |
||
− | # dd if=''data_source'' of=/dev/ |
+ | # dd if=''data_source'' of=/dev/sd"X" bs=${BytesInSector} count=${End} seek=${Start} |
+ | By using the partitions name: |
||
− | {{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} |
||
+ | |||
+ | Or, to wipe the whole disk: |
||
+ | |||
+ | {{bc|1=AllDiskPhysicalSectors=488378646 |
||
+ | PhysicalSectorSizeBytes=4096}} |
||
+ | |||
+ | # dd if=''data_source'' of=/dev/sd"X" bs=${PhysicalSectorSizeBytes} count=${AllDiskPhysicalSectors} seek=0 |
||
+ | |||
+ | {{Note|The {{ic|1=count=}} option not necessary when wiping the physical limited area e.g. {{ic|sd"XY"}} or {{ic|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.}} |
||
== データソースの選択 == |
== データソースの選択 == |
||
+ | 先に述べた通り、重要なデータを消去したいときは、必要に応じて手段を選ぶことができます。 |
||
− | 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. |
||
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. |
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. |
||
154行目: | 170行目: | ||
== 対象の上書き == |
== 対象の上書き == |
||
− | 選択したドライブをユーティリティを使って上書きします。都合に合わせて選択してください。 |
+ | 選択したドライブをユーティリティを使って上書きします。都合に合わせて選択してください。単一のファイルだけ削除したい場合、[[en2:Securely wipe disk/Tips and tricks#Wipe a single file|ディスクの完全消去/Tips and tricks#単一ファイルの消去]]に以下で説明しているユーティリティの追加説明があります。 |
=== dd === |
=== dd === |
||
166行目: | 182行目: | ||
# dd if=/dev/zero of=/dev/sdX iflag=nocache oflag=direct bs=4096 |
# dd if=/dev/zero of=/dev/sdX iflag=nocache oflag=direct bs=4096 |
||
− | + | もしくは [[Wikipedia:/dev/random|/dev/urandom]] ストリームを使用: |
|
# dd if=/dev/urandom of=/dev/sdX bs=4096 |
# dd if=/dev/urandom of=/dev/sdX bs=4096 |
||
− | + | dd が {{ic|No space left on device}} と報告したら処理は完了です: |
|
dd: writing to ‘/dev/sdb’: No space left on device |
dd: writing to ‘/dev/sdb’: No space left on device |
||
7959553+0 records in |
7959553+0 records in |
||
175行目: | 191行目: | ||
4075290624 bytes (4.1 GB) copied, 1247.7 s, 3.3 MB/s |
4075290624 bytes (4.1 GB) copied, 1247.7 s, 3.3 MB/s |
||
+ | 巨大なドライブを高速に消去する方法は、以下を見て下さい: |
||
− | ==== 高度な例 ==== |
||
+ | * [[en2:Securely wipe disk/Tips and tricks#dd - advanced example|ディスクの完全消去/Tips and tricks#dd - 高度な例]]では OpenSSL を使用します。 |
||
+ | * [[en2:Securely wipe disk/Tips and tricks#dd - advanced example|ディスクの完全消去/Tips and tricks#dd - 高度な例]]ではランダムではないデータによって高速にデータを消去します。 |
||
+ | * [[Dm-crypt/ドライブの準備#インストール前に dm-crypt で消去]]では dm-crypt を使います。 |
||
+ | === wipe === |
||
− | 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 |
||
+ | ファイルの消去に特化しているツールで、arch のリポジトリからインストールできます。クイックワイプを実行するには以下のようなコマンドを使用します: |
||
− | 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 |
||
+ | $ wipe -r -q /path/to/wipe |
||
− | 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. |
||
+ | 参照: [http://linux.die.net/man/1/wipe man page]。 |
||
− | See also [[Dm-crypt/Drive preparation#dm-crypt wipe before installation]] for a similar approach. |
||
=== shred === |
=== shred === |
||
− | [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. |
+ | [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. |
The following command invokes shred with its default settings and displays the progress. |
The following command invokes shred with its default settings and displays the progress. |
||
205行目: | 216行目: | ||
=== Badblocks === |
=== Badblocks === |
||
− | + | badblocks でディスク消去を行うには、破壊的な [[en2:Badblocks#read-write_Test|read-write テスト]]を実行します: |
|
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive> |
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive> |
||
211行目: | 222行目: | ||
=== hdparm === |
=== hdparm === |
||
+ | [[hdparm]] は [http://tinyapps.org/docs/wipe_drives_hdparm.html ATA Secure Erase] をサポートしています。これはディスクをゼロで埋めるのと機能的には同一です。ただし、ハードドライブのファームウェアによって処理されるのが違っていて、"隠しデータ領域"も含まれます。そのため、今日における"ローレベルフォーマット"コマンドとして考えても良いでしょう。このコマンドを実行することで [[SSD]] ドライブは生産時のパフォーマンスを発揮することができると言われていますが、十分な消去とまでは言えない可能性もあります ([[#フラッシュメモリ]]を参照)。 |
||
− | [[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]]). |
||
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. |
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. |
||
− | + | ATA Secure Erase の使用法に関する詳細は [https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase Linux ATA wiki] を見て下さい。 |
|
=== secure-delete === |
=== secure-delete === |
||
+ | [[AUR]] の {{AUR|secure-delete}} パッケージには安全な消去のためのユーティリティが複数含まれています。例えば {{ic|sfill}} は特定のマウントポイントの空き領域だけを消去します。例: |
||
− | 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: |
||
# sfill -v / |
# sfill -v / |
||
− | + | 詳しくは [http://superuser.com/questions/19326/how-to-wipe-free-disk-space-in-linux ツールのリスト] を見て下さい。 |
|
== データの残留 == |
== データの残留 == |
||
229行目: | 240行目: | ||
[[Wikipedia:Data remanence]] を参照してください。 |
[[Wikipedia:Data remanence]] を参照してください。 |
||
+ | たとえデータの削除・消去を行った後でも、データが残留している可能性は存在します。 |
||
− | The residual representation of data may remain even after attempts have been made to remove or erase the data. |
||
+ | 一回だけでなく複数回、繰り返しディスクに(ランダムな)データを書き込むことで残留データを消去できるかもしれませんが、複数回書き換えることでハードディスクドライブのデータを復元できる可能性が劇的に減るわけではありません。[[#残留磁気]]を見て下さい。 |
||
− | 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]]. |
||
=== オペレーティングシステム、プログラム、ファイルシステム === |
=== オペレーティングシステム、プログラム、ファイルシステム === |
||
239行目: | 250行目: | ||
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. |
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. |
||
− | A good example is cryptsetup using /dev/urandom for [[Dm-crypt/Device encryption#Keyslot_management|wiping the LUKS keyslots]]. |
+ | A good example is cryptsetup using {{ic|/dev/urandom}} for [[Dm-crypt/Device encryption#Keyslot_management|wiping the LUKS keyslots]]. |
=== ハードウェア特有の問題 === |
=== ハードウェア特有の問題 === |
||
245行目: | 256行目: | ||
==== フラッシュメモリ ==== |
==== フラッシュメモリ ==== |
||
+ | [[Wikipedia:ja:ライトアンプリフィケーション|ライトアンプリフィケーション]]などの機能があるために、フラッシュメモリを完全に消去するのは厄介です。デバイスのコントローラチップから見えるデータと、オペレーティングシステムから見えるデータの間には、透過的な抽象レイヤーが多数存在しており、データの書き込まれる場所が食い違っているために、特定のブロックやファイルを消去したとしても確実にデータが書き換えられているとは限りません。 |
||
− | [[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. |
||
+ | (SandForce の全ての SSD に搭載されている) 透過圧縮などの"機能"は {{ic|/dev/zero}} などのパターンストリームを圧縮してしまうことがあり、信じられないほど速く消去が終わってしまった場合、圧縮されてしまっている可能性があります。 |
||
− | 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. |
||
+ | Flash メモリデバイスを解体して、チップのハンダ付けを取り除き、中に入っているコントローラを使わずにデータの中身を解析することは [http://www.flash-extractor.com/manual/reader_models/ 単純なハードウェア] だけで簡単に行えてしまいます。データ復旧会社は安価にこれをしています。 |
||
− | 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. |
||
− | + | 詳細は次を参照: [http://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf Reliably Erasing Data From Flash-Based Solid State Drives]。 |
|
==== 不良セクタ ==== |
==== 不良セクタ ==== |
||
+ | ハードドライブが不良セクタを認識すると、セクタへのアクセスが遮断され、ソフトウェアからはその領域に書き込みできなくなります。それによって、完全な書き換えがその領域にまで及ばない可能性があります。ただし、ブロックサイズから考えて、理論上、その領域からリカバリできるサイズはあくまで数 KB ほどしかありません。 |
||
− | 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. |
||
==== 残留磁気 ==== |
==== 残留磁気 ==== |
2015年3月24日 (火) 00:51時点における版
ディスクワイプを行うには全てのビットに新しいデータを書き込みます。
一般的なユースケース
デバイス上に残っているデータを全て消去
デバイスを完全に、二度と復旧できないように消去する最も一般的な理由としては、デバイスを廃棄するまたは売り飛ばす場合が考えられます。デバイス上に (暗号化されていない) データが残っている可能性を考えると、簡単にデータをとり出される前に対処しておいたほうが良いでしょう。データを盗むことはファイルリカバリソフトウェアなどを使えば朝飯前です。
ディスク上の全てのデータを素早く消去したいという場合、/dev/zero
のようなシンプルなパターンを使うのが一番効率がよく、それでいて十分なランダム性を確保できます。詳しくはデータの残留で説明しています。
ビットを全て上書きしてデータを消去すると通常のシステムの機能 (標準の ATA/SCSI コマンドなど) やハードウェアのインターフェイスでリカバリすることはできなくなります。上で述べたようなファイルリカバリソフトウェアがデータを復旧させようとしたら、プロプライエタリなストレージハードウェアの機能を使う必要が出てきます。
HDD の場合、ドキュメントになってないドライブコマンドが存在するとか、デバイスのコントローラやファームウェアを弄って再配置セクタ (S.M.A.R.T. が使用を止めた不良セクタ) を読み出すなどしないかぎり、データの復旧は不可能になります。
ディスク消去には物理ストレージの形式によって様々な問題が存在します。中でもフラッシュメモリデバイスや旧式の磁気ストレージ (古い HDD や、フロッピーディスク、テープなど) は注意する必要があります。
ブロックデバイス暗号化の準備
完全に消去した領域にディスク暗号化を設定したいという場合、暗号強度が高い乱数生成器 (Random Number Generator、以下 RNG と呼称します) による、ランダムデータを使用するべきでしょう。
Wikipedia:Random number generation を参照してください。
対象の選択
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
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 Live Media (USB, CD, PXE, etc...).
ブロックサイズの選択
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
消去するブロックを手動で計算
In the following the determination of the data area to wipe is done in an example.
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.
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
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
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
To calculate size of a single logical sector use echo $((2000398934016 / 3907029168))
or use data from the second line of fdisk output:
Units: sectors of 1 * 512 = 512 bytes
To calculate physical sectors that will make it work faster we can use the third line:
Sector size (logical/physical): 512 bytes / 4096 bytes
To get size in the physical sectors you will need the known disk size in bytes divided with physical sectors echo $((2000398934016 / 4096))
, you can get size of the storage device or partition on it even with the blockdev --getsize64 /dev/sdX(Y)
command.
To wipe partition /dev/sdXA
the example parameters with logical sectors would be used like this:
Start=2048 End=3839711231 BytesInSector=512
By using the starting address of the partition on the device by defining it in the seek=
option:
# dd if=data_source of=/dev/sd"X" bs=${BytesInSector} count=${End} seek=${Start}
By using the partitions name:
LogicalSectors=3839709184
# dd if=data_source of=/dev/sd"XA" bs=${BytesInSector} count=${LogicalSectors}
Or, to wipe the whole disk:
AllDiskPhysicalSectors=488378646 PhysicalSectorSizeBytes=4096
# dd if=data_source of=/dev/sd"X" bs=${PhysicalSectorSizeBytes} count=${AllDiskPhysicalSectors} seek=0
データソースの選択
先に述べた通り、重要なデータを消去したいときは、必要に応じて手段を選ぶことができます。
消去した後にブロックデバイスの暗号化をセットアップしたい場合、データソースとして暗号を使用して消去を行うべきでしょう。最低でも擬似乱数によるデータを使って下さい。
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.
ランダムではないデータ
Overwriting with /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.
パターン書き込みのテスト
#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.
ランダムデータ
For differences between random and pseudorandom data as source, please see Random number generation.
暗号データ
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.
対象の上書き
選択したドライブをユーティリティを使って上書きします。都合に合わせて選択してください。単一のファイルだけ削除したい場合、ディスクの完全消去/Tips and tricks#単一ファイルの消去に以下で説明しているユーティリティの追加説明があります。
dd
Core utilities#dd を参照してください。
Zero-fill the disk by writing a zero byte to every addressable location on the disk using the /dev/zero stream. iflag
and 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
もしくは /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
巨大なドライブを高速に消去する方法は、以下を見て下さい:
- ディスクの完全消去/Tips and tricks#dd - 高度な例では OpenSSL を使用します。
- ディスクの完全消去/Tips and tricks#dd - 高度な例ではランダムではないデータによって高速にデータを消去します。
- Dm-crypt/ドライブの準備#インストール前に dm-crypt で消去では dm-crypt を使います。
wipe
ファイルの消去に特化しているツールで、arch のリポジトリからインストールできます。クイックワイプを実行するには以下のようなコマンドを使用します:
$ wipe -r -q /path/to/wipe
参照: man page。
shred
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 pseudo-random data to the device during each pass. This can be reduced or increased.
The following command invokes shred with its default settings and displays the progress.
# shred -v /dev/sdX
Alternatively, shred can be instructed to do only one pass, with entropy from e.g. /dev/urandom
.
# shred --verbose --random-source=/dev/urandom -n1 /dev/sdX
Badblocks
badblocks でディスク消去を行うには、破壊的な read-write テストを実行します:
# badblocks -c <NUMBER_BLOCKS> -wsv /dev/<drive>
hdparm
hdparm は ATA Secure Erase をサポートしています。これはディスクをゼロで埋めるのと機能的には同一です。ただし、ハードドライブのファームウェアによって処理されるのが違っていて、"隠しデータ領域"も含まれます。そのため、今日における"ローレベルフォーマット"コマンドとして考えても良いでしょう。このコマンドを実行することで SSD ドライブは生産時のパフォーマンスを発揮することができると言われていますが、十分な消去とまでは言えない可能性もあります (#フラッシュメモリを参照)。
Some drives support Enhanced Secure Erase, which uses distinct patterns defined by the manufacturer. If the output of 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.
ATA Secure Erase の使用法に関する詳細は Linux ATA wiki を見て下さい。
secure-delete
AUR の secure-deleteAUR パッケージには安全な消去のためのユーティリティが複数含まれています。例えば sfill
は特定のマウントポイントの空き領域だけを消去します。例:
# sfill -v /
詳しくは ツールのリスト を見て下さい。
データの残留
Wikipedia:Data remanence を参照してください。
たとえデータの削除・消去を行った後でも、データが残留している可能性は存在します。
一回だけでなく複数回、繰り返しディスクに(ランダムな)データを書き込むことで残留データを消去できるかもしれませんが、複数回書き換えることでハードディスクドライブのデータを復元できる可能性が劇的に減るわけではありません。#残留磁気を見て下さい。
オペレーティングシステム、プログラム、ファイルシステム
The operating system, executed programs or journaling file systems 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.
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.
A good example is cryptsetup using /dev/urandom
for wiping the LUKS keyslots.
ハードウェア特有の問題
フラッシュメモリ
ライトアンプリフィケーションなどの機能があるために、フラッシュメモリを完全に消去するのは厄介です。デバイスのコントローラチップから見えるデータと、オペレーティングシステムから見えるデータの間には、透過的な抽象レイヤーが多数存在しており、データの書き込まれる場所が食い違っているために、特定のブロックやファイルを消去したとしても確実にデータが書き換えられているとは限りません。
(SandForce の全ての SSD に搭載されている) 透過圧縮などの"機能"は /dev/zero
などのパターンストリームを圧縮してしまうことがあり、信じられないほど速く消去が終わってしまった場合、圧縮されてしまっている可能性があります。
Flash メモリデバイスを解体して、チップのハンダ付けを取り除き、中に入っているコントローラを使わずにデータの中身を解析することは 単純なハードウェア だけで簡単に行えてしまいます。データ復旧会社は安価にこれをしています。
詳細は次を参照: Reliably Erasing Data From Flash-Based Solid State Drives。
不良セクタ
ハードドライブが不良セクタを認識すると、セクタへのアクセスが遮断され、ソフトウェアからはその領域に書き込みできなくなります。それによって、完全な書き換えがその領域にまで及ばない可能性があります。ただし、ブロックサイズから考えて、理論上、その領域からリカバリできるサイズはあくまで数 KB ほどしかありません。
残留磁気
A single, full overwrite with zeros or random data does not lead to any recoverable data on a modern high-density storage device.[1] Indications otherwise refer to single residual bits; reconstruction of byte patterns is generally not feasible.[2] See also [3], [4] and [5].
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 residual magnetics, due to much lower memory storage density. Such devices can get disassembled in a cleanroom and then analyzed with equipment like a 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; degaussing is another practiced countermeasure, and to ensure that data has been completely erased, most resources even advise physical destruction.