“no space left on device”(磁盘空间不足)问题
文章参考:
https://blog.csdn.net/m0_51590371/article/details/123177049
https://www.cnblogs.com/aspirant/p/3604801.html
https://www.linuxidc.com/Linux/2017-09/146689.htm
写得乱,可直接看原著文章。
在linux中,有两个概念,就是block和inode
block:用于存放实际数据 df -h
inode:存放文件属性 df -i
一、Inode
1、inode table (inode 表格)
iNode是用来存储数据属性信息的,iNode包含的属性包括:文件大小、属组、归属的用户组、读写权限、文件类型、修改时间、还包括指向文件实体的指针功能(iNode节点和block的对应关系),但是,iNode不包括文件名。
ls -i,就可以看到inode节点了。
inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode的数值,操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体。
inode是一串数字,不同的文件对应的inode在文件系统中是唯一的。inode相同的文件,互为硬链接文件(文件又一个入口)。一个文件被创建后至少要占用一个inode和一个block。如果一个文件很大,可能占多个block,如果文件很小,至少占一个,并且剩余空间不能被其他的文件使用。
因为inode要存放文件的属性信息,所以inode是有大小的,CentOS5 inode的默认大小为128字节,而CentOS6 inode的默认大小是256字节,inode的大小在文件系统被格式化之后就无法更改了,格式化前可以指定inode大小。
生成和指定iNode大小,mkfs.ext4 -b 2048 -I 256 /dev/sdb
查看iNode的总量和使用量命令:df -i
2、查看是否inode满了
find / -size +4k -type d |xargs ls -ldhi #查找系统中 目录大小大于1M(目录一般大小为4K,所以目录要是大了那么文件必然很多)
二、.data block (资料区块)
Block 是用来存储实际数据的。
Block是记录文件内容的区域,inode则是记录该文件的属性及其放置在哪个Block之内的信息。
理解:可以把iNode理解为一本书的目录,block理解为书的每一页。
磁盘读取数据是按block为单位读取的。一个文件可能占用多个block。每读取一个block就会消耗一次磁盘I/O。如果要提升磁盘IO性能,那么就要尽可能一次性读取数据尽量的多。
一个block只能存放一个文件的内容,无论内容有多小。如果block 4K,那么存放1K的文件,剩余3K就浪费了。
block并非越大越好。block太大对于小文件存放就会浪费磁盘空间,例如:1000K的文件,block为4K,占用250个block,block为1K,占1000个block。文件较大时,block设置大一些会提升磁盘仿效效率。
3.小结
查看某分区的block和inode的数量,通常block比inode多
dumpe2fs /dev/sda2 |grep ‘Block count’
dumpe2fs /dev/sda2 |grep ‘Inode count’
dumpe2fs /dev/sda2 |grep ‘Block size’
dumpe2fs /dev/sda2 |grep ‘Inode size’
1.查看是否是block满了
df -h --查看所有block使用情况
du -sh /usr/* |grep G ###查找大文件
7.3G /usr/local
du -sh /usr/local/ |grep G
7.3G /usr/local/bin
du -sh /usr/local/bin/ |grep G
7.3G /usr/local/bin/1g
\rm -f /usr/local/bin/1g ###删除大文件
使用du -h -x --max-depth=1 ,查看占用过高的目录,对过高目录中的内容适当删减。