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)。
thr*_*rig 13
其他替代方案包括:
能够测试诸如运行到根保留百分比之类的事情(如果有)也可能很方便。
小智 10
fallocate -l 50G big_file
truncate -s 50G big_file
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)
小智 5
您还可以利用许多基于 Linux 的系统都支持的stress-ng 工具:
stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
Run Code Online (Sandbox Code Playgroud)