zoukankan      html  css  js  c++  java
  • 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录"shen1": 设备上没有空间

      现象:df -h显示硬盘还有14G空间,但是touch file/mkdir directory都失败,提示硬盘没有空间

      

      原因:df -ia查看下inode的使用情况,发现已经爆了,(下图显示使用88%,还没有用完)

      

      那么,inode究竟是什么?为什么它使用完,就不能创建文件和文件夹了?

      解释:文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

    操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

      文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"(index node)。

      每一个文件都有对应的inode,里面包含了与该文件有关的一些信息

      

      可以使用stat命令查看inode的信息:stat example.txt

      另外,单个目录下子目录的数量也是有限制的

      统计目录inode占用数目:

    find */ ! -type l | cut -d / -f 1 | uniq -c

    find */ -exec stat -c "%n %i" {} ;|awk -F "[/ ]" '{if(! a[$1-$NF]++) l[$1]++}END{for (i in l) print i,l[i]}'

     

       echo file{1..500000} |xargs touch     批量新建大量文件;参数过多,touch无法直接创建
       echo file{1..500000} |xargs rm        批量删除大量文件;参数过多,rm无法直接删除

    参考:

    1、http://www.ruanyifeng.com/blog/2011/12/inode.html

    2、https://www.jianshu.com/p/6978bddd69af

    3、http://blog.51cto.com/13520924/2092364

    4、https://blog.csdn.net/lidan3959/article/details/16981137

  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/shengulong/p/9069187.html
Copyright © 2011-2022 走看看