在 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
其他替代方案包括:
- 将警报阈值更改为接近或低于当前使用情况,或者
- 创建一个非常小的测试分区,其索引节点、大小或其他属性有限。
能够测试诸如运行根保留百分比(如果有)之类的事情也可能很方便。
答案3
fallocate -l 50G big_file
truncate -s 50G big_file
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