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

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

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

概念

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

  • 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. Dubbo(1)简介和Zookeeper安装

    一.简介: Dubbo主页地址  http://dubbo.io/ Dubbo百度百科:https://baike.baidu.com/item/Dubbo/18907815?fr=aladdin 二 ...

  2. bundle adjustment原理(1)

    那些光束平差的工具,比如SBA.SSBA之类的虽然好,然而例子和教程都不够多且不够详细,让初学者难以上手. 要传入的参数虽然有解释,然而却也不是十分清楚其含义,具体要怎么生成,生成为什么形式. 我在折 ...

  3. MySQL数据库InnoDB存储引擎中的锁机制(转载)

    http://www.uml.org.cn/sjjm/201205302.asp 00 – 基本概念 当并发事务同时访问一个资源的时候,有可能导致数据不一致.因此需要一种致机制来将访问顺序化. 锁就是 ...

  4. springmvc前端控制器的三种拦截方式

    *.do :只拦截.do文件 / :拦截除jsp页面的所有请求,包括restful类型的url /*  :拦截所有请求包括jsp页面

  5. JIT和AOT编译详解

    JIT和AOT编译介绍 JIT - Just-In-Time             实时编译,即时编译 通常所说的JIT的优势是Profile-Based Optimization,也就是边跑边优化 ...

  6. SAS ODS GRAPHICS SGPLOT 画图 指存放定路径、名称、指定格式

    OPTION NOCENTER LS=MAX PS=MAX NODATE; LIBNAME S 'E:\00@Data'; PROC FREQ DATA=S.DATA00; TABLES CLE_DA ...

  7. video兼容--可用

    兼容ie6,7,8,但是播放器会卡顿黑屏<!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  8. 如何在ubuntu系统里面用新加装的硬盘对系统进行扩容

    我这里是用256G的固态硬盘安装了系统,想通过扩展1T的机械硬盘存储数据的,现在我们需要的就是把这个1T的硬盘进行扩容进去 使用df -h和sudo fdisk -l命令查看磁盘情况 切换到root用 ...

  9. 9 个鲜为人知的 Python 数据科学库

    除了 pandas.scikit-learn 和 matplotlib,还要学习一些用 Python 进行数据科学的新技巧. Python 是一种令人惊叹的语言.事实上,它是世界上增长最快的编程语言之 ...

  10. angularjs的cache

    首先要引入angular-cookies.js插件 angular.module('app').service('cache', ['$cookies', function($cookies){ th ...