i-node节点与链接

文件系统

文件系统存储文件属性、文件内容和目录。这些内容是怎样在文件系统中存储的呢?Linux将磁盘块分成了3部分。


未命名文件.png

其中,

  • 超级块用来存储文件系统本身的信息。
  • i-node节点表存放i-node节点,它存储了文件属性、所有者、权限等元数据信息
  • 数据区分块存储文件数据,它是不连续存储的,一个文件的内容可能散落在数据区内部。
  1. 超级块
    它是文件系统的第一个块。这个块存放文件系统结构信息,如每个区的大小,还记录这个磁盘块未使用空间信息。
  2. i-node节点表
    每个文件的属性信息存放在这个表中,以i-node号为索引,所有i-node大小相同,是一个i-node数组,每个文件在都对应着唯一一个i-node号,即一个唯一的i-node节点。但是某个i-node节点可能对应多个文件名,这个后面提到。
    只需要记住:表中每个节点按位置标识。
  3. 数据区
    数据区存放文件实际内容。磁盘是按固定大小分块的,如果一个文件的大小超过了一个块的内容,那就为它分配多个块来存储。一个文件可能散落在好几百个磁盘块上,那么文件系统是如何跟踪这些块的呢?

文件和目录的工作过程

1. 创建文件的过程

文件有文件名、文件属性和文件内容。文件名存放在目录中,并与i-node号建立关联,文件属性存放在i-node中,文件内容存放在数据区。
因此,创建文件的四个主要操作如下:

  1. 存储文件属性:内核在i-node表中找一个空的i-node
  2. 存储文件数据:根据文件大小分配合适数量的空磁盘块,(Unix使用成组链接法管理空闲盘块
  3. 记录分配情况:在第1步的i-node节点上记录了第2步分配的磁盘序列
  4. 添加文件名到目录:以<i-node_index, filename>的形式在目录中建立文件名和实际的物理块号的关联。

2. 目录的工作过程

目录说白了就是包含了文件名的列表,按上面的理解,本质上就是有个包含i-node节点号和文件名的列表。
要查看文件名和i-node,只需要在 ls命令加上 -i选项

Snip20190111_10.png

由上可知,所有从文件中读取数据的命令,例如cat, more, who等,以及高级接口调用,都是把文件名传给open系统调用。内核首先根据文件名在目录中寻找文件名,进而知道这个文件名对应的i-node号,然后拿这个i-node号在i-node表中定位目标i-node,获取这个文件属性信息,内核这时候根据文件的权限位和执行者的UID判断是否有权限执行这个操作,如果没有,open返回 -1,并设置全局变量errnoEPERM。如果权限允许,则根据i-node中保存的磁盘块序列到数据区按序读取文件内容。

一个问题:Linux如何跟踪大文件呢?
综合上面的讨论,我们知道,一个大的文件需要很多磁盘块,并且还知道i-node节点存放磁盘块的分配列表。问题就在于,固定大小的i-node如何存储大量,甚至超出节点范围的磁盘序列呢?

Unix/Linux的做法是:将磁盘分配列表的大部分存储在数据块,在i-node节点中存放指向那些块的指针

链接

1. 多重i-node和交叉链接

一个磁盘可以格式化为某一种类型的文件系统,一个文件系统自身是一棵独立目录树,而Linux允许多文件系统存在的原因是,它允许多个文件系统通过挂载形成一棵目录树(其实是树的树)。

Snip20190111_11.png

上图中,/dev/disk1s1 分区挂载在根目录/上, devfs挂载在/dev上。

注:分区是物理的,目录是逻辑的,分区必须挂载在具体目录上才能使用。

上面我们知道,一个磁盘中有i-node表,多个文件系统有多个i-node表。多棵树(文件系统)相互连接意味着一个i-node号并不唯一标识文件了,如不同文件系统的231号i-node指涉到不同的文件。

因此,Linux不允许从不同的文件系统生成指向同一文件的链接。

2. 符号链接

硬链接是将目录链接到树的指针,同时也是将文件名和文件本身(i-node)链接的指针。硬链接不能指向其他系统的i-node,即不能跨系统链接。为了支持跨系统,Linux提供了软连接(符号链接)。顾名思义,符号链接通过文件名引用文件,而不是i-node

Snip20190111_12.png

如图所示,分别建立了a.txt 的硬链接 hardlink 和软链接 softlink ,检查发现,硬链接和源文件拥有同一个i-node号,而软链接与源文件的i-node不一样,softlink并不是原始文件a.txt, 但是读写它时,看起来跟原始文件一样。

Linux使用引用计数思想管理i-node,实际上一个文件名并不是实际的文件,只是一个指针,指向i-node,当i-node不再被指向,引用计数为0时,才实际删除文件数据。

硬链接按i-node引用文件的含义是:链接文件与原始文件引用同一个i-node,创建一个硬链接实际上增加一个到指定i-node的引用计数,删除某个硬链接只是减少一次计数,原始文件名仍指向该i-node,原始文件照常存在。

软链接按文件名引用的含义是:ln -s生成的文件是原始文件名的一个符号链接,这个软链接文件的文件属性(修改时间,文件大小等)都不同于原始文件,正因为它不涉及原始文件的i-node,因此才支持跨系统和到目录的链接。在交叉设备链接情况下,如果保存原始文件的目录被删除了,或原始文件改名了,符号链接失效。

Snip20190111_14.png

总而言之,硬链接按i-node引用文件, 软链接按文件名引用文件,硬链接类似于复制,软链接类似于快捷方式。


参考

《Unix/Linux编程实践教程》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 泛黄的路灯下 素白色的雪涂满地面 漫步在这妙不可言的雪毯上 享受着雪花轻抚的温柔 我惊喜万分 舞动的雪花在灯光的照...
    不如听风吟阅读 390评论 6 8
  • 雨落了夏 散不走,鼎沸人烟 巷子嘻嘻,车子嘀嘀 一袭红裙随声荡 轰隆雷起,下颌微抬 影,楞了当下 斑驳横流无人扰,...
    越慕小糖阅读 281评论 0 2
  • 阅读思维导图_发散性思维 当你品尝到熟透的梨,闻到花香,听到音乐,看到小溪。摸到心爱的物品或者仅仅沉浸回忆之时。你...
    听雨呢阅读 93评论 0 0
  • 已是深夜了,再过一个多小时又是新的一天,而我只能抓住属于今天最后的尾巴,完成自己定下的小目标。否则,明天的我一定悔...
    羲子阅读 234评论 0 0