linux 中的 inode

硬盘的最小存储单位:“扇区”(Sector),每个扇区储存512字节(相当于0.5KB)。
块:连续八个 sector组成一个 block,最常见的是4KB;
操作系统读取硬盘的时候,一次性读取一个"块"(block)。

inode:记录文件元信息,“索引节点”。比如文件的创建者、文件的创建日期、文件的大小等等。

inode包含文件的元信息

stat example.txt

* 字节数
* User ID
* Group ID
* 读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置

硬盘格式化的时候,自动将硬盘分成两个区域。
一个是数据区,存放文件数据;
一个是inode区,存放inode所包含的信息。

inode 与数据块的关系
inode 和数据块是文件系统中两个独立的资源。
即使所有数据块都被占用,inode 仍然可以分配,但它们无法用来存储实际的数据。虽然可以创建新的文件或目录,但它们将无法存储任何内容。

inode 的大小通常是 128 字节或 256 字节

inode如何记录大文件
假设每个数据块大小为 4KB,直接指针有 12 个,间接指针块可以存储 1024 个指针:

  • 直接指针可以引用 12 * 4KB = 48KB 的数据。
  • 一级间接指针可以引用 1024 * 4KB = 4MB 的数据。
  • 二级间接指针可以引用 1024 * 1024 * 4KB = 4GB 的数据。
  • 三级间接指针可以引用 1024 * 1024 * 1024 * 4KB = 4TB 的数据。

每个数据块并不对应一个inode
对于小文件,是直接指针。对于大文件,是间接指针。

创建磁盘或格式化文件系统时,如何确定 inode 数量
这个默认值通常是每 16KB 或 32KB 的文件系统空间分配一个 inode。例如,如果格式化一个 1GB 的分区,默认的 inode 数量可能是:

1GB / 16KB = 65536 inodes (大约)

文件读取过程

  1. 确定文件大小:首先,文件系统通过查询文件的 inode 来确定文件的实际大小。
  2. 定位数据块:文件系统使用 inode 中指向数据块的指针来确定文件数据存储在哪些块中。
  3. 读取数据
    • 完整块读取:如果文件的大小正好是块大小的整数倍,那么文件系统会按块读取,直到读取完所有块。
    • 部分块读取:如果文件的大小不是块大小的整数倍,那么文件系统会读取包含文件末尾部分的最后一个块,但只会读取该块中属于文件的那部分数据。
      如何读取剩余部分
  4. 计算偏移量:文件系统会计算文件末尾在最后一个块中的偏移量。这是通过文件大小对块大小的取模运算来完成的。
  5. 读取剩余数据:文件系统只读取从块的起始位置到文件末尾的数据,忽略块中剩余的部分。

相关指令

stat example.txt #元信息

df -i #查看每个硬盘分区的inode总数和已经使用的数量,
sudo dumpe2fs -h /dev/hda | grep "Inode size"  #查看每个inode节点的大小
ls -i example.txt #文件名对应的inode号码
ls -i /etc #目录也是一个文件,即文件名和inode号码

ln 源文件 目标文件 #硬连接,多个名对应一个inode

目录中
".",是当前目录的inode号码,等同于当前目录的"硬链接""..",是当前目录的父目录的inode号码,等同于父目录的"硬链接"。

软连接
文件A和文件B的inode号码不一样,但是文件A的内容是文件B的路径。
文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错
B的inode"链接数"不会因此发生变化

ln -s 源文文件或目录 目标文件或目录 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值