inode 是什么?
Last updated on 8 months ago
inode 是什么?
文件数据是存放在磁盘上;磁盘最小的单位是 512byte,我们称之为扇区;在与操作系统交互的过程中,操作系统读取磁盘最小粒度并不是一个扇区,而是8个扇区,也就是4k,称之为块;
- 扇区是设备的最小寻址单元
- 块是文件系统最小寻址单元
从操作系统的角度来看,磁盘分为了很多个块,文件数据也是存放在块里面; 和其他主流的存储系统一样,也需要元数据,也就是描述这个块的数据,存放块元数据的区域我们称之为 inode!
从那里可以看到?
1 |
|
从ls命令可以看到 start.sh
大小为229个字节,stat 命令可以看到文件的元数据信息,看到Block 为8, 按照上面所说一个block 为512字节,8个为1k,可实际文件才229字节,不到一个扇区,为什么要占用8个呢?那么现在有个问题,文件大小和block数量有什么联系?
刚才前面说了,文件系统中,块是文件系统最小寻址单元,如果是一个扇区一个扇区的来读数据,太慢了,有了block概念,它是按块大小的粒度来读取的,block才是文件存取的最小单位,所以说无论你差距多小的文件,Blocks 数量始终为8;用 dumpe2fs 命令即可看到磁盘上文件系统的Block size,为4k ,刚好就是 8个block;
TODO: 在小文件场景下,岂不是有很多文件碎片?
1 |
|
stat 里面的 IO Block又是什么?
顾名思义是 IO 块大小,其实就是文件系统的 块大小
每个inode 大小是?
对于一个裸盘,要是想使用,必须先格式硬盘,然后操作系统根据文件系统的类型(ext3,ext4等)开始进行分区,这个时候会划分 indoe的区域;
分区如下
|— super block —|———–inode block————————|——————data block——————–|
- 超级块:当文件系统挂载时进入内存
- 索引节点区:当文件被访问时进入内存
可以用 df -i
看到 磁盘上有多少inode,以及inode 使用情况
1 |
|
至于inode的大小,可以使用 dumpe2fs 看到 inode size
1 |
|
每个文件至少有一个node,如果inode 都是使用完了, 是无法创建文件的;
TODO: 那小文件的场景下,就以sda1为例, 创建了1310720个1k的文件,才用了1.28g空间,inode就没了,这个怎么办?
inode 号码
每个inode 都有个序号, ls -i
可以到,第一列为inode 号
1 |
|
在Linux中,读一个文件并不直接通过 文件名,而是通过inode 号来索引;
TODO:创建文件时候文件分配哪一个inode号呢?