生活随笔
收集整理的这篇文章主要介绍了
[文件系统]文件系统学习笔记(一)---基本概念以及inode
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1,文件系统基本概念
文件系统是一种用来存储和组织计算机文件、目录及其包含的数据的方法,它使文件、目录以及数据的查找和访问得到简化。
2,硬链接和软链接的区别
硬链接和软链接的区别
– 符号链接
– ln –s file1 file2
• 目录项,内容为指向文件名的指针,并不存在其他数据。目标文件删除时,符号链接仍然继续保持。使用了一个独立的inode。Inode的数据段包含了一个字符串,给出了链接目录的路径。(相当于windows中的快捷键)
– 硬链接
– ln file1 file2
• 与原文件共用一个inode,增加引用计数。新建或者删除硬链接,则相应的增加或减小该引用计数。为0时,删除源文件;
• dentry还是不一样,inode是一样
3,struct inode结构体
这里虚拟文件系统里的inode节点是指内存里的inode节点,包含了一些实际硬盘上的inode节点所没有的信息。
[cpp] view plaincopy
<pre name="code" class="cpp"><fs.h> struct inode { struct hlist_node i_hash; struct list_head i_list; struct list_head i_sb_list; struct list_head i_dentry; unsigned long i_ino; atomic_t i_count;<span style="white-space:pre"> </span> unsigned int i_nlink;<span style="white-space:pre"> </span> uid_t i_uid;<span style="white-space:pre"> </span> gid_t i_gid;<span style="white-space:pre"> </span> dev_t i_rdev;<span style="white-space:pre"> </span> unsigned long i_version; loff_t i_size; <span style="white-space:pre"> </span> struct timespec i_atime; struct timespec i_mtime;<span style="white-space:pre"> </span> struct timespec i_ctime; unsigned int i_blkbits; blkcnt_t i_blocks;<span style="white-space:pre"> </span> umode_t i_mode;<span style="white-space:pre"> </span> struct inode_operations *i_op;<span style="white-space:pre"> </span> const struct file_operations *i_fop; struct super_block *i_sb; struct address_space *i_mapping; struct address_space i_data; struct dquot *i_dquot[MAXQUOTAS]; struct list_head i_devices; union { struct pipe_inode_info *i_pipe; struct block_device *i_bdev;<span style="white-space:pre"> </span> struct cdev *i_cdev;<span style="white-space:pre"> </span> }; int i_cindex; __u32 i_generation; unsigned long i_state; unsigned long dirtied_when; unsigned int i_flags; atomic_t i_writecount; void *i_security; };
i_mapping成员指向该文件所在的内存空间,要访问该文件的实际内容则通过该成员访问,address_space用于管理文件映射到内存的页面。
inode结构中的i_mapping成员的目的是缓存文件的内容,对文件的读写操作首先在i_mapping包含的缓存里寻找文件的内容,如果有缓存,对文件读写操作可以直接从缓存中获取,而不用再去物理硬盘读取,写操作也是首先写到缓存,然后在合适时机由缓存写到磁盘。
每个inode有一个i_list成员,用于将inode存储在一个链表中,根据inode状态,它有三种主要情况
(1)inode在内存中,未关联到任何文件,处于非活动状态
(2)inode在内存中,正在由一个或者多个进程使用,通常表示一个文件,此时i_count和i_nlink都大于0。
文件内容和底层元数据都于底层磁盘上的信息相同,
(3)inode处于活动使用状态,其数据内容已经改变,与存储介质上的内容不一样,这种状态的inode节点为脏的。
superblock是用于管理该文件系统中所有的inode相关信息的,比如增加inode,每个inode的起始地址等等。
如果一个分区大小为1GB,每个block为4KB,一个inode为128B,并假设平均每个文件占用2个block。那么inode的数量为1GB/(8KB+128B)=129055.5,即129055。那么inode table的大小为129055*128B=15.75MB。所以按照这样的规划,如果一个1GB的磁盘,那么格式化后,就已经有15.75MB被使用了。
3,查看文件inode信息的命令
stat命令
转载于:https://www.cnblogs.com/zhiliao112/p/4067833.html
总结
以上是生活随笔为你收集整理的[文件系统]文件系统学习笔记(一)---基本概念以及inode的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。