关键词:Linux inode 满了怎么办、模拟 inode 耗尽、inode 满实验、No space left on device inode
Linux inode 占满解决、CentOS7 inode 满测试、Linux 小文件占满 inode
在 Linux 运维中,经常会遇到磁盘还有空间,但系统提示 No space left on device 的问题,这大概率是 inode 资源耗尽 导致的。
本文通过完整实战,手把手带你模拟 inode 占满场景,快速掌握排查与恢复思路。
一、实验前说明
实验环境:CentOS 7 / Ubuntu 通用
实验目录:/data(安全、易清理,不影响系统运行)
实验原理:通过创建海量空文件,只占用 inode,不占用实际磁盘空间
建议在测试服务器进行实验,避免影响生产环境。
二、准备实验磁盘并格式化
首先查看系统磁盘信息,确认实验磁盘:
lsblk执行结果:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 9.5G 0 rom /mnt
本次实验使用 sdb 磁盘,格式化为 ext4 并指定 inode 数量,方便快速耗尽:
mkfs.ext4 -N 50000 /dev/sdb执行结果:
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
320 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成创建挂载目录并挂载:
mkdir /data
mount /dev/sdb /data查看挂载后 inode 初始状态:
df -i执行结果:
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 482047 361 481686 1% /dev
tmpfs 485036 97 484939 1% /dev/shm
tmpfs 485036 577 484459 1% /run
tmpfs 485036 16 485020 1% /sys/fs/cgroup
/dev/mapper/centos-root 23654400 418544 23235856 2% /
/dev/sda1 524288 327 523961 1% /boot
tmpfs 485036 1 485035 1% /run/user/54321
/dev/sr0 0 0 0 - /mnt
tmpfs 485036 1 485035 1% /run/user/0
/dev/sdb 51200 11 51189 1% /data三、进入实验目录
cd /data四、批量创建文件,模拟 inode 占满
执行循环命令,快速创建大量空文件,耗尽 inode:
for i in {1..1000000};do touch file$i;done执行一段时间后会出现报错:
touch: cannot touch 'filexxx': No space left on device此时 inode 已被占满。
五、验证 inode 满现象
1. 查看磁盘空间(空间充足)
df -h执行结果:
[root@orcl /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 824M 1.1G 44% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 13G 33G 29% /
/dev/sda1 1014M 150M 865M 15% /boot
tmpfs 379M 0 379M 0% /run/user/54321
/dev/sr0 9.5G 9.5G 0 100% /mnt
tmpfs 379M 0 379M 0% /run/user/0
/dev/sdb 20G 46M 19G 1% /data2. 查看 inode 使用(已 100%)
df -i执行结果:
[root@orcl /]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 482047 361 481686 1% /dev
tmpfs 485036 97 484939 1% /dev/shm
tmpfs 485036 577 484459 1% /run
tmpfs 485036 16 485020 1% /sys/fs/cgroup
/dev/mapper/centos-root 23654400 418544 23235856 2% /
/dev/sda1 524288 327 523961 1% /boot
tmpfs 485036 1 485035 1% /run/user/54321
/dev/sr0 0 0 0 - /mnt
tmpfs 485036 1 485035 1% /run/user/0
/dev/sdb 51200 51200 0 100% /data3. 测试新建文件(创建失败)
touch test.txt执行结果:
touch: cannot touch 'test.txt': No space left on device六、清理实验文件,恢复环境
rm -rf /data/file*清理完成后,再次查看 inode,确认恢复正常:
df -i执行结果:
[root@orcl data]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 482047 361 481686 1% /dev
tmpfs 485036 97 484939 1% /dev/shm
tmpfs 485036 577 484459 1% /run
tmpfs 485036 16 485020 1% /sys/fs/cgroup
/dev/mapper/centos-root 23654400 418544 23235856 2% /
/dev/sda1 524288 327 523961 1% /boot
tmpfs 485036 1 485035 1% /run/user/54321
/dev/sr0 0 0 0 - /mnt
tmpfs 485036 1 485035 1% /run/user/0
/dev/sdb 51200 11 51189 1% /data测试再次创建文件:
touch test.txt
[root@orcl data]# ls
lost+found test.txt七、inode 满问题总结
出现 No space left on device 不一定是磁盘满,优先用 df -i 检查 inode。
inode 耗尽主要原因:大量小文件、临时文件、日志碎片堆积。
生产环境需定期清理小文件,避免业务异常。
适用场景
Linux 运维面试实操
服务器故障排查练习
Linux 文件系统原理学习
评论区