16

特定のファイルを書き込んでディスク容量が不足すると、プログラムが停止する可能性があります。これが事実であるかどうかはわかりません。

実行して確認したいのですが、テスト サーバーの容量がすぐに不足することはありません。この動作を嘲笑する方法はありますか? Ubuntuでフォルダー/ファイルサイズの制限を設定する方法がないように見えます.ユーザークォータを設定するのはプロセスになるでしょう(アクセス許可を取得するため)

この状況をテストする一般的な方法はありますか?

Ubuntu 12.04 を実行しています

4

5 に答える 5

34
  1. 必要なサイズのファイルを作成します (ここでは 10MB)

    dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000

  2. このファイルからループバック デバイスを作成します

    losetup -f /home/qdii/test

  3. 必要なファイル システムでそのデバイスをフォーマットします。

    mkfs.ext4 /dev/loopXXX

  4. 好きな場所にマウントします(/mnt/test存在する必要があります)

    sudo mount /dev/loopXXX /mnt/test

  5. そのパーティションにプログラムをコピーしてテストします

    cp /path/my/program /mnt/test && cd /mnt/test && ./program


作成/dev/loopXXXしたループ デバイスに置き換えてlosetup、 で調べますlosetup -a

完了したら、次のことを忘れないでください。

  • でアンマウントしsudo umount /mnt/testます。
  • 使用後にループデバイスをクリーンアップします。losetup -D /dev/loopXXX
  • ファイルを削除します。
于 2013-04-16T18:26:39.430 に答える
4

もう 1 つの可能性は、setrlimit(2) syscall とRLIMIT_FSIZEulimitbash 組み込み(を使用-f) を使用して、適切な制限を減らすことです。その後、write(2)は失敗しますEFBIG

また、適切なファイル システムにクォータを設定することもできるため、 でwrite(2)失敗しEDQOTます。

実際のENOSPCエラーが必要な場合は、おそらくqdiiwrite(2)が回答したループバック ファイル システムが必要です。

EIOところで、エラーを「エミュレート」する方法がよくわかりません(おそらくFUSEファイルシステムで?)。

多くのプログラムがwrite(2)エラーを処理します (そして、ほとんどすべてのプログラムがエラーを処理する必要があります)。しかし、 で発生する可能性のあるさまざまなエラーを非常に異なる方法で処理する多くのプログラムを知りませんwrite(2)。ほとんどのプログラムは、すべてのwrite(2)エラーを同じ方法で処理します。

EINTRただし、エラーを別の方法で処理する必要がある場合があります。これらは回復可能なエラーであり、通常は後でEWOULDBLOCKやり直します。write(2)

于 2013-04-16T18:41:23.050 に答える
0

シナリオを再現する良い方法は、限られたスペースでディレクトリをマウントすることです。プログラムが /data で実行されるとしましょう。ストレージを 100MB に制限するには (必要に応じてカスタマイズします):

  1. 須藤す
  2. mkdir /メディア/画像/
  3. dd if=/dev/zero of=/media/images/data.img bs=512K count=200 #100MB
  4. mkfs.ext4 /media/images/data.img
  5. mkdir /データ
  6. マウント -o ループ /media/images/data.img /data

ただし、さらにスペースが必要な場合は、靴下を脱ぎ捨ててください

  • dd if=/dev/zero of=/media/images/data.img bs=1M count=1 #1MB
于 2022-03-03T03:48:35.503 に答える