侧边栏壁纸
  • 累计撰写 11 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Linux No space left on device?实测 inode 满了怎么办(CentOS7 实操)

自留地
2026-03-21 / 0 评论 / 0 点赞 / 13 阅读 / 0 字

关键词: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% /data

2. 查看 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% /data

3. 测试新建文件(创建失败)

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 文件系统原理学习

0

💻 博主自用服务器推荐

我平时做Linux实验、排查运维故障、搭建个人博客,全程用阿里云ECS:
✅ 稳定不掉线,大厂品质有保障
✅ 新用户2核2G低至99元/年,性价比拉满
✅ 自带安全组/快照,练手不怕搞坏环境

点击领取阿里云优惠

评论区