
索引节点是磁盘上用于描述文件的一种数据结构. 它保存了文件的大部分重要信息,包括文件数据块(用户关心的文件部分)在磁盘上的地址. 每个索引节点都有自己的标识号, 称为索引号(i-number). 实际上用户根本不需要关心文件在磁盘上的物理地址, 也不用关心索引号----除非是要找出对文件的链接. 但用户关心下列信息, 而它们都被保存在文件的索引节点中:
文件所有权: 拥有文件的用户和组
文件访问模式: 不同的用户和组是否可以读, 写或执行文件.
文件时间标记: 文件最后一次被修改的时间, 最后被访问的时间和索引节点最后被修改的时间.
文件类型: 是否为常规文件, 特殊文件或者其他类型的抽象伪装文件.
文件系统第一次被创建时(通常是磁盘第一次初始化时), 会为每一个文件系统创建若干数量的索引节点. 该数目是文件系统所能容纳的最大文件数. 只要不重新初始化文件系统, 就不能改变这个数目, 否则会损坏该文件系统上所有的数据. 很有可能(虽然很少见)文件系统会将索引节点全部用光,就像有可能用完存储空间一样----当文件系统中有很多很多小文件时,这种情况就可能发生.
使用ls –l命令会显示出在大部分信息. ls –i option显示文件的索引号. 而stat命令则可以列出索引节点中的几乎所有信息.
在linux 文件系统中,是以块为单位存储信息的,为了找到某一个文件在存储空间中存放的位置,用i 节点对一个文件进行索引。I 节点包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理的一个数据结构。
文件系统三个部分,一个是超级块,存放文件系统本身的信息;一个是i节点表,文件的属性保存在这个区中;最后一个是数据区,文件的内容保存在这个区中。
扩展资料
文件属性的存储,内核先在i节点表中找到一个空的节点(假设是47,表示的是i节点表中第9个位置的i节点),将文件的属性激励进去。
文件内容的存储。一个文件的内容往往需要许多的存储块(假设是3个块)才能容纳,而这些存储块是不连续的。内核会从自由块的列表中找出3个自由的存储块,分别是块300,100,200(内核找块的顺序不一定是从小到大排的)。内核就会把数据一次复制到块300100,200中。
将文件存储文件内容的信息记录到i节点中。上面已经将文件依次放到块300,200,100中了,所以在i节点的磁盘分布区中依次记录这3个标号,代表文件存放的地方以及组合顺序。
i节点是一个64字节长的表,存储着一个文件的元数据,包括文件大小、文件所有者、文件存取许可方式,以及文件类型,磁盘地址表。struct inode {
struct hlist_nodei_hash
struct list_headi_list /* backing dev IO list */
struct list_headi_sb_list
struct list_headi_dentry
unsigned longi_ino
atomic_ti_count
unsigned inti_nlink
uid_ti_uid
gid_ti_gid
dev_ti_rdev
unsigned inti_blkbits
u64i_version
loff_ti_size
#ifdef __NEED_I_SIZE_ORDERED
seqcount_ti_size_seqcount
#endif
struct timespeci_atime
struct timespeci_mtime
struct timespeci_ctime
blkcnt_ti_blocks
unsigned short i_bytes
umode_ti_mode
spinlock_ti_lock /* i_blocks, i_bytes, maybe i_size */
struct mutexi_mutex
struct rw_semaphorei_alloc_sem
const struct inode_operations*i_op
const struct file_operations*i_fop /* former ->i_op->default_file_ops */
struct super_block*i_sb
struct file_lock*i_flock
struct address_space*i_mapping
struct address_spacei_data
#ifdef CONFIG_QUOTA
struct dquot*i_dquot[MAXQUOTAS]
#endif
struct list_headi_devices
union {
struct pipe_inode_info*i_pipe
struct block_device*i_bdev
struct cdev*i_cdev
}
__u32i_generation
#ifdef CONFIG_FSNOTIFY
__u32i_fsnotify_mask/* all events this inode cares about */
struct hlist_headi_fsnotify_marks
#endif
unsigned longi_state
unsigned longdirtied_when /* jiffies of first dirtying */
unsigned inti_flags
atomic_ti_writecount
#ifdef CONFIG_SECURITY
void*i_security
#endif
#ifdef CONFIG_FS_POSIX_ACL
struct posix_acl*i_acl
struct posix_acl*i_default_acl
#endif
void*i_private/* fs or device private pointer */
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)