no space left on device磁盘空间不足

   磁盘在使用之前需要做RAID冗余阵列、分区、格式化、挂载;
   格式化的目的:1、创建文件系统;2、初始化inode和block(即inode和block的数量是一定的);每一个非空文件都要占用一个inode和至少一个block,那么无论是inode满了还是block满了,磁盘就存放不了东西了,就会提示no space left on device;
         那么如何解决这个问题?
         1、df -h 查看磁盘(block)使用情况,如果满了,那么删除不需要的大文件;
         2、df -i  查看inode使用情况,如果inode满了,查找目录本身大于1M空间的;(思考为什么要找目录本身大于1M的?提示:目录的本身也就是目录的实际内容,即目录的block中放的是什么?----文件名,文件名越多目录本身的block就越大,就代表目录里面小文件越多,那么用什么查找目录本身大于1M的?find)
         具体排查过程:首先我创建两个空目录;
         1、block满了的情况:这里我实际创建一个大文件进行演示;
         ![](http://i2.51cto.com/images/blog/201812/09/d6ff0be25346510e46f80bdff80c0de0.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
         ![](http://i2.51cto.com/images/blog/201812/09/bbf9d5ea10d43be017610aaae62cfae3.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
         假设这个时候,磁盘bloock满了,具体查找的过程如下,先过滤出根下占用空间最大的目录,然后过滤出改目录下最大的,一级一级过滤直到找到大文件为止;![](http://i2.51cto.com/images/blog/201812/09/862e1e4587bbf57d377d848800b65962.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

    找到大文件之后确认是否要删除;
    2、inode满了查找:上面已经说了,要查找目录本身(不包含下面文件大小)大小大于1M的,用find的查找,-size 查找的就是目录本身的实际大小(不包含下面文件);找到之后,目录没用可以删除目录;目录有用可以配合ls |xargs rm -f  ,如果还是删除不掉,再缩小范围,find  -name |xargs rm -f;

猜你喜欢

转载自blog.51cto.com/14125231/2328155