linux inode

 

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

  • 数据区, 存放文件数据

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

磁盘存储基础单位

扇区(sector)

sector是磁盘上的最小存储单位

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

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

块(block)

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

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

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

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

inode

定义

inode(index node, 索引节点)是类 Unix 文件系统中用于存储文件/目录元数据(Metadata) 的数据结构

每个文件或目录在文件系统中都有唯一对应的 inode 号码(inode number)

信息

  • 文件类型

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

  • 文件权限

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

  • 链接计数

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

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

  • 所有者(UID)

文件所属用户标识符

  • 所属组(GID)

文件所属组标识符

  • 文件大小

文件数据所占用字节数

  • 时间戳

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

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

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

  • 数据块指针

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

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

大小

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

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

作用

文件索引

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

文件分配

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

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

硬链接支持

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

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

性能优化

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

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

命令

查看

显示文件系统inode

df -i 挂载点或文件系统

使用df -i, 输出

Filsystem                          Inodes  IUsed    IFree IUse% Mounted on
tmpfs                            4098498   1434  4097064     1% /run
/dev/nvme0n1p2                  60981248 665498 60315750     2% /
tmpfs                            4098498    546  4097952     1% /dev/shm
tmpfs                            4098498      7  4098491     1% /run/lock
efivarfs                               0      0        0      - /sys/firmware/efi/efivars
tmpfs                            4098498      1  4098497     1% /run/qemu
/dev/nvme0n1p1                         0      0        0      - /boot/efi
tmpfs                             819699    187   819512     1% /run/user/1000
//192.168.3.2/casper_self_space        0      0        0      - /mnt/nas
  • 示例, 显示根文件系统inode使用
df -i /
Filsystem       Inodes  IUsed   IFree      IUse% Mounted on
/dev/nvme0n1p2 60981248 665507 60315741     2%   /

查看文件inode信息

stat 文件
  • 示例, 查看.bashrc inode信息
stat .bashrc
    File: .bashrc
    Size: 3872      	Blocks: 8          IO Block: 4096   regular file
Device: 259,2	Inode: 56229892    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   dmjcb)   Gid: ( 1000/   dmjcb)
Access: 2026-02-03 16:38:09.136485970 +0800
Modify: 2026-01-27 23:40:30.118701235 +0800
Change: 2026-01-27 23:40:30.118701235 +0800
 Birth: 2026-01-27 23:07:45.689791725 +0800

显示文件或目录inode

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

第一列就是inode值

total 52
56363745 drwxrwxr-x 3 dmjcb dmjcb 4096  1月 29 23:40  Arduino
56781894 drwxrwxr-x 5 dmjcb dmjcb 4096  2月  4 10:36  CLionProjects
56361434 drwxr-xr-x 2 dmjcb dmjcb 4096  2月  2 13:30  Desktop
56364259 drwxr-xr-x 3 dmjcb dmjcb 4096  2月  2 16:26  Documents
56364255 drwxr-xr-x 3 dmjcb dmjcb 4096  2月  3 21:06  Downloads
56364260 drwxr-xr-x 2 dmjcb dmjcb 4096  2月  2 13:30  Music
56364261 drwxr-xr-x 2 dmjcb dmjcb 4096  2月  2 13:30  Pictures
56236073 drwxrwxr-x 5 dmjcb dmjcb 4096  1月 27 23:53  plum
56364258 drwxr-xr-x 2 dmjcb dmjcb 4096  2月  2 13:30  Public
56229898 drwx------ 7 dmjcb dmjcb 4096  2月  3 22:35  snap
56364256 drwxr-xr-x 2 dmjcb dmjcb 4096  2月  2 13:30  Templates
56242147 -rw-r--r-- 1 dmjcb dmjcb 3482  1月 28 01:22 'udo apparmor_status'
56364262 drwxr-xr-x 2 dmjcb dmjcb 4096  2月  2 13:30  Videos

根据inode查找

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

输出

/home/dmjcb/.bashrc