文章最后更新时间:2026年01月29日
Inode使用率满了的常见情况
一、宝塔面板磁盘变红了显示Indoe节点爆满

在日常使用BT(宝塔)面板的时候发现磁盘变红了,但是磁盘空间还剩很多,细看之下才发现Inode信息(Indoe是错误的)使用率超99%,部分插件功能使用受限。
二、分区内创建文件时,系统提示磁盘空间不足
在公司一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。
后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
[root@bastion-IDC ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on ....... ....... /dev/mapper/VolGroup-lv_home 53452800 53452800 0 100% /data
三、磁盘使用率没有占满,但是无法写入文件
问题:使用"df -h"命令发现磁盘使用率没有占满,但是无法写入文件,提示"no space left on device"!
原因:磁盘的inode节点使用爆满了!("df -i"命令查看/var空间的inode爆满)。
Inode是什么?为什么会爆满
inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的索引信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。
inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。
Linux 系统中 inode 是存储文件元数据的重要结构,其数量在创建文件系统时确定且无法直接动态调整,需重新格式化文件系统才能增减,inode 不足会导致磁盘有剩余空间却无法创建新文件并报特定错误,增减 inode 则分别适用于存储大量小文件、存储大文件以节省空间的场景。
Inode索引节点爆满是因为其默认分配为16384byte(16kb),当大量小文件低于这个值就会占用超过自身大小的空间,所以造成了Inode节点爆满。
发现Inode占用过高如何处理
一、服务器Block有剩余,Inode爆满
分区内创建文件时,系统提示磁盘空间不足,服务器的Block虽然还有剩余,但inode已经用满,因此在创建新目录或文件时,系统提示磁盘空间不足,排查是由于/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
处理方案:
1.删除/data/cache目录中的部分文件,释放出/data分区的一部分inode,特别要留意那些spool出来的文件,这种文件一般会占用比较多的节点,因为比较小而且零碎,同时要多留意日志文件信息等,如果是日志文件占用大量的inodes可以临时释放清理下过期的日志,也可以根据较大目录的文件占用情况,临时转移部分文件到占用磁盘较小的目录中。
2.用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
# ln -s /opt/newcache /data/cache
3.更换服务器,用高配置的服务器替换低配置的服务器。
二、crontab里面定时执行的句子里没有加“> /dev/null 2>&1”
系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了很大零碎的文件,crontab的job有问题,造成/var/spool/clientmqueue中产生许多的零碎文件。
处理方法:
用"rm -rf *"会不能删除,并会有相应的提示,大意是参数太多。
正确方法:
在/var/spool/clientmqueue/下执行命令:
# lsattr ./|awk -F"/" '{print $3}'|xargs -i rm -rf {}表示用lsattr列出./下面的文件名的属性,用awk取出名字,然后rm -rf
还有一个比较靠谱的方法:
# find /var/spool/clientmqueue/ -type f -exec rm {} \;或者在/var/spool/clientmqueue/目录下
# cd /var/spool/clientmqueue/
# find ./ -exec rm {} \;将crontab中没有定向输出的行都在最后加上
> /dev/null 2>&1
在删除的过程中操作,或者先停止crontab,加上重定向。
三、宝塔面板磁盘标红Inode爆满
1.清理网站日志/php站点session/系统邮件/临时文件
cd /www/server/panel && python tools.pyc clear
2.清空面板回收站
rm -rf /www/Recycle_bin/*
3.清除mysql二进制日志(操作过程中会停止重启数据库)
/etc/init.d/mysqld stop rm -f /www/server/data/ib_logfile* rm -f /www/server/data/mysql-bin.* /etc/init.d/mysqld start
需要注意的是 执行rm命令时是不会返回任何提示的,直到能再次输入命令之前它都是正在删除文件的状态 能输入命令的时候即删除完成

调整与修改Inode节点数量
一、修改Inode节点数量
1.查看磁盘信息
df -i
示例输出:
Filesystem(磁盘)Inodes(索引节点总数量) IUsed(已使用) IFree(剩余) IUse%(使用百分比) Mounted on /dev/sda1 1000000 250000 750000 25% / /dev/sdb1 500000 10000 490000 2% /data
了解磁盘挂载情况与Inode索引节点使用情况。
2.查看磁盘类型
df -T
示例输出:
# df -T 文件系统 类型 1K-块 已用 可用 已用% 挂载点 devtmpfs devtmpfs 3992420 0 3992420 0% /dev tmpfs tmpfs 4004356 0 4004356 0% /dev/shm tmpfs tmpfs 4004356 8748 3995608 1% /run tmpfs tmpfs 4004356 0 4004356 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 52403200 1598912 50804288 4% / /dev/sda1 xfs 1038336 153388 884948 15% /boot tmpfs tmpfs 800872 0 800872 0% /run/user/0 /dev/mapper/centos-home xfs 42970624 33004 42937620 1% /home
Filesystem(磁盘) Type(类型) 1K-blocks(块数量) Used(已使用) Available(剩余) Use%(使用百分比) Mounted on /dev/sda1 ext4 104857600 20971520 83886080 20% / /dev/sdb1 xfs 524288000 104857600 419430400 20% /data
市面主流磁盘类型主要是ext4和zfs,区分在于ext4 可创建后启用且可挂载配置强制执行,XFS 需初始挂载激活且 quotacheck 无效)、文件系统重定义大小(ext4 支持扩缩容,XFS 仅能扩容)、inode 号(ext4 不超 2³²,XFS 支持动态分配但部分应用处理大 inode 数易失败可挂载时用 inode32 强制其低于 2³²。
3.重格分配Inode节点数量
第一步:备份数据
重新格式化会清空文件系统上的所有数据,因此必须先备份重要文件:
rsync -av /data /backup #如果备份文件过大无法存于其它盘或者为了数据安全还是建议下载下来
第二步:卸载文件系统
卸载目标分区:
sudo umount /dev/sdb1 #/dev/sdb1需调整为实际位置
第三步:重新格式化并设置 inode
使用 mkfs 工具重新创建文件系统。
格式化为 ext4
指定 inode 密度(每多少字节分配一个 inode):
sudo mkfs.ext4 -i 16384 /dev/sdb1 #/dev/sdb1需调整为实际位置自行修改磁盘挂载点位置与inode字节 ,现有Inode数量翻倍就用8192以此类推
参数说明:
-i <bytes>:每多少字节分配一个 inode,默认是 16384(16kb)。
值越小:inode 数量越多(适合小文件)。
值越大:inode 数量越少(适合大文件)。
示例:
增加 inode 数量(更多小文件):
sudo mkfs.ext4 -i 8192 /dev/sdb1 #/dev/sdb1需调整为实际位置增加同理
减少 inode 数量(适合大文件):
sudo mkfs.ext4 -i 32768 /dev/sdb1 #/dev/sdb1需调整为实际位置减少同理
格式化为 xfs
如果使用 xfs 文件系统,重新格式化没有直接的 inode 调整参数,但可以通过 -n 和 -d 参数优化空间配置:
sudo mkfs.xfs /dev/sdb1 #/dev/sdb1需调整为实际位置
第四步:挂载文件系统
创建挂载点:
sudo mkdir /data
挂载分区:
sudo mount /dev/sdb1 /data #/dev/sdb1需调整为实际位置
第五步:恢复数据
将数据从备份恢复到新分区:
rsync -av /backup/ /data


二、调整 inode 数量
第一步:查看当前 inode 配置
假设 /dev/sdb1 是目标数据盘:
sudo tune2fs -l /dev/sdb1 | grep "Inode size" #/dev/sdb1需调整为实际位置
示例输出:
Inode size: 256 Journal inode: 8
查看当前的 inode 配置,包括 inode 大小和分配情况。
第二步:设置更高的 inode 数量
重新格式化 /dev/sdb1,适合存储大量小文件:
sudo mkfs.ext4 -i 8192 /dev/sdb1 #/dev/sdb1需调整为实际位置
这会增加 inode 数量。
第三步:设置更低的 inode 数量
重新格式化 /dev/sdb1,适合存储大文件:
sudo mkfs.ext4 -i 32768 /dev/sdb1 #/dev/sdb1需调整为实际位置
这会减少 inode 数量。
第四步:指定Inode数量
sudo mkfs.ext4 /dev/sdb1 -N 30000000 #/dev/sdb1需调整为实际位置,直接指定数量(30000000)

其他注意事项
不同文件系统支持情况:
ext4:支持通过重新格式化调整 inode。
xfs:inode 数量在文件系统创建时固定,无法调整。
btrfs:动态分配 inode,无需手动调整。
备份数据:
调整 inode 需要重新格式化文件系统,务必在操作前备份数据。
计划分区用途:
如果文件系统中有大量小文件(如日志、缓存),建议设置更高的 inode 密度。
如果文件系统主要存储大文件(如视频、备份),可以适当减少 inode 数量。
对现有数据的影响:
重新格式化会清空所有数据,因此对重要数据慎用此方法。


还没有评论,来说两句吧...