立即填满/用完大量磁盘空间的方法?

立即填满/用完大量磁盘空间的方法?

在 Linux VM 上,我想更深入地测试 NAGIOS 监控,而不仅仅是关闭 VM 或断开虚拟 NIC 的连接;我想通过短时间内占用百分之几的可用空间来测试或“强制执行磁盘空间警报”。

我知道我可以使用

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

或类似的东西...但这需要时间并加载系统,并且在使用 rm 删除测试文件时再次需要时间。

是否有一种快速(几乎即时)的方法来填充分区,而不会降低系统负载并花费大量时间?我正在考虑分配空间但不“填充”空间的东西。

答案1

在 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 起)。

答案2

其他替代方案包括:

  1. 将警报阈值更改为接近或低于当前使用情况,或者
  2. 创建一个非常小的测试分区,其索引节点、大小或其他属性有限。

能够测试诸如运行根保留百分比(如果有)之类的事情也可能很方便。

答案3

  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

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

因为这三种方式都可以快速填满一个分区。

如果你喜欢使用DD,通常你可以尝试使用寻找。只需设置seek=file_size_what_you_need并设置即可count=0。这会告诉系统有一份文件,及其尺寸是你设置的,但系统不会实际创建它。使用这种方式,您可以创建一个大于分区大小的文件。


例如,在外部4可用分区小于3G。使用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

答案4

您还可以利用许多基于 Linux 的系统都支持的stress-ng 工具:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times

相关内容