理解文件系统中inode的概念

*
概念:inode就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等

*
inode 是 UNIX 操作系统中的一种数据结构,其本质是结构体

*
在 Linux 中,索引节点结构存在于系统内存及磁盘,其可区分成 VFS inode 与实际文件系统的 inode。

*
VFS inode 作为实际文件系统中 inode 的抽象,定义了结构体 inode 与其相关的操作 inode_operations
Linux 中 VFS inode include/linux/fs.h struct inode { ... const struct
inode_operations *i_op; // 索引节点操作 unsigned long i_ino; // 索引节点号 atomic_t
i_count; // 引用计数器 unsigned int i_nlink; // 硬链接数目... } struct inode_operations {
... int (*create) (struct inode *,struct dentry *,int, struct nameidata *); int
(*link) (struct dentry *,struct inode *,struct dentry *); int (*unlink) (struct
inode *,struct dentry *); int (*symlink) (struct inode *,struct dentry *,const
char *); int (*mkdir) (struct inode *,struct dentry *,int); int (*rmdir)
(struct inode *,struct dentry *);... }
*
Linux 中 VFS inode

* 每个文件存在两个计数器:i_count 与 i_nlink,即引用计数与硬链接计数
* i_count 用于跟踪文件被访问的数量,而 i_nlink 则是上述使用 ls -l 等命令查看到的文件硬链接数
* 当文件被删除时,则 i_nlink 先被设置成 0
* 文件的这两个计数器使得 Linux 系统升级或程序更新变的容易
* 系统或程序可在不关闭的情况下(即文件 i_count 不为 0),将新文件以同样的文件名进行替换,新文件有自己的 inode 及 data
block,旧文件会在相关进程关闭后被完整的删除
*
文件系统 ext4 中的 inode
ext4 中的 inode struct ext4_inode { ... __le32 i_atime; // 文件内容最后一次访问时间 __le32
i_ctime; // inode 修改时间 __le32 i_mtime; // 文件内容最后一次修改时间 __le16 i_links_count; //
硬链接计数 __le32 i_blocks_lo; // Block 计数 __le32 i_block[EXT4_N_BLOCKS]; // 指向具体的
block... };
*
三个时间的定义可对应与命令 stat 中查看到三个时间

*
i_links_count 不仅用于文件的硬链接计数,也用于目录的子目录数跟踪(目录并不显示硬链接数,命令 ls -ld 查看到的是子目录数)

*
文件系统 ext3 对 i_links_count 有限制,其最大数为:32000(该限制在 ext4 中被取消)

技术
©2019-2020 Toolsou All rights reserved,
uboot设置nfs参数——linux kernel使用nfs方式加载根文件系统rootfs(六)Vue 中获取下拉框的文本及选项值Java分布式系统高并发解决方案小结使用mt-range实现一个数字随着滑动杆变化的效果作弊器开发商致歉python读取、写入txt文本内容华为受限老对手受益最大?分蛋糕的人越来越多了!STM32红外寻迹小车SpringDataJPA的Repository理解分页工具类PageResult