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

Axe*_*ner 57 linux filesystems disk-usage hard-disk

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

我知道我可以只使用一个

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50
Run Code Online (Sandbox Code Playgroud)

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

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

Rui*_*iro 76

在 Linux 系统中创建文件的最快方法是使用fallocate

fallocate -l 50G file 
Run Code Online (Sandbox Code Playgroud)

来自男人:

fallocate 用于操作为文件分配的磁盘空间,以释放或预分配它。
对于支持 fallocate 系统调用的文件系统,通过分配块并将它们标记为未初始化来快速完成预分配,不需要对数据块进行 IO。这比通过用零填充文件来创建文件要快得多。
支持 XFS(自 Linux 2.6.38)、ext4(自 Linux 3.0)、Btrfs(自 Linux 3.7)和 tmpfs(自 Linux 3.5)。

  • *“`fallocate` 需要 root 权限”* 不在我的系统上(Linux Mint 17.3,Ubuntu 下游,因此是 Debian)。(ext4 文件系统) (3认同)

thr*_*rig 13

其他替代方案包括:

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

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

  • @Fisch - 为什么?确保您的警报阈值是正确的,并且您不会意外地设置 inode 可用百分比而不是磁盘空间可用百分比(我以前见过这样做)。如果由于您将磁盘填满到警报阈值而导致某些事情失败,那么您的警报阈值就太低了 - 警报的全部意义在于它应该*在*事情开始破坏之前提醒您。 (2认同)
  • @AxelWerner 你能将文件环回挂载为“假”分区吗?这仍然可以让您在不严重影响任何事情的情况下进行测试。使用受支持的文件系统之一对其进行格式化,您也可以使用 fallocate。 (2认同)

小智 10

  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

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

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

如果您喜欢使用dd,通常您可以尝试使用seek。只需设置seek=file_size_what_you_need和设置count=0。那会告诉系统有一个文件,它的大小是你设置的,但系统实际上不会创建它。使用这种方式,您可以创建一个大于分区大小的文件。


例如,在可用空间小于 3G的ext4分区上。使用dd创建一个作为元数据存在的 5T 文件——几乎不需要块空间。

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,上面的 `dd` 示例可能会分配一个稀疏文件。在这种情况下,文件大小为 50G,它实际上只使用了一个块(或什至不使用),因此磁盘没有变满。天啊。 (7认同)
  • 我在我的 ext3 文件系统上测试了你的建议。它没有按预期工作。truncate 和 dd 确实创建了一个大文件大小的文件,但“df -h”无法识别它。仍然显示相同的可用高清空间。 (2认同)

小智 5

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

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
Run Code Online (Sandbox Code Playgroud)