すぐに大量のディスク容量を一杯に使い切る方法はありますか?


45

Linux VMでは、単にVMをオフにしたり、仮想NICを切断したりするよりも、NAGIOS監視をより深くテストしたいと思います。短時間、空き領域の数%を占有することにより、テストまたは「ディスク領域アラームを強制する」ことを希望します。

私はちょうど使用できることを知っています

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50

またはそのようなものですが...これには時間がかかり、システムをロードし、rmでテストファイルを削除するときに再び時間がかかります。

システムに負荷をかけず、多くの時間がかかるパーティションをすばやく(ほぼ瞬時に)埋める方法はありますか?スペースを割り当てるが、それを「埋める」ことを考えていない。


残念ながら、その>> ext3ファイルシステムであることを忘れていました。
アクセルヴェルナー

fallocateをサポートするには、ext4にアップグレードする必要があります。
ルイFリベイロ

1
Zip爆弾は常に動作します
ガロイス

1
@jaska答えにしてください。タイトルを読んだときに得た最初のアイデアでした
クローリー

使ってみません/dev/fullか?(それが存在すると仮定)。echo 'test' > /dev/fullDebianで試してください。
イスマエルミゲル

回答:


63

Linuxシステムでファイルを作成する最も速い方法は、次を使用することですfallocate

fallocate -l 50G file 

男から:

fallocateは、ファイルの割り当て解除または事前割り当てのために、ファイルに割り当てられたディスク領域を操作するために使用されます。
fallocateシステムコールをサポートするファイルシステムの場合、ブロックを割り当てて未初期化としてマークすることにより、事前割り当ては迅速に行われ、データブロックへのIOは不要です。これは、ファイルをゼロで埋めて作成するよりもはるかに高速です。
XFS(Linux 2.6.38以降)、ext4(Linux 3.0以降)、Btrfs(Linux 3.7以降)およびtmpfs(Linux 3.5以降)でサポートされます。


1
なぜあなたはそれを実行していsudoますか?
ゲリット

1
@gerritはそのポイントを答えに追加しました。
ルイFリベイロ

3
fallocateルート権限が必要」私のシステムではありません(Linux Mint 17.3、Ubuntuのダウンストリーム、したがってDebian)。(ext4ファイルシステム)
TJクラウダー

1
+1 OPが彼のファイルシステムはext3であると明示的に言及しましたが。
syneticon-dj

1
@RuiFRibeiro、ありがとう!sles11sp4 iveではファイルを作成でき、ext4でフォーマットできますが、RWモードでマウントできません。後に、/ var / log / messagesで、ext4は読み取り専用としてのみサポートされるというカーネルメッセージを見つけました。:/
アクセルヴェルナー

13

その他の代替手段は次のとおりです。

  1. アラームのしきい値を現在の使用量の近くまたはそれ以下に変更する、または
  2. iノード、サイズ、またはその他の属性が制限された非常に小さなテストパーティションを作成します。

ルート予約済みの割合(ある場合)への実行などをテストできることも便利です。


ルート予約率は、微調整しない限り通常 10%です。大きなパーティション/最新のディスクでシステムの無駄が大きすぎます。アラームを定義するときは、すでに考慮に入れておくとよいでしょう。
ルイFリベイロ

最初に+1。百倍真実。なぜ地獄は実際にマシンのディスク上に何かを作成する必要があるのですか?テスト中に何か(コアダンプ、大きな一時ファイルを生成するバッチジョブなど)が発生し、ディスク全体が誤って消費された場合はどうなりますか?
フィッシュ

2
@Fisch-なぜですか?アラートのしきい値が正しいこと、およびディスク領域の空きパーセンテージ(以前見た)の代わりにinodeの空きパーセンテージを誤って設定するようなことをしていないことを確認するため。アラートのしきい値までディスクを一杯にしたために何かが失敗した場合、アラートのしきい値は低すぎます-アラートの全体的なポイントは、事態が始まるにアラートを出すことなっているということです。
ジョニー

猫、良い点。しかし、私には解決策はありません。VM構成(パーティションまたは仮想ディスクの変更)を制御することも、NAGIOSサーバーを制御することもできません。
アクセルヴェルナー

2
@AxelWerner「偽の」パーティシオンとしてファイルをループバックマウントできますか?それでも、深刻な影響を与えることなくテストできます。サポートされているファイルシステムのいずれかでフォーマットし、fallocateをいじることもできます。
トニー

9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

  3. dd of=bigfile bs=1 seek=50G count=0

これらの3つの方法はすべて、パーティションをすばやくいっぱいにすることができるためです。

use ddが好きなら、通常はseekで試してみることができます。設定seek=file_size_what_you_needして設定するだけcount=0です。これにより、ファイルが存在することがシステムに通知され、そのサイズが設定されますが、システムは実際にファイルを作成しません。この方法を使用すると、パーティションサイズよりも大きいファイルを作成できます。


たとえば、使用可能な3G未満のext4パーティション。ddを使用して、メタデータとして存在する5Tファイルを作成します。ブロックスペースはほとんど必要ありません。

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .

出力:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
0+0 records in
0+0 records out
0 bytes copied, 4.9296e-05 s, 0.0 kB/s
-rw-rw-r-- 1 5368709120000 Jun 29 13:13 biggerfile
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home

1
回答にさらに情報を追加できますか?

同じ質問を他の方法で検索する人のために、完成した質問にもっと考えを追加します。そうでない場合は無視してください。
2016年

このcount=0方法は非常に興味深いです。例を追加しました。
agc

7
dd上記の例では、スパースファイルが割り当てられる可能性があることに注意してください。その場合、ファイルサイズは50Gであり、実際にはブロックのみを使用している(または偶数ではない)ため、ディスクがいっぱいになりません。YMMV。
MAP

2
ext3ファイルシステムであなたの提案をテストしました。期待どおりに機能しませんでした。truncateとddは大きなファイルサイズのファイルを作成しましたが、「df -h」はそれを認識しませんでした。それでも同じ無料のhdスペースが表示されます。
アクセルヴェルナー

0

また、さまざまなLinuxベースのシステムでサポートされているstress-ngツールを利用することもできます。

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.