专栏名称: 刘超的通俗云计算
刘超,网易云解决方案首席架构师,代码级略懂OpenStack、Hadoop、Docker、Lucene、Mesos等开源软件,曾出版《Lucene应用开发揭秘》,个人博客可搜索popsuper1982。
目录
相关文章推荐
51好读  ›  专栏  ›  刘超的通俗云计算

图解Linux文件系统

刘超的通俗云计算  · 公众号  · 架构  · 2017-09-14 02:00

正文

在Linux中,文件是最重要的一部分,很多的接口都是通过文件的方式展现出来。


文件有很多种:


最常见的是普通文件,例如文本文件,二进制文件等。


文件夹其实也是一种文件,你可以vim一个文件夹的内容,可以看到文件夹下面的。


还有一种Char Dev也是一种文件,例如从/dev/random里面,可以读取随机数。


还有一种Block Dev也是一种文件,例如/dev/vda就代表着一块硬盘。


还有一种称为symbolic link文件,指向其他的文件,例如/etc/systemd/system/multi-user.target.wants中的文件指向/lib/systemd/system/中的相应的文件。


还有一种socket文件,用于两个进程之间通信,例如/var/run/docker.sock,就是docker客户端和daemon通信的文件。


一个普通的文件看起来是连续的,但是是分成很多的Block存放在硬盘上的不同的位置,如何知道一个文件包含哪些文件块呢,需要一种称为inode的数据结构。



mode是对权限的控制

uid和gid是属于哪个用户哪个组

atime是文件最后一次被访问的时间

mtime是文件的内容被修改的时间

ctime是inode被修改的时间

dtime是inode被删除的时间


最最重要的是block数组,保存着这个文件保护哪些数据块,数据块里面才是真正的文件内容。


这个数组是怎么组织的呢?


在ext3中的组织方式是这样的。


这是一个层次的结构,前12项(第0到11项)直接指向的就是数据块,当文件太大的时候,第12项则变成了两层的,先指向一个中间块,然后中间块里面再保存指向真正数据块的指针。第13项则变成了三层的,第14项则变成了四层的。


在ext4中这个结构发生了变化,变成了属性架构,称为extend



组织结构如下



在 extent 树中,节点一共有两类:叶子节点和索引节点。


保存文件数据的磁盘块信息全部记录在叶子节点中;而索引节点中则存储了叶子节点的位置和相对顺序。







请到「今天看啥」查看全文


推荐文章
经典短篇阅读小组  ·  杰克逊高地 |木心
8 年前
经典短篇阅读小组  ·  杰克逊高地 |木心
8 年前
科学松鼠会  ·  你爱的是ta,还是你的心跳?
8 年前