必要なサイズのファイルを作成します (ここでは 10MB)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
このファイルからループバック デバイスを作成します
losetup -f /home/qdii/test
必要なファイル システムでそのデバイスをフォーマットします
mkfs.ext4 /dev/loopXXX
好きな場所にマウントします (/mnt/test
存在する必要があります)
sudo mount /dev/loopXXX /mnt/test
プログラムをそのパーティションにコピーしてテストします
cp /path/my/program /mnt/test && cd /mnt/test && ./program
/dev/loopXXX
に置き換えます ループデバイス losetup
で 作成、losetup -a
で調べる .
完了したら、次のことを忘れないでください:
sudo umount /mnt/test
でアンマウント .- 使用後にループ デバイスをクリーンアップするには、
losetup -D /dev/loopXXX
を使用します - ファイルを削除します。
もう 1 つの可能性は、setrlimit(2) syscall で RLIMIT_FSIZE
を使用して適切な制限を減らすことです。 または bash
ulimit ビルトイン (-f
を使用) )。その後、write(2) は EFBIG
で失敗します
また、適切なファイル システムにクォータを設定することもできるので、write(2)
EDQOT
で失敗します .
本当の ENOSPC
が必要な場合 write(2)
へのエラー おそらく、qdii が回答したループバック ファイル システムが必要です。
ところで、EIO
を「エミュレート」する方法がよくわかりません エラー (おそらくいくつかの FUSE ファイルシステムで?)。
多くのプログラムは write(2)
を処理します エラー (およびほとんどすべてのエラー)。しかし、 write(2)
で発生する可能性のあるさまざまなエラーを非常に異なる方法で処理する多くのプログラムを知りません .ほとんどのプログラムはすべての write(2)
を処理します エラーも同じです。
/dev/full を使用するだけで、書き込もうとすると ENOSPC エラーが発生します:
$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device