[文件系统]文件系统学习笔记(一)---基本概念以及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

  1. <pre name="code" class="cpp"><fs.h>
  2. struct inode {
  3. struct hlist_node i_hash;
  4. struct list_head i_list;
  5. struct list_head i_sb_list;
  6. struct list_head i_dentry;
  7. unsigned long i_ino;    //每个inode的唯一编号
  8. atomic_t i_count;<span style="white-space:pre">   </span>//记录使用该inode的进程的个数
  9. unsigned int i_nlink;<span style="white-space:pre">   </span>//使用该inode的硬连接的个数
  10. uid_t i_uid;<span style="white-space:pre">        </span>//文件的user
  11. gid_t i_gid;<span style="white-space:pre">        </span>//文件的group
  12. dev_t i_rdev;<span style="white-space:pre">       </span>//当该inode表示设备文件的时候表示与哪个设备文件通信,只是一个数字
  13. unsigned long i_version;
  14. loff_t i_size;   <span style="white-space:pre">       </span>//文件的长度,以字节大小表示
  15. struct timespec i_atime;     //文件最后访问时间
  16. struct timespec i_mtime;<span style="white-space:pre">    </span>//文件最后修改时间
  17. struct timespec i_ctime;         //最后修改inode结构本身的时间
  18. unsigned int i_blkbits;
  19. blkcnt_t i_blocks;<span style="white-space:pre">      </span>//文件按块计算的长度
  20. umode_t i_mode;<span style="white-space:pre">         </span>//文件的权限
  21. struct inode_operations *i_op;<span style="white-space:pre">  </span>//inode操作,创建连接,文件重命名,在目录下创建文件,删除文件
  22. const struct file_operations *i_fop; /* former ->i_op->default_file_ops */   //文件内容的操作,设置文件位置指针等等
  23. struct super_block *i_sb;
  24. struct address_space *i_mapping;
  25. struct address_space i_data;
  26. struct dquot *i_dquot[MAXQUOTAS];
  27. struct list_head i_devices;
  28. union {
  29. struct pipe_inode_info *i_pipe;  //管道
  30. struct block_device *i_bdev;<span style="white-space:pre">    </span>//块设备
  31. struct cdev *i_cdev;<span style="white-space:pre">        </span>//字符设备
  32. };
  33. int i_cindex;
  34. __u32 i_generation;
  35. unsigned long i_state;
  36. unsigned long dirtied_when; /* jiffies of first dirtying */
  37. unsigned int i_flags;
  38. atomic_t i_writecount;
  39. void *i_security;
  40. };

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命令

时间: 2024-10-14 01:05:32

[文件系统]文件系统学习笔记(一)---基本概念以及inode的相关文章

cocos2dx游戏开发学习笔记1-基本概念

这里主要讲构建整个游戏需要的基本元素,很大部分都摘自cocos2dx官网. 1.Director 导演 导演,顾名思义,就是对整个游戏进行整体控制的. "Director"是一个共享的(单元素集)对象,负责不同场景之间的控制.导演知道当前哪个场景处于活动状态,允许你改变场景,或替换当前的场景,或推出一个新场景.当你往场景堆中推出一个新场景时,"Director"会暂停当前场景,但会记住这个场景.之后场景堆中最顶层的场景跳离时,该场景又会继续活跃.此外"Di

php学习笔记day1--基本概念,及原理

作为一个php新手,我一直在寻找着一种快速而有效的学习方法,最后发现,快速掌握知识最快的方法就是输出,把自己学过的知识从新整理,拿出来给大家看,同时也要学会总结归纳,同一些高手交流,才能最快把知识融入自己,从而强化技能,提升能力. 博客园是一个学习的好地方,相同的问题,有不同的解决方案,能够很快的扩大自己的见识和知识体系.能跟更多爱好相同的人在一起讨论问题,是一件很令人开心的事情. 第一天学习笔记. 一.概念了解 1.什么是ip地址 互联网上的每一台电脑或者设备,都有唯一的编号,这个编号不会重复

OpenFlow Switch学习笔记(一)——基础概念

OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open Flow Protocol等.下文主要是基于个人理解整理的一些学习笔记,理解不到位的地方还请大家多多指教. 一.基础概念图: 首先我们先看下Open Flow Switch的整体结构,以便有一个初步的感性认识,如下图所示: 从上面架构图中,我们可以看到Open Flow Switch主要是由以下几个部

WPF-MVVM模式学习笔记3——MVVM概念再次挖掘

通过上篇文章<WPF-MVVM模式学习笔记2--MVVM简单样例>中举了一个例子,我对MVVM大概有了一个比较浅显的意思.同时,看过前两篇文章的人,也知道我的这个系列的文章大多数来源于其他的博客,我其实只是起了一个汇总的作用,毕竟我也是在学习,肯定是要去网络上学习别人的笔记喽.本篇文章将以温故而知新的方式再次去理解MVVM,力求对MVVM的认识再深一个层次. 1.再看"M-V-VM" M:即Model,由现实世界抽象出来的模型. V:即View,视图,界面,该界面与用户输入

UFS文件系统简明学习笔记

UNIX底下有很多文件系统,我在apue上看到了一点关于ufs文件系统的知识,想把它记下来, 在每一分区上会建立一个文件系统,很多操作也仅能在一个文件系统里实现 文件系统大概包含 自举块 超级块 柱面组 柱面组则包含了 超级块副本,配置信息,i 节点图,块位图,  i节点,数据块 一个文件的创建是利用i节点创建的,其有指向它的链接计数,表明有几个它的文件名和i节点编码,代表一个实际的空间可以有多个文件名,要删除实际空间上的数据就必须将所有的链接清楚掉,而文件的内容是有i节点里面的数据决定的,它可

文件系统权限 &nbsp; -- 学习笔记

文件系统的权限管理: 安全上下文:  任何在计算机中执行的任务都是由进程实现的  进程有必要访问和使用文件或某些数据资源  进程和其要操作的文件之间的关系,就定义为安全上下文  在DAC模型中,定义安全上下文的方式很简单   所有权    任何启动进程的用户就是该进程的所有者,进程的所有者也可以变更    任何创建文件的用户就是该文件的所有者,文件的所有者可以变更   使用权    在文件上面定义的对于该文件的特定使用过滤规则    三个权限:所有者权限,所属组权限,其他人权限   安全上下文的

Elasticserach学习笔记-01基础概念

本文系本人根据官方文档的翻译,能力有限.水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸. 原文出处:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html ElasticSearch有几个核心概念,了解它们将有助于我们的整个学习过程. 近乎实时(NRT)Elasticsearch是一个近乎实时的搜索平台.这意味着从你为一个文档建立索引到该文档可被检索

TCP/IP详解学习笔记(1)-基本概念

转自:http://blog.csdn.net/goodboy1881/article/details/665041 ———————————————————————————————————————————————— 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样.计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用.只有把它们联合起来,电

【安全牛学习笔记】漏洞概念

1.漏洞管理(信息维度) (1).信息收集 扫描发现网络IP.OS.服务.配置.漏洞 能力需求:定义扫描方式内容和目标 (2).信息管理格式化信息,并进行筛选.分组.定义优先级   能力需求:资产分组.指定所有者.向所有者报告漏洞 (3).信息输出向不同层级的人群展示足够的信息量 能力需求:生成报告.导出数据.与SIEM集成2.弱点扫描类型 (1).主动扫描有身份验证(登陆到系统中进行扫描) 无身份验证(黑盒扫描) (2).被动扫描镜像端口抓包 其他来源(嗅探) (3).基于agent扫描平台有

rabbitmq学习笔记2 基本概念

官网:http://www.rabbitmq.com 参考:http://blog.csdn.net/column/details/rabbitmq.html 1 基本概念 rabbitmq server(broker server):rabbitmq服务 client:包括producers和consumer message:包括payload和label exchange:producer发布message的地方 queue:messages存放和consumer收取message的地方 b