我有一个程序在写入某个文件的磁盘空间不足时可能会死亡,我不确定是不是这样。
我想运行它并看到,但我的测试服务器不会很快耗尽空间。有什么方法可以嘲笑这种行为吗?看起来没有办法在Ubuntu中设置文件夹/文件大小限制,并且设置用户配额将是一个过程(由于获得权限)
有没有一种常见的方法来测试这种情况?
我正在运行Ubuntu 12.04
答案 0 :(得分:27)
创建所需大小的文件(此处为10MB)
dd if=/dev/zero of=/home/qdii/test bs=1024 count=10000
从此文件中创建一个环回设备
losetup -f /home/qdii/test
在您想要的文件系统中格式化该设备
mkfs.ext4 /dev/loop0
将其安装在您想要的任何位置(/mnt/test
应该存在)
mount /dev/loop0 /mnt/test
在该分区上复制您的程序并进行测试
cp /path/my/program /mnt/test && cd /mnt/test && ./program
要知道哪个循环设备losetup已创建,您可以使用losetup -a
不要忘记使用umount /mnt/test
卸载。
请勿忘记在使用后使用losetup -D
不要忘记删除文件。
答案 1 :(得分:4)
另一种可能性是使用RLIMIT_FSIZE
或bash
setrlimit(2)内置(使用-f
)来ulimit系统调用减少适当的限制。然后write(2)会因EFBIG
您还可以在某个适当的文件系统上设置一些quotas,因此write(2)
会因EDQOT
而失败。
如果您希望真正的ENOSPC
错误发送到write(2)
,您可能需要qdii所回答的环回文件系统。
EIO
错误(可能还有一些FUSE文件系统?)。
许多程序处理write(2)
错误(几乎所有错误)。但我不知道很多程序可以处理write(2)
可能出现的各种错误。大多数程序以相同的方式处理所有write(2)
错误。
但是,您可能需要以不同方式处理EINTR
和EWOULDBLOCK
错误:这些是可恢复的错误,您通常会在稍后重做write(2)
。
答案 2 :(得分:4)
只需使用/ dev / full,当你尝试写入它时会引发ENOSPC错误:
$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device
答案 3 :(得分:0)
如果要进行POSIX文件系统调用,则可以使用libfiu将ENOSPC
错误注入到调用中。