文件系统_文件系统类型 - CSDN
文件系统 订阅
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。 展开全文
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
信息
外文名
file system
类    别
操作系统
中文名
文件系统
目    的
为了管理空间
文件系统简介
在计算机中,文件系统(file system)是命名文件及放置文件的逻辑存储和恢复的系统。DOS、Windows、OS/2、Macintosh和UNIX-based操作系统都有文件系统,在此系统中文件被放置在分等级的(树状)结构中的某一处。文件被放置进目录(Windows中的文件夹)或子目录,在树状结构中你希望的位置中。文件系统指定命名文件的规则。这些规则包括文件名的字符数最大量,哪种字符可以使用,以及某些系统中文件名后缀可以有多长。文件系统还包括通过目录结构找到文件的指定路径的格式。 [1]  文件系统是软件系统的一部分,它的存在使得应用可以方便的使用抽象命名的数据对象和大小可变的空间。
收起全文
精华内容
参与话题
  • 操作系统——文件系统

    千次阅读 2015-02-02 21:20:48
    总之,在一个操作系统中,负责处理文件相关事宜的部分,就称为文件系统。 可以从两个观点来看待文件系统: 用户观点:所谓用户,就是计算机的使用者以及应用程序的编程人员。对于他们来说,他们关心的是文件系统所...

    文件是由操作系统来管理的,包括文件的结构、文件的命名、文件的使用、文件的保护和文件的实现等,这些都是在操作系统的设计当中需要解决的问题。总之,在一个操作系统中,负责处理文件相关事宜的部分,就称为文件系统。

    可以从两个观点来看待文件系统:

    用户观点:所谓用户,就是计算机的使用者以及应用程序的编程人员。对于他们来说,他们关心的是文件系统所提供的对外的用户接口,包括文件如何命名、如何保护、如何访问(创建、打开、关闭、读和写等)

    操作系统观点:对于操作系统的设计者来说,他们关心的是如何来实现与文件有关的各个功能模块,包括如何来管理存储空间、文件系统的布局、文件的存储位置如何安排等。

    1、文件

    1.1文件的基本概念

    文件时一种抽象的概念,它提供了一种把信息保存在磁盘等外部存储设备上,并且便于以后访问的方法。这种抽象体现在用户不必关心具体的实现细节。
    • 文件的命名

    文件名.后缀

    • 文件的结构

    主要有三种形式:

    ①无结构:整个文件由一序列无结构的字节流组成。

    ②简单的记录结构:用每一行作为一个记录,每个记录的长度可以是固定不变的,也可以是各不相同的。

    ③复杂结构:文件的结构形式比较复杂。比如,可以把文件中的所有记录组织成一颗树的形式,即树形结构。

    记录结构和复杂结构都是由操作系统来指定文件的逻辑结构,使用起来很不方便。

    UNIX和Windows,它们采用的都是无结构形式,用户可以将信息以任意格式写入文件中。

    • 文件的分类
    ①普通文件:ASCII文件,里面包含的是一行行的文本。二进制文件,通常具有内部的逻辑结构,为相关的应用程序所了解。
    ②目录文件:用来管理文件系统的组织结构的一种系统文件,这是一种专用的特殊文件。

    在UNIX中,还有两种特殊文件,其实就是输入输出设备,在UNIX中将输入输出设备看成是一种文件。包括字符特殊文件和块特殊文件

    • 文件的属性



    1.2、文件的使用

    文件的使用指的是操作系统提供的与文件有关的系统调用。
    文件的访问指的是围绕文件内容的读写进行的各种文件操作:打开,关闭,读,写文件。添加操作,定位操作。
    文件的控制指的是围绕文件属性的控制进行的各种文件操作:创建,删除,获取文件属性,设置文件属性,修改文件名。

    2、目录

    2.1、目录的基本概念

    目录也称为文件夹,它是一张表格,里面记录了在该目录下的每一个文件的文件名和其它一些管理信息。每一个文件都会占用这张表格中的某一行,即一个目录项。
    这张表格本身是以文件的形式存放在磁盘上,也就是说,把每一个目录项变为一个字节流,然后把各个目录项依次存放在一个文件中。

    2.2、目录的结构

    • 一级目录
    对于系统中的所有文件,只创建一个目录文件,即一张线性表格,每个文件占用其中的一个目录项。
    • 二级目录
    基本思路:把目录分为两级,第一级称为是根目录,第二级称为用户子目录。根目录只有一个,而用户子目录可以有多个。每个用户的所有文件都保存在相应的用户子目录中。
    • 多级目录

    现代操作系统一般采用的都是多级目录结构,也称为是树状目录结构或层次目录结构,其形状好似一颗倒立的树。


    绝对路径名:对于一个文件或目录,可以用从根目录开始依次经由的各级目录名,再加上最终的文件名或目录名来表示。\spll\mail\copy\all

    相对路径名:在当前目录下,如果需要访问一个文件或目录时,可以使用相对于这个当前目录的部分路径名,即相对路径名。

    例如:假如当前工作目录是:\spll\mail\copy,那么以下两个路径名是完全等价的:

    \spll\mail\copy\all    绝对路径名

    all                               相对路径名

    3、文件系统的实现

    文件系统将磁盘空间划分为一个个大小相同的数据块,即物理块。物理块是由一个或多个连续的扇区组成的。
    与此同时,把应用程序提交给文件系统的字节流(即逻辑地址空间)也划分为大小相同的逻辑块。然后在文件系统的内部,以块来作为基本的处理单元,把每一个逻辑块保存在一个物理块中。

    3.1、文件系统的布局

    将磁盘分区以后,磁盘的扇区0称为主引导记录(Master Boot Record,MBR),它主要用来启动计算机。在MBR的末尾有一个分区表,里面记录了每一个分区的起始扇区和大小。在磁盘的多个分区中,有一个是活动分区,操作系统就保存在该分区中。

    1. 当一台计算机启动后,位于主板上的BIOS(Basic Input Output System,基本输入输出系统)程序就会被执行。
    2. 该程序会去检查并设置系统当中的各种硬件资源,然后去查询一个表格,看看是从什么地方启动的,是软盘、硬盘还是光盘。
    3. 如果是从硬盘启动的,那么它就会把MBR中的引导程序装入到内存运行,
    4. 然后该引导程序就会去查询硬盘上的分区表,看看哪一个是活动分区
    5. 如果第二个是活动分区,就会把该分区的引导块当中的程序装入到内存中去运行。当这个程序开始运行时,它就会把保存在这个磁盘分区中的操作系统程序,一步步地装入到内存中去运行。

    3.2、文件的实现

    文件的实现需要解决以下三个问题:
    如何来描述一个文件,用什么数据结构来记录文件的各种管理信息?
    如何来存放文件,如何把文件的各个连续的逻辑块存放在磁盘上的空闲物理块当中,并且记录这些逻辑块与物理块之间的映射关系?
    如何来实现与文件有关的各种系统调用,如打开文件、读写文件等?

    • 文件控制块

    文件控制块(File Control Block,FCB)是操作系统为管理文件而设置的一种数据结构,里面存放了与一个文件有关的所有管理信息,它是文件存在的标志。

    文件控制块的主要内容:

    文件的类型和长度

    文件的所有者、文件的访问权限

    文件的创建时间、最后访问时间、最后修改时间

    文件所在的物理块信息,即该文件在磁盘上的存放位置,它的每一个逻辑块被存放在磁盘的哪一个物理块中。

    总之,只有知道了这些信息,文件系统才能对这个文件的数据进行访问。

    备注:

    FCB和进程控制块PCB有些类似,在一个进程的PCB中,保存的是与该进程有关的所有管理信息。但是区别是:PCB是存放在内存中,而且是在进程运行时创建,在进程结束时撤销;而FCB是存放在磁盘上的。

    • 文件的物理结构

    文件的物理结构讨论的是如何把一个文件存放在磁盘等物理介质上。具体说,就是以块为单位,研究如何把文件的一个个连续的逻辑块分别存放在不同的物理块中,即研究逻辑块与物理块的映射关系。(有点类似于,逻辑页面和物理页面之间的映射关系。)

    一般,文件的物理结构只要有三种形式:连续结构,链表结构和索引结构。

    • 连续结构

    连续结构也称为顺序结构,它的基本思想是把文件的各个逻辑块按照顺序存放在若干个连续的物理块中。也就是说,文件的逻辑地址是连续的;把它存放在磁盘上以后,物理地址也是连续的。

    优点:

    ①简单、易于实现。对于文件系统来说,记住第一个物理块的编号和物理块的个数,即可通过简单的加法来实现逻辑块到物理块的映射关系。

    ②由于物理块是顺序存放的,所以在访问文件时,只要将磁头定位到第一个物理块,即可顺序地读取每一个数据块,而不用再去移动磁头,或等待相应的扇区旋转到磁头的下方。这样,磁盘的访问速度是非常快的。

    缺点:

    ①随着磁盘上的文件的增加和删除,将会形成已占有物理块与空闲物理块之间相互交错的情形。这样那些小的,无法再利用的物理块,就成了外碎片。

    ②文件的大小不能动态地增长,在创建一个新的文件时,必须事先指定该文件的大小,这样文件系统才知道应该把哪一片连续的空闲空间分配给它。但是在新建一个文件的时候,我们往往不知道文件的大小,或者说文件的大小是变化的。

    总之,连续结构的文件系统已经不常用了。但是在CD-ROM、DVD和其它一些一次性写入的光学存储介质中,连续结构被广泛应用。

    • 链表结构

    链表结构的基本思路是:把文件的各个逻辑块依次存放在若干个物理块中,这些物理块既可以是连续的,也可以是不连续的,然后在各个物理块之间通过指针连接起来,前一个物理块指向下一个物理块。

    每一个物理块由两个部分组成:指针和数据区。

    对于文件系统来说,它只要记住这个链表结构的首结点指针,就可以定位到该文件中的任何一个物理块,这相当于是链表的遍历。

    缺点:

    ①在访问一个文件时,只能进行顺序访问,不能随机访问,否则速度会很慢。只能从头开始访问。

    ②每个物理块上的数据存储空间不再是2的整数次幂,因为指针要占用若干个字节,这样,就使得文件的访问不太方便。

    • 带有文件分配表的链表结构

    基本思路:在链表结构的基础上,把每一个物理块当中的链表指针抽取出来,单独组成一个表格,即文件分配表(File Allocation Table,FAT),然后把它存放在内存中。

    备注:FAT是存放在磁盘上的,然后在需要的时候再调入到内存中。

    如何知道一个逻辑块所对应的物理块地址呢?

    • 在链表结构中,这个地址信息保存在一条链表中,而这个链表中每个指针又保存在磁盘上,是和文件的数据混合在一起的,既占用磁盘空间,访问速度又慢。
    • 如果有文件分配表的话:一方面,可以把指针信息拿出来放在内存中;另一方面,查询这个FAT表,找到相应的物理块地址,然后根据这个地址再去访问磁盘。只要访问一次就可以了。

    如何来实现文件分配表?

    在整个文件系统中,只设置一个一维的线性表格。它的表格项的个数等于磁盘上物理块的个数(缺点:太大,包括那些没有打开的文件),并且按照物理块编号的顺序来建立索引。对于一个文件,在它的文件控制块(FCB)中记录了该文件的第一个物理块的编号x1,然后再FAT表的第x1项中,记录了该文件的第二个物理块编号x2,依次类推,形成一条链表。然后在最后一条FAT表项中,存放一个特殊的文件结束的标识。

    • 索引结构

    索引结构的基本思路:把一个文件中的每一个逻辑块所对应的物理块编号直接记录在文件的FCB中,称为i结点(索引结点)。这样,对于系统中的每一个文件,都有一个自己的索引结点。

    在索引结构方式下,只要把那些正在使用的文件的索引结点装入到内存即可,而对于那些没有被打开的文件,则不必装入到内存。

    在这种方式下,目录项的内容已经发生了变化。里面存放的不是文件的首个物理块的编号,而是该文件的i结点所在的物理块编号。

    目录
    文件名 索引块
    main.c 20
    在打开main.c文件时,首先通过该目录项,查询到它的i结点的存放位置,此时是在物理块20,然后把该物理块的内容装入到内存中,再去查询它里面的地址映射表,这样就可以知道该逻辑块是存放在哪一个物理块中,然后就可以直接去访问磁盘了。

    3.3、目录的实现

    文件系统如何根据一个文件名或路径名,来定位到相应的文件,了解到该文件的各种属性信息以及它在磁盘上的存储位置等?也就是要把它的文件控制块的内容读进来,这样才能进行下一步操作。
    下面是目录的实现方法,需要解决以下三个问题:目录项的内容、长文件名问题和目录的搜索方法

    • 目录项的内容
    直接法:把文件控制块的内容保存在目录项中,即目录项 = 文件名 + FCB,其中包括文件的各种属性信息和它在磁盘上的存放位置。比如:MS-DOS,Windows
    间接法:每一个文件的FCB不是保存在它的目录项中,而是单独存放。把系统中所有的文件的FCB统一保存在磁盘的某一个位置,然后再每一个目录项中,目录项 = 文件名 + FCB的地址。比如:UNIX
     直接法 
    文件名 FCB
    f1.exe FCB1
    f2.c FCB2
    f3.txt FCB3
      
    间接法
    文件名 FCB索引
    f1.exe FCB1的地址
    f2.c FCB2的地址
    f3.txt FCB3的地址
    • 长文件名问题

    如何实现这种长文件名的机制?

    1. 有三种方法在目录项中,将文件名的长度固定为255个字符,即为每一个文件名都预留255个字节的空间。缺点就是,会造成浪费大量的目录空间。
    2. 每一个目录项的长度是可变的,对于不同长度的文件名,其目录项的长度是不一样的。每一个目录项的内容分为三个部分:目录项的长度,文件的属性信息和文件名。
    3. 每一个目录项本身的长度是固定的,然后把长度可变的文件名统一放在目录文件的末尾。这样,当一个目录项被释放以后,它所占用的空间就能方便地回收和利用。

    • 目录的搜索方法

    目录的搜索:就是在一个目录文件中,当给定了一个文件名以后,如何定位到相应的目录项。寻找目录项的目的在于取出该文件的FCB,这样就能访问它的各种属性信息。

    难点:用户给出的是ASCII形式的文件名,系统如何通过这个文件名来作为索引?

    目录的搜索方法主要有两种:

    1. 线性搜索:对目录中的每一个目录项,依次与该文件名进行比较,直到找到相应的目录项。
    2. Hash表:用Hash表的方法来加速搜索速度。

    3.4、系统调用的实现

    在文件系统内部,如何实现文件的打开、关闭、读和写等各种系统调用函数?
    • 数据结构

    ①位于外存上的数据结构:

    目录结构:用来组织文件,可以通过文件名来寻找相应的FCB。

    文件控制块:记录了文件的各种属性信息和文件在外存的存储信息。

    ②位于内存中的数据结构:

    系统内打开文件表:它记录了在整个系统中,所有被打开的文件,它们的文件控制块和共享计数值等信息。

    进程内打开文件表:每一个进程都有这样一张表格,它描述了在进程内部所有打开的文件,包括每一个文件的打开方式,当前读写指针,该文件在系统打开文件表中的索引等信息。

    • 打开文件
    打开一个文件的系统调用一般形式为:fd = open(文件路径名,打开方式);

    • 关闭文件

    文件在使用完毕后必须关闭,系统调用函数为:close(fd);

    • 读文件

    读文件的系统调用函数为:int read(fd, userBuf, size);

    fd是文件指针,userBuf是用户提供的一个缓冲区,size是需要读取的字节数。功能是:从文件fd的当前位置开始,顺序读取大小为size的数据块,并保存在缓冲区userBuf中。

    3.5、空闲空间管理

    为了记录磁盘上的空闲空间,系统会维护一个空闲空间的列表,它记录了磁盘上所有的空闲物理块。
    主要有三种方法:位图法,链表法,索引法。

    • 位图法

    用位图来表示磁盘的空闲空间列表。每一个物理块用一个位来表示。如果该物理块空闲,则相应位为1,;如果该物理块被分配,则相应位为0;

    • 链表法

    用链表来表示磁盘的空闲空间列表。在每一个空闲的物理块上都有一个指针,然后把所有的空闲块通过这个指针连接起来,从而形成一条链表。系统只要记住这条链表的首结点指针,就可以一个接一个去访问所有的空闲物理块。

    • 索引法

    它不是把所有的空闲物理块链接成一条链表,而是单独预留少量的一些空闲物理块,把它们链接成一条链表。

    展开全文
  • 什么是文件系统

    万次阅读 2018-09-30 14:06:42
    文件系统的定义   文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件...
    • 文件系统的定义

     

    文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

     

    文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。文件系统是软件系统的一部分,它的存在使得应用可以方便的使用抽象命名的数据对象和大小可变的空间。

    • 文件系统的功能

     

    文件系统的功能包括:管理和调度文件的存储空间,提供文件的逻辑结构、物理结构和存储方法;实现文件从标识到实际地址的映射,实现文件的控制操作和存取操作,实现文件信息的共享并提供可靠的文件保密和保护措施,提供文件的安全措施。

     

    文件的逻辑结构是依照文件的内容的逻辑关系组织文件结构。文件的逻辑结构可以分为流式文件和记录式文件。

     

    流式文件:文件中的数据是一串字符流,没有结构。

     

    记录文件:由若干逻辑记录组成,每条记录又由相同的数据项组成,数据项的长度可以是确定的,也可以是不确定的。

     

    主要缺陷:数据关联差,数据不一致,冗余性。

     

    • 常见的文件系统类型

     

    FAT

     

    在Win 9X下,FAT16支持的分区最大为2GB。我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小,保存信息的效率就越高。在FAT16的情况下,分区越大簇就相应的要大,存储效率就越低,势必造成存储空间的浪费。并且随着计算机硬件和应用的不断提高,FAT16文件系统已不能很好地适应系统的要求。在这种情况下,推出了增强的文件系统FAT32。

     

    NTFS

     

    NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。使用非常广泛的Windows NT 4.0采用的就是NTFS 4.0文件系统,相信它所带来的强大的系统安全性一定给广大用户留下了深刻的印象。Win 2000采用了更新版本的NTFS文件系统NTFS 5.0,它的推出使得用户不但可以像Win 9X那样方便快捷地操作和管理计算机,同时也可享受到NTFS所带来的系统安全性。

     

    exFAT

     

    全称Extended File Allocation Table File System,扩展FAT,即扩展文件分配表,是Microsoft在Windows Embeded 5.0以上(包括Windows CE 5.0、6.0、Windows Mobile5、6、6.1)中引入的一种适合于闪存的文件系统,为了解决FAT32等不支持4G及其更大的文件而推出。

     

    RAW

     

    RAW文件系统是一种磁盘未经处理或者未经格式化产生的文件系统,一般来说有这几种可能造成正常文件系统变成RAW文件系统:没有格式化、格式化中途取消操作、硬盘出现坏道、硬盘出现不可预知的错误、毒所致。

     

    解决RAW文件系统的最快的方法是立即格式化,并且使用杀毒软件全盘杀毒。当然,如果文件很重要的话可以用迷你兔数据恢复软件先救出数据,然后再格式化和杀毒。

     

    Ext

     

    Ext2:Ext是GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。

     

    Ext3:是一种日志式文件系统,是对ext2系统的扩展,它兼容ext2。日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机。

     

    Ext4:Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能。

     

    HFS

     

    分层文件系统(Hierarchical File System,HFS)是一种由苹果电脑开发,并使用在Mac OS上的文件系统。最初被设计用于软盘和硬盘,同时也可以在在只读媒体如CD-ROM上见到。

    展开全文
  • 文件系统

    2020-01-01 12:25:46
    1 文件系统的概念 1.1 引言 1.2 文件 一、文件定义 1、文件是具有符号名的信息(数据)项的集合。 2、文件是具有符号名的记录的集合。 二、文件名 根据文件的定义,每个文件必须有一个唯一的文件名,不论是系统管理...

    1 文件系统的概念

    1.1 引言

    在这里插入图片描述

    1.2 文件

    一、文件定义
    1、文件是具有符号名的信息(数据)项的集合。
    2、文件是具有符号名的记录的集合。

    二、文件名
    根据文件的定义,每个文件必须有一个唯一的文件名,不论是系统管理,还是用户使用文件都使用文件名。
    文件名是一个有限长度的字符串。
    DOS、WINDOWS系统中文件名:
    文件名 · [文件扩展名]
    文件名是一个不大于8个字符的字符串,但WINDOWS系统中允许超长文件名,最多可有256个字符,不区分英文字母的大小写。

    文件扩展名:
    不大于3个字符,一般用来表示文件的类型。
    例如:
    C C语言源程序文件
    COM 可执行文件(小模式)
    EXE 可执行文件(大模式)
    BAT 批处理文件
    OBJ 目标文件
    hust.txt ll.c ll.obj ll.com ll.exe

    UNIX系统中的文件名:
    文件名是一个不大于14个字符的字符串。并且区分英文字母的大小写。
    例如:unix linux ll.c a .out aa AA
    注意:在UNIX系统中文件名就是一个字符串,没有文件名和文件扩展名之分,文件的类型由用户命名时确定。
    例如,li.c,UNIX系统认为这个文件名的长度是4个字符。
    而在DOS、WINDOWS系统中则解释这个文件名,li是文件名,c是文件扩展名,表示该文件是一个C语言的源程序文件,而·是文件名和文件扩展名的分隔符。

    三、文件的分类
    教材讲了三种文件分类的方法,下面介绍UNIX系统文件分类方法:
    1、普通文件
    普通文件是无结构的字符的集合。
    2、目录文件
    目录文件是由文件的目录项组成的文件。
    3、特别文件
    特别文件就是设备。

    四、文件的属性
    文件属性反映文件的类型、存取控制等
    UNIX系统中文件属性:
    - 普通文件
    d 目录文件
    p 管道文件
    c 字符型设备文件
    b 块设备文件

    1.3 文件系统

    文件系统是操作系统中负责管理和存取文件信息的软件机构,它是由管理文件所需的数据结构和相应的管理软件以及访问文件的一组操作组成。
    从系统的角度看:文件系统是一个负责文件存储空间管理的机构。
    从用户的角度看:文件系统是用户在计算机上存储信息、和使用信息的接口。

    通用文件系统应具有以下功能:
    1、提供用户对文件操作的命令;
    2、提供用户共享文件的机制;
    3、管理文件的存储介质;
    4、提供文件的存取控制的机制,保障文件及文件系统的安全性;
    5、提供文件及文件系统的备份和恢复功能;
    6、提供对文件的加密和解密功能。

    可以用两种不同的观点去进行研究文件结构
    用户观点:
    是研究用户“思维”中的抽象文件,或称逻辑文件,其研究的侧重点在于为用户提供一种逻辑结构清晰、使用简便的逻辑文件形式。用户将按照这种形式去存储、检索和加工有关文件中的信息。

    实现观点:
    是研究驻留在设备“介质”中的实际文件,或称物理文件。它研究的侧重点是选择一些工作性能良好、设备利用率高的物理文件形式。系统将按照这种形式同外部设备打交道并控制信息的传输

    2 文件的逻辑组织与存取方法

    2.1 文件的组织

    文件的组织有两种:
    文件的逻辑结构:
    文件的逻辑结构是指用户思维中文件的结构。
    文件的物理结构:
    文件的物理结构是指文件在存储介质上的结构(或称组织)。在当代,文件的存储介质是磁盘,包括软盘、硬盘和光盘、磁带,早期还有磁鼓。由于目前的磁带是模拟磁盘的结构,所以文件的物理结构主要是指磁盘上文件的结构。

    一、文件的逻辑结构
    文件的逻辑结构:
    结构文件--记录式文件。
    无结构文件--流式文件
    1、流式文件
    无结构的流式文件是相关的有序字符的集合。文件的长度为所含字符数。
    UNIX、DOS、WINDOWS系统中的普通文件都是流式文件。

    2、记录式文件
    记录式文件是一种结构式文件,文件是记录的集合. 每个记录由彼此相关的域构成。记录可按顺序编号为记录1,记录2,…,记录n。如果文件中所有记录的长度都相同,则这种文件为定长记录文件。
    定长记录文件的长度 = 记录个数x记录长度。
    变长记录文件的长度为各记录长度之和。
    例如:学生登记表文件 xsdjb.dbf
    姓名 学号 籍贯 通信地址 邮政编码
    李铭 925678 武昌 武昌关山街125号 430074
    司马乐 925679 北京 北京海军路88号 100034

    3、两种文件的比较
    流式文件就象给一张白纸给用户,用户可将他的信息任意地写到纸上,没有任何格式上的限制。
    记录式文件就象给一张表格给用户,用户要按表规定的格式填信息。
    显然,结构式文件对用户的限制很大,使用起来就不方便,所以记录式文件被淘汰是理所当然的。

    二、存取方法
    顺序存取:
    后一次存取总是在前次存取的基础上进行的。每次存取不必给出存取开始的位置。
    随机存取:
    每次存取操作都要指定存取操作的开始位置。在系统中提供文件存取操作有:
    n = read(fd,buffer,size);
    m = write(fd,buffer,size);
    这两个操作总是从当前位置开始读(或写),执行顺序存取操作。

    leek(fd,offset,mode)
    调整文件的读写起始位置的系统调用,若在read、write之前执行leek操作,就调整了文件的读写指针(读写开始的位置),实现了随机存取。

    3 文件的物理结构

    一个文件存储介质,格式化后就分成许多大小相等的单位--存储块(物理盘块),在现代计算机系统中,一般来说,每个物理块是一个磁盘的扇区,512字节。并给每个存储块有个编号,称为物理块号。

    文件的物理结构指文件在存储介质上的结构,目前有三种基本结构,即连续文件结构、串联文件结构和索引文件结构。
    在这里插入图片描述

    3.1 连续文件

    在这里插入图片描述
    评价:
    优点:结构简单,实现容易,不需要额外的开销。
    缺点:用户创建文件时要给出文件的大小;
    不利于文件的动态增加和修改;
    连续文件是一种连续结构的文件,对每个文件要求存放在存储介质上的连续的物理块中,存储空间利用率不高。类似于存储管理中的分区
    适用于变化不大的顺序访问的文件,在流行的UNIX系统中仍保留了连续文件结构。

    3.2 串联文件

    一个串联文件结构是按顺序由串联的块组成的,即文件的信息按存储介质的物理特性存于若干块中。
    每个物理块的最末一个字(或第一个字)作为链接字,它指出后继块的物理地址。链首指针存放在该文件目录中。文件的结尾块的指针为“∧”。
    这种文件结构不要求连续存放。
    对于记录式文件一块中可包含一个逻辑记录或多个逻辑记录,也可以若干物理块包含一个逻辑记录。
    在这里插入图片描述
    评价:
    1.存储空间利用率高;
    2.文件创建时用户不必指出文件的大小;
    3.文件动态扩充和修改容易。
    4.顺序存取效率高,随机存取效率太低,如果访问文件的最后的内容,实际上是要访问整个文件。
    类似于存储管理中的页式

    3.3 文件照映

    为了克服链接文件的存取效率太低的问题,人们提出文件映照的技术,即把链接文件中的链接字集中在一结构中,这样既保持了链接文件的优点,也克服了其缺点,DOS、WINDOWS系统就采用了这样结构。
    FAT:文件分配表,磁盘格式化后建立,从磁盘的第二个开始,有两个相同的FAT。
    磁盘的类型 :
    FDF,双面,FCH,单面(9扇
    区/磁道)
    F8H,硬盘
    000H:空闲簇
    FFFH:文件的结尾簇
    XXXH:文件的下一簇
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.4 随机文件

    随机文件结构是另一种形式的非连续文件,文件数据存放的存储介质上的物理块号与文件的逻辑块号一一对应,并建立这样对应关系的数据结构--文件索引表。
    访问文件时,根据文件的逻辑块号查文件索引表,找到对应的物理块号,然后,进行访问。
    随机文件有三种形式的结构:直接地址结构、索引结构、计算寻址结构。
    索引结构是当代计算机操作系统中普遍采用的结构,如UNIX系统、LINUX系统。

    索引文件结构
    这种文件结构的数据结构是文件的索引表,每个文件有一个索引表,表中每个表目包括:逻辑块号,物理块号。
    索引表位置:文件目录中,文件的开头等。
    索引表大小:固定大小,非固定大小。
    在这里插入图片描述
    UNIX系统采用索引文件结构,UNIX系统采用多级间接索引结构,对小型文件采用直接索引,对大型文件采用间接索引,从而,既保证绝大多数的文件有高的存取效率,又能适应存取一些大型文件。(既保证了文件系统的高效率,又使其有很宽的适应面)。
    在这里插入图片描述
    在这里插入图片描述

    3.5 文件物理结构的比较

    连续文件的优点是不需要额外的空间开销,只要在文件目录中指出文件的大小和首块的块号即可,对顺序的访问效率很高。适应于顺序存取。缺点是动态地增长和缩小系统开销很大;文件创建时要求用户提供文件的大小;存储空间浪费较大。
    串联文件克服了连续文件的不足之处,但文件的随机访问系统开销较大。适应于顺序访问的文件。DOS系统中改造了串联文件的结构,使其克服了串联文件的不足,但增加了系统的危险性。

    索引文件既适应于顺序存取访问,也适应于随机访问,是一种比较 好的文件物理结构,但要有用于索引表的空间开销和文件索引的时间开销。UNIX系统是使用索引结构成功的例子。
    在当前流行的一些UNIX操作系统的版本中,同时支持连续文件结构和索引文件结构。DOS、WINDOWS系统支撑类似于文件映照结构

    4 文件存储空间管理

    UNIX系统的空闲块的管理在UNIX系统中每个子文件系统(一片软盘、一个硬盘的分区,一卷磁带)格式化后的结构如图所示,其中特别块是存放该子文件系统的管理信息,其中,包括空闲块管理信息。

    s-nfree :空闲块数
    s_free[100]:空闲块块号
    s_flock:锁位
    在这里插入图片描述

    UNIX系统的空闲块的管理
    在这里插入图片描述
    在这里插入图片描述

    5 文件目录

    5.1 文件目录及内容

    文件目录:
    文件目录即文件名址录。它是一张记录所有文件名及其存放地址、文件的说明和控制信息的表格。
    一般情况下,每个文件占用一个表目,即每个文件有一个文件的目录项。

    文件目录项:
    1.文件名
    2.文件的大小,单位:字节
    3.文件在物理存储介质中的位置。取决于文件的物理结构 。
    对于连续文件:文件起始块号(即文件的第一个物理块块号);
    对于串联文件:指向第一个物理块的指针;
    对于索引文件:索引表。
    4.存取控制信息
    文件主和其它用户对该文件的访问权限。
    5.管理信息
    包含文件创建的日期和时间,最近修改该文件的日期和时间等。
    6.文件的类型

    5.2 一级目录结构

    一级文件目录
    最简单的文件目录结构是在系统中建立一张线性表,每
    个文件占一表目,由文件名和文件的说明和管理信息组
    成。这样的表称为一级文件目录.
    一级文件目录的主要功能是实现“按名存取”, 并且实现
    容易。
    主要问题是"重名"问题
    所谓“重名”是指不同用户对不同文件起了相同的名字,即两个或多个文件只有一个相同的符号名
    在这里插入图片描述

    5.3 二级目录结构

    二级目录结构是将文件目录分成主文件目录和用户文件目录两级。系统为每个用户建立一个文件目录(UFD),每个用户的文件目录登记了该用户建立的所有文件名及其在辅存中的位置和有关说明信息。
    主目录(MFD)则登记了进入系统的各个用户文件目录的情况,每个用户占一个表目,说明该用户目录的属性,包括用户名、目录的大小、组织形式及其所在的物理地址等。

    5.4 多级目录结构(树型目录结构)

    目录文件
    由文件的目录项组成的文件称为目录文件。
    系统中有一个根目录(或根目录文件),在这个目录中可登记一般文件,也可以登记目录文件,在每个目录文件中可以登记一般文件,也可以登记目录文件。
    根据这个递归定义就形成了一个倒立的树的结构。对于一棵树,它有一个树根(只有一个,根目录),在树根上可以长树叶(一般文件),也可以长树枝(子目录文件);对于每个树技又可以长树枝,也可以长树叶。
    在这里插入图片描述
    路径名:
    一个文件的路径名是由根目录到
    该文件的通路上所有目录文件名
    和该文件的符号名组成的。
    DOS WINDOWS系统中文件路径名
    \A\R\T \B\IU\I
    \D \B\P
    UNIX系统中文件路径名
    /A/R/T /B/IU/I
    /D /B/P

    6 共享与安全

    6.1 文件共享与安全性的关系

    文件共享是指某一个或某一部分文件可以让事先规定的某些用户共同使用。
    为实现文件共享,系统还必须提供文件保护的能力,即提供保证文件安全性的措施。
    文件的保护是指文件本身不得被未经文件主授权的任何用户存取,而对于授权用户也只能在允许的存取权限内使用文件。

    6.2 建立“当前目录”实现文件共享

    建立“值班目录”或称“当前目录”,是多路信息计算系统(MULTICS)采用过的办法。
    该系统令每个用户(或作业)获得一个“值班目录”,对文件的所有访问都是相对于“值班目录”进行的。

    6.3 采用“链接技术”实现文件共享

    链接,就是在相应目录表目之间进行链接,即一个目录中的表目直接指向另一个目录的表目。
    采用这种方法,在文件说明中必须增加“连访属性”和“用户计数”两项。
    “连访属性”说明表目中的地址是指向文件还是指向共享文件的目录表目。
    “用户计数”说明共享文件的当前用户数目。

    6.4 存取权限的类型及其验证方法

    文件的存取控制很多系统按照用户间的关系,把它们分为三类对象:文件主、同组用户、和其他用户。每个文件都有一个文件主,由他创建这个文件。除上述两种身份之外的所有用户都属于其他用户,可根据需要为他们规定某些存取权限。在UNIX 系统中,对文件存取权限的规定比较简单,用9个二进制位表示,分成三个域,每个域三位,它们是:rwx , 分别控制读、写和执行操作。

    (一)访问控制矩阵
    (二)存取控制表
    (三)用户权限表
    (四)口令
    (五)密码

    7 文件的完整性

    对信息的有意和无意的破坏确实存在。
    系统必须保存所有文件的双份拷贝,以便在任何不幸的偶然事件后能够重新恢复所有文件。
    建立文件拷贝的基本方法:
    周期性转储;增量转储

    8 文件操作

    为了用户能方便、灵活地使用文件,文件系统通常提供使用文件的有关系统调用命令。这些有关文件的系统调用命令描述了文件系统呈现在用户面前的面貌。
    命令的数目及其功能取决于操作系统环境。

    展开全文
  • Linux文件系统详解

    万次阅读 多人点赞 2019-05-29 16:07:53
    从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储结构、不同存储介质的区别(RAM、ROM、Flash)、存储节点inode。本文参考: http://blog.chinaunix.net/uid-8698570-id-1763151.html ...

    从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储结构、不同存储介质的区别(RAM、ROM、Flash)、存储节点inode。本文参考:

    http://blog.chinaunix.net/uid-8698570-id-1763151.html
    http://www.iteye.com/topic/816268
    http://soft.chinabyte.com/os/142/12315142.shtml
    http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/
    http://blog.csdn.net/kension/article/details/3796603
    http://www.360doc.com/content/11/0915/17/3200886_148505332.shtml
    在LINUX系统中有一个重要的概念:一切都是文件。 其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。这样带来优势也是显而易见的:
    UNIX 权限模型也是围绕文件的概念来建立的,所以对设备也就可以同样处理了。
    在这里插入图片描述

    1. 硬盘驱动

    常见的硬盘类型有PATA, SATA和AHCI等,在Linux系统中,对不同硬盘所提供的驱动模块一般都存放在内核目录树drivers/ata中,而对于一般通用的硬盘驱动,也许会直接被编译到内核中,而不会以模块的方式出现,可以通过查看/boot/config-xxx.xxx文件来确认:

    CONFIG_SATA_AHCI=y

    1. General Block Device Layer

    这一层的作用,正是解答了上面提出的第一个问题,不同的硬盘驱动,会提供不同的IO接口,内核认为这种杂乱的接口,不利于管理,需要把这些接口抽象一下,形成一个统一的对外接口,这样,不管你是什么硬盘,什么驱动,对外而言,它们所提供的IO接口没什么区别,都一视同仁的被看作块设备来处理。

    所以,如果在一层做的任何修改,将会直接影响到所有文件系统,不管是ext3,ext4还是其它文件系统,只要在这一层次做了某种修改,对它们都会产生影响。

    1. 文件系统

    文件系统这一层相信大家都再熟悉不过了,目前大多Linux发行版本默认使用的文件系统一般是ext4,另外,新一代的btrfs也呼之欲出,不管什么样的文件系统,都是由一系列的mkfs.xxx命令来创建,如:

    mkfs.ext4 /dev/sda

    mkfs.btrfs /dev/sdb

    内核所支持的文件系统类型,可以通过内核目录树 fs 目录中的内容来查看。

    1. 虚拟文件系统(VFS)

    Virtual File System这一层,正是用来解决上面提出的第二个问题,试想,当我们通过mkfs.xxx系列命令创建了很多不同的文件系统,但这些文件系统都有各自的API接口,而用户想要的是,不管你是什么API,他们只关心mount/umount,或open/close等操作。

    所以,VFS就把这些不同的文件系统做一个抽象,提供统一的API访问接口,这样,用户空间就不用关心不同文件系统中不一样的API了。VFS所提供的这些统一的API,再经过System Call包装一下,用户空间就可以经过SCI的系统调用来操作不同的文件系统。

    VFS所提供的常用API有:

    mount(), umount() …

    open(),close() …

    mkdir() …
    和文件系统关系最密切的就是存储介质,存储介质大致有RAM,ROM,磁盘磁带,闪存等。

    闪存(Flash Memory)是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器,数据删除不是以单个的字节为单位而是以固定的区块为单位(注意:NOR Flash 为字节存储。),区块大小一般为256KB到20MB。闪存是电子可擦除只读存储器(EEPROM)的变种,EEPROM与闪存不同的是,它能在字节水平上进行删除和重写而不是整个芯片擦写,这样闪存就比EEPROM的更新速度快。由于其断电时仍能保存数据,闪存通常被用来保存设置信息,如在电脑的BIOS(基本输入输出程序)、PDA(个人数字助理)、数码相机中保存资料等。
    外存通常是磁性介质或光盘,像硬盘,软盘,磁带,CD等,能长期保存信息,并且不依赖于电来保存信息,但是由机械部件带动,速度与CPU相比就显得慢的多。内存指的就是主板上的存储部件,是CPU直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,它的物理实质就是一组或多组具备数据输入输出和数据存储功能的集成电路,内存只用于暂时存放程序和数据,一旦关闭电源或发生断电,其中的程序和数据就会丢失。
    RAM又分为动态的和静态。。静态被用作cache,动态的常用作内存。。网上说闪存不能代替DRAM是因为闪存不像RAM(随机存取存储器)一样以字节为单位改写数据,因此不能取代RAM。这个以后可以了解下硬件的知识再来辨别.

    Linux下的文件系统结构如下:
    在这里插入图片描述
    Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。
      不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。
      1. 基于FLASH的文件系统
      Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。
     闪存主要有NOR和NAND两种技术。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。
      在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上面的Linux下的文件系统结构图)。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。
      顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。
      (1) jffs2
      JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。
      Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)
      主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。
      目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。
      jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。
       (2) yaffs:Yet Another Flash File System
      yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。
      yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。
      yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。
      (3) Cramfs:Compressed ROM File System
      Cramfs是Linux的创始人 Linus Torvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。
      在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。
      Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。
      另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
      由于以上特性,Cramfs在嵌入式系统中应用广泛。
      但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。?
      Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback 设备可以把它安装别的文件系统里。
      (4) Romfs
      传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。
      其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA, Smartphone, 数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。
      2. 基于RAM的文件系统
      (1) Ramdisk
      Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
      在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
      (2)ramfs/tmpfs
      Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)
      Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。
      Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
      Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
      3. 网络文件系统NFS (Network File System)
      NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
      以上讨论的都是基于存储设备的文件系统(memory-based file system),它们都可用作Linux的根文件系统。实际上,Linux还支持逻辑的或伪文件系统(logical or pseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。
      附录:NOR闪存与NAND闪存比较
    NOR FLASH
    接口时序同SRAM,易使用
    读取速度较快
    擦除速度慢,以64-128KB的块为单位
    写入速度慢(因为一般要先擦除)
    随机存取速度较快,支持XIP(eXecute In Place,芯片内执行),适用于代码存储。在嵌入式系统中,常用于存放引导程序、根文件系统等。
    单片容量较小,1-32MB
    最大擦写次数10万次

    NAND FLASH
    地址/数据线复用,数据位较窄
    读取速度较慢
    擦除速度快,以8-32KB的块为单位
    写入速度快
    顺序读取速度较快,随机存取速度慢,适用于数据存储(如大容量的多媒体应用)。在嵌入式系统中,常用于存放用户文件系统等。
    单片容量较大,8-128MB,提高了单元密度
    http://bbs.ednchina.com/BLOG_ARTICLE_142972.HTM

    三、文件存储结构

    介绍文件存储结构前先来看看文件系统如何划分磁盘,创建一个文件、目录、链接的过程。

    1.物理磁盘到文件系统
    我们知道文件最终是保存在硬盘上的。硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节,盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用,我们知道,每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分。扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数,帮这些参数可以得到硬盘的容量,基计算公式为:
    存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数
    要点:
    (1)硬盘有数个盘片,每盘片两个面,每个面一个磁头
    (2)盘片被划分为多个扇形区域即扇区
    (3)同一盘片不同半径的同心圆为磁道
    (4)不同盘片相同半径构成的圆柱面即柱面
    (5)公式: 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数
    (6)信息记录可表示为:××磁道(柱面),××磁头,××扇区
    那么这些空间又是怎么管理起来的呢?unix/linux使用了一个简单的方法。
    它将磁盘块分为以下三个部分:

    1. 超级块,文件系统中第一个块被称为超级块。这个块存放文件系统本身的结构信息。比如,超级块记录了每个区域的大小,超级块也存放未被使用的磁盘块的信息。
    2. I-切点表。超级块的下一个部分就是i-节点表。每个i-节点就是一个对应一个文件/目录的结构,这个结构它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号
    3. 数据区。文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上所有块的大小都一样。如果文件包含了超过一个块的内容,则文件内容会存放在多个磁盘块中。一个较大的文件很容易分布上千个独产的磁盘块中。

    Linux正统的文件系统(如ext2、ext3)一个文件由目录项、inode和数据块组成。
    目录项:包括文件名和inode节点号。
    Inode:又称文件索引节点,是文件基本信息的存放地和数据块指针存放地。
    数据块:文件的具体内容存放地。

    Linux正统的文件系统(如ext2、3等)将硬盘分区时会划分出目录块、inode Table区块和data block数据区域。一个文件由一个目录项、inode和数据区域块组成。Inode包含文件的属性(如读写属性、owner等,以及指向数据块的指针),数据区域块则是文件内容。当查看某个文件时,会先从inode table中查出文件属性及数据存放点,再从数据块中读取数据。

    文件存储结构大概如下:
    在这里插入图片描述
    其中目录项的结构如下(每个文件的目录项存储在改文件所属目录的文件内容里):

    图4:目录项结构
    在这里插入图片描述
    其中文件的inode结构如下(inode里所包含的文件信息可以通过stat filename查看得到):
    在这里插入图片描述
    以上只反映大体的结构,linux文件系统本身在不断发展。但是以上概念基本是不变的。且如ext2、ext3、ext4文件系统也存在很大差别,如果要了解可以查看专门的文件系统介绍。
    2. 创建一个文件的过程

    我们从前面可以知道文件的内容和属性是分开存放的,那么又是如何管理它们的呢?现在我们以创建一个文件为例来讲解。
    在命令行输入命令:
    $ who > userlist
    当完成这个命令时。文件系统中增加了一个存放命令who输出内容的新文件userlist,那么这整个过程到底是怎么回事呢?
    文件主要有属性、内容以及文件名三项。内核将文件内容存放在数据区,文件属性存放在i-节点,文件名存放在目录中。
    创建成功一个文件主要有以下四个步骤:

    1.    存储属性 也就是文件属性的存储,内核先找到一块空的i-节点。例如,内核找到i-节点号921130。内核把文件的信息记录其中。如文件的大小、文件所有者、和创建时间等。
      
    2.    存储数据 即文件内容的存储,由于该文件需要3个数据块。因此内核从自由块的列表中找到3个自由块。如600、200、992,内核缓冲区的第一块数据复制到块600,第二和第三分别复制到922和600.
      
    3.    记录分配情况,数据保存到了三个数据块中。所以必须要记录起来,以后再找到正确的数据。分配情况记录在文件的i-节点中的磁盘序号列表里。这3个编号分别放在最开始的3个位置。
      
    4.    添加文件名到目录,新文件的名字是userlist 内核将文件的入口(47,userlist)添加到目录文件里。文件名和i-节点号之间的对应关系将文件名和文件和文件的内容属性连接起来,找到文件名就找到文件的i-节点号,通过i-节点号就能找到文件的属性和内容。
      

    代码具体实现过程参考:
    http://blog.csdn.net/kai_ding/article/details/9206057
    3.创建一个目录的过程

    前面说了创建一个文件的大概过程,也了解文件内容、属性以及入口的保存方式,那么创建一个目录时又是怎么回事呢?
    我现在test目录使用命令mkdir 新增一个子目录child:

    从用户的角度看,目录child是目录test的一个子目录,那么在系统中这层关系是怎么实现的呢?实际上test目录包含一个指向子目录child的i-节点的链接,原理跟普通文件一样,因为目录也是文件。

    目录其实也是文件,只是它的内容比较特殊。所以它的创建过程和文件创建过程一样,只是第二步写的内容不同。

    1.  系统找到空闲的i-节点号887220,写入目录的属性
      
    2.  找到空闲的数据块1002来存储目录的内容,只是目录的内容比较特殊,包含文件名字列表,列表一般包含两个部分:i-节点号和文件名,这个列表其实也就是文件的入口,新建的目录至少包含三个目录”.”和”..”其中”.”指向自己,”..”指向上级目录,我们可以通过比较对应的i-节点号来验证,887270 对应着上级目录中的child对应的i-节点号
      
    3.  记录分配情况。这个和创建文件完全一样
      
    4.  添加目录的入口到父目录,即在父目录中的child入口。
      

    一般都说文件存放在某个目录中,其实目录中存入的只是文件在i-节点表的入口,而文件的内容则存储在数据区。我们一般会说“文件userlist在目录test中”,其实这意味着目录test中有一个指向i-节点921130的链接,这个链接所附加的文件名为userlist,这也可以这样理解:目录包含的是文件的引用,每个引用被称为链接。文件的内容存储在数据块。文件的属性被记录在一个被称为i-节点的结构中。I-节点的编号和文件名关联起来存在目录中。
    注意:其中“.”表示是当前目录。而“…”是当前目录的父目录。但也有特殊情况:如我们查看根目录/的情况:

    发现“.”和“…”都指向i-节点2。实际上当我们用mkfs创建一个文件系统时,mkfs都会将根目录的父目录指向自己。所以根目录下.和…指向同一个i-节点也不奇怪了。
    代码具体实现参考:
    http://blog.csdn.net/kai_ding/article/details/9206057

    1. 理解链接

    我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。图 1.展示了程序通过文件名获取文件内容的过程。
    图 1. 通过文件名打开文件
    在这里插入图片描述

    图 1. 通过文件名打开文件

    清单 3. 移动或重命名文件

     # stat /home/harris/source/glibc-2.16.0.tar.xz
      File: `/home/harris/source/glibc-2.16.0.tar.xz'
      Size: 9990512        Blocks: 19520      IO Block: 4096   regular file
    Device: 807h/2055d      Inode: 2485677     Links: 1
    Access: (0600/-rw-------)  Uid: ( 1000/  harris)   Gid: ( 1000/  harris)
    ...
    ...
    # mv /home/harris/source/glibc-2.16.0.tar.xz /home/harris/Desktop/glibc.tar.xz
    # ls -i -F /home/harris/Desktop/glibc.tar.xz
    2485677 /home/harris/Desktop/glibc.tar.xz
    

    在 Linux 系统中查看 inode 号可使用命令 stat 或 ls -i(若是 AIX 系统,则使用命令 istat)。清单 3.中使用命令 mv 移动并重命名文件 glibc-2.16.0.tar.xz,其结果不影响文件的用户数据及 inode 号,文件移动前后 inode 号均为:2485677。
    为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。

    具体关系可以看下图:

    为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名(见 图 2.hard link 就是 file 的一个别名,他们有共同的 inode)。硬链接可由命令 link 或 ln 创建。如下是对文件 oldfile 创建硬链接。
    link oldfile newfile
    ln oldfile newfile
    由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
    文件有相同的 inode 及 data block;
    只能对已存在的文件进行创建;
    不能交叉文件系统进行硬链接的创建;
    不能对目录进行创建,只可对文件创建;
    删除一个硬链接文件并不影响其他有相同 inode 号的文件。

    创建一个链接的步骤大概如下:
    1) 通过原文件的文件名找到文件的i-节点号
    2) 添加文件名关联到目录,新文件的名字是mylink 内核将文件的入口(921130,mylink)添加到目录文件里。
    和创建文件的过程比较发现,链接少了写文件内容的步骤,完全相同的是把文件名关联到目录这一步
    现在.i- 节点号921130对应了两个文件名。链接数也会变成2个,文件的内容并不会发生任何变化。前面我们已经讲了:目录包含的是文件的引用,每个引用被称为链接。所以链接文件和原始文件本质上是一样的,因为它们都是指向同一个i-节点。由于此原因也就可以理解链接的下列特性:你改变其中任何一个文件的内容,别的链接文件也一样是变化;另外如果你删除某一个文件,系统只会在所指向的i-节点上把链接数减1,只有当链接数减为零时才会真正释放i-节点。
    硬链接有两个特点:
    1)不能跨文件系统
    2)不能对目录
    清单 4. 硬链接特性展示

    # ls -li 
     total 0 
    
     // 只能对已存在的文件创建硬连接
     # link old.file hard.link 
     link: cannot create link `hard.link' to `old.file': No such file or directory 
    
     # echo "This is an original file" > old.file 
     # cat old.file 
     This is an original file 
     # stat old.file 
      File: `old.file'
      Size: 25             Blocks: 8          IO Block: 4096   regular file 
     Device: 807h/2055d      Inode: 660650      Links: 2 
     Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root) 
     ... 
     // 文件有相同的 inode 号以及 data block 
     # link old.file hard.link | ls -li 
     total 8 
     660650 -rw-r--r-- 2 root root 25 Sep  1 17:44 hard.link 
     660650 -rw-r--r-- 2 root root 25 Sep  1 17:44 old.file 
    
     // 不能交叉文件系统
     # ln /dev/input/event5 /root/bfile.txt 
     ln: failed to create hard link `/root/bfile.txt' => `/dev/input/event5': 
     Invalid cross-device link 
    
     // 不能对目录进行创建硬连接
     # mkdir -p old.dir/test 
     # ln old.dir/ hardlink.dir 
     ln: `old.dir/': hard link not allowed for directory 
     # ls -iF 
     660650 hard.link  657948 old.dir/  660650 old.file
    

    软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块(见 图 2.)。因此软链接的创建与使用没有类似硬链接的诸多限制:
    软链接有自己的文件属性及权限等;
    可对不存在的文件或目录创建软链接;
    软链接可交叉文件系统;
    软链接可对文件或目录创建;
    创建软链接时,链接计数 i_nlink 不会增加;
    删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
    图 2. 软链接的访问
    在这里插入图片描述
    软链接
    实际上只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理;相反,硬链接为文件开设一个新的目录项,硬链接与文件原有的名字是平权的,在Linux看来它们是等价的。由于这个原因,硬链接不能连接两个不同文件系统上的文件。

    软连接与windows下的快捷方式类似
    至于硬连接,举个例子说吧,你把dir1/file1硬连接到dir2/file2, 就是在dir2下建立一个dir1/file1的镜像文件file2,它与file1是占用一样大的空间的,并且改动两者中的一个,另一个也会发生同样的改动.
    软连接和硬连接可以这样理解:
    硬连接就像一个文件有多个文件名,
    软连接就是产生一个新文件(这个文件内容,实际上就是记当要链接原文件路径的信息),这个文件指向另一个文件的位置,
    硬连接必须在同一文件系统中,而软连接可以跨文件系统
    硬连接 :源文件名和链接文件名都指向相同的物理地址,目录不能够有硬连接,文件在磁盘中只有一个复制,可以节省硬盘空间,由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除软连接(符号连接)用ln -s命令创建文件的符号连接,符号连接是linux特殊文件的一种,作为一个文件,它的资料是它所连接的文件的路径名,类似于硬件方式,可以删除原始文件 而连接文件仍然存在。**
    清单 5. 软链接特性展示

    # ls -li 
     total 0 
    
     // 可对不存在的文件创建软链接
     # ln -s old.file soft.link 
     # ls -liF 
     total 0 
     789467 lrwxrwxrwx 1 root root 8 Sep  1 18:00 soft.link -> old.file 
    
     // 由于被指向的文件不存在,此时的软链接 soft.link 就是死链接
     # cat soft.link 
     cat: soft.link: No such file or directory 
    
     // 创建被指向的文件 old.file,soft.link 恢复成正常的软链接
     # echo "This is an original file_A" >> old.file 
     # cat soft.link 
     This is an original file_A 
    
     // 对不存在的目录创建软链接
     # ln -s old.dir soft.link.dir 
     # mkdir -p old.dir/test 
     # tree . -F --inodes 
     . 
    ├── [ 789497]  old.dir/ 
    │   └── [ 789498]  test/ 
    ├── [ 789495]  old.file 
    ├── [ 789495]  soft.link -> old.file 
    └── [ 789497]  soft.link.dir -> old.dir/
    

    代码具体实现参考:http://blog.csdn.net/kai_ding/article/details/8942884

    四、文件节点inode
    可以看到inode节点好比是文件的大脑,下面就详细介绍一下inode。
    1.inode是什么
    理解inode,要从文件储存说起。
    扇区(sector):硬件(磁盘)上的最小的操作单位,是操作系统和块设备(硬件、磁盘)之间传送数据的单位。
    block由一个或多个sector组成,文件系统中最小的操作单位;OS的虚拟文件系统从硬件设备上读取一个block,实际为从硬件设备读取一个或多个sector。对于文件管理来说,每个文件对应的多个block可能是不连续的;
    block最终要映射到sector上,所以block的大小一般是sector的整数倍。不同的文件系统block可使用不同的大小,操作系统会在内存中开辟内存,存放block到所谓的block buffer中。在Ext2中,物理块的大小是可变化的,这取决于在创建文件系统时的选择,之所以不限制大小,也正体现了Ext2的灵活性和可扩充性。通常,Ext2的物理块占一个或几个连续的扇区,显然,物理块的数目是由磁盘容量等硬件因素决定的。具体文件系统所操作的基本单位是逻辑块,只在需要进行I/O操作时才进行逻辑块到物理块的映射,这显然避免了大量的I/O操作,因而文件系统能够变得高效。逻辑块作为一个抽象的概念,它必然要映射到具体的物理块上去,因此,逻辑块的大小必须是物理块大小的整数倍,一般说来,两者是一样大的。
    通常,一个文件占用的多个物理块在磁盘上是不连续存储的,因为如果连续存储,则经过频繁的删除、建立、移动文件等操作,最后磁盘上将形成大量的空洞,很快磁盘上将无空间可供使用。因此,必须提供一种方法将一个文件占用的多个逻辑块映射到对应的非连续存储的物理块上去,Ext2等类文件系统是用索引节点解决这个问题的。
    在这里插入图片描述在这里插入图片描述
    文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
    在Unix/Linux上,一个文件由一个inode 表示。inode在系统管理员看来是每一个文件的唯一标识,在系统里面,inode是一个结构,存储了关于这个文件的大部分信息。
    2.inode内容
    inode包含文件的元信息,具体来说有以下内容:
    *文件的字节数
    文件拥有者的UserID文件的GroupID
    *文件的读、写、执行权限
    *文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
    链接数,即有多少文件名指向这个inode文件数据block的位置可以用stat命令,查看某个文件的inode信息:statexample.txt
    总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。
    inode中存储了一个文件的以下信息:
    3.inode结构

    struct inode {
            struct hlist_node       i_hash;              /* 哈希表 */
            struct list_head        i_list;              /* 索引节点链表 */
            struct list_head        i_dentry;            /* 目录项链表 */
            unsigned long           i_ino;               /* 节点号 */
            atomic_t                i_count;             /* 引用记数 */
            umode_t                 i_mode;              /* 访问权限控制 */
            unsigned int            i_nlink;             /* 硬链接数 */
            uid_t                   i_uid;               /* 使用者id */
            gid_t                   i_gid;               /* 使用者id组 */
            kdev_t                  i_rdev;              /* 实设备标识符 */
            loff_t                  i_size;              /* 以字节为单位的文件大小 */
            struct timespec         i_atime;             /* 最后访问时间 */
            struct timespec         i_mtime;             /* 最后修改(modify)时间 */
            struct timespec         i_ctime;             /* 最后改变(change)时间 */
            unsigned int            i_blkbits;           /* 以位为单位的块大小 */
            unsigned long           i_blksize;           /* 以字节为单位的块大小 */
            unsigned long           i_version;           /* 版本号 */
            unsigned long           i_blocks;            /* 文件的块数 */
            unsigned short          i_bytes;             /* 使用的字节数 */
            spinlock_t              i_lock;              /* 自旋锁 */
            struct rw_semaphore     i_alloc_sem;         /* 索引节点信号量 */
            struct inode_operations *i_op;               /* 索引节点操作表 */
            struct file_operations  *i_fop;              /* 默认的索引节点操作 */
            struct super_block      *i_sb;               /* 相关的超级块 */
            struct file_lock        *i_flock;            /* 文件锁链表 */
            struct address_space    *i_mapping;          /* 相关的地址映射 */
            struct address_space    i_data;              /* 设备地址映射 */
            struct dquot            *i_dquot[MAXQUOTAS]; /* 节点的磁盘限额 */
            struct list_head        i_devices;           /* 块设备链表 */
            struct pipe_inode_info  *i_pipe;             /* 管道信息 */
            struct block_device     *i_bdev;             /* 块设备驱动 */
            unsigned long           i_dnotify_mask;      /* 目录通知掩码 */
            struct dnotify_struct   *i_dnotify;          /* 目录通知 */
            unsigned long           i_state;             /* 状态标志 */
            unsigned long           dirtied_when;        /* 首次修改时间 */
            unsigned int            i_flags;             /* 文件系统标志 */
            unsigned char           i_sock;              /* 可能是个套接字吧 */
            atomic_t                i_writecount;        /* 写者记数 */
            void                    *i_security;         /* 安全模块 */
            __u32                   i_generation;        /* 索引节点版本号 */
            union {
                    void            *generic_ip;         /* 文件特殊信息 */
            } u;
    };
    

    inode就是一个文件的一部分描述,不是全部,在内核中,inode对应了这样一个实际存在的结构。
    复制代码
    纵观整个inode的C语言描述,没有发现关于文件名的东西,也就是说文件名不由inode保存,实际上系统是不关心文件名的,对于系统中任何的操作,大部分情况下你都是通过文件名来做的,但系统最终都要通过找到文件对应的inode来操作文件,由inode结构中 *i_op指向的接口来操作。
    文件系统如何存取文件的:
    1)、根据文件名,通过Directory里的对应关系,找到文件对应的Inodenumber
    2)、再根据Inodenumber读取到文件的Inodetable
    3)、再根据Inodetable中的Pointer读取到相应的Blocks
    这里有一个重要的内容,就是Directory,他不是我们通常说的目录,而是一个列表,记录了一个文件/目录名称对应的Inodenumber。

    转自: https://www.cnblogs.com/alantu2018/p/8461749.html

    展开全文
  • 一口气搞懂「文件系统」,就靠这 25 张图了

    万次阅读 多人点赞 2020-08-13 21:50:32
    文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。 Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等...
  • Linux文件系统

    万次阅读 2019-03-27 16:49:28
    Linux系统启动时,首先挂载根文件系统,之后可以自动或手动挂载其他的文件系统,这些文件系统要挂载到挂载点上,与虚拟文件系统(Virtual File System)和通用块设备层(General Block Device Layer)建立联系。...
  • 操作系统-文件系统

    千次阅读 2019-04-10 17:11:42
    在前面操作系统内核资源管理功能中有三个功能,分别是进程管理、存储器管理和设备管理而唯独没有文件系统的功能,其实在之前是别说操作系统内核就连操作系统中都没有文件系统这个功能的,但随着人们要存储到磁盘上的...
  • 看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果。所以,决定总结学习下ARM流水线。 ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/MHz的指令处理...
  • 安装Ubuntu时,提示“没有根文件系统

    万次阅读 多人点赞 2016-01-09 19:16:30
    安装Ubuntu时,提示“没有根文件系统
  • 安装过程一直显示“正在探测文件系统...”使ubuntu系统无法继续安装。 解决方法:重启电脑,重新安装ubuntu之前,用“Ctrl+Alt+T"调出终端,然后运行“sudo umount -l /isodevice”然后再安装系统就可以正常...
  • 如何区分分布式/集群/并行文件系统

    万次阅读 热门讨论 2011-04-22 23:29:00
    分布式文件系统、集群文件系统、并行文件系统,这三种概念很容易混淆,实际中大家也经常不加区分地使用。总是有人问起这三者的区别和联系,其实它们之间在概念上的确有交叉重叠的地方,但是也存在显著不同之处。
  • Linux下如何查看分区文件系统类型

    万次阅读 2017-05-14 20:14:26
    1,fdisk -l  ...但df 命令只会列出已挂载的文件系统信息,对于没有挂载的文件系统是查看不到的。使用这个命令可以很方便的查看已挂载的文件系统的空间使用量、剩余空间大小等信息。 3,parted
  • DocSys - 基于Web的文件管理系统

    万次阅读 2020-03-02 18:02:06
    DocSys是基于Java SSM框架开发的Web文件系统,旨在为个人和企业用户提供一个简单、方便的文件存储方案,采用Windows桌面系统和Apple手机的用户操作习惯,支持使用SVN和GIT进行历史版本管理、支持文件内容全文搜索、...
  • 浅谈linux中的根文件系统(rootfs的原理和介绍)

    万次阅读 多人点赞 2017-10-06 10:13:21
    linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法向其他初学者们给出一个很全面很到位的解释。于是,今天我们...
  • VS 2017系统找不到指定文件

    万次阅读 多人点赞 2018-01-14 19:07:38
    结果提示找不到指定文件 各种百度之后都无法解决;然后问了一下老师才发现问题太低端百度没有...; 嗯~~原来自己的源码没有加进项目中... 直接保存,然后在源文件中将源码添加进去。搞定!
  • 有时候,复制比较大的文件的时候会提示“对于目标文件系统,文件XXX过大”,普及下知识,FAT32的文件系统不支持复制大于4g的单个文件,而NTFS则是支持大文件!好,我们要做的就是转换格式,数据会不会因为转换而丢失...
  • 在更新后,win10打开一些系统自带的应用程序,就会报错提示“文件系统错误 (-2147219196)”。 比如我们比较常用的,打开win10图片的照片应用:     此时只需要,右键开始菜单,点击windows powershell(管理...
  • 理解linux虚拟文件系统VFS - 概述

    万次阅读 2015-01-05 15:54:51
    当前,除了linux标准的文件系统Ext2/Ext3/Ext4外,存在很多种文件系统,比如reiserfs, xfs, Windows的vfat NTFS,网络文件系统nfs 以及flash 文件系统jffs2, yaffs/yaffs2 ubifs。linux通过叫做VFS的中间层最这些...
  • Linux系统的镜像文件得下载地址

    万次阅读 2018-03-16 13:24:01
    Linux系统的镜像文件的下载地址:http://archive.kernel.org/centos-vault/6.1/isos/x86_64/(复制到浏览器中)然后选中下载即可。
  • linux下查看系统支持的文件系统。查看自己系统正在使用的文件系统
1 2 3 4 5 ... 20
收藏数 4,979,325
精华内容 1,991,730
关键字:

文件系统