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 挂载点或文件系统

使用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