linux inode

 

硬盘格式化时候OS自动将硬盘分为

  • 数据区, 存放文件数据

  • inode区(inode table), 存放inode所包含信息

扇区与块

扇区(Sector)

扇区是磁盘上的最小存储单位

每个扇区通常包含512字节(或在新式硬盘中可能是1024或2048字节)数据

磁盘驱动器在向磁盘读取和写入数据时, 以扇区为单位进行, 因为磁盘设备很难对单个字节进行定位, 而以扇区为单位进行读写可以提高性能

块(Block)

块是虚拟文件系统传送数据基本单位, 由多个扇区组成

linux中块大小通常是2幂数倍, 且不能超过一个页大小, 同时必须是扇区大小整数倍

常见块大小是4KB, 即连续8个扇区组成一个块

文件数据存储在块中, 当文件被创建或修改时, 文件系统会根据需要分配或释放块来存储文件数据

inode

定义

inode(索引节点)是文件系统中每个文件和目录的唯一标识符, 用于存储文件/目录元数据(metadata)信息, 包括文件大小、拥有者、权限、创建时间、修改时间和访问时间等, 以及文件链接数和指向文件数据块指针等

信息

  • 文件类型

指示文件是普通文件、目录、符号链接、设备文件等

  • 文件权限

包括读、写、执行权限, 决定哪些用户或用户组可以访问文件

  • 链接计数

表示有多少个文件名指向该inode

当删除一个硬链接时, 计数减一, 变为0时, inode及其对应数据块才会被释放

  • 所有者(UID)

文件所属用户标识符

  • 所属组(GID)

文件所属组标识符

  • 文件大小

文件数据所占用字节数

  • 时间戳

(1) 访问时间(atime), 文件最后被访问时间

(2) 修改时间(mtime), 文件内容最后被修改时间

(3) 状态更改时间(ctime), inode元数据最后被修改时间

  • 数据块指针

文件数据并不存储在inode中, 而是存储在磁盘其他位置

inode包含指向这些数据块指针

大小

每个$inode$节点大小一般是128字节或256字节, 硬盘格式化时就会给定$inode$节点总数, 一般是每1KB或2KB设置一个$inode$

如1GB硬盘中, 每个$inode$节点大小为128字节, 每1KB就设置一个$inode$, 那么$inode$ $table$大小为128MB, 占硬盘空间12.8\%

作用

文件索引

inode存储文件元数据, 使得文件系统能够快速定位和管理文件

文件分配

inode存储文件数据块物理位置信息, 包括数据块地址、大小和位置等

通过inode, 文件系统可以知道文件数据块如何分配和组织, 以便有效地存储和访问文件数据

硬链接支持

多个硬链接可以共享相同inode, 从而共享相同文件数据和元数据

即使在不同位置创建了多个硬链接, 它们实际上都指向同一个文件, 节省了存储空间

性能优化

通过inode, 文件系统可以快速定位和访问文件元数据和数据, 而无需遍历整个文件系统

使得文件系统操作更高效, 提高性能

命令

查看

显示文件系统inode

df -i 挂载点或文件系统

  • 示例, 显示根文件系统inode使用
df -i /

查看文件inode信息

stat 文件
  • 示例, 查看nohup.out inode信息

显示文件或目录inode

ls -il
  • 示例, 查看home目录下inode信息

根据inode查找文件

find 搜索路径 -inum inode号码 -delete
  • 示例, 根目录下查找inode号码为1442769文件
find / -inum 1442769