1. no space left on device
原因:
- 磁盘满了
- inode耗尽
解决:
-
确认磁盘是否满了: df -h (sh)
-
确认inode是否耗尽: df -i
如果inode已经耗尽,则系统不能创建文件
-
确认哪个目录的小文件超量:
- find / -type d -size +10M: 找出大小大于10M的目录(目录大小越大,表示目录下的文件越多)
- 进入对应的目录,并执行命令 find */ ! -type l | cut -d / -f 1 | uniq -c (统计目录下的文件个数)
- 确定文件可以删除,则执行 ls | xargs rm -rf
扩展:
-
查看硬盘分区的block和inode大小
dumpe2fs /dev/sdb1 |grep -i "Block size" // 查看Block size的大小 dumpe2fs /dev/sdb1 |grep -i "Inode size" // 查看Inode size的大小 dumpe2fs /dev/sdb1 |grep "Block count" // 查看Block的总数量 dumpe2fs /dev/sdb1 |grep "Inode count" // 查看inode的总数量
-
inode:
- 文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区存储512字节(相当于0.5KB)。
- 操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(Block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。
- 文件数据都存储在“块”中,那么很显然,还必须找到一个地方存储文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等。这种储存文件元信息的区域就叫做inode,中文译名“索引节点”
- 每一个文件都有inode,里面包含与该文件有关的一些信息
- 使用
stat 文件名
查看某个文件的inode信息 - inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息
- 每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
- 查看某个文件的inode值:
ls -il 文件名
- 利用inode删除文件:
find . -inum 655473 | xargs rm -rf