MySQL Error--存储inode用完后报设备没有空间

问题描述:
磁盘有足够剩余空间,但在创建文件或文件夹时报错,提示“设备没有空间”。

问题原因:
当存储设备通过分区格式化为文件系统后,会分为两部分:
1、block部分: 存储的最小单位为扇区(Sector),8个连续的扇区为block,为提高效率,操作系统通常按照block来进行数据访问。
2、inode部分: 存储block的元数据信息,如文件创建者/创建时间/文件大小/文件block位置等。

每个分区的inode数量有限,当block有剩余,但inode用完时,系统也会提示磁盘空间不足。

问题排查:
查看各分区的inode使用情况

## 查看根目录下的inode使用:
df -lhi


正常的输出信息:
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda1        1.3M  421K  831K   34% /
tmpfs            7.9M     1  7.9M    1% /dev/shm
/dev/sda3        222M   40K  222M    1% /export

如果IUse%为100%,则表示该分区所有inode用完。

查看根目录下各目录的inode使用情况:

for i in /*; 
do 
node_count=`find $i | wc -l` 
echo "$i : $node_count "
done

输出结果:

/bin : 112 
/boot : 29 
/dev : 818 
/etc : 1548 
/export : 40854 
/home : 32 
/lib : 3657 
/lib64 : 394 
/lost+found : 1 
/media : 1 
/mnt : 1 
/opt : 18 
/proc : 2371402 
/root : 43 
/sbin : 274 
/selinux : 1 
/srv : 1 
/sys : 20774 
/tmp : 10 
/usr : 72055 
/var : 358262

可以发现/var目录下使用较多,查看/var目录的使用:

for i in /var/*; 
do 
node_count=`find $i | wc -l` 
echo "$i : $node_count "
done

最后定位到/var/spool/clientmqueue下面使用较多。

问题扩展

由于早期在配置cron进行定时作业时,未在文件头部配置MAILTO="",导致在/var/spool/clientmqueue下面创建大量小文件,导致inode被用完。

如果直接使用rm命令删除特定目录下大量小文件,会存在性能问题,推荐使用下面方式:

ls /var/spool/clientmqueue | xargs /bin/rm -rf
原文地址:https://www.cnblogs.com/gaogao67/p/10883049.html