测试linux中的磁盘空间

时间:2013-04-16 18:14:15

标签: linux testing

我有一个程序在写入某个文件的磁盘空间不足时可能会死亡,我不确定是不是这样。

我想运行它并看到,但我的测试服务器不会很快耗尽空间。有什么方法可以嘲笑这种行为吗?看起来没有办法在Ubuntu中设置文件夹/文件大小限制,并且设置用户配额将是一个过程(由于获得权限)

有没有一种常见的方法来测试这种情况?

我正在运行Ubuntu 12.04

4 个答案:

答案 0 :(得分:27)

  1. 创建所需大小的文件(此处为10MB)

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

  2. 从此文件中创建一个环回设备

    losetup -f /home/qdii/test

  3. 在您想要的文件系统中格式化该设备

    mkfs.ext4 /dev/loop0

  4. 将其安装在您想要的任何位置(/mnt/test应该存在)

    mount /dev/loop0 /mnt/test

  5. 在该分区上复制您的程序并进行测试

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


  6. 要知道哪个循环设备losetup已创建,您可以使用losetup -a

    不要忘记使用umount /mnt/test卸载。

    请勿忘记在使用后使用losetup -D

    清理循环设备

    不要忘记删除文件。

答案 1 :(得分:4)

另一种可能性是使用RLIMIT_FSIZEbash setrlimit(2)内置(使用-f)来ulimit系统调用减少适当的限制。然后write(2)会因EFBIG

而失败

您还可以在某个适当的文件系统上设置一些quotas,因此write(2)会因EDQOT而失败。

如果您希望真正的ENOSPC错误发送到write(2),您可能需要qdii所回答的环回文件系统。

顺便说一下,我真的不知道如何“模仿”EIO错误(可能还有一些FUSE文件系统?)。

许多程序处理write(2)错误(几乎所有错误)。但我不知道很多程序可以处理write(2)可能出现的各种错误。大多数程序以相同的方式处理所有write(2)错误。

但是,您可能需要以不同方式处理EINTREWOULDBLOCK错误:这些是可恢复的错误,您通常会在稍后重做write(2)

答案 2 :(得分:4)

只需使用/ dev / full,当你尝试写入它时会引发ENOSPC错误:

$ echo "Hello world" > /dev/full
bash: echo: write error: No space left on device

答案 3 :(得分:0)

如果要进行POSIX文件系统调用,则可以使用libfiuENOSPC错误注入到调用中。