web-dev-qa-db-ja.com

Linuxの空きディスク容量を消去するにはどうすればいいですか?

ファイルが削除されても、他のファイルで明示的に上書きされない限り、その内容はファイルシステムに残ったままになります。 wipeコマンドはファイルを安全に消去できますが、どのファイルにも使用されていない空きディスク領域を消去することはできません。

これを達成するために何を使うべきですか?

142
Alex B

警告:最近のディスク/ SSDハードウェアや最近のファイルシステムでは、削除できない場所でデータが流れてしまうことがあります。このプロセスではまだディスクにデータが残っている可能性があります。データを消去する唯一の安全な方法は、ATA Secure Eraseコマンド(正しく実装されている場合)、または物理的な破壊です。 も参照してください。ハードドライブ上のすべての情報を確実に消去するにはどうすればよいですか?

Secure-deleteと呼ばれる一連のツールを使用できます。

Sudo apt-get install secure-delete

これには4つのツールがあります。

srm - 既存のファイルを安全に削除する
smem - ramから安全にファイルの痕跡を削除する
sfill - ハードドライブの空き領域としてマークされているスペースをすべて消去します
sswap - スワップスペースからすべてのデータを消去します。

srmのmanページから

srmは泥棒、法執行機関または他の脅威によって回復することができない安全な方法でメディア上のデータを削除するように設計されています。このワイプアルゴリズムは、第6回Usenixセキュリティシンポジウムで発表された、有力な民間暗号技術者の一人であるPeter Gutmannによる論文「磁気および固体メモリからのデータの安全な削除」に基づいています。

Srmの安全なデータ削除プロセスは次のようになります。

  • 0xffで1回パス
  • 5回のランダムパス。 /dev/urandomは利用可能なら安全なRNGに使われます。
  • ピーターグットマンによって定義された特別な値で27回のパス。
  • 5回のランダムパス。 /dev/urandomは利用可能なら安全なRNGに使われます。
  • ファイルをランダムな値に変更します
  • ファイルを切り捨てる

セキュリティの追加手段として、ファイルはO_SYNCモードで開かれ、それぞれのパスの後にfsync()呼び出しが行われます。 srmはスピードのために32kブロックを書き込み、ディスクキャッシュのバッファをいっぱいにしてファイルに属する古いデータをフラッシュし上書きするように強制します。

105
fnord_ix

最も簡単な方法は、シングルパスだけが必要で、すべてをゼロに置き換えたい場合、次のとおりです。

cat /dev/zero > zero.file
sync
rm zero.file

(ワイプしたいファイルシステム上のディレクトリから実行します)
syncコマンドは、すべてのデータがディスクに書き込まれるようにするためのパラノイア対策です。インテリジェントキャッシュマネージャは、ファイルがリンク解除されたときに保留中のブロックの書き込みをキャンセルできることを解決する可能性があります)

この操作の間、ファイルシステム上に空きスペースがまったくなくなる時間があります。結果のファイルが大きく断片化されている場合、削除にはしばらく時間がかかります。空き領域が完全にゼロになるまでの時間を短縮するには

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

高価なフォレンジック操作をせずに、誰かが古いファイルの内容を読むのを防ぐのに十分なはずです。もう少し安全な、しかし遅い、変種のためには/dev/zero/dev/urandomに置き換えてください。もっとパラノイアをするには/dev/urandomで複数のステップを実行しますが、それほどの努力が必要な場合はcoreutilsパッケージのshredユーティリティを使うのがいいでしょう:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file

上の例では、小さい方のファイルは大きい方のファイルを作成する前にシュレッドされているので、大きい方のファイルが完成するとすぐに削除できます。シュレッドプロセスは大きなファイルに長い時間をかけ、NSAから何かを隠そうとしているのでなければ、本当に必要なIMOではありません。

上記のすべてはどのファイルシステムでも動作するはずです。

ファイルサイズ制限:

DanMouldingが以下のコメントで指摘しているように、これはいくつかのファイルシステムでファイルサイズの制限に問題があるかもしれません。

FAT32では、2GiBのファイル制限のため、間違いなくが問題になるでしょう。最近では、ほとんどのボリュームがこれよりも大きくなっています(8TiBがボリュームサイズの上限IIRCです)。これを回避するには、大きいcat /dev/zero出力をsplitを介してパイプ処理し、複数の小さいファイルを生成し、それに応じてシュレッドステージと削除ステージを調整します。

Ext2/3/4ではそれほど気にする必要はありません。デフォルトの/ common 4Kブロックではファイルサイズの上限は2TBなので、これには巨大なボリュームが必要です。問題(これらの条件下での最大ボリュームサイズは16TB)。

(まだ実験的な)btrfsを使用すると、最大ファイルサイズとボリュームサイズの両方が16EiBになります。

NTFSでは、最大ファイル長が最大ボリューム長よりも大きい場合があります。

詳細情報の出発点:
http://ja.wikipedia.org/wiki/Ext3#Size_limits
http://ja.wikipedia.org/wiki/Btrfs
http://ja.wikipedia.org/wiki/Ntfs#Scalability

仮想デバイス

最近のコメントで言及されているように、仮想デバイスに関する追加の考慮事項があります。

  • まばらに割り当てられた仮想ディスクの場合、zerofreeで使用されるような他の方法がより高速になります(catddとは異なり、これはほとんどすべてのunix-like OSで利用できることを信頼できる標準的なツールではありません)。

  • スパース仮想デバイス上のブロックをゼロにしても、基礎となる物理デバイス上のブロックは消去されない可能性があることに注意してください。 managerはそのブロックをもう使用されていないものとして作成するので、後で別のものに割り当てることができます。

  • 固定サイズの仮想デバイスであっても、デバイスの物理的な場所を制御できないため、いつでも現在の場所を移動したり新しい物理ディスクのセットに移動したりできます。ブロックが過去に存在した可能性のある以前の場所。

  • 仮想デバイス上の上記の問題の場合:ホストを制御し、その後VM内のディスクを消去した後、または仮想デバイスを移動したりして、未割り当て領域を安全に消去できない限り、何もできません。事後にこれについて行うことができます。唯一の頼みは、最初から完全ディスク暗号化を使うことです。暗号化されていないものはすべてそもそも物理メディアに書き込まれません。もちろんVM内で空き領域の消去を要求することもできます。仮想化層ではどのブロックが未使用であるかを実際に確認できないため、FDEはスパース仮想デバイスの有用性を大幅に低下させる可能性があります。 OSのファイルシステム層が仮想デバイスにトリムコマンドを送信し(仮想ディスクがSSDであるかのように)、仮想コントローラがこれらを解釈する場合、これで解決する可能性があります。それについての議論は別のところで問題になっています(私達は最初の質問のために話題から外れることにすでに近づいています、従ってこれがあなたの興味を刺激したならいくつかの実験および/またはフォローアップの質問は順番になるでしょう).

69
David Spillett

警告

拭き取った後でも、ディスクからいくつのファイル photocc を取り出せるかにショックを受けました。

「空き領域」を0x00で1回だけ、または異なる秘密主義の基準で38回だけ埋めることにセキュリティがあるかどうかは、学術的な議論の多くです。シュレッディングに関する1996年のセミナーの論文の執筆者は自分自身で エピローグ を書いています - これは時代遅れで現代のハードウェアには必要ないと言っています。データが物理的にゼロに置き換えられ、その後回復されるという文書化されたケースはありません。

この手順の真の脆弱リンクは、ファイルシステムです。いくつかのファイルシステムは特別な用途のためにスペースを予約しています、そしてそれは "空きスペース"として利用可能にされていません。 しかしあなたのデータはそこにあるかもしれません。それには写真、個人的な平文の電子メールなどが含まれます。予約されたスペース+ ext4をグーグルしたところ、私のhomeパーティションの5%が予約されていることがわかりました。私はこれがphotorecが私のものの多くを見つけたところであると思います。結論:シュレッディング方法は最も重要ではありません。マルチパス方法でもデータはそのまま残ります

マウントする前に# tune2fs -m 0 /dev/sdn0を試すことができます。 (再起動後にこれがルートパーティションになる場合は、アンマウントした後に-m 5または-m 1を実行してください。).

それでも、何らかの形で、いくらかのスペースが残っているかもしれません。

本当に安全な唯一の方法は、パーティション全体を一掃し、ファイルシステムを再作成してから、バックアップからファイルを復元することです。


素早い方法(推奨)

消去したいファイルシステム上のディレクトリから実行します。

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

注:小さなファイルの目的は、空き容量が完全にゼロになる時間を減らすことです。同期の目的は、データが実際に書き込まれていることを確認することです。

ほとんどの人にとってこれで十分なはずです。

遅い道(妄想)

上記のクリーニング後にデータが回復されるという文書化された事例はありません。可能であれば、それは高価でリソースを必要とするでしょう。

それでも、あなたがあなたのファイルを回復するために秘密機関が多くのリソースを使うであろうと考える理由があるならば、これは十分であるべきです:

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

ずっと時間がかかります。

警告。あなたが妄想的な方法を選んだならば、これ以降あなたはまだ速い拭き取りをしたいであろう、そしてそれは妄想ではない。純粋にランダムなデータの存在は検出が簡単で安価であり、それが実際に暗号化されたデータであるという疑いを投げかけます。あなたは復号化鍵を明らかにしないことで拷問で死ぬかもしれません。

とても遅い道(クレイジーパラノイド)

1996年のシュレッダーに関する論文の著者でさえ、これは時代遅れで現代のハードウェアには不要なものであるというエピローグを書いています。

しかし、まだ空き時間があり、ディスクをたくさん上書きしても構わない場合は、次のようになります。

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

注:これは、本質的にsecure-deleteツールを使用することと同等です。


編集前は、この投稿はDavid Spillettのものを書き直したものです。 "cat"コマンドはエラーメッセージを出しますが、他の人の投稿にコメントを書くことはできません。

44
user39559

少なくともUbuntuにはzerofreeユーティリティがあります。

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

   zerofree — zero free blocks from ext2/3 file-systems

   zerofree  finds  the  unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is  useful
   if  the  device  on  which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be  able  to  reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve  the  same  result  (zeroing  the  unallocated
   blocks)  is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      ·  it is slow;

      ·  it makes the disk image (temporarily) grow to its maximal extent;

      ·  it  (temporarily)  uses  all  free  space  on  the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted  read-only  for  zerofree  to
   work.  It  will exit with an error message if the filesystem is mounted
   writable. To remount the  root  file-system  readonly,  you  can  first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

また、zerofreeについてのこのリンクをチェックしてください。 ファイルシステムイメージをまばらに保つ - それは作者からのものです - Ron Yorston(2012年8月9日)

27
osgx

これはGUIでそれを行う方法です。

  1. BleachBitをインストール
  2. 管理者としてアプリケーション - システムツール - BleachBitの順にクリックして、rootとして実行します。
  3. 設定で、あなたが望むパスを教えてください。一般にそれはそれらをよく推測する。各パーティションに1つの書き込み可能なパスを含めます。同じパーティションでない限り、一般的には/ home/usernameと/ tmpです。
  4. [システム - 空きディスク領域の消去]チェックボックスをオンにします。
  5. 削除をクリックします。

BleachBitがddよりも優れている(そうでなければとてもいいです)ディスクが最終的にいっぱいになると、BleachBitはiノード(ファイル名などのメタデータを含む)を消去するための小さなファイルを作成します。

3
Andrew Z

あなたは安全な削除パッケージを使用してあなたの空き領域を拭くことができます。

そのパッケージの中には、sfillツールがあります。これは、泥棒、法執行機関、その他の脅威によって回復することができない安全な方法で、メディア上の使用可能なディスクスペースにあるデータを削除するように設計されています。

安全な削除パッケージをLinux(Ubuntu)にインストールするには、次のコマンドでそれをインストールします。

$ Sudo apt-get install secure-delete

それからあなたのデータの空きスペースを消去するには、次のコマンドを試してください。

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

/ YOUR_MOUNTPOINT/OR_DIRECTORYは、空き領域を消去するためのマウントポイント(df -hmount)またはディレクトリです。

マニュアルを読む http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html

2
kenorb

ドライブを最高速度で拭きます。

今日のドライブを暗号化するための典型的な指示は、最初にドライブをWIPEするように指示します。

以下のコマンドはあなたのドライブをAES暗号文で埋めます。

メインブートドライブを拭く必要がある場合は、ライブCDを使用してください。

端末を開いて特権を昇格させます。

Sudo bash

安全のためにシステム上のすべてのドライブをリストしましょう。

cat /proc/partitions

注:/dev/sd{x}を消去したいデバイスに置き換えます。

警告:これはアマチュア向けではありません!あなたのシステムを起動不能にすることができます。

Sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

私はこれがどれくらい速いかに驚いています。

2
Roger Lawhorn

私はddを使って空き領域を埋めるために1つ以上の大きなファイルを割り当て、それから安全な削除ユーティリティを使います。

Ddでファイルを割り当てるには:

dd if=/dev/zero of=delete_me bs=1024 count=102400

これにより、サイズが100 MBのdelete_meという名前のファイルが生成されます。 (ここでbsは1kに設定された「ブロックサイズ」で、countは割り当てるブロック数です。)

その後、作成したファイルに対して、お気に入りの安全な削除ユーティリティ( shred を使用しています)を使用します。

しかし、注意:バッファリングは、ディスク全体を実行しても意味がありません。


この リンク は、空き領域を拭くために scrub を推奨します。試していません。

2
dmckee

あなたはおそらくすでに GNU coreutilsパッケージ をあなたのシステムにインストールしているでしょう。それはコマンド シュレッド を提供します。

2
dkaylor

より簡単な方法は scrub を使うことです。

scrub -X dump

これにより、現在の場所にdumpフォルダが作成され、ディスクがいっぱいになるまでファイルが作成されます。 -pオプション(nnsa|dod|bsi|old|fastold|gutmann)でパターンを選ぶことができます。

スクラブをインストールするのは簡単ではありません( これについてはUbuntuフォーラムを参照してください )。インストールが完了すれば、本当に簡単で効率的なツールになります。君の手に。

1
FMaz008

私はLinuxとMacOSで動く簡単な解決策を見つけました。ディスクのルートフォルダに移動して次のコマンドを起動します。

for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*;

// DISKSPACE //はハードディスクのサイズ(GB)です。

1
Enrico

ddを使用して空き容量をゼロにするだけです。それは神話のデータが何度も上書きされる必要があり(ちょうどpeter guntmannに尋ねる)ランダムなデータであり、1が0の場合は不自然な活動を意味します。その結果、書き込み時間が短縮されたクリーンドライブになります。それに加えて、安全な削除プログラムは、彼らが現代のファイルシステム(ジャーナルされた)の上に本物のファイルさえ上書きすることさえ保証できません。あなた自身を支持してphotoscを取得し、混乱を見るためにあなたのドライブをスキャンし、それをそのままに見えるようにするために1で、必要に応じてゼロでそれを拭いてください。 photoccがまだ何かを見つけたら、それが利用可能なすべてをスキャンしていることを覚えているので、再びrootユーザーでこれを慎重にしてください。

覚えておいて、cia/fbi/nsaはあなたの磁気メディアビットの実際の状態を読むことができる派手なマシンを持っていません。それはすべて昔に書かれた単なる論文でした。 「what-if」です。あなたは一度だけ拭く必要があります。

1
fred

これが私が使っている "sdelete.sh"スクリプトです。詳細はコメントを見てください。

# Install the secure-delete package (sfill command).

# To see progress type in new terminal:
# watch -n 1 df -hm

# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.

# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill

Sudo tune2fs -m 0 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'

Sudo sfill -vfllz /

# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

Sudo tune2fs -m 5 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
1
Czarek Tomczak

これは答えではありません!pv...を使いたい人のための単なるコメントです。

Linux Mint 17.3では、pvpipe view)を使用して、執筆を進めることができます。例えば:

# Install pv (pipe view)
Sudo apt-get install pv

# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >Rand.file

ここでの利点は、プログレスバー、ETA、そして継続的に更新されるデータレートが得られることです。デメリットは、これが1行に書き込まれ、ディスクがいっぱいになると(エラーを返す)、消えることです。この非常に長い操作が行われている間、OSはディスクを使用する可能性があるため、特にOSボリュームではフルサイズが概算であるため、これが発生します。

非常に古いHDでは、/dev/urandomを使用して約13 MB/s、約70 MBのデータ転送速度が得られます。 /dev/zeroを使用する場合は/ s。生のddまたはcatを使用し、pvを使用しない場合、これはおそらくさらに改善するでしょう。

0
not2qubit

私は時々このbashワンライナーを使用します。

while :; do cat /dev/zero > zero.$RANDOM; done

ディスクがいっぱいになったと言ったら、ただ押すだけです。 Ctrl+C 作成したzero.*ファイルを削除します。

ファイルサイズの制限にかかわらず、どのシステムでも動作します。
cat: write error: File too largeエラーを無視します。

0
Nicolas Raoul