怎么在Linux利用Mknod手动创建空洞文件用于模拟测试文件系统的存储资源极限

阿芳君_1511

阿芳君_1511

2026-05-14

986人浏览

原创

mknod 不能创建空洞文件,它仅用于创建设备节点或fifo管道;空洞文件需用 truncate(推荐)或 fallocate(注意非空洞)生成,且必须是普通文件类型(s_ifreg)。

怎么在linux利用mknod手动创建空洞文件用于模拟测试文件系统的存储资源极限

mknod 不能用来创建空洞文件(file hole)。

这是个常见误解。需要明确区分两个完全不同的概念:

  • mknod:用于创建设备节点(如 /dev/sda, /dev/ttyS0)或FIFO 命名管道(p 类型)。它不操作普通文件内容,也不改变文件大小或布局。
  • 空洞文件(sparse file):是普通文件的一种特殊形态——逻辑大小很大,但实际只占用部分磁盘块(中间有“洞”),由 lseek() + write() 或 ftruncate() 等系统调用触发,与设备节点无关。

所以,想模拟磁盘空间耗尽的测试场景(比如压测日志服务、备份工具对稀疏文件的处理),你应该用以下真正有效且标准的方法:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载

✅ 正确创建空洞文件的两种主流方式

  • 用 truncate(最简单安全)
    直接将文件逻辑大小设为 10GB,但不写入任何数据,不占磁盘空间:

    truncate -s 10G ./holefile

    查看效果:

    ls -lh ./holefile      # 显示 10G(逻辑大小)
    du -h ./holefile       # 显示 0B 或几字节(实际磁盘占用)
  • 用 fallocate(快速预分配,非空洞,但常被误用作“占空间”)
    注意:fallocate -l 10G file 是真实分配磁盘块(除非文件系统支持 --keep-size 或 FALLOC_FL_PUNCH_HOLE),它生成的是满填充文件,不是空洞文件。仅在需“假装有空间但实际不写零”时用;若目标是零磁盘开销+大逻辑尺寸,请坚持用 truncate。

❌ 为什么 mknod 不行?

  • mknod filename p → 创建命名管道(FIFO),不是普通文件,不能 ls -l 查大小,也不能 du 统计,更无法用于存储测试。
  • mknod filename c 1 3 → 创建字符设备(如 /dev/null 的接口),它根本不在你的工作目录里“占空间”,而是内核驱动入口。
  • 所有 mknod 创建的都是特殊文件类型(S_IFCHR / S_IFBLK / S_IFIFO),stat 显示 device 字段而非 size 字段;而空洞文件必须是普通文件(S_IFREG),且 st_size > st_blocks * 512。

? 验证是否真有“洞”

# 创建后检查
truncate -s 2G ./test_hole
# 跳过前 1GB,写 4 字节到末尾
dd if=/dev/zero of=./test_hole bs=1 count=4 seek=$((2*1024*1024*1024-4)) 2>/dev/null

# 查看:逻辑大小仍是 2G,但磁盘块极少
ls -lsh ./test_hole   # 第一列是实际占用(KB),第二列是逻辑大小

提示:ls -lsh 中第一个数字是磁盘实际占用(KB),第二个是 st_size(字节),差值越大,洞越多。

不复杂但容易忽略。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3850

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3313

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2433

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5870

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5502

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3253

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2745

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2959

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习