精华内容
下载资源
问答
  • U盘文件系统损坏恢复

    千次阅读 2017-07-03 18:36:18
    U盘插入电脑,只显示盘符打不开,双击提示“请将磁盘插入U盘”,打开磁盘管理发现分区已经被识别只是文件系统显示为RAW,判断硬件工作正常只是文件系统损坏; 用管理员身份运行命令提示工具运行:chkdsk d: \f ...

    U盘插入电脑,只显示盘符打不开,双击提示“请将磁盘插入U盘”,打开磁盘管理发现分区已经被识别只是文件系统显示为RAW,判断硬件工作正常只是文件系统损坏;

    用管理员身份运行命令提示工具运行:chkdsk d: \f

    问题解决,其中d为U盘盘符,冒号:与\间有一个空格;

    展开全文
  • 操作系统文件管理

    千次阅读 多人点赞 2020-09-22 03:05:15
    一、文件与文件系统 1.1 文件是什么 文件是对磁盘的抽象 所谓文件是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。 信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项...

    一、文件与文件系统

    1.1 文件是什么

    • 文件是对磁盘的抽象
    • 所谓文件是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。
    • 信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系
    • 文件内容的意义:由文件建立者和使用者解释

    1.2 如何设计一个文件系统

    这里先看文件管理的需求:

    • 从用户角度

      文件系统是如何呈现在用户面前:

      *   一个文件的组织
      
      • 如何命名
      • 如何保护文件
      • 可以实施的操作
    • 从操作系统角度:怎样组织、管理文件

      *   文件的描述、分类
      
      • 文件目录的实现
      • 存储空间的管理
      • 文件的物理地址
      • 磁盘实际运作方式(与设备管理的接口)
      • 文件系统的性能

    1.3 文件系统

    • 操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用

    • 文件系统要完成哪些任务

      1、统一管理磁盘空间,实施磁盘空间的分配与回收

      2、实现文件的按名存取:名字空间–映射–>磁盘空间

      3、实现文件信息的共享,并提供文件的保护、保密手段

      4、向用户提供一个方便使用、易于维护的接口,并向用户提供有关统计信息

      5、提高文件系统的性能

      6、提供与IO系统的统一接口

    1.4 文件的分类

    按文件性质和用途分类(UNIX),一般分为普通文件、目录文件、特殊文件(设备文件)、管道文件、套接字

    • 普通文件

      即用户自己建立的文件,包含了用户的信息,一般为ASCII或二进制文件

    • 目录文件

      管理文件系统的系统文件

    • 特殊文件

      字符设备文件:和输入输出有关,用户模仿串行I/O设备,例如终端、打印机、网卡等。

      块设备文件:磁盘

    1.5 文件的逻辑结构

    • 无结构的流式文件
      对文件内信息不再划分单位,它是依次的一串字符流构成的文件。
    • 有结构的记录式文件
      用户把文件内的信息按逻辑上独立的含义划分信息单位,每个单位称为一个逻辑记录(简称记录)。


    **说明:**这里是从用户角度看文件,由用户的访问方式确定,这里给出了三种逻辑结构,还可以组织成堆、顺序、索引、索引顺序、散列等结构。第一种是以字节为单位的流式结构,第二种是一种记录式文件结构,最后一种是树形结构。

    1.6 典型的文件逻辑结构与文件存取

    • 流式文件:构成文件的基本单位是字符

      文件是有逻辑意义、无结构的一串字符的集合

    • 记录式文件:文件由若干记录组成,可以按记录进行读写、查找等操作。每条记录有其内部结构

    • 文件的逻辑结构与文件存取之间的关系

      顺序存取(访问)

      随机存取:提供读写位置(当前位置)。如UNIXseek操作。

    1.7 文件的存储介质

    1.7.1 存储介质与物理块

    • 典型的存储介质

      磁盘(包括固态盘SSD)、磁带、光盘、U盘、…

    • 物理块(块block、簇cluster

      信息存储、传输、分配的独立单位

      存储设备划分为大小相等的物理块,统一编号

    1.7.2 典型的磁盘结构

    普通磁盘构造及工作原理

    • 磁道(Track)
    • 柱面(Cylinder)
    • 扇区(Sector)
    • 磁头(Heads)
    • 盘片(Platters)
    • 每个碟片都有两面,因此也会相对应每碟片有2个磁头。

    • A:磁道
    • B:扇面
    • C:扇区
    • D:簇(扇区组)
      在硬盘上定位某一数据记录位置—C扇区,使用了三维定位。

    1.7.3 磁盘访问

    磁盘工作时盘片在高速旋转,机械手臂驱动磁头沿着径向移动,在磁道上读取所需要的数据。
    一次访问磁盘的请求:读写、磁盘地址(设备号、柱面号、磁头号、扇区号),内存地址(源/目)。完成过程由三个动作组成:

    1. 寻道(时间):磁头移动定位到指定磁道
    2. 旋转延迟(时间):等待指定扇区从磁头下旋转经过
    3. 数据传输(时间):数据在磁盘与内存之间的实际传输

    1.7.4 磁盘空间管理

    • 位图

      用一串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位,分配的物理块为0,否则为1

      申请物理块时,可以在位示图中查找1的位,返回对应的物理块号

      归还时,将对应位转置1

    • 空闲块表

      将所有空闲块记录在一个表中,即空闲块表

      主要两项内容:起始块号,块数

    • 空闲块链表

      把所有空闲块链成一个表

      扩展:成组链接法

    磁盘地址与块号的转换

    成组链接法设计思想

    **说明:**左上角的是一个专用块,表示一些有用信息,而右边大括号中的都是空闲块。所有空闲块我们分成了若干组,典型的是100块是一组,最后一个空闲组只有99个空闲块。专用块中有20个空闲块号,分别对应右边的空闲块组。每次要使用文件的时候,就从专用块中挑选空闲块,一般从801开始分配。820中的第一块实际上是记录了后面一块800中空闲块的空闲块号和总的空块的数量,后面的以此类推。最后一个组中的0则表示最后一组的标志。

    成组链接法:分配算法

    分配一个空闲块

    L单元(空闲块数)

    • 空闲块数 > 1 , i = L + 空闲块数

      从i单元得到一个空闲块号;

      把该块分配给申请者;

      空闲块数减1

    • 空闲块数 = 1, 取出L + 1单元内容(一组的第一块号或0);

      值 = 0无空闲块,申请者等待

      其值不等于零,把该块内容复制到专用块

      该块分配给申请者;

    把专用块内容读到内存L 开始的区域。

    成组链表法:回收算法

    归还一块

    L单元的空闲块数

    • 空闲块数 < 100空闲块数加一;

      j := L + 空闲块数

      归还块号填入j单元

    • 空闲块数 = 100, 则把内存中登记的信息写入归还块中;

      把归还块号填入L+ 1单元;

      L单元置成1

    二、文件控制块和文件目录

    2.1 文件属性

    • 文件控制块(File Control Block:FCB

      为管理文件而设置的数据结构,保存管理文件所需的所有有关信息(文件属性或元数据)

    • 常用属性

      文件名,文件号,文件大小,文件地址,创建时间,最后修改时间,最后访问时间,保护,口令,创建者,当前拥有者,文件类型,共享计数,各种标志(只读、隐藏、系统、归档、ASCII/二进制、顺序/随机访问、临时文件、锁)

    • 基本文件操作

    ![](https://img-blog.csdnimg.cn/img_convert/a5a3c601b9b7e0d0d85df16a22b7d1ea.png)
    6

    2.2 文件目录、目录项与目录文件

    • 文件目录

      *   统一管理每个文件的元数据,以支持文件名到文件物理地址的转换
      
      • 将所有文件的管理信息组织在一起,即构成文件目录
    • 目录文件

      将文件目录以文件的形式存放在磁盘上

    • 目录项

      *   构成文件目录的基本单元
      
      • 目录项可以是FCB,目录是文件控制块的有序集合

    2.3 文件目录结构的演化


    **说明:**最初是以一级目录结构,最后慢慢演化成了树形目录结构。

    2.4 与目录相关的概念

    • 路径名

      绝对路径名:从根目录开始

      相对路径:从当前目录开始

    • 当前目录/工作目录

    • 目录操作

      创建目录、删除目录等等

    2.4 目录文件之间的关联

    三、文件的物理结构

    文件在存储介质上的存放方式

    主要解决两个问题:

    • 假设一个文件被划分成N块,这N块在磁盘上是怎么存放的?
    • 其地址(块号或簇号)在FCB中是怎样记录的?

    3.1 连续(顺序)结构

    • 文件的信息存放在若干连续的物理块中

    在上图a中,存放者多个连续的文件,在b中有些磁盘空间被还回来了。如果有些块太小,可能就不能再利用了。在FCB中我们只需要给出文件块的首地址和块数即可。

    • 优点

      简单

      支持顺序存取和随机存取

      所需的磁盘寻道次数和寻道时间最少

      可以同时读入多个块,检索一个块也很容易

    • 缺点

      *   文件不能动态增长,因为可能后面的磁盘空间已经被占据了。如果要增长则需要给出预留空间,但是这样就导致了浪费或重新分配和移动的开销。
      
      • 不利于文件插入和删除
      • 产生外部碎片:可以使用紧缩技术进行整理

    3.2 链接结构

    • 一个文件的信息存放在若干不连续的物理块中,各块之间通过指针连接,前一个物理块指向下一个物理块

    **说明:**在FCB中我们只需要给出第一块的块号即可。

    • 优点

      *   提高了磁盘空间的利用率,不存在外部碎片问题
      
      • 有利于文件插入和删除
      • 有利于文件动态扩充
    • 缺点

      *   存取速度慢,不适于随机存取
      
      • 可靠性问题,如指针出错
      • 更多的寻道次数和寻道时间
      • 链接指针占用一定的空间

    于是我们可以对此种结构进行某种改造:文件分配表FAT

    3.3 文件分配表(FAT)

    ![](https://img-blog.csdnimg.cn/img_convert/1e0fedc71930f24dc0ed2763d414ee1e.png)
    11

    **说明:**是把所有物理块的表指针都几种存放在一张表中,而不是用一个物理块的一部分来存放指针。从图中可以看到文件A的块号是4,而其下一个物理块的表项为7,最后到值为-1则表示结束。那某文件的起始块号从哪里得到?其实起始块号就记录在了FCB中。这种结构一般用在Windows中。在UNIX中一般采用索引结构。

    3.4 索引结构

    • 一个文件的信息存放在若干个不连续物理块中
    • 系统为每个文件建立一个专用数据结构:索引表,并将这些物理块的块号存放在该索引中。
    • 索引表就是磁盘块地址数组,其中地i个条目指向文件的第i块。

    那索引表应该存放在何处?

    这里必须知道每个文件的索引表长度是不一样的,于是不能存放在FCB中,因为FCB是固定大小的。于是我们在FCB中只记录索引表的地址。

    ![](https://img-blog.csdnimg.cn/img_convert/f1a3f40e4630f06f6cf7efc01a6f6e31.png)
    12

    **说明:**文件B的索引块号是24,索引表是存放在一个物理块中的。索引块中就记录了分配给这个文件的物理块号,可以看到这里我们是可以随机存取的。

    • 优点

      保持了链接结构的优点,又解决了其缺点

      *   既能顺序存取,又能随机存取
      
      • 满足了文件动态增长、插入删除的要求
      • 能充分利用磁盘空间
    • 缺点

      *   较多的寻道次数和寻道时间
      
      • 索引表本身带来了系统开销,如:内存、磁盘空间、存取时间
    • 组织方式

      问题:索引表很大,需要多个物理块存放时怎么办?

      *   1、链接方式
      
      一个盘块存一个索引表,多个索引表链接起来
      
      • 2、多级索引方式

        将文件的索引表地址放在另一个索引表中

      • 3、综合模式

        直接索引方式与间接索引方式结合

    • 多级索引与综合模式

    ![](https://img-blog.csdnimg.cn/img_convert/0153ee1b94be16ef7eb08991eecf654f.png)
    13

    **说明:**图上部分是多级索引模式,此模式中顶级索引表中都记录的是次级索引表地址。而在图下部分则是综合模式,顶级索引表中一部分记录的是直接的物理块,而另一部分是记录的次级索表块地址,即一部分是直接寻址,一部分是间接寻址。

    3.5 UNIX的三级索引结构

    UNIX文件系统中采用的是多级索引结构(综合模式)

    • 每个文件的主索引表有15个索引项(FCB中),每项两个字节

    • 12项直接存放文件的物理块号(直接寻址)

    • 如果文件大于12块,则利用第13项指向一个物理块,在该块中存放的是一级索引表。假设扇区大小为512字节,物理块等于扇区块大小,一级索引表可以存放256个物理块号

    • 对于更大的文件还可以利用第14项和第15项作为二级和三级索引表

    • 问题:采用这种结构,一个文件最大可以达到多少个物理块

    ![](https://img-blog.csdnimg.cn/img_convert/fe14a133d7e56c27b49ba7535fe8838a.png)
    14

    四、文件系统的实现

    4.1 概述

    • 实现文件系统需要考虑磁盘上和内存中的内容布局

    • 磁盘上

      如何启动操作系统?

      磁盘是怎样管理的?怎样获取磁盘的有关信息?

      目录文件在磁盘上怎么存放?普通文件在磁盘上怎么存放?

    • 内存中

      当进程使用文件时,操作系统是如何支持的?

      文件系统的内存数据结构

    4.2 相关术语

    • 磁盘分区

      把一个物理磁盘的存储空间划分为几个相互独立的部分,称为分区

    • 文件卷

      磁盘上的逻辑分区,由一个或多个物理块组成。

      *   一个文件卷可以是整个磁盘或部分磁盘或跨盘(`RAID`)
      
      • 同一个文件卷使用同一份管理数据进行文件分配和磁盘空闲空间管理,不同的文件卷中的管理数据是相互独立的。
      • 一个文件卷上包括文件系统信息、一组文件(用户文件、目录文件)、未分配空间
      • 块或簇:一个或多个(2的幂次方)连续的扇区,可寻址数据库
    • 格式化

      在一个文件卷上建立文件系统,即建立并初始化用于文件分配和磁盘空闲空间管理的管理数据

    4.3 磁盘上的内容

    ![](https://img-blog.csdnimg.cn/img_convert/5231db71101d3c6215c3f0dbd523b7cf.png)
    15
    • 引导区

      包括了从该卷引导操作系统所需的信息,每个卷(分区)都有一个,通常称为扇区

    • 卷信息

      包括该卷的块数、块大小、空闲块数量和指针、空闲FCB数量和指针等等

    • 目录文件

    4.4 磁盘上文件系统的布局

    ![](https://img-blog.csdnimg.cn/img_convert/e6c9367122e635f8fa26e230cd5f8fe3.png)
    16

    4.5 内存中所需的数据结构(以UNIX为例)

    ![](https://img-blog.csdnimg.cn/img_convert/ba5a0519175e4b1060a482df29f72a8d.png)
    17

    五、文件系统实例(UNIX)

    5.1 文件目录检索

    访问一个文件–>两步骤

    • 目录检索

      用户给出文件名–>按文件名查找到目录项/FCB

      根据路径名检索:

      • 全路径名:从根目录开始
      • 相对路径:从当前目录开始
    • 文件寻址

      根据目录想/FCB中文件物理地址等信息,计算出文件中任意记录或字符在存储介质上的地址

    5.2 目录文件实现时的改进

    • 问题:如何加快目录检索?

    • 一种解决方案

      目录项分解法:即把FCB分成两部分

      • 符号目录项:文件名,文件号

      • 基本目录项:除文件名外的所有字段

    ![](https://img-blog.csdnimg.cn/img_convert/f8f81a2e88c900ac547c9ac845283e16.png)
    18
    **说明:**每个方格表示目录文件(由目录项组成),每个椭圆表示普通文件。如何我们采用目录项分解法,于是符号目录项中的内容就特别简单,此时目录项就变成了符号目录项;基本目录项保存在了磁盘的专用区域。
    
    • 好处

      假设一个FCB48个字节,物理块大小512字节。符号目录项占8字节(文件名6字节,文件号2字节),基本目录项占48-5 = 42字节。

      这里给出一个目录文件有128个目录项,在分解前则需要13个物理块,分解后符号目录项占2块,基本目录项占11块。总块数是不变的,但是查找一个文件的平均访问磁盘的次数分解前为(1+13)/2=7次,分解后为(1+2)/2 + 1 = 2.5次。于是就提高了文件检索的速度。

    六、UNIX文件系统

    • FCB= 目录项 +i节点

    • 目录项:文件名 +i节点号

    • 目录文件由目录项构成

    • i节点:描述文件的相关信息

    • 每个文件由一个目录项、一个i节点和若干磁盘块构成

    ![](https://img-blog.csdnimg.cn/img_convert/b6ddd2603da2a6bfce85b0d646f84aa2.png)
    19

    **说明:**上图是UNIX系统的文件布局。下面看如何查找一个文件

    <div class="image-package">
    
    ![](https://img-blog.csdnimg.cn/img_convert/300601862d4d453ecb8507ca4191ffd4.png)
    20

    **说明:**要查找的文件为/usr/ast/mbox,根目录文件中一个点表示本目录的目录项,两个点表示父目录的目录项,每个目录项都包含文件名和i节点号。从i节点中可以知道这个文件的第一块存放在128这个位置,于是我们读取usr中的内容,从这个目录中去找ast这个文件,以此类推。

    一、文件系统实例(FAT)

    1.1 Windows的FAT16文件系统

    • 簇(块)大小:1、2、4、8、16、3264扇区

    • 文件系统的数据记录在“引导扇区”中

    • 文件分配表FAT的作用

      描述簇的分配状态、标注下一簇的簇号等

    • FAT表项:2字节(16位)

    • 目录项:32字节

    • 根目录大小固定

    ![](https://img-blog.csdnimg.cn/img_convert/4843c080d6c11860635c5a07169a935f.png)
    1

    1.2 FAT文件系统:主引导记录(Main Boot Record,MBR)

    • 主引导记录

      一般放在零号扇区中

    ![](https://img-blog.csdnimg.cn/img_convert/65e5275a0ecf5db0a3acd3f5a00c2c03.png)
    2

    1.3 FAT文件系统:分区引导扇区(Dos Boot Record,DBR)

    ![](https://img-blog.csdnimg.cn/img_convert/753992dff87da2a053e08f1c781f44e9.png)
    3

    **说明:**这里是以FAT32为例。

    1.4 引导扇区(BIOS参数块)

    **说明:**这里我们看BIOS参数块,也是以FAT32为例。

    1.5 引导扇区(扩展BIOS参数块EBPB)

    1.6 文件分配表FAT

    • 可以把文件分配表看成是一个整数数组,每个整数代表磁盘分区的一个簇号

    • 状态

      未使用、坏簇、系统保留、被文件占用(下一簇簇号)、最后一簇(0xFFFF

    • 簇号从0开始编号,簇0和簇1是保留的。

    1.7 FAT16目录项

    **说明:**在前面讲过,UNIX系统中i节点加上目录项就是FCB,而在FAT文件系统中FCB就等于目录项。32个字节没有用完,没用完的保留。

    1.8 FAT32文件系统

    • FAT32中,根目录区(BOOT区)不是固定区域、固定大小,而是数据区的一部分,采用与子目录文件相同的管理方式

    • 目录项仍占32字节,但分为各种类型(包括:“.”目录项、“..”目录项、短文件名目录项、长文件名目录项、卷标项(根目录)、已删除目录项(第一字节为0xE5)等)

    • 支持长文件名格式

    • 支持Unicode

    • 不支持高级容错特性,不具有内部安全特性

    1.9 FAT32目录项

    **说明:**这是一个基本的目录项。

    1.10 一般长文件名的实现方式

    **说明:**左边的实现是目录项的长度不固定。第一个字段给出目录项的长度,然后把固定长度的属性记录在其后,再才是文件名,因为文件名的长度是不一样的,留出足够的空间给文件名。缺点就是一个文件删除时,就留出了一块空间,而这个空间可能不能放下其他文件,这样就会产生碎片。右边的实现是由于文件名的长度不固定,所以我们希望每个目录项的大小是固定的,其中包含了一个指向文件名起始地址的指针,然后是文件的相关属性,所有的文件名都存放在另一个区域(堆)。

    1.11 FAT32中长文件名目录项格式

    ![](https://img-blog.csdnimg.cn/img_convert/b13c1680b55d6d985dd4e2d9536c3690.png)
    11

    **说明:**其中有三处地方分别记录了文件名。前5个字符(采用的是Unicode编码,则两个字节代表一个字符)保存文件名的前5个字符,于是一共可以保存13个字符。如果一个长文件名目录项不够,则需要用第二个。在第一个字段中第6位来记录是否是最后一个目录项。下面看一个例子,文件名为The quick brown.fox,采用Unicode编码。

    **说明:**其实这样一个文件占用了三个目录项。第一个目录项就是短文件名目录项,后面的两个目录项主要保存文件名。再看一个更长的文件名文件例子:

    **说明:**这里的文件名更长,需要占用五个目录项。

    二、文件操作的实现

    这里主要是以UNIX操作系统为例。

    2.1 文件操作的实现

    • 创建文件

      建立系统与文件的联系,实质是建立文件的FCB

      *   在目录中为新文件建立一个目录项(在`UNIX`中还需要`i`节点),根据提供的参数及需要填写相关内容
      
      • 分配必要的存储空间
    • 打开文件

      根据文件名目录中检索,并将该文件的目录项读入内存,建立相应的数据结构,为后续的文件操作做好准备。打开文件后一般会返回一个值,这个值一般叫文件描述符或文件句柄,之后的操作是通过文件描述符来进行的。

    2.2 文件操作:建立文件

    create(文件名,访问权限)

    • 1、检查参数的合法性

      例如:文件名是否符合命名规则;有无重名文件,合法则进行下一步,否则报错返回。

    • 2、申请空闲目录项,并填写相关内容

    • 3、为文件申请磁盘块

    • 4、返回

    2.3 文件操作:打开文件

    为文件读写做准备:给出文件路径名,获得文件句柄(file handler)或文件描述符(file descripter),需将该文件的目录项读到内存fd = open(文件路径名,打开方式)

    • 1、根据文件路径名查目录,找到目录项(或i节点号)
    • 2、根据文件号查系统打开文件表,看文件是否已被打开,如果是,则共享计数加一,否则,将目录项(或i节点)等信息填入系统打开文件表空表项,共享计数置为一。
    • 3、根据打开方式、共享说明和用户身份检查访问合法性
    • 4、在用户打开文件表中获取一空表项,填写打开方式等,并指向系统打开文件表对应表项,返回信息:fd(文件描述符,是一个非负整数,用于以后读写文件)

    2.4 文件操作:指针定位

    seekfd, 新指针位置):系统为每个进程打开的每个文件维护一个读写指针,即相对于文件开头的偏移地址(读写指针指向每次文件读写的开始位置 ,在每次读写完成后,读写指针按照读写的数据量自动后移相应的数值)

    • 1、由fd查用户打开文件表,找到对应的表项
    • 2、将用户打开文件表中文件读写指针位置设为新指针的位置,供后继读写命令存取该指针处文件内容。

    2.5 文件操作:读文件

    read(文件描述符,读指针,要读的长度,内存目的地址)

    • 1、根据打开文件时得到的文件描述符,找到相应的文件控制块(目录项),确定读操作的合法性,读操作合法则进行下一步,否则出错处理。
    • 2、将文件的逻辑块号转换为物理块号。根据参数中的读指针、长度与文件控制块中的信息,确定块号、块数、块内位移
    • 3、申请缓冲区
    • 4、启动磁盘I/O操作,把磁盘块中的信息读入缓冲区,再送到指定的内存区(多次读盘)
    • 5、反复执行3、4直至读出所需数量的数据或读至文件尾

    三、文件系统的管理

    3.1 文件系统的可靠性

    可靠性:抵御和预防各种物理性破坏和人为性破坏的能力

    • 块坏问题

    • 备份

      通过转储操作,形成文件或文件系统的多个副本。

    3.2 文件系统备份

    • 全量转储

      定期将所有文件拷贝到后援存储器

    • 增量转储

      只转储修改过的文件,即两次备份之间的修改。减少系统开销。

    • 物理转储

      从磁盘第零块开始,将所有磁盘块按序输出到磁带

    • 逻辑转储

      从一个或几个指定目录开始,递归地转储子给定日期后所有更改的文件和目录

    3.3 文件系统一致性

    • 问题的产生:

      磁盘块–>内存–>写回磁盘块

      若在写回之前,系统崩溃,则文件系统出现不一致

    • 解决方案

      设计一个使用程序,当系统再次启动时,运行该程序,检查磁盘块和目录系统

    3.4 磁盘块的一致性检查

    **说明::**一致性检查时,检查所有的文件和空闲块,检查完之后可能会出现四种结果。第一种是一个一致性的结果,即某个磁盘块要么分配给了某个文件,要么在空闲块中。第二种结果是在空闲块中找不到,但是也没有分配给某个文件,于是我们通过在空闲块表中将磁块标记为一来解决。第三种结果是某个磁盘块在空闲块表中出现了两次,同样是不合理的,对这一位进行修改。最后一种结果是在两个文件中出现,这种情况较为复杂,我们应该在空闲块中找一个,然后将其中一个磁盘块内容拷贝到这个空闲块中,然后将使用块表中的这一位减一。

    3.5 文件系统的写入策略

    对某些文件做出了修改,那么什么时候将修改后的内容写入到文件中。这里需要考虑文件系统一致性和速度。下面有几种写入策略

    • 通写(write-through

      内存中的修改立即写到磁盘。缺点是速度性能差,如FAT文件系统。

    • 延迟写(lazy-write

      利用回写(write back)缓存的方法得到高速。其缺点就是可恢复性较差,可能会导致信息丢失

    • 可恢复写(tansaction log

      采用事务日志来实现文件系统的写入,既考虑安全性,又考虑速度性能,如NTFS

    四、文件系统的安全性

    这里我们讨论如何确保未经授权的用户不能存取某些文件?

    4.1 文件保护机制

    • 用于提供安全性、特定的操作系统机制
    • 对拥有权限的用户,应该让其进行相应的操作,否则,应禁止
    • 防止其他用户冒充对文件进行操作

    于是在实现的时候需要考虑用户身份验证和访问控制。对于用户身份我们可以采用比如密码、口令等方式。

    4.2 文件的访问控制

    有不同的访问控制手段,比如主动控制(使用访问控制表)和能力表(使用权限表)。

    • 主动控制

      每个文件一个

      记录用户ID和访问权限

      用户可以是一组用户

      文件可以是一组文件

    • 能力表

      每个用户一个

      记录文件名及访问权限

      用户可以是一组用户

      文件可以是一组文件

    4.3 UNIX的文件访问控制

    采用文件的二级存取控制,审查用户的身份、审查操作的合法性

    • 第一级:对访问者身份的识别

      对用户分类:

      *   文件主(`owner`)
      
      • 文件主的同组用户(group
      • 其他用户(other
    • 第二级:对操作权限的识别

      对操作分类:

      *   读操作(`r`)
      
      • 写操作(w
      • 执行操作(x
      • 不能执行任何操作(-

    五、文件系统的性能

    5.1 文件系统的性能问题

    • 磁盘服务:速度成为系统性能的主要瓶颈之一。因此,在设计文件系统时应尽可能减少磁盘访问次数

    • 提高文件系统性能的方法:

      目录项(FCB)分解、当前目录、磁盘碎片整理、块高速缓存、磁盘调度、提前读取、合理分配磁盘空间、信息的优化分布、RAID技术等等

    5.2 提高文件系统性能:块高速缓存(BLOCK CACHE)

    又称为文件缓存、磁盘高速缓存、缓冲区高速缓存。是指在内存中为磁盘块设置的一个缓冲区,保存了磁盘中某些块的副本。当对文件系统进行操作的时候:

    • 检查所有的读请求,看所需块是否在块高速缓冲中
    • 如果在,则可直接进行读操作;否则,先将数据块读入块高速缓存,再拷贝到所需的地方。
    • 由于访问的局部性原理,当一数据块被读入块高速缓存以满足一个I/O请求时,和可能将来还会再次访问到这一数据块。

    5.3 如何实现块高速缓存

    • 块高速缓存的组织方式

    **说明:**在块高速缓存中有若干个数据块,首先将这些块使用一个双向链表组织起来,当要访问这个链的时候就将其从此链中拿出来,然后挂接到链尾,而我们对于某个文件使用的块要检查其是否在高速缓存中,所以这里又使用块号进行散列以提高检查速度。

    • 块高速缓存的置换问题(修改LRU

      因为此缓存的空间肯定是不会很大的,所以当其满时我们需要对其进行置换。对于以后可能会再次使用的块我们将其放在链尾,而对于使用概率很小的块可能就需要将其剔除。

    • 块高速缓存的写入策略

      在文件系统中,我们需要考虑该块是否会影响文件系统的一致性。这里如前面所讲,不同的操作系统采用了不同的一致性解决方案。

    • 提前读取

      *   思路:每次访问磁盘,多读入一些磁盘块
      
      • 依据:程序执行的空间局部性原理
      • 开销:较小(只有数据传输时间)
      • 具有针对性

    5.4 Windows的文件访问方式

    一般有下面三种方式:

    • 不使用文件缓存

      *   普通方式
      
      • 通过Windows提供的FlushFileBuffer函数实现
    • 使用文件缓存(块高速缓存)

      *   预读取。每次读取的块大小、缓冲区大小、置换方式
      
      • 写回。写回时机选择、一致性问题
    • 异步模式

      *   不再等待磁盘操作的完成。
      
      • 使处理器和I/O并发工作

    用户对磁盘的访问通过访问文件缓存来实现:

    • WindowsCache Manager实现对缓存的控制

      *   读取数据的时候预取
      
      • Cache满时,根据LRU原则清除缓存的内容
      • 定期更新磁盘内容使其与Cache一致(每秒)
    • write-back机制

      *   在用户要对磁盘写数据时,只更改`Cache`中的内容,由`Cache Manager`决定何时将更新反映到磁盘
      

    5.5 提高文件系统性能:合理分配磁盘空间

    分配磁盘块时,把有可能顺序存取的块放在一起(尽量分配在同一柱面上,从而减少磁盘臂的移动次数和距离)

    **说明:**我们读取文件系统时,每次都要先找到i节点区,然后再去找到文件位置,如果i节点区在最外道,而相关文件在最里道,则在读取的时候磁臂就需要不断的移动,这样显示效率低下。一种解决方案如(a),我们将i节点区和相关文件放在距离较近的磁道上;另一种是如(b),首先将磁道分成了若干组,然后将i节点区也划分成若干部分,每一组磁道都有一个i节点区,而每个文件都和其i节点区在同一组,这样磁臂也不需要很大的移动。

    5.6 提高文件系统性能:磁盘调度(重点)

    当有多个访盘请求等待时,采用一定的策略,对这些请求的服务顺序调整安排,从而降低平均磁盘服务时间,达到公平、高效的目的。

    • 公平

      一个IO请求在有限时间内满足

    • 高效

      减少设备机械运动带来的时间开销

    一次访盘时间 = 寻道时间 + 旋转延迟时间 + 传输时间

    • 减少寻道时间
    • 减少延迟时间

    5.7 磁盘调度算法(重点)

    例子:假设磁盘访问序列:98、183、37、122、14、124、65、67,这些数字表示柱面号或磁道号。读写头起始位置为53。请计算磁头服务序列和磁头移动总距离(道数)。下面使用几种算法进行计算:

    • 1、先来先服务(FCFS

      按访问请求到达的先后次序服务

      *   优点:简单、公平
      
      • 缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。

      磁道服务序列和访问序列一致,磁头移动总距离为640,平均80

    • 2、最短寻道时间优先(Shortest Seek Time First)(重点)
      用于磁盘
      优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。

      • 优点
        改善了磁盘平均服务时间
      • 缺点
        造成某些访问请求长期等待而得不到服务
    • 3、扫描算法(SCAN电梯算法)(重点)

      当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中遇到的访问请求进行服务,然后判断该方向上是否有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。其实是一种对距离和方向的折中算法。

    • 4、单向扫描算法(C-SCAN

      这是对扫描算法的一种改进。

      *   总是从零号柱面开始向里扫描
      
      • 按柱面(磁道)位置选择访问者
      • 移动臂到达最后一个柱面后,立即带动读写磁头快速返回到零号柱面
      • 返回时不为任何的等待访问者服务
      • 返回后可再次进行扫描

    主要的目的是减少了新请求的最大延迟。

    • 5、N-step-SCAN策略

      • 把磁道请求队列分成长度为N的子队列,每一次用SCAN处理一个子队列
      • 在处理某一个队列时,新请求添加到其他子队列中
      • 如果最后剩下请求数小于N,则它们全部都将在下一次扫描时处理
      • N值比较大时,其性能接近SCAN;当N = 1时,即FIFO

    主要是为了解决磁头臂的粘性问题。

    • 6、FSCAN策略

      • 使用两个子队列
      • 扫描开始时,所有请求都在一个队列中,而另一个队列为空
      • 扫描过程中,所有新到的请求都放入另一个队列中
      • 对新请求的服务延迟到处理完所有老请求之后

    主要是为了解决磁头臂的粘性问题。本算法及以上都是对磁臂移动的优化算法。

    • 7、旋转调度算法

      根据延迟时间来决定执行次序的调度。一般有三种情况:

      • 若干等待访问请求访问同一磁头上的不同扇区

      • 若干等待访问请求访问不同磁头上的不同扇区

      • 若干等待访问请求访问不同磁头上的相同扇区

        解决方案:

        • 对于前两种情况:总是让首先到达读写磁头位置下的扇区先进行传送操作
      • 对于第三种情况:这些扇区同时到达读写磁头位置下,可任意选择一个读写磁头进行传送操作

    5.8 提高文件系统性能:信息优化分布

    记录在磁道上的排列方式也会影响输入输出操作的时间。

    **说明:**如果信息是按左边那样分布的,那么如果首先读到1号记录,然后花5ms处理,但是此时磁盘已经转到了4号记录,于是如果我们要处理2号记录,则必须将4、5、6、7、8都旋转过去之后才能处理2号记录;而如果信息是按右边那样分布的,当处理完1号记录,而此时磁盘也刚好旋转到了2号记录处,这样就能极大的提高文件系统的性能。

    5.9 提高文件系统性能:记录的成组与分解

    • 记录的成组

      把若干个逻辑记录合成一组存放在一块的工作

    • 进行成组操作时必须使用内存缓冲区,缓冲区的长度等于逻辑记录长度乘以成组的块因子(成组的长度)。

    • 成组的目的:提高了存储空间的利用率;减少了启动外设的次数,提高系统的工作效率。

    • 记录的分解

      从一组逻辑记录中把一个逻辑记录分离出来

    典型的例子就是目录文件的存储。

    5.10 提高文件系统性能:RAID技术

    起始就是独立磁盘冗余阵列(Redundant Arrays of Independent Disks),就是将多块磁盘按照一定要求构成一个独立的存储设备。目的就是提高可靠性和性能。在实现时,需要考虑存储系统的速度、容量、容错、数据灾难发生后的数据恢复。

    • 数据是如何组织的

      *   通过把多个磁盘组织在一起,作为一个逻辑卷提供磁盘跨越功能
      
      • 通过把数据分成多个数据块,并行写入/读出多个磁盘,以提高数据传输率(数据分条stripe
      • 通过镜像或校验操作,提供容错能力(冗余信息的保存)
      • 最简单的组织方式是镜像,最复杂的是块交错校验。
    • 例1:RAID 0 - 条带化

      *   数据分布在阵列的所有磁盘上
      
      • 有数据请求时,同时多个磁盘并行操作
      • 充分利用总线宽带,数据吞吐率提高,驱动器负载均衡

    这种方式没有冗余信息保存,即无差错控制,性能是最佳的。

    • 例2:RAID 1-镜像

      *   最大限度保证数据安全和可恢复性
      
      • 所有数据同时存在与两块磁盘的相同位置
      • 磁盘利用率为50%

    9
    数据的安全性是最好的,但是磁盘利用率较低。
    
    • 例3:RAID 4-交错块奇偶校验

      *   带奇偶校验
      
      • 以数据块为单位


    数据保存在前四块盘上,而校验信息保存在第五块盘上。

    展开全文
  • Linux中的文件系统管理

    千次阅读 2018-11-15 21:32:07
    Linux中的文件系统文件系统管理工具。

    1、格式化

    低级格式化:分区之前进行,划分磁道、形成簇,硬件制造商出厂之前做;
    高级格式化:分区之后对分区进行,创建文件系统。

    2、元数据区和数据区

    文件系统分为元数据区和数据区。
    元数据区存放文件元数据(inode (index node)),元数据指文件的大小、权限、属主属组、时间戳、数据块指针,而不包含文件名,文件名在目录上存放,inode存放inode编号和数据块指针,数据区的目录存放文件名和inode编号的对应关系。文件名存放在上级目录中。
    删除文件的操作即是将此文件inode指向的所有data block标记为未使用状态,将此文件的inode标记为未使用,以及修改data block和inode位图。
    复制文件的操作即是新建文件。而移动文件的操作,在同一文件系统中,改变的仅是其路径映射,inode还是那个值,在不同文件系统中,复制数据至目标文件,并删除原文件。
    符号链接文件:存储数据块指针的空间当中存储的是真实文件的访问路径,不占据磁盘的数据区域,是一种特殊文件类型。
    设备文件:存储数据指针的空间当中存储的是设备号(major, minor),不占据磁盘的数据区域,是一种特殊文件类型。
    位图索引(bitmap index):每一位对应一个数据块或者一个inode,在块组级别实现,数据块位图索引位为1代表该数据块已占用,为0代表该数据块未占用,inode位图索引位为1代表该inode已占用,为0代表该inode未占用。
    超级块:定义一共有多少个块组,每个块组从哪个编号开始,哪个编号结束。

    3、超级块

    超级块(superblock)的作用是存储文件系统的大小,有多少是空的,已经填满的占多少,以及它们各自的总数等等。要使用一个分区来进行数据访问,第一个要访问的就是超级块,如果超级块损坏了,磁盘就不可用了。
    超级块占用第1号物理块,是文件系统的控制块,超级块包括:文件系统的大小、空闲块数目、空闲块索引表、空闲i节点数目、空闲i节点索引表、封锁标记等。超级块是系统为文件分配存储空间、回收存储空间的依据。
    所以为了防止超级块数据损坏,就需要对超级块数据进行备份,以便于损坏时可以恢复。

    4、文件系统

    Linux的内核级文件系统:ext2(无日志功能),ext3(CentOS 5默认文件系统),ext4(CentOS 6默认文件系统),xfs(CentOS 7默认文件系统,为企业级64位文件系统,单个文件大小没有上限)reiserfs(反删除性能好,文件删掉找回比较容易),btrfs(实验阶段,没有生产可用)。
    内核级文件系统的组成部分:
    (1)文件系统驱动:由内核提供;
    (2)文件系统管理工具:由用户空间的应用程序提供。
    光盘文件系统:iso9660。
    网络文件系统:nfs,cifs(smbfs)。
    集群文件系统:gfs2,ocfs2。
    内核级分布式文件系统:ceph。
    用户空间的分布式文件系统:mogilefs,moosefs,glusterfs。
    Windows的文件系统:vfat(fat32),ntfs。
    伪文件系统:proc,sysfs,tmpfs,hugepagefs。
    Unix的文件系统:UFS, FFS(快速文件系统), JFS(日志文件系统)。
    交换分区文件系统:swap。
    根据其是否支持日志功能还可分为:
    日志型文件系统:ext3,ext4,xfs;
    非日志型文件系统:ext2,vfat。

    5、硬链接与符号链接

    链接文件:访问同一个文件的不同路径。
    (1)硬链接:指向同一个inode的多个文件路径;
    硬链接特性:
    1)目录不支持硬链接,为了避免循环链接;
    2)硬链接不能跨文件系统,不同文件系统inode是独立计数的;
    3)创建硬链接会增加inode引用计数;ls -l结果中权限后面的数字即为inode引用计数;当inode的引用计数减少到0,表明没有文件名指向这个inode,系统就会回收这个inode号码以及其所对应的block区域。
    注意:硬链接文件和原文件大小相同。
    创建硬链接:ln src link_file

    目录文件的链接数
    创建目录时,默认会生成两个目录项:".“和”…"。前者的inode号码就是当前目录的inode号码,等同于当前目录的硬链接。后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的硬链接。所以,任何一个目录的硬链接总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的硬链接和当前目录下"."的硬链接。

    (2)符号链接:指向一个文件路径的另一个文件路径,权限是777,即lrwxrwxrwx。
    符号链接特性:
    1)符号链接与原文件是两个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数;
    2)支持对目录创建符号链接,可以跨文件系统;
    3)删除符号链接文件不影响原文件,但删除原文件,符号链接指定的路径即不存在,此时会变成无效链接;
    注意:符号链接文件的大小是其指向的文件的路径字符串的字节数,删除原文件后,符号链接指向的文件会闪,当创建了与原文件相同名字的文件,不管是不是原文件的内容,符号链接也可以指向了。
    创建符号链接:ln -s src link_file
    -v:verbose 创建硬链接和符号链接都支持-v选项,显示过程。

    如果链接的是目录,或者原文件与链接文件在不同的文件系统,使用符号链接。如果原文件与链接文件在同一个文件系统,可以使用符号链接或硬链接。

    6、文件系统管理工具

    创建文件系统的工具mkfs:mkfs.ext2,mkfs.ext3,mkfs.ext4,mkfs.xfs,mkfs.vfat。
    检测及修复文件系统的工具fsck:fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs,fsck.vfat。
    查看文件系统属性的工具:dumpe2fs,tune2fs。
    调整文件系统特性的工具:tune2fs。

    !cat 调用最近一次的cat命令

    (1)ext系列文件系统的管理工具
    mkfs.ext2,mkfs.ext3,mkfs.ext4:可以向后兼容,即可以兼容较老版本;
    mkfs -t ext2 = mkfs.ext2:前面命令转换为后面命令执行;
    eg. mkfs.ext2 /dev/sda3:格式化会破坏原文件系统上的所有文件;
    mke2fs:make ext file system,ext系列文件系统的专用管理工具;
    mke2fs [OPTIONS] device
    -t {ext2|ext3|ext4}:指明要创建的文件系统类型;
    mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
    ext3独有的显示方式:SEC_TYPE="ext2" TYPE="ext3"
    -b {1024|2048|4096}:指明文件系统的块大小;
    -L LABEL:指明卷标;
    -j:创建有日志功能的文件系统ext3;
    mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3 = mke2fs -O has_journal
    -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个inode,此字节数不应该小于块大小;
    -N #:直接指明要给此文件系统创建的inode的数量;
    -m #:指定预留空间占整个分区空间的百分比,默认为5;
    -O [^] FEATURE:以指定的特性创建目标文件系统;不加 ^代表启用此特性,加 ^代表关闭此特性。
    (2)e2label命令:管理ext系列文件系统的卷标,卷标的查看与设定
    查看:e2label device
    设定:e2label device LABEL
    (3)tune2fs命令:查看或修改ext系列文件系统的某些属性
    注意:块大小创建后不可修改。
    tune2fs [OPTIONS] device
    -l:查看指定文件系统的超级块信息;
    [root@localhost ~]# tune2fs -l /dev/sda3:查看/dev/sda3中超级块中的内容;
    # tune2fs -l DEVICE
    # dumpe2fs -h DEVICE
    修改指定文件系统的属性:
    -j:ext2 --> ext3;无损升级,数据不损坏;
    -L LABEL:修改卷标;
    -m #:调整预留空间百分比;
    -O [^]FEATURE:开启或关闭某种特性;不用重新格式化即可完成调整;特性前加 ^,表示关闭此种特性;
    tune2fs -O ^has_journal /dev/sda3:将ext3格式转换为ext2格式;
    tune2fs -O has_journal /dev/sda3:将ext2格式转换为ext3格式;
    -o [^]mount_options:开启或关闭某种默认挂载选项;
    tune2fs -o acl /dev/sda3:对分区启用acl;
    tune2fs -o ^acl /dev/sda3:对分区禁用acl。
    -U UUID:修改UUID。
    (4)dumpe2fs命令:显示ext系列文件系统的属性信息
    dumpe2fs [-h] device
    -h 显示超级块信息。
    (5)用于实现文件系统检测的工具
    因进程意外中止或系统崩溃、系统断电等原因导致写入操作非正常终止时,可能会造成文件损坏,此时,应该检测并修复文件系统,建议离线进行。
    工具:fsck,e2fsck。
    ext系列文件系统的专用检测工具:e2fsck
    e2fsck [OPTIONS] device
    -y:对所有问题自动回答为yes;
    -f:即使文件系统处于clean状态,也要强制进行检测;
    fsck
    -t fstype:指明文件系统类型,fsck -t ext4 = fsck.ext4;
    -a:无须交互而自动修复所有错误;
    -r:交互式修复错误。
    (6)xfs文件系统
    CentOS 6安装xfs文件系统:# yum -y install xfsprogs
    xfs文件系统创建:
    mkfs.xfs /dev/sda3:创建xfs文件系统;
    mkfs.xfs -f /dev/sda3:已有文件系统强制覆盖;
    fsck.xfs:检测xfs文件系统;
    (7)blkid命令
    blkid [OPTION]... [DEVICE]:查看指定块设备的属性信息;
    blkid -L LABEL:根据LABEL定位设备,可以查看到卷标名所对应的磁盘分区;
    blkid -U UUID:根据UUID定位设备,可以查看到UUID所对应的磁盘分区;

    [root@localhost ~]# e2label /dev/sda3 MYDATA
    [root@localhost ~]# blkid -L MYDATA
    /dev/sda3
    

    (8)swap文件系统
    Linux上的交换分区必须使用独立的文件系统,即独立的磁盘分区,且文件系统的System ID必须为82。
    创建swap分区的特定工具:mkswap命令。前提:要先调整设备分区类型为8E。
    只有类型为82swap的分区才可以用mkswap命令创建swap设备。
    mkswap [OPTIONS] device
    -L LABEL:指明卷标;
    -f:强制。
    (9)vfat系统
    Windows无法识别Linux的文件系统。因此,存储设备需要两种系统之间交叉使用时,应该使用Windows和Linux同时支持的文件系统fat32(vfat)。Windows叫fat32,Linux叫vfat。
    # mkfs.vfat device

    7、文件系统的挂载

    根文件系统之外的其它文件系统要想能够被访问,都必须通过关联至根文件系统上的某个目录来实现,此关联操作即为挂载,此目录即为挂载点。
    挂载点:mount_point,用于作为另一个文件系统的访问入口。
    注意:1)要使用事先存在的目录作为挂载点;2)应该使用未被或不会被其它进程使用到的目录作为挂载点;3)挂载点下原有的文件将会被隐藏。
    mount命令:
    mount DEVICE MOUNT_POINT
    DEVICE:所要挂载的磁盘分区;
    MOUNT_POINT:挂载点,另一个文件系统的访问入口;
    固定挂载点:/mnt,/media;
    mount [-nrw] [-t vfstype] [-o options] device dir
    命令选项:
    -a:自动挂载所有(/etc/fstab文件中定义的)支持自动挂载的设备;
    -r:readonly,只读挂载;光驱(不是刻录机)只能只读挂载;
    -w:read and write, 读写挂载;
    -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中,-n用于禁止此特性;
    -t vfstype:指明要挂载的设备上的文件系统的类型,多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;
    -L LABEL:挂载时以卷标的方式指明设备:mount -L LABEL dir
    -U UUID:挂载时以UUID的方式指明设备:mount -U UUID dirmount UUID='uuid' dir
    -o options:挂载选项,挂载后目录或文件系统应当具有什么特性;
    sync/async:同步/异步操作;异步IO是指,数据写操作先于内存完成,而后再根据某种策略同步至持久设备中;
    atime/noatime:文件或目录在被访问时是否立即更新其访问时间戳;
    diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
    remount:重新挂载,通常用于不卸载的情况下重新指定挂载选项;
    acl:在此设备支持使用facl功能,默认不支持;
    # mount -o acl device dir
    # tune2fs -o acl device
    ro:只读 -o ro = -r
    rw:读写 -o rw = -w
    dev/nodev:此设备上是否允许创建设备文件;默认允许;
    exec/noexec:是否允许运行此设备上的程序文件;
    auto/noauto:是否支持自动挂载,即是否支持使用mount -a选项自动挂载,自动挂载操作需要写入fstab文件中,写明挂载到何处;
    user/nouser:是否允许普通用户挂载此文件系统;
    suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
    relatime/norelatime:是否参考文件的修改或改变时间来更新inode的访问时间;
    defaults:默认选项为rw,suid,dev,exec,auto,nouser,async和relatime。
    绑定操作:可以实现将目录绑定至另一个目录上,作为其临时访问入口。
    mount --bind 源目录 目标目录或者mount -B 源目录 目标目录
    umount 源目录或目标目录:解除绑定

    查看当前系统所有已挂载的设备:
    # mount:mount命令的结果是显示所有已挂载的文件系统、伪文件系统和cgroup文件系统;
    # cat /etc/mtab:当前系统上的挂载和卸载结果会写入此文件,该命令等同于
    # cat /proc/mounts

    光盘设备文件:IDE:/dev/hdc,SATA:/dev/sr0;

    [root@localhost ~]# ll /dev
    lrwxrwxrwx. 1 root root           3 Dec  7 15:56 cdrom -> sr0
    

    sr0是虚拟机虚拟出的SATA接口,用于存放光盘,老版本的虚拟机可能会虚拟出hdc,是IDE接口。
    符号链接文件:/dev/cdrom,/dev/cdrw,/dev/dvd,/dev/dvdrw;
    挂载并卸载光盘设备:
    mkdir /media/cdrom
    mount -r /dev/cdrom /media/cdrom
    umount /dev/cdrom
    挂载U盘:事先识别U盘的设备文件;
    挂载本地的回环设备(本地的一个文件作为设备):多见于挂载.iso镜像文件
    # mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT

    设定除根文件系统以外的其它文件系统能够开机时自动挂载:/etc/fstab文件。开机时运行一个脚本,该脚本会找到该文件中的设备,一一进行挂载,然后显示登录提示符。每行定义一个要挂载的文件系统及相关属性,共有6个字段:
    1)要挂载的设备:
    设备文件;LABEL 卷标;UUID(CentOS 7目前使用的方式);伪文件系统(如sysfs, proc, tmpfs等,给名称即可,会自动识别在哪,怎么挂的);
    2)挂载点 :swap类型的设备的挂载点为swap;
    3)文件系统类型;
    4)挂载选项:defaults:使用默认挂载选项(mount命令中的选项);
    如果要同时指明多个挂载选项,彼此间以逗号分隔(如defaults,acl,noatime,noexec)
    5)转储频率(备份频率):
    0:从不备份;
    1:每天备份;
    2:每隔一天备份;
    6)自检次序:
    0:不自检,额外创建的文件系统都无须自动自检;
    1:首先自检,通常只能是根文件系统需要首先自检;
    2:次级自检,不同的设备可以使用同一个自检次序;

    mount -a: 可重新加载/etc/fstab文件中的所有挂载项,自动挂载定义在此文件中的所有支持自动挂载的设备,已挂载的不管,未挂载的现在自动挂载,挂载选项defaults为支持自动挂载。

    /etc/fstab文件LABEL方式指定挂载如下,并有挂载选项acl:
    
    #
    # /etc/fstab
    # Created by anaconda on Fri Nov 11 09:39:19 2016
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=2435469a-8504-42b3-8453-c8cb16538bf8 /                       ext4    defaults        1 1
    UUID=49f88d8c-1545-4bb3-8e1f-6b3a315d8435 /boot                   ext4    defaults        1 2
    UUID=67626ef9-2332-4fb2-a63a-88b4bf1488bc /home                   ext4    defaults        1 2
    UUID=d14a0467-bb20-4466-a512-9b3e1c5b06cb /var                    ext4    defaults        1 2
    UUID=1ad1cc93-9630-47df-9a67-00c57dd08b42 swap                    swap    defaults        0 0
    LABEL=MYDATA                              /mydata                 ext4    defaults,acl    0 0
    ~                                                                                                   
    

    8、文件系统的卸载

    umount命令:umount DEVICE或者umount MOUNT_POINT
    注意:挂载点没有被进程访问时方可卸载,正在被进程访问到的挂载点无法被卸载。
    查看被哪个或哪些进程所占用:
    # lsof MOUNT_POINT
    # fuser -v MOUNT_POINT
    终止所有正在访问某挂载点的进程:
    # fuser -km MOUNT_POINT:如果bash占用该挂载点,该命令将退出当前bash。

    [root@localhost ~]# mount -r /dev/cdrom /media
    [root@localhost ~]# cd /media
    [root@localhost media]# umount /media
    umount: /media: target is busy.
     (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
    [root@localhost media]# lsof /media
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    bash    4009 root  cwd    DIR   11,0     2048 1856 /media
    lsof    6240 root  cwd    DIR   11,0     2048 1856 /media
    lsof    6241 root  cwd    DIR   11,0     2048 1856 /media
    [root@localhost media]# fuser -v /media
    USER        PID ACCESS COMMAND
    /media:              root     kernel mount /media
    root       4009 ..c..  bash
    

    9、交换分区的启用和禁用

    创建交换分区的命令:mkswap。
    启用交换分区:swapon
    swapon [OPTION] [DEVICE]
    -a:激活定义在/etc/fstab文件中的所有swap设备;
    -p PRIORITY:指定优先级(用数字来表示);
    禁用交换分区:swapoff
    swapoff [OPTION]... [DEVICE]
    -a:禁用所有交换分区;

    例:1、创建一个10G的分区,并格式化为ext4文件系统; 
    (1)block大小为2048;预留空间为2%,卷标为MYDATA;
    (2)挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
    (3)可开机自动挂载;
    2、创建一个大小为1G的swap分区,并启动之;
    Answer:
    1、mke2fs         10G
    (1)mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sda6
    (2)mount -o noexec,noatime /dev/sda6 /mydata
    (3)向/etc/fstab文件中加入挂载条目
    2、mkswap  /dev/sda7                        该/dev/sda7分区大小为1G
    swapon  /dev/sda7
    

    10、内存及交换分区的使用信息查看

    (1)free
    查看当前内存使用状况,包括物理内存和交换内存。
    -m:以MB为单位显示;
    -g:以GB为单位显示,不够1GB显示为0。
    显示结果:Mem为物理内存的使用情况行,Swap为交换分区的使用情况行;
    -/+ buffers/cache:表示物理内存在不考虑缓冲和缓存占据的空间时的使用情况;
    buffers:缓冲,用来缓冲写;
    cache:缓存,用来缓存读;

    11、文件系统空间占用等信息查看

    (1)df命令
    disk free,查看磁盘的使用状态,主要是挂载后的磁盘。
    df [OPTION]... [FILE]...
    -l:仅显示本地文件系统的相关信息,而不显示网络文件系统;
    -h:human-readable;
    -i:显示inode的使用状态而非默认的磁盘空间使用信息;

    [root@localhost ~]# df
    Filesystem     1K-blocks    Used Available Use% Mounted on     不管block是几K,只显示1K block
    /dev/sda2       60760940 4085244  53566168   8% /
    devtmpfs          919992       0    919992   0% /dev
    tmpfs             934328     144    934184   1% /dev/shm
    tmpfs             934328    9128    925200   1% /run
    tmpfs             934328       0    934328   0% /sys/fs/cgroup
    /dev/sda3       10190100   57284   9592144   1% /home
    /dev/sda1         999320  133136    797372  15% /boot
    /dev/sda5        6061632 1385144   4345532  25% /var
    tmpfs             186868      16    186852   1% /run/user/0
    /dev/sr0         7587292 7587292         0 100% /media
    
    [root@localhost ~]# df -l
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda2       60760940 4085272  53566140   8% /
    devtmpfs          919992       0    919992   0% /dev
    tmpfs             934328     144    934184   1% /dev/shm
    tmpfs             934328    9132    925196   1% /run
    tmpfs             934328       0    934328   0% /sys/fs/cgroup
    /dev/sda3       10190100   57284   9592144   1% /home
    /dev/sda1         999320  133136    797372  15% /boot
    /dev/sda5        6061632 1385160   4345516  25% /var
    tmpfs             186868      16    186852   1% /run/user/0
    /dev/sr0         7587292 7587292         0 100% /media
    
    [root@localhost ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda2        58G  3.9G   52G   8% /
    devtmpfs        899M     0  899M   0% /dev
    tmpfs           913M  144K  913M   1% /dev/shm
    tmpfs           913M  9.0M  904M   1% /run
    tmpfs           913M     0  913M   0% /sys/fs/cgroup
    /dev/sda3       9.8G   56M  9.2G   1% /home
    /dev/sda1       976M  131M  779M  15% /boot
    /dev/sda5       5.8G  1.4G  4.2G  25% /var
    tmpfs           183M   16K  183M   1% /run/user/0
    /dev/sr0        7.3G  7.3G     0 100% /media
    
    [root@localhost ~]# df -i
    Filesystem      Inodes  IUsed   IFree IUse% Mounted on
    /dev/sda2      3866624 134506 3732118    4% /
    devtmpfs        229998    391  229607    1% /dev
    tmpfs           233582      7  233575    1% /dev/shm
    tmpfs           233582    548  233034    1% /run
    tmpfs           233582     13  233569    1% /sys/fs/cgroup
    /dev/sda3       655360    387  654973    1% /home
    /dev/sda1        65536    338   65198    1% /boot
    /dev/sda5       393216   5399  387817    2% /var
    tmpfs           233582     23  233559    1% /run/user/0
    /dev/sr0             0      0       0     - /media
    

    (2)du命令
    查看某目录空间占用情况。
    du [OPTION]... [FILE]...
    -s: sumary,显示目录下所有文件的大小之和;
    -h: human-readable

    [root@localhost ~]# ls -ldh /usr
    drwxr-xr-x. 13 root root 4.0K Nov 11 09:40 /usr
    [root@localhost ~]# du -s /usr
    3972704	/usr
    [root@localhost ~]# du -sh /usr
    3.8G	/usr
    

    (3)dd命令:convert and copy a file
    实现文件底层复制,cp通过文件系统复制,dd通过块复制,复制更底层,所以效率更高。
    用法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
    bs=#:block size, 复制单元大小,单位字节;
    count=#:复制多少个bs;

    dd if=/etc/fstab of=/tmp/fstab
    dd if=/etc/fstab of=/tmp/fstab.2 bs=1 count=100
    

    磁盘拷贝:dd if=/dev/sda of=/dev/sdb
    备份MBR:dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
    用于清除磁盘上的分区:dd if=/dev/zero of=/dev/sda bs=512 count=1
    破坏MBR中的bootloader:MBR共512字节,前446字节是bootloader,64字节是分区表:dd if=/dev/zero of=/dev/sda bs=256 count=1
    两个特殊设备:/dev/null:数据黑洞,/dev/zero:吐零机。

    12、inode

    (1)inode概述
    文件存储在硬盘上,硬盘的最小存储单位叫扇区,每个扇区存储512字节(0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block)。这种由多个扇区组成的块是文件存储的最小单位。块的大小,最常见的是4KB,即连续八个扇区组成一个block。
    文件数据都存储在块中,我们必须找到一个地方存储文件的元数据信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元数据信息的区域就叫做inode,中文译名为“索引节点”。
    inode包含文件的元数据信息,具体有以下内容:
    文件的字节数;文件拥有者的User ID;文件的Group ID;文件的读、写、执行权限;文件的时间戳(共有3个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间);链接数(即有多少个文件名指向这个inode);文件数据block的位置。可以使用stat命令来查看某个文件的inode信息。
    总之,除了文件名以外的所有文件信息,都存在inode之中。
    inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域:一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
    每个inode节点的大小,一般是128字节或256字节。inode节点的总数在格式化时就给定,一般是每1KB或者2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
    查看每个硬盘分区的inode总数和已经使用的数量,可以使用df -i命令。查看每个inode节点的信息可以使用:dumpe2fs -h /dev/sda3 | grep "Inode size"。由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况,这时就无法在硬盘上创建新文件。
    每个inode都有一个号码,操作系统用inode号码来识别不同的文件。需要说明的是,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或绰号。表面上,用户通过文件名打开文件。实际上,系统内部这个过程分成3步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码获取inode信息;最后,根据inode信息找到文件数据所在的block,读出数据。
    使用ls -i命令,可以看到文件名对应的inode号码:ls -i abc.txt。Unix/Linux系统中,目录(directory)也是一种文件,打开目录,实际上就是打开目录文件。
    目录文件的结构非常简单,就是一系列目录项的列表。每个目录项由两部分组成:所包含文件的文件名以及该文件名对应的inode号码。
    ls命令只列出目录文件中的所有文件名:ls /etc
    ls -i命令列出整个目录文件,即文件名和inode号码:ls -i /etc
    如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。
    ls -l命令列出文件的详细信息:ls -l /etc
    (2)inode的特殊作用
    由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象:

    1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点就能起到删除文件的作用。
    2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
    3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

    第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
    (3)实际中的应用示例
    【问题描述】
    在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
    【查找原因】
    /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
    【解决方案】
    【方案一】删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
    【方案二】用软链接将空闲分区/opt中的newcache目录链接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
    [root@localhost ~]# ln -s /opt/newcache /data/cache

    展开全文
  • 操作系统学习笔记:文件管理

    千次阅读 2020-12-13 21:50:17
    对于文件及文件系统的概念、存放文件的介质、文件存放形式、文件操作形式、文件系统的安全性、磁盘调度算法的知识进行了相关的介绍!

    目录:

    一、概述:

    文件的概念:

    文件系统:

    文件的分类:

    文件的操作:

    文件类型

    二、文件的结构和存取方式:

    文件的存取方式:

    文件的逻辑结构:

    存储介质:

    文件的物理结构:

    三、文件目录:

    文件控制块:

    文件目录结构:

    目录查找和目录的改进:

    四、文件系统及其实现:

    文件系统的定义及其功能:

    打开文件表:

    外存空间的调度:

    五、文件的使用:

    主要操作:

    文件共享:

    六、文件系统的安全性和数据一致性:

    防止人为因素造成的文件不安全性:

    防止自然因素或系统因素造成的文件不安全性:

    文件系统的数据一致性:

    七、磁盘调度:

    提高文件系统的性能措施:

    磁盘I/O(输入输出)时间:

    磁盘的移臂调度算法:

    磁盘的优化分布:


    一、概述:

    文件的概念:

    什么是文件?

    文件是在逻辑上具有完整意义的信息集合,它有一个名字作标识。一个文件必须要有一个文件名,用户利用文件名访问文件。 

     

    文件的基本特征:

    ——文件的内容为一组相关信息,可以是源程序、可执行的二进制代码程序、待处理的数据、表格、声音、图像等。

    ——文件具有保存性。文件被保存在如磁盘、磁带等存储介质中,其内容可以被长期保存和多次使用

    ——文件可按名存取。每一个文件拥有唯一的标识名信息,用户无需了解文件所在的存储介质。

     

    文件的基本属性:


    文件系统:

    什么是文件系统?

    文件系统是操作系统中负责管理和存取文件的程序板块,也称为信息管理系统

     

    文件系统的组成:

    它由管理文件所需的数据结构(例如文件控制块、存储分配表等)、相应的管理软件以及访问文件的一组操作所组成。

     

    文件系统应当具有的五大功能:

     

    ——完成文件存储空间的管理

    • 建立文件时进行文件存储空间的分配,在删除文件时进行文件空间的回收。

    ——实现文件名到物理地址的映射

    • 这种映射对于用户来讲是透明的,用户不必了解文件的存放位置和查找方法等,只需要指出文件名就可以找到相应的文件。
    • 这一映射是通过在文件说明部分中文件的物理地址来实现的。

    ——实现文件和目录的操作管理。

    • 文件的建立、读、写和目录管理等基本操作是文件系统的基本功能。
    • 文件操作管理负责根据各种操作的要求完成各种操作所规定的任务,如从外存中读出数据,或将数据写入外存中。

    ——提供文件共享能力安全可靠措施

    • 文件共享是指多个用户可以使用同一文件,安全是防止文件被盗窃或破坏。
    • 通常采用多级保护措施来实现文件的共享与安全。另外,还要提供保证文件系统的可靠性办法。

    ——文件系统向用户提供了有关文件和目录操作的借口。


    文件的分类:

    按文件的性质和用途分类:

    ——系统文件:

    • 该类文件只允许用户通过系统调用来执行它们,而不允许对其进行修改和读写。系统文件主要由操作系统核心、各种系统应用程序和数据所组成。

    ——库文件:

    • 该类文件包括允许用户对其进行读取、执行,但是不允许对其进行修改的子程序库。如C语言子程序库等。

    ——用户文件:

    • 用户文件是用户委托文件系统保存的文件。
    • 这类文件只有文件的所有者和被授权的用户才能使用。
    • 用户文件主要由源程序、目标程序、用户数据库等组成。

     

    按文件的组织形式分类:

    ——普通文件:

    • 既包括系统文件也包括用户文件、库函数文件和使用程序文件。
    • 普通文件主要是指组织格式为系统中所规定的最一般格式的文件,也就是平常所说的文件。

    ——目录文件:

    • 由文件的目录信息构成的特殊文件数据。

    ——特殊文件:

    • 有的系统中,所有的输入、输出设备都被看作特殊文件。
    • 这组特殊文件在使用形式上与普通文件相同,如查找目录、存取操作等。
    • 但是特殊文件的使用是与设备处理程序密切相关的。系统必须把对特殊文件的操作转入到对不同的设备的操作。

     

    按使用和管理情况分类:

    ——临时文件:

    • 它是一种私有资源,使用户在某次求解问题过程中产生的中间文件。
    • 这种文件仅仅保存在磁盘上。在作为“档案”的外存介质上没有副本。临时文件随用户撤离系统而撤离,因此不可共享。

    ——永久文件:

    • 这是用户经常要使用文件。
    • 这类文件不仅在磁盘上有文件副本,且在作为”档案“的介质上也有一个可用的副本。

    ——档案文件:

    • 仅保存在作为“档案”用的外存介质上,以备查证和恢复用。

     

    按文件系统提出的保护级别分类:

    ——只读文件:

    • 只允许用户对其执行读操作,对于写操作,系统将拒绝执行并给出错误信息。

    ——读写文件:

    • 只允许用户对其进行读、写操作,而拒绝对其执行任何其他的操作。

    ——不保护文件:

    • 这类文件是不加保护措施的文件,所有用户都可以对其进行存取等所有操作。

     

    按文件的数据流向分类:

    ——输入型文件:

    • 这些文件只能读。

    ——输出型文件:

    • 这些文件只能写入。

    ——输入\ 输出文件:

    • 这类文件既可读又可写。

     

    文件的分类还有许多种,但是在文件系统中比较重要的两种分类方式是按文件的逻辑结构物理结构进行分类。下一节我将仔细介绍!

     


    文件的操作:

    文件系统不应要求用户必须了解文件的物理组织才能使用文件,而应方便用户,提供给用户按其逻辑组织形式来使用文件

    一个文件系统至少要提供用户以下的文件操作功能:

    ——建立、删除、读、写、截断文件,文件换名、打开文件、关闭文件、复制文件(基本操作) 。

    ——修改、插入、删除数据项操作 。

    ——文件查找。

    ——修改文件属性:变更文件主的名字。


    文件类型:

    使用形式:主文件名字 扩展文件名

    • 其中,扩展文件名部分指出文件的类型

     

    有三种类型文件可以被执行:

     

    二、文件的结构和存取方式:

    文件的组织结构是指文件的构造方式,用户和文件系统往往从不同的角度对待同一个文件

    因此对于任何一个文件都存在两种形式的结构:

    ——文件的逻辑结构:用户按自己对信息的使用要求组织文件,这种文件是独立于物理环境而构造的,因此把用户概念中的文件称为文件的逻辑结构,或称逻辑文件

    ——文件的物理结构:又称为文件的存储结构,是指文件在辅存上的存储组织形式,这与存储介质的性质有关

    • 无论是文件的逻辑结构还是物理结构,其构造方式都会影响对文件的处理速度

    文件的存取方式:

    ——顺序存取:

    • 顺序存取是按照文件的逻辑地址顺序存取。

    ——随机存取:

    • 随机存取法允许用户根据记录的编号存取文件的任一记录,或者是根据存取命令把读写指针移到欲读写处来读写。

    ——按键存取:

    • 按键(关键字)存取是一种用在复杂文件系统,特别是数据库管理系统中的存取方法。

    文件的逻辑结构:

    设计文件系统时,选择逻辑结构应遵循的原则:

    • 便于修改
    • 应提高检索效率
    • 使文件信息占据最小的存储空间
    • 便于用户进行操作

    文件的逻辑结构分类:

    ——记录式文件(有结构文件):

    记录式文件在逻辑上被看成一组连续有序的记录的集合。每个记录由彼此相关的域构成。

    根据记录的长度分类:定长记录文件、变长记录文件。

    • 定长记录文件:文件中所有记录的长度都是相同的。所有记录中的各数据项都处在记录中相同的位置,具有相同的顺序及长度,文件的长度用记录数目表示。
    • 变长记录文件:文件中各记录的长度不相同。原因可能是一个记录中所包含的数据详数目不同。

    记录式文件可把文件中的记录按各种不同的方式排列,构成不同的逻辑结构,这样的记录式文件可以分为三类

    • 顺序文件:它是指按照某种顺序排列的记录所构成的文件,通常是定长记录文件,因此能用较快的速度查找文件的记录。
    • 索引文件:通常建立一张索引表,为每一个记录设置一个表项,以加速对于记录的检索速度。索引表本身就是一个定长记录的顺序文件,从而也就可以方便地实现直接存取。
    • 索引顺序文件:是上述两种文件方式的结合,它将顺序文件中的所有记录分为若干组(譬如50个记录为一组),并且为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有记录的键值和指向该记录的指针。

    索引顺序文件可能是最为常见的一种逻辑文件形式。它有效的克服了变长记录文件不便于直接存取的缺点,而且所付出的代价也在可接受的范围之内。

     

    ——流式文件(无结构文件):

    无结构的流式文件是相关的有序字符的集合(源程序文件、目标代码文件、文档文件等)。

    ——特点是:

    • 流式文件是指文件内的数据不再组成记录,只是依次的一串信息的集合。
    • 字符是构成文件的基本单位。
    • 读取经常按照长度来读取所需的信息,也可以使用插入的特殊字符作为分界。
    • 查找困难、管理简单。

    存储介质:

    常用的存储介质有磁盘、光盘、磁带、闪存等。

    ——一盘磁带、一个磁盘组或一张软盘都称为一。卷是存储介质的物理单位

    ——是存储介质上连续信息所组成的一个区域,也叫做物理记录。块是内存储器和辅助存储设备进行信息交换的物理单位,每次总是交换一块或整数块信息。块大小要考虑用户使用方式、数据传输效率和存储设备等因素。不同类型的存储介质块的大小常常不同,同一类型介质的块的大小也可能不同。

    文件的存储结构密切地依赖于存储设备的物理特性存储设备的特性也决定了文件的存取方法。

     

    顺序存储设备:

    ——什么是顺序存储设备?

    • 顺序存储存储设备是严格依赖信息的物理位置进行定位和读/写的存储设备。顺序存储设备只有在前面的物理块被访问之后,才能访问后续物理块的内容。

     

    我们以磁带机为例对顺序存储设备进行相关的介绍!

     

    磁带机是一种典型的顺序存储设备。

    ——磁带上的物理块没有确定的物理地址,只是由带上的物理标志来识别

    ——如果带速高,信息密度大,且所需块间隙小的话,则磁带存取速度和数据传输率高。

    • 什么间隙?为什要有它?
    • 块与块之间应当留有一定长度的间隙,用于磁带设备的启动与停止的缓冲。
    • 间隙是块之间不记录用户代码信息的区域。

    ——磁带的一个突出优点是物理块长的变化范围较大,块可以很小,也可以很大

    ——磁带作为顺序存储介质,具有存储容量大、稳定可靠、文件卷可拆卸、便于保存和块长变化范围较大等优点

    磁带的存储结构

     

    直接存储设备:

    ——什么是直接存储设备?

    • 直接存储设备又叫随机存储设备。允许文件系统直接存取对应存储介质上的任意物理块

     

    我们以磁盘机为例进行直接存储设备的介绍!

     

    磁盘机是一种典型直接存储存储设备。

    可移动磁头型磁盘

    ——各磁盘块的编号按柱面顺序(零号柱面开始,由外向里),每个柱面按磁道顺序(从上向下),每个磁道又按扇区顺序进行排序,假定用 t 表示每个柱面上的磁道数( 磁头/盘片),用 s 表示每个磁道上的扇区数,则第 i 柱面, j 磁头,k 扇区所对应的块号 b 可有如下公式确定:(位置决定块号)

    • b= (i×t+j)×s + k

    ——根据块号 p 也可确定该块在磁盘上的位置。每个柱面上有D =s×t个磁盘块,设M= p/D,N= p%D。于是,第P块在磁盘上位置为:(块号确定位置)

    • 柱面号= M= p/D= p/(s×t) 
    • 磁头号=N / s              
    • 扇区号=N % s

    磁盘机的特性与用途:

    ——磁盘具有直接读写的性质,并且物理块的大小固定不变,所以在这种介质上可以按照多种物理结构组织信息,并且不一定要求信息按逻辑记录的顺序存储。

    ——由于定位时间远远小于磁带设备的定位时间,因此广泛用于信息存储,并且作为虚拟存储器和虚拟设备使用。

    ——存储介质的容量逐渐增大,并且有些可像磁带一样随时更换,因而也作为保存档案材料之用,成为一种高速、大容量、可拆卸的海量存储器。


    文件的物理结构:

    文件的物理结构直接影响文件系统的性能。究竟采用哪种存储结构,需要根据存储设备类型、应用目标、响应时间和存储空间等多种因素进行权衡。

    文件的物理结构:

    ——磁带机是一种顺序存取的设备,一切组织在磁带上的文件都采用顺序结构,也就是将一个文件在逻辑上连续的信息存放到存储介质的依次相邻的块上,便形成顺序结构,磁带上的每个文件都有文件头标、文件信息和文件尾标三个组成部分。

    磁盘文件的组织形式

    文件的物理结构:

    顺序文件/连续文件:

    ——定义:将一个文件中逻辑上连续的信息存放到磁盘上的依次相邻的块上便形成顺序结构,这类文件叫顺序文件,又称连续文件。

    ——优点:顺序访问容易、速度快

    ——缺点:要求有连续的存储空间、必须事先知道文件的长度

     

    链接文件:

    ——定义:顺序的逻辑记录被存放在不连续的磁盘块上用指针把这些磁盘块按逻辑记录的顺序链接起来,则形成了文件的链接结构,链接结构的文件称为“链接文件”或“串联文件” 。

    ——特性:采取离散分配方式,从而消除了外部碎片,故可显著地提高辅存空间的利用率,且也无需事先知道文件的长度。磁盘上的所有空闲块都可以被利用。

    ——优点:消除了外部碎片、显著地提高外存空间的利用率、无需事先知道文件的长度 、插入删除记录容易。

    ——缺点:隐式链接,只适合于顺序访问、直接访问低效 、可靠性较差 ;显式连接,不能支持高效地直接存取、存放链接指针的FAT表会占用较大的内存空间。

    分类:

    • 隐式链接:在每个盘块中含有一个指向下一个盘块的指针。
    磁盘文件隐式链接示意图
    • 显式链接:把用于链接文件物理块的指针显式地存放在外存的一张链接表文件分配表(FAT)中。

    磁盘文件显式链接示意图

    和FAT表相关的计算:假定磁盘有n块,若2m-1≤n≤2m,则FAT表的每项至少有m位,但多数情况取整字节倍数,有时取半个字节倍数。

    计算举例:假定盘块的大小为1KB,硬盘的大小为500MB,采用显示链接分配方式时,该硬盘共有500K个盘块,故FAT中共有500K个表项;如果盘块从1开始编号,为了能保存最大的盘块号500K,该FAT表项最少需要19个比特位,将它扩展为半个字节的整数倍后,可知每个FAT表项需20位,即2.5个字节。因此,FAT需占用的存储空间的大小为:

    • 2.5×500K=1250KB。

     

    索引文件:

    ——定义:为每个文件分配一个索引块(用来存放索引的物理块),把分配给该文件的所有盘块号都记录在该索引块中,按照这种分配方式存储的文件就是索引文件。

    ——应用:一级索引、两级索引或多级索引结构。

    ——优点:支持直接访问,且不会产生外部碎片

    ——缺点:索引要花费较多的外存空间

    ——混合索引分配方式 :指将多种不同级的索引分配方式结合而形成的一种分配方式,有效且实用。

    混合索引分配方式

    相关计算题:索引文件的文件最大长度的计算

    • 题目:在UNIX中,其索引结构共有13个地址项,其中10项登记直接地址,1项一级索引,1项二级索引,1项三级索引。假如每个盘块的大小为4KB,一个盘块号占用4字节。计算支持的文件最大长度是多少。

    • 求解:直接地址项登记文件10个盘块,一级索引可登记1K个盘块,二级索引可登记1K×1K=1M个盘块,三级索引可登记1K×1K×1K =1G个盘块,允许文件长度=1G×4KB十1M×4KB十1K×4KB十40KB≥4TB。

     

    直接文件(散列/Hash):

    ——定义:在直接存取存储设备上,记录的关键字与其地址之间可以通过某种方式(函数)建立对应关系,利用这种关系实现记录存取的文件称为直接文件。

    ——“冲突”问题:地址的总数和记录的关键字之间并不存在一一对应的关系,不同的关键字经过变换可能会得到相同的地址。

    ——解决“冲突”方法:设计出好的变换函数,并且还要求有好的处理冲突的方法。

    ——优点:存取速度较快,存储空间不必连续,逻辑记录与物理记录之间不存在对应或顺序关系。

    ——缺点:对冲突的处理需要时间和空间的开销。

     

    设备、文件、存取方法之间的关系:

     

    三、文件目录:

    为什么引入文件目录?

    • 在现代计算机系统中,通常需要存储大量的文件。为了能有效地管理这些文件,必须对它们加以妥善的组织,以做到用户只需向系统提供所需访问文件的名字,系统就能快速、准确的找到指定文件
    • 这主要是以来文件目录来实现的,换句话说通过文件目录可以将文件名转换为改文件在外存上的物理位置。

    个人理解:就像日常生活中你去图书馆,书太多,找起来太费劲,所以才会有图书目录供你查询。

    文件目录管理应当达到的基本要求:

    ——实现“按名存取

    • 用户只需要提供文件名,就可以对文件进行存取。

    ——提高对目录的检索速度

    • 合理地组织目录结构,可以加快对于目录的检索速度,从而加快对于文件的存取速度。

    ——文件共享

    • 在多用户系统中,应当允许多个用户共享一个文件。

    ——允许文件重名

    • 系统应当允许不同用户对于不同文件用相同的名字,以便用户按照自己的习惯命名文件。

    文件控制块:

    概念:

    文件系统在创建每个文件时为其建立了一个文件目录,也称为文件说明文件控制块FCB。文件目录是为文件设置的用于文件描述和文件控制的数据结构,它与文件一一对应,它是随着文件的建立而诞生,随着文件的删除而消失,某些内容随着文件的使用而动态改变。

     

    文件控制块包括的内容:

    ——有关文件存取控制的信息:文件名、类型、文件属性等。

    ——有关文件结构的信息:逻辑结构、物理结构、存储位置。

    ——有关文件管理的信息:建立日期、修改日期等


    文件目录结构:

    文件系统把若干个文件的文件目录组织成一个独立的文件,这个全部由文件目录组成的文件称为目录文件。

    一级目录结构:

    ——实现方式:最简单的文件目录,在操作系统中,为每个磁盘设置一张线性表,每个文件的相关说明信息占用一个目录项。

    ——优点 :实现容易、管理简单、实现了按文件名存取 。

    ——缺点:搜索范围宽、不允许文件重名、 难于实现文件共享。

    二级目录:

    ——实现方式:第一级为主文件目录,用于管理所有用户的文件目录,它的目录项登记了系统用户的名字及该用户文件目录的地址。第二级为用户文件目录,它为该用户的每个文件保存一登记栏,其内容与一级目录的目录项相同。

    ——优点:实现了对文件的保密和保护、允许不同用户使用相同的文件名、可以实现文件共享。

    二级目录结构

    多级文件目录结构:

    ——实现方式:主文件目录演变为根目录。根目录项既可以表示一个普通文件,也可以是下一级目录的目录文件一个说明项。如此层层类推,形成了一个树型层次结构。

    ——优点:解决了文件重名问题、有利于文件的分类、便于制定保护文件的存取权限,有利于文件的保密。

    多级目录结构

    目录查找和目录的改进:

    目录的查找:即实现“按名存取”。

    线性检索法:

    ——一级目录结构采用顺序查找法,依次扫描文件目录的目录项,将目录项中的名字与欲查找的文件名相比较。

    ——在多级目录中,采用绝对路径和相对路径的查找方法,使用相对路径名查找速度要快于绝对路径

    • 绝对路径:由根目录沿各级子目录到达该文件的路径名。如:E:\BaiduNetdisk\skin\demo.java

    • 相对路径:就是从当前目录开始到文件的路径名。如:skin\demo.java

    ——查找举例:

    假设要查找绝对路径名为\usr\include\user.h的文件,从根目录查起,线性检索查找过程如下:

    • 第一步:从根目录查起,把根目录文件信息读到内存缓冲区。按给定的路径名中第一个分量usr依次与缓冲区中每个目录项比较,若找不到名为usr的目录项,则继续读入根目录文件的后续信息再比较,直到找到usr目录项或查完根目录都没有找到。

    • 第二步:找到usr后,再根据这个目录项内容把usr目录文件信息读到内存缓冲区。按第一步的过程,查找到include目录项。

    • 第三步:找到include后,再根据这个目录项内容把include目录文件信息读到内存缓冲区。按第一步的过程,查找到user.h目录项。

    哈希检索:

    ——目录项信息存放在一个哈希表中。进行目录检索时,首先根据目录名来计算一个哈希值,然后得到一个指向哈希表目录项的指针。

    ——哈希检索算法的难点,在于选样合适的哈希表长度和哈希函数的构造

    其他算法:

    ——除了上面的两种算法之外,还可以考虑其他算法,如B+树。

     

    目录的改进:目录文件只存储符号目录信息

    ——为何改进?

    • 一个文件目录项一般要占用很多空间,这样会导致目录文件往往很大。在查找目录时,为了找到所需的目录项,常常要将存放目录文件的多个物理块逐块读入内存进行查找,这就降低了查找速度。(个人理解:过大,多次调入,查找麻烦)

    ——如何改进?

    • 为加快目录查找可采用目录项分解法,即把目录项分为两部分符号目录项(包含文件名以及相应的文件号)和基本目录项(包含除了文件名外文件控制块的其余全部信息)。
    符号目录项和基本目录项

    计算举例:

    假设一个文件目录项占48个字节,符号目录项占8字节(文件名6字节,文件号2字节),基本目录项占48-6=42字节。设物理块大小512字节。假设目录文件有128个目录项。 若不分解目录项,一个盘块存放5l2/48 =10目录项,128个目录项需要13个盘块,查找一个文件的平均访问的盘块数:(1+13)/2=7次。

    分解后一个盘块存放5l2/8=64个符号目录项,128个符号目录项需要2个盘块,查找一个文件的平均访问的盘块数:(1+2)/2+1=2.5次。

     

    四、文件系统及其实现:

    文件系统的定义及其功能:

    文件系统的定义:

    文件系统是操作系统中负责管理和存取文件的程序模块。

     

    文件系统的功能:


    打开文件表:

    打开文件表有什么用?

    ——为了管理打开的文件

    系统打开文件表:

    ——该“系统打开文件表”放在内存,用于保存已打开文件的目录项。此外,还保存文件号、共享计数、修改标志等等。

    系统打开文件表

    用户打开文件表:

    ——每个进程一般都有一个“用户打开文件表”。该表的内容有文件描述符,打开方式、系统打开文件表入口等等。

    用户打开文件表

    用户打开文件表与系统打开文件表之间的关系:

    ——用户打开文件表指向了系统打开文件表。如果多个进程共享同一个文件,则多个用户打开文件表目对应系统打开文件表的同一入口


    外存空间的调度:

    主要讨论直接存储介质的空间分配。直接存储介质是分为若干个大小相等的物理块,并以块为单位来交换信息;因此存储空间管理实质上是空闲块的组织和管理问题(组织、分配、回收)。

    空闲块表法:

    ——数据结构:

    • 系统为每个磁盘建立一张空闲块表,表中每个登记项记录一组连续空闲块的首块号和块数,空闲块数为“0”的登记项为“空”登记项。
    空闲表块

    ——分配回收算法:

    • 这种管理方式适合采用顺序结构的文件 ,分配和回收算法类似内存储器的可变分区管理方式中采用的最先适应、最优适应和最坏适应算法。

    可变分区管理方式中采用的最先适应、最优适应和最坏适应算法。(相关详细介绍,👈点击直达!)

     

    空闲链表法:

    空闲盘块链:

    ——空闲盘块链以盘块为基本元素构成一条链

    ——分配时从链首开始依次摘下适当数目的空闲盘块分配给用户 ,回收时将回收的盘块依次链入空闲盘块链。

    ——优缺点:分配和回收一个盘块的过程非常简单,但是空闲盘块链可能很长。

    空闲盘区链:

    ——将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。(与空闲块表相似)。

    ——分配方法与内存的动态分区分配类似,通常采用首次适应算法。在回收盘区时,同样也要将与回收区邻接的空闲盘区与之合并

    ——优缺点:分配和回收过程较复杂,但空闲盘区链较短。

     

    位示图法:

    ——磁盘块的组织:

    根据磁盘总块数决定位示图由多少字组成,位示图中的每一位与一个磁盘块对应,某位为“1”状态表示相应块已被占用,为“0”状态的位所对应的块是空闲块。

    • 一般公式为:块号=i×位示图中的字长+j 

    ——磁盘块的分配:

    当有文件要存放到磁盘上时,查位示图中为“0”的位,表示对应的磁盘块空闲可供使用。根据查到的位所在的字号和位号可计算出对应的块号,同时在该位填上占用标志“1”。(个人理解:查空闲、改标志!)

    ——磁盘块的回收:

    当删除文件归还存储空间时,可以根据归还块的块号推算出在位示图中的位置:

    • 块号=柱面号×每个柱面中的块数+磁头号×每个磁道的块数+扇区号
    • 字号=[块号/位示图中字长]
    • 位号=块号mod位示图中字长

    然后把这一位的“1”清成“0”,表示该块成为空闲块。

     

    成组链接法:

    ——空闲块的组织:

    把空闲块分成若干组,每组含有固定数目的空闲磁盘块;每一组的第一个空闲块中登记下一组空闲块的块号和空闲块数;余下不足100块的部分,登记在一个专用块中。

    空闲块成组链接示意图

    ——空闲块的分配:

    系统初始化时先把专用块内容读到内存储器,每分配一块后把空闲块数减1。但一组的第一个空闲块分配之前应把登记在该块中的下一组的块号及块数保存到专用块中。

    分配一个空闲块的算法:(假设专用块的内容已读到起始地址为L的内存区域中)

    分配一个空闲块的算法

    ——空闲块的回收:

    当归还一块时,只要把归还块的块号登记到当前组中空闲块数加1。如果当前组已满100块,则把内存中的内容写到归还的那块中,该归还块作为新组的第一块

    归还一块的算法:

    归还一块的算法

     

    五、文件的使用:

    主要操作:

    文件系统与用户的接口:

    • 第一类是与文件有关的操作命令作业控制语言中与文件有关的语句。这些构成了必不可少的文件系统的人机接口。
    • 第二类是提供给用户程序使用的文件类系统调用指令。通过这些指令用户能获得文件系统的各种服务。

    建立文件的过程:

    ——查文件目录表,看当前目录下有没有同名文件存在,有则拒绝建立,给出错误信息,否则分配给该文件一空目录项,并填入文件名和用户提供的参数。

    ——为要建立的文件分配存储空间

    ——将新建文件的目录项读入打开文件表中(即完成打开文件的工作),为以后写文件作好准备。

     

    打开文件的过程:

    ——根据文件路径名查目录。

    ——根据打开方式、共享说明和用户身份检查访问合法性

    ——根据文件号查系统打开文件表,看文件是否已被打开。如果是,共享计数加1,否则,信息填入系统打开文件表空表项,共享计数置为1。

    ——在用户打开文件表中取一空表项,填写打开方式等,并指向系统打开文件表对应表项

     

    关闭文件的过程:

    ——将打开文件表中该文件的“当前使用用户数”减1,若为0,则撤消此表目。

    ——若打开文件表目内容已被改过,则应先将表目内容写回辅存上相应表目中,以使文件目录保待最新状态;做卷定位工作。

     

    删除文件的过程:

    ——系统根据用户提供的文件名或文件描述符,检查此次删除的合法性

    ——查找文件目录。

    ——将该文件从目录中删除,并释放该文件所占用的存储空间

     

    读、写文件:

    ——核对所给参数的合法性

    ——按文件名从打开文件表中找到该文件的目录项

    ——按存取控制说明检查访问的合法性

    ——根据打开文件表中该文件的参数,确定读写的物理位置(确定块号、块数、块内位移与长度等)。

    ——向设备管理程序发I/O请求,完成数据交换工作

     

    为了保证对文件的正确管理和文件信息的安全可靠规定了用户请求文件的操作步骤:


    文件共享:

    文件共享可以提高文件的利用率避免存储空间的浪费,并能实现用户用自己的文件名去访问共享文件。实现文件共享通常有以下5种方法

    绕道法:

    ——用户对所有文件的访问都是相对于当前目录进行的,当所访问的共享文件不在当前目录下时,从当前目录出发向上返回到与共享文件所在路径的交叉点,再沿路径下行到共享文件

    ——绕道法要求用户指定到达被共享文件的路径,并要回溯访问多级目录,因此,共享其他目录下的文件的搜索速度较慢

    链接法:

    ——链接法是将一个目录中的链指针直接指向共享文件的目录项

    基本文件目录:

    ——文件目录分解为基本目录和符号目录,只要在不同文件符号目录中使用相同文件内部标识符,就可实现文件的共享。

    利用符号链实现文件共享:

    用户H为了共享用户C的—个文件f,可以由系统创建一个LINK类型的新文件,将新文件写入H的用户目录中,在新文件中只包含被链接文件f的路径名,称这样的链接方法为符号链接。当H要访问被链接的文件f且正要读LINK类新文件时,被操作系统截获,操作系统根据新文件中的路径名去读该文件,于是就实现了用户H对文件f的共享。

     

    基于索引结点的共享方式:

    采用索引结点,将诸如文件的物理地址及其它的文件属性等信息不再放在目录项中,而是放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针,此时,由任何用户对文件进行追加操作或修改,所引起的相应索引结点内容的改变,例如,增加了新的盘块号和文件长度等,都是其他用户可见的,从而也就能提供给其他用户来共享。

    与基本文件目录类似。

    基于索引节点的共享图示

     

    六、文件系统的安全性和数据一致性:

    影响文件安全性主要因素:

    ——人为因素:由于人们有意或无意的行为,而使文件系统中的数据遭到破坏、丢失或窃取。

    ——系统因素:由于系统的部分出现异常情况而造成对数据的破坏或丢失,特别是作为数据存储介质的磁盘在出现故障或损坏时,会对文件系统的安全性造成影响。

    ——自然因素:存放在磁盘上的数据,随着时间的推移而发生溢出或逐渐消失


    防止人为因素造成的文件不安全性:

    隐蔽文件和目录:

    ——系统和用户将要保护的文件目录隐蔽起来,在显示文件目录信息时由于不知道文件名而无法使用。

    口令(密码):

    ——文件口令(文件密码):系统要求文件的建立者为他需要保密的文件设置一个口令。

    ——用户口令(用户密码):当用户利用计算机终端使用计算机时使用。

    文件加密:

    ——对于高度机密的文件,可采用加密码的措施。文件加密码是把文件中所有字符代码,按某种变换规则重新编码。文件的输入读出都经过编码程序和解码程序处理。

    制定访问权限:

    存取控制矩阵:

    ——由系统中的全部用户和全部文件组成的二维矩阵,称为存取控制矩阵,矩阵的每个元素表示用户对文件的使用权限

    存取控制表和用户权限表:

    ——存取控制表就是对存取控制矩阵中的一列进行压缩,可让每一个文件附加一个简单的表格,它规定了对该文件的可访问性(权限)

    ——用户权限表就是对存取控制矩阵中的一行进行压缩,该表中列出该用户对每个文件的访问权限


    防止自然因素或系统因素造成的文件不安全性:

    坏块管理:

    硬件方法:

    ——建立一个坏块表,在硬盘上为坏块表分配—个扇区,当控制器第一次被初始化时,它读坏块表并找一个空闲块(或磁道)代替有问题的块,并在坏块表中记录映射。

    软件办法:

    ——要求用户或文件系统构造一个包含全部坏块的文件

    磁盘容错技术,也称系统容错技术(System Fault Tolerance):

    通过在系统中设置冗余部件来提高系统可靠性的一种技术。

    • SFT-I是低级磁盘容错技术,主要用于防止磁盘表面发生缺陷所引起的数据丢失。
    • SFT-Ⅱ是中级磁盘容错技术,主要用于防止磁盘驱动器和磁盘控制故障所引起的系统不能正常工作。
    • SFT-Ⅲ是高级系统容错技术。提供了文件服务器镜像功能。在主服务器出现故障时能有备份服务器不间断地接替主服务器的工作。

    第一级容错技术(SFT-I):

    ——双份目录和双份文件分配表:建立两份目录表和FAT,一份称为主文件目录及FAT,另外一份则称为备份目录及备份FAT。

    ——热修复重定向:系统将一定的磁盘容量(例如2%~3%)作为热修复重定向区。用于存放当发现盘块有缺陷时的待写数据,并对写入该区的所有数据进行登记。以便于以后对数据进行访问。

    ——写后读校验:在每次从内存缓冲区向磁盘中写入一个数据块后,又立即从磁盘上读出该数据块,送至另一缓冲区中;再将该缓冲区中内容与内存缓冲区中在写后仍保留的数据进行比较,若两者一致,便认为此次写入成功,否则再重写。

    第二级容错技术(SFT-Ⅱ):

    ——磁盘镜像:磁盘镜像是在同一磁盘控制器下,再增设一个完全相同的磁盘驱动器

    磁盘镜像示意图

    ——磁盘双工:将两台磁盘驱动器分别接到两个磁盘控制器上,同样地使这两台磁盘机镜像。(完美的解决了磁盘控制器或者主机到磁盘控制器之间的通道发生故障的情况,这是磁盘镜像所没有解决的问题。)

    磁盘双工示意图

    独立磁盘冗余阵列(RAID):(因为相关的介绍过于庞大,会影响整篇文章的结构,故另外介绍,点击以下链接直达!)

    操作系统:独立磁盘冗余阵列(RAID)的相关介绍(👈)

    备份:

    ——建立副本:把同一个文件保存到多个存储介质上,当某个文件损坏或丢失时,就可用其他存储介质上的备用副本来替换。

    ——转储:海量转储、增量转储

    • 海量转储:把存储器中的全部文件定期复制到备用存储介质上。但是转储会浪费大量的时间和影响用户的工作,一个小小的故障就需要所有的用户文件进行转储,所以最好是在空闲时间进行转储。
    • 增量转储:在相当短的时间里把上一次转储以来改变过的文件(包括控制块)和新文件转储到备用存储介质上,关键性的重要文件也可以再次转储;这种方法克服了海量转储的缺点,但是转储到磁盘上的信息不紧凑,浪费存储空间。

    文件系统的数据一致性:

    许多文件系统在读取磁盘块进行修改之后,再写回磁盘。如果在修改过的磁盘块全部写回之前,系统崩溃,则文件系统很有可能会处于不一致的状态。如果一些未被写回的块是目录块或者包含空闲表的磁盘块,这个问题会尤为严重。

    为了解决文件系统的不一致问题,一些计算机会带有一个实用程序以检验文件系统的一致性。

    一致性检查分为两种块的一致性检查和文件的一致性检查。

    块的一致性检查:

    为了保证盘块数据结构的一致性,可利用软件方法构成一个计数器表,每个盘块对应一个表项,每一表顶中包含两个计数器,分别用作空闲盘块号计数器数据盘块号计数器。

    正常情况下,上述两组计数据中对应的一对计数器中的数据应互补,亦某个盘块在第一组计数器中数器值为1,则在第二组计数器中计数器内容必为0,反之亦然。但如果情况并非如此时,说明发生了某种错误。

    盘块一致性检查情况

    文件的一致性检查:

    ——重复文件的数据一致性 :在有重复文件时,如果—个文件拷贝修改了,则必须同时修改它的几个文件拷贝,保证该文件中数据的一致性。可以采用两种方法进行实现:

    • 当一个文件被修改之后,可以查找文件目录,得到其另外副本的物理位置,然后对他们进行同样的修改。(修改)
    • 为新修改的文件建立几个副本,并用它们替代原来的文件副本。(替代)

    ——共享文件的数据一致性 :文件的共享计数和当前共享该文件的用户个数相一致

     

    七、磁盘调度:

    提高文件系统的性能措施:

    块高速缓存:

    ——系统在内存中保存一些存储块,这些存储块在逻辑上它们属于磁盘。

    ——工作时,系统检查所有的读请求,看所需的文件块是否在高速缓存中。如果在,则可直接在内存中进行读操作。否则,首先要将块读到高速缓存中,再拷贝到所需的地方。

    磁盘空间的合理分配:

    ——在磁盘空间中分配块时,应该把有可能顺序存取的块放在一起,最好在同一柱面上。这样可以有效地减少磁盘臂的移动次数,加快文件的读写速度,提高性能。

    对磁盘调度算法进行优化


    磁盘I/O(输入输出)时间:

    采用移动磁头的磁盘要访问某特定的物理块时,所用时间一般包括三部分

    ——查找时间:

    • 按给定的柱面号(磁道号)将读写磁头移动指定的柱面或磁道上的时间。

    ——等待时间:

    • 等待磁盘旋转,使读写的块位于读写磁头之下的时间。

    ——传输时间:

    • 内存和磁盘之间数据的实际传送所用的时间。

    磁盘的移臂调度算法:

    先来先服务调度算法FCFS:

    ——算法:根据访问请求的先后次序选择先提出访问请求的为之服务。

    ——优缺点:是磁盘调度的最简单的一种形式,它既容易实现,又公平合理,缺点是效率不高

    最短查找时间优先算法SSTF:

    ——算法:以磁头移动距离的大小作为优先的因素,从当前磁头位置出发,选择离磁头最近的磁道为其服务。

    ——优缺点:减少了磁道平均查找时间,但没考虑磁头移动的方向,也没有考虑进程在队列中等待的时间。

    扫描算法:

    电梯调度算法SCAN:

    ——算法:是选请求队列中沿磁头臂前进方向最接近于磁头所在柱面的访问请求作为下一个服务对象。

    ——优缺点:算法简单、实用且高效,克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向,但有时有的请求等待时间可能很长。

    例如,如果在为访问43号柱面的请求者服务后,当前正在为访问67号柱面的请求者服务,同时有若干请求者在等待服务,它们依次要访问的柱面号为186,47,9,77,194,150,10,135,110。

    • 按照先来先服务的策略,处理顺序:186→47→9→77→194→150→10→135→110。
    • 用最短查找时间优先算法服务的顺序为:     77→47→10→9→110→135→150→186→194。
    • 用电梯调度算法,服务次序为:     77→110→135→150→186→194→47→10→9。

     

    N步扫描策略:

    ——N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列。而每处理一个队列时又是按SCAN算法,对一个队列处理完后,再处理其他队列。

    ——当正在处理某子队列时,如果又出现新的磁盘I/O请求,便将新请求进程放入其他队列,这样就可避免出现粘着现象。

    循环扫描策略:

    ——磁盘单向移动。当移动臂向内移动时,它对本次移动开始前到达的各访问要求自外向内地依次给予服务,直到对最内柱面上的访向要求满足后,然后移动臂直接向外移动,停在所有新的访问要求的最外边的柱面上。然后再对本次移动前到达的各访问要求依次给予服务。

    FSCAN算法:

    ——FSCAN算法实质是N步SCAN算法的简化。

    ——将磁盘请求访问队列分成两个子队列,一是当前所有请求磁盘(I/O)的进程形成的队列,由磁盘调度按SCAN算法进行处理。另—个队列则是在扫描期间,新出现的所有请求磁盘I/O进程的队列,把它们排入另一个等待处理的请求队列。


    磁盘的优化分布:

    有些系统,对数据的存放位置进行优化分布可减少延迟时间,从而缩短了输入输出操作的时间。

    实际举例:

    某系统对磁盘初始化时把每个盘面分成8个扇区,今有8个逻辑记录被存放在同一个磁道上供处理程序使用,处理程序要求顺序处理这8个记录,每次请求从磁盘上读一个记录,然后对读出的记录要花5毫秒的时间进行处理,以后再读下一个记录进行处理,直至8个记录都处理结束。假定磁盘转速为20毫秒/周,现把这8个逻辑记录依次存放在磁道上,如图 (a)所示。

    (a)读一个记录要花2.5毫秒的时间。当花了2.5毫秒的时间读出第1个记录并花5毫秒时间进行处理后,读写磁头已经在第4个记录的位置,为了顺序处理第2个记录,必须等待磁盘把第2个记录旋转到读写磁头位置下面,即要有15毫秒的延迟时间。处理这8个记录所要花费的时间为:

    • 8×(2.5+5)+7×15=165(ms)  

    (b)是这8个逻辑记录的最优分布。当读出一个记录处理后,读写磁头正好位于顺序的下一个记录位置,可立即读出该记录,不必花费等待延迟时间。于是,处理这8个记录所要花费的时间为:

    • 8×(2.5+5)=60(ms)

     

    Ending... ...

    展开全文
  • Linux磁盘管理文件系统(实验详解,一看就懂)

    万次阅读 多人点赞 2021-01-27 22:05:28
    磁盘管理文件系统一、磁盘管理1.1 磁盘结构1.2 MBR与磁盘分区表示1.2.1 MBR1.2.2 磁盘分区表示二、文件系统2.1 文件系统类型2.2 检测并确认新硬盘2.3 管理磁盘分区2.4 创建文件系统2.5 创建文件系统swap2.6 挂载、...
  • 4.Linux磁盘与文件系统管理

    千次阅读 2018-09-24 14:37:50
    4.文件系统管理 5.磁盘分区: 6.格式化分区(磁盘格式化):  7.磁盘挂载与卸除(mount,umount) 7.1.挂载 :mount 7.2.卸除装置:umount 8.特殊装置 loop 挂载 (映象档案不刻录就挂载使用) 9....
  • 突然有一天开机,提示系统注册表文件丢失,导致无法加载windows系统 解决方法: 1、准备好U盘启动盘,制作启动盘会把U盘内容格式化,尽量使用不常用且大于4GB的u盘来制作; 一、所需工具 1、可用电脑一台,...
  • 本文出自 “Pavel” 博客,请务必保留此出处... 其中元数据区用于存放文件的属主, 属组, 访问权限, 时间戳以及文件系统数据和元数据分配信息等相关属性信息, 数据区用于存放...
  • 文件系统损坏的修复过程

    千次阅读 2014-03-04 16:58:13
    不知道,分久必合,合久必分,谁都不想在一个大物理硬盘上就做一个文件系统,或者说为了便于管理,一个分区数据了,不至于影响另一个。 ? 分区表,还记得之前说的磁盘吗,我们经常说的主引导扇(MBR)区位于硬盘...
  • Java-学生宿舍管理系统

    万次阅读 多人点赞 2018-12-30 10:29:03
    这次记录的是最近完成的实训作业,学生宿舍管理系统,使用Java swing完成界面设计,数据库用的是SQL server,IDE使用的是IDEA 学生宿舍管理系统的用户有宿管和学生,宿管有最高的权限,学生只有部分权限, 一、...
  • Linux: 磁盘与文件系统管理

    万次阅读 2014-09-28 23:56:23
    http://blog.csdn.net/pipisorry/article/details/39649699文件系统的简单操作磁盘与目录的容量df:列出文件系统的整体磁盘使用量;...-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统; -k :以 KBytes
  • 深入理解操作系统原理之文件系统

    万次阅读 多人点赞 2017-07-04 15:15:39
    操作系统对系统的软件资源(不论是应用软件和系统软件)的管理都以文件方式进行,承担这部分功能的操作系统称为文件系统。 1、文件 计算机系统对系统中软件资源:无论是程序或数据、系统软件或应用软件都以文件...
  • 在数据恢复案例开始之前有几个概念需要了解块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组内的结构都是大致相同的。块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部...
  • 由于昨天电脑崩溃蓝屏,就电源键强制关机了。今天早上就发现我的F:盘的某个文件夹不能读取,因为这个文件夹也没什么作用且我也有备份的就想删掉算了(各位观众老爷...刚开始有网友说原因是windows文件系统损坏了可...
  • 参考资料: 衷心感谢网友的分享: UBI系统原理分析 http://blog.chinaunix.net/uid-28236237-id-4164656.html Ubifs文件系统和mkfs.ubifs以及ubinize工具的用法 ... Linux ubi子系统原理分析 ...一、UBI文件系统的概.
  • Linux磁盘管理文件系统

    万次阅读 2021-08-08 15:24:23
    在linux系统中,一切皆文件,磁盘设备也是文件的一种。 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信 设备号码: 主设备号:major number, 标识设备类型 次设备号:minor number, 标识...
  • 这两个都需要使用管理员身份来...该工具基于被检测的分区所用的文件系统,创建和显示磁盘的状态报告。Chkdsk 还会列出并纠正磁盘上的错误。如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 不建议在使用 /...
  • 一口气搞懂「文件系统」,就靠这 25 张图了

    万次阅读 多人点赞 2020-08-13 21:48:43
    文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。 Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等...
  • Linux系统,嵌入式程序开发。 程序运行过程中,有读写配置文件保存当前位置信息的操作。在程序运行过程中突然断电,或者异常终止程序,就会出现配置文件内容出错(内容清空)或者文件直接损坏而无法打开的情况。...
  • 同事重启好了五台服务器,但是还有两台服务器启动不起来,第二天回来后我和同事再次机房检查,发现两台服务器都显示superblock的报错,经过一番处理后两台服务器都正常进系统了,现决定重现superblock故障并将此类...
  • 常见分布式文件系统

    千次阅读 2015-12-14 11:48:46
    分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供...
  • FAT文件系统简明教程

    千次阅读 2018-06-10 21:00:09
    FAT文件系统简明教程 FAT文件系统简明教程 FAT文件系统是什么? FAT文件系统的格式 文件的存储和删除 文件的存储 新建一个文件时,磁盘中发生了什么? 普通删除一个文件时,磁盘中发生了什么? 怎么安全删除? ...
  • FAT32文件系统结构详解

    万次阅读 多人点赞 2018-04-13 15:38:58
    1. SD卡中FAT32文件系统快速入门 1.1. 理论知识 1.1.1. MBR(Main Boot Record) 主引导记录,占446字节, 为计算机启动后从可启动介质上首先装入内存并且执行的代码,通常用来解释分区结构 1.1.2. DBR(DOS Boot ...
  • Linux Btrfs 文件系统

    千次阅读 2019-03-22 23:15:04
    Btrfs文件系统的核心特性及其使用操作。
  • 制作嵌入式Linux根文件系统

    千次阅读 多人点赞 2018-09-29 17:17:43
      尽管文件系统固件以某一种文件系统的镜像发布,但是整个文件系统实际上还是并存多种逻辑文件系统的。例如,一个系统根文件系统以ubifs挂载,但是/dev目录却是以tmpfs挂载的、/sys目录挂载的是sysfs文件系统。 ...
  • windows 文件系统

    千次阅读 2018-07-05 22:53:55
    1.什么是文件系统文件系统是操作系统用于明确存储设备(磁盘、固态硬盘)上组织文件的方法。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。FAT...
  • 出现了这种问题的朋友不要着急,请仔细看完我这篇文章,应该可以帮您把问题解决! 故障现象  当进入“我的电脑”后会发现出现问题的... 如出现上述现象大多数是硬盘分区表损坏,导致硬盘的分区信息不能被系统正...
  • 计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心...
  • 磁盘管理文件系统硬盘结构磁盘的接口种类磁盘分区表示主引导记录(MBR)磁盘分区文件系统类型XFS 文件系统SWAP 交换文件系统Linux 支持的其他文件系统类型fdisk 检测并确认新硬盘mkfs 创建文件系统mkswap 创建交换...
  • 点任何一个,都出现位置不可用,无法访问提示,在“计算机管理”→“磁盘管理”中看到两个盘的文件系统是RAW。 产生原因  当硬盘在与电脑进行传输数据时,强制中断(如热拔、断电、重启、关机等)会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 173,514
精华内容 69,405
关键字:

文件系统坏去管理