什么是索引节点(index node, Inode)
在每个 Linux存储设备(磁盘/硬盘)或在储设备的分区(此时的存储设备可以是硬盘、软盘、U盘,等等)中被格式化为ext系列(xfs也差不多)文件系统之后,都会生成两部分内容:
第一部分是Inode(默认大小一般128或256字节),第二部分是 Block(默认大小一般4KB)。由于磁盘或分区一般都比较大,因此,Inode 和Block 都会存在很多个,并且都可以存放数据信息。
Inode 本质上是一小块具备唯一数字编号的存储空间,主要用来存放文件(目录)属性(例如 ls -l 的结果)的数据信息,注意,Inode 里面唯独不包含文件名本身(文件名不算文件的属性)。
Inode 存储的属性信息包括但不限于文件大小、属主(用户)归属的用户组、文件权限、文件类型,修改时间等,还包含指向文件的实体指针等(Block的位置,即Inode节点与Block的对应关系)
## 例子:
[root@db01 ~]# ls -lhi 1.txt
33931708 -rw-r--r-- 1 root root 156 Jul 19 15:11 1.txt #//权限属主属组等属性信息不包含在156B这个文件大小里面,而是在Inode里
# 存放文件的真实数据(文件内容)的磁盘空间:block
比如1.txt文本内容的156B
# 存放文件的元数据(文件的属性)的磁盘空间:inode
比如 属主 属组 日期 大小 权限等 (文件名不算)(文件名在上级目录的block里)
## inode和block的特点:
1.一个非空文件至少要占用一个Inode(有且只有一个)和一个block(可以有多个)
2.磁盘读取数据是以block为单位读取的,每读一个block消耗一次磁盘IO
3.若文件较大,则一个文件会占用多个block;若文件较小,则一个block的剩余空间可能会浪费。比如:
一个9k文件会占三个block,最后一个block是1k,剩下3k浪费,叫脏数据。
系统如何找文件?通过Inode号
Inode 除了要记录文件属性的信息之外,还会为每个文件进行信息素引,所以就有了 Inode 的数值。操作系统根据指令,即可通过 Inode 的值最快速地找到相对应的文件实体。文件、Inode 和Block 之间的关系见下图。
如何查看和管理Inode
# 查看文件系统Inode总量及余量
[root@localhost ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 9.3M 35K 9.3M 1% /
devtmpfs 119K 371 119K 1% /dev
tmpfs 122K 1 122K 1% /dev/shm
tmpfs 122K 677 121K 1% /run
tmpfs 122K 16 122K 1% /sys/fs/cgroup
/dev/sda1 250K 326 250K 1% /boot
tmpfs 122K 1 122K 1% /run/user/0
# 查看磁盘的使用情况即相当于查看Block的情况
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.5G 18G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
# 通过ls -i或者stat可以查看inode号