什么是文件系统,引用百科解释:

  操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

文件系统是操作系统核心的组成部分,没有它我们无法完成对文件的增、删、改、查等基本操作

概念

  在了解文件系统之前我们需要了解一些基本概念

  • inode 索引节点 (index node)

  我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block)

  数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息

  在 Linux 中,元数据中的 inode 号才是文件的唯一标识而非文件名,文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块

  • block data(数据块)

    数据块即真正存储用户数据的地方

    每个数据块大小固定相等(1024或者4096)字节

    数据块中主要存储的数据是 文件、目录文件

  • dir_entry(目录结构 / 目录条目 / 目录文件)  

    目录结构实质也是一个数据块,该数据块类似于一个表格,记录当前目录下对应的文件名,和文件名对应的inode

  • block bitmap(块位图)

  在每个分区的数据的储存区是由一个又一个的数据块(data block)组成,在用户需要存储新的数据时需要遍历整个分区的数据块,这显然是非常耗时的,所以每个分区都存在一个快位图,每一个数据块在块位图中都存在一个标识符(1个bit),用于表示该块当前储存状态,在存入新数据时只需要遍历块位图就能快速找到空闲的数据块

  • inode bitmap(inode位图)

    inode在磁盘格式化完成后就已经完成分配,每个inode都有固定且唯一的ID

    inode_map中每一位对应一个inode节点,标识其是否可用,每一位占用一个字节

    inode_map大小通常与一个数据块的大小一样

  • block group(块组)

     文件系统将一个分区逻辑分成多个块组,每个块组都有其独立的 data block区、block bitmap、inode bitmap、inode区

    具体分为多少组取决于分区大小,以及每个数据块大小

    文件可以跨组保存

  • 超级块

    每个分区都有一个数据块来保存当前分区全局信息,每个块组中备份有一个

    超级块中描述了每个分区包含多少块组、每个块组包含多少块、每个块的大小、空闲磁盘块、引用磁盘块、空闲inode、引用inode

  • 块组描述符(GDT : group descrpition table)

      保存着当前分区有多少个块组,每个块组的起始位置

  • boot block (引导块)

    任何分区的第一个块是boot block , 不能被使用

    如果在当前分区装有操作系统,boot load 需要放在 boot block

    开机是由MBR调用

    

那文件系统又是如何查找文件的呢?

例如想要找到 /log/var/log/message 文件,如下图

找到根目录inode(自引用) -- 根目录数据块 -- var目录inode -- var目录数据块 -- log目录inode -- log目录数据块 -- message文件inode -- message文件

虚拟文件系统(VFS)

文件系统(File System)的更多相关文章

  1. 在 Linux 中,最直观、最可见的部分就是 文件系统(file system)

    在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想.这些思想中有一些来 ...

  2. [Objective-C] 013_文件系统(File System)

    在前面三篇关于数据持久化,我们都用涉及到文件(plist文件,数据库文件),它们都是把它们存储在document目录下.iOS的文件机制是沙盒机制,应用只能访问自己应用目录下的文件.iOS应用产生的内 ...

  3. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

  4. [CareerCup] 8.9 An In-memory File System 内存文件系统

    8.9 Explain the data structures and algorithms that you would use to design an in-memory file system ...

  5. KASS分布式文件系统(Kass File System)

    KASS分布式文件系统(Kass File System),简称KFS,是开始公司自主研发的分布式文件存储服务平台.KFS系统架构及功能服务类似Hadoop/GFS/DFS,它通过HTTP-WEB为上 ...

  6. NFS - Network File System网络文件系统

    NFS(Network File System/网络文件系统): 设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务): NFS只是一种文件系统,本身没有传输功 ...

  7. HTML5之本地文件系统API - File System API

    HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...

  8. File System 之本地文件系统

    上一篇文章提到了,最近做一个基于 File System/IndexedDB的应用,上一篇是定额和使用的查询. 因为LocalFileSystem只有chrome支持,有点尴尬,如果按需加载又何来尴尬 ...

  9. [LeetCode] Design In-Memory File System 设计内存文件系统

    Design an in-memory file system to simulate the following functions: ls: Given a path in string form ...

  10. 云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败

    云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败 文件系统宕机,重启后报错,无法启动 处理流程: 1.编辑 ...

随机推荐

  1. Ubuntu 14.10 下编译Hadoop2.4.0

    在http://www.aboutyun.com/thread-8130-1-1.html 这里看到到,安装过程遇到了上面说的问题,所以将此文转载过来,以备不时之需,感谢此作者. 问题导读: 1.如果 ...

  2. bzoj2909: Bipartite Numbers

    Description Bipartite Number是这样的一个正整数,他只能由两段相同的数组成,如44444411,10000000, 5555556,41,而4444114,44444则不是. ...

  3. MySQL面试题和答案

    Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发. 2.innodb是支持事务的存 ...

  4. 事件之onTouch方法的执行过程 及和 onClick执行发生冲突的解决办法

    转载:http://blog.csdn.net/jiangwei0910410003/article/details/17504315#quote 博主推荐: 风萧兮兮易水寒,“天真”一去兮不复还.如 ...

  5. [UE4]碰撞的随机性

    物理引擎(包括碰撞)的计算具有随机性 原因: 一.每一帧的时间并不是严格相等 二.浮点数计算不是完全准确(两个浮点数运算,结果不可重复) 影响 在左边窗口(服务器端)打几发子弹把其中3个立方体的位置打 ...

  6. 虚幻4:2D游戏中实现二级或多级跳跃

    转自:http://www.52vr.com/article-729-1.html 闲来无事,想做个二级跳跃或者多级跳跃的方法.. 如下所示.即可实现.   第一步:角色蓝图中.设置跳跃事件 第二部: ...

  7. 挂载本地iso镜像

    挂载本地iso镜像 [root@linux-node1 ~]# mkdir -p /disk/iso [root@linux-node1 ~]# cd /disk/iso/ [root@linux-n ...

  8. TensorFlow安装教程(ubuntu 18.04)

    此教程的硬件条件: 1.Nvidia GPU Geforce390及以上 2.Ubuntu 18.04操作系统 3.Anaconda工具包 如果python版本为3.7及以上,使用如下命令降级到3.6 ...

  9. sersync+rsync实现服务器文件实时同步

    sersync+rsync实现服务器文件实时同步 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.sersyn ...

  10. JavaScript基础知识:数据类型,运算符,流程控制,语法,函数。

    JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECM ...