硬盘格式化时候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节点总数, 一般是每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