inode导致No space left on device 作者: ciniao 时间: 2015-02-03 分类: 技术 * 本文发布时间较久,请自行判断有效性 某年某月某日某时,某人在工作中设置crontab定时任务规则保存时,提示`No space left on device`,此时用`df -h`检查磁盘,发现还有剩余空间,请问是什么原因及如何排查?什么会导致这种事情发生? ####什么是inode? inode在linux中,每个文件,不管大小是多少都会对应一个inode,inode就是一个专门用来保存文件属性,权限和指针(指向block) ####inodex满了会导致什么问题? 首先,在linux中,有两个概念,就是block和inode block:用于存放实际数据 inode:存放文件属性 只要这两个其中一个占满空间了,都会导致提示报错“磁盘空间不足” ####解决办法 **1.模拟测试环境** 系统:centos 7.4,磁盘空间8G,CPU 4核,内存4G(最好给大点,创建文件需要大内存) ``` [root@xmh ~]# mkdir /test [root@xmh ~]# echo /test/{1..6000000}.txt |xargs touch #创建的文件太多了,只能用这种方式创建 ``` **2.进入正题** ``` #1.当进入编辑cronta或者创建文件时,直接报错,提示磁盘空间不足 [root@xmh ~]# crontab -e /tmp/crontab.MApBTV: No space left on device [root@xmh ~]# touch xmh.txt touch: cannot touch ‘xmh.txt’: No space left on device 2.查看磁盘空间 [root@xmh ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 8.0G 3.2G 4.9G 39% / ##可以发现磁盘容量是空闲很多的 devtmpfs 1.7G 0 1.7G 0% /dev tmpfs 1.7G 0 1.7G 0% /dev/shm tmpfs 1.7G 8.7M 1.7G 1% /run tmpfs 1.7G 0 1.7G 0% /sys/fs/cgroup tmpfs 332M 0 332M 0% /run/user/0 3.查看inode空间 [root@xmh ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 4193792 4193792 0 100% / #但是inode空间已满了 devtmpfs 422466 395 422071 1% /dev tmpfs 424923 1 424922 1% /dev/shm tmpfs 424923 473 424450 1% /run tmpfs 424923 16 424907 1% /sys/fs/cgroup tmpfs 424923 1 424922 1% /run/user/0 提示:当磁盘容量或inode容量任意一个不足时就都会提示No space left on device ``` **3.解决办法** 使用find命令查找大于10M的目录,可以从df -i看出是在 根 /下容量不足,那么我们就从 / 下开始排查 ``` [root@xmh ~]# find / -type d -size +10M |xargs ls -lhd #find查找 drwxr-xr-x. 2 root root 97M Feb 15 14:00 /test [root@xmh ~]# ls /test/ |wc -l #对该目录文件数量统计 4168011 #定位好目录后删除小文件 [root@xmh /]# rm -rf /test/* #直接 rm -rf * 的话是删除不了大量的小文件 -bash: /usr/bin/rm: Argument list too long [root@xmh /]# cd /test/ [root@xmh test]# ls |xargs rm -f#删除大量的小文件,使用该命令删除 [root@xmh /]# ls /test/ |wc -l #小文件已经删除了 #再次查看inode容量 [root@xmh ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 4193792 25973 4167819 1% / #inode容量已恢复正常 devtmpfs 422466 395 422071 1% /dev tmpfs 424923 1 424922 1% /dev/shm tmpfs 424923 473 424450 1% /run tmpfs 424923 16 424907 1% /sys/fs/cgroup tmpfs 424923 1 424922 1% /run/user/0 #删除小文件所在的目录(删除时注意记录该目录的所属用户和权限) [root@jason /]# rm -rf /test/ ``` 标签: none