第八章 Linux磁盘与文件系统管理

8.1 认识 ET2文件系统

8.1.1硬盘组成与分区的复习

  • 磁盘的物理组成 (3个物理组成 3个盘片组成 两种磁盘文件名)
    Review p#12
  • 分区(5 个点)
    Review p#67

8.1.2 文件系统特性

  • Linux ->Ext2
    Windows -> NTFS

  • 使用LVM (Logical Volume Manager)和 软磁盘阵列 Softdisk RAID 将一个分区格式化为多个文件系统, 也能将多个分区合成一个文件系统。
    Review RAID 和 LVM

  • 文件系统如何运行?

    • Inode
      文件权限和属性放 inode
      一个文件占用一个inode,同时记录此文件的数据所在的block号码

    • Block
      而文件实际数据放data block 块中
      若文件太大,会占用多个block

    • Superblock
      用于存放整体信息,包括inode和block的总量、使用量、剩余量、以及文件系统的格式。

  • 索引式文件系统 indexed allocation
    根据inode查找所有block读取

-FAT U盘
没有inode存在,只能先将上一个block读取出来才知道下一个block号码。

  • 碎片整理 (对于FAT文件系统经常使用)
    将同一个文件所属的的block再汇合到一起,提高读取速度。

8.1.3 Linux的 Ext2 文件系统

  • 为什么硬盘只有一个MBR却可以安装双系统 ?
  1. Ext2 文件系统为了便于管理 固定的 inode 和block 区分出 多个块组(block group),每个 块组 都拥有自己独立的inode block superblock 系统。
  2. 在整体的规划中,文件系统在最前面有一个 启动扇区 BootSector 用于安装引导装载文件,不用覆盖硬盘唯一个MBR

BootSection 在文件系统的 最前端

  • data block (数据块)
    三种size 1KB 2KB 4KB
    对应最大单一文件限制 16GB 256GB 2TB
    对应对大文件系统总容量 2TB 8TB 16TB

  • 原则上 block 的数量和大小在格式化完成后就固定了, 除非重新格式化

  • 每个block 最多放一个文件的数据

  • 如果文件大于block大小,则一个文件会占用多个block

  • 若小于 block 大小,则剩余空间也不能被使用

产生两个问题
如果采用了较大size的block,会造成资源的浪费
如果采用较小的,会使读写速度变慢

估计文件的大小选择block的size

  • inodetable(inode 表格)
    1.inode 记录了哪些文件数据?
    rwx;owner/group;size;ctime/atime/mtime;SetID;pointer
    2.inode的其他特点
    inode 固定大小为128bytes
    每个文件只能占用一个inode
    文件系统能创建文件的数量和inode的数量有关
    系统读取文件需要先找到inode, 并分析 inode所记录的权限与用户是否符合,符合了才开始读取block里面的内容

  • inode 结构
    12个直接、一个间接、一个双间接、一个三间接记录区


    第八章 Linux磁盘与文件系统管理_第1张图片
    inode结构图.jpg
  • Superblock (超级块)
    block 与inode的总量
    未使用与已使用b&i总量
    b&i的大小
    文件系统挂载时间、最近一次写入数据时间、最近一次检测磁盘fsck的时间等文件系统相关信息
    一个validbit数值,0->已挂载 1->未被挂载
    每个block group都可能含有superblock 作为唯一的superblock的备份

  • File System Descripition (文件系统描述说明)
    用于描述:
    每个block group 的开始与结束的 block号码
    说明每个区段分别介于哪个block号码之间
    (superblock,bitmap,inodemap,data block)

  • block bitmap
    哪些block号码用着,哪些block号码未使用,删除文件时释放block号码

-inode bitmap
如上,替换成 inode

Tips:可以使用dumpe2fs 查看Superblock和File Syetem Descripition

  • df 查看目前挂载的设备
  • dumpe2fs /dev/hdc2
    稍后问萱萱

8.1.4 与目录树的关系

  • 目录
    当我们mkdir时,ext2会分配一个inode和至少一块block给该目录
    inode记录目录相关权限和属性,并可记录分配到的那块block号码
    block记录该目录下的文件名与该文件名占用的inode号码数据。

    • 使用 ls -i 查看目录文件所占用的inode号码
    • 查看 /bin /boot /proc /lost+found /sbin 这五个目录的ls -l
      ll -d / /bin /boot /proc /lost+found /sbin
      Review 目录树 p#156 (proc为什么不占用硬盘容量)
  • 文件
    当我们在 ext2 下新建一个文件时, ext2会分配一个indoe和相对于该文件大小的的block数量给该文件。超过12个block,会多一个block作为块号码的记录

  • 目录树读取
    文件名实际上是存在目录文件的block里,所以文件名的新增、删除、重命名都是需要 读取 目录文件的inode和block,才能找到文件名占用的inode,再找到文件的block。

    • 目录树读取的过程
      1 通过挂载点信息找到/dev/hdc2 的inode 号码为2的根目录 inode ,且inode 具有的权限让我们可以读取该block的内容
      2 取得的block号码, 并找到etc/下的inode内容
      3 读取inode号码得知vbird具有r和x的权限 ,因此可以读取etc/的block内容
      4 取得的block号码,找到block内容中的passwd文件的inode号码
      5 读取inode号码得知vbird具有r的权限,因此可以读取passwd的block内容
  • 文件大小的磁盘读取性能
    分区的规划不是越大越好,大的文件系统存在文件数据离散的问题,造成数据读取性能低。

8.1.5 Ext2/Ext3 文件的访问与日志文件系统的功能

  • 新增文件时,系统的行为?
    1 用户在该目录下,是否有w 和x 的权限?有,继续。
    2 根据inode bitmap找到没有使用的inode号码,并将新文件的权限和属性写入
    3 根据 block bitmap 找到没有使用的block 号码,并将实际数据写入block,且更新 inode 的block指向数据
    4 将刚才写入的inode 与block 数据同步更新inode bitmap 与block bitmap,并更新superblock的内容

  • 数据的不一致状态 (Inconsistent)

    • 数据存放区域 -> inode 和 data block
    • metadata (中间数据) -> super block , inode bitmap, block bitmap:因为这数据都是经常变动的,每次添加、删除、编辑都可能会影响到这三个部分的数据。
      1 文件在写入文件系统时,系统中断,inode table 和 data block 被写入,但metadata还未更新,metadata和数据存放区不一致
      2 Ext2 会在系统重新启动时,强制比对metadata 和数据存放区,数量多,时间慢,系统繁忙
  • 出现日志文件系统 (Journaling file system)
    专门在文件系统中规划出一个块,该块专门记录写入或修订文件时的步骤:
    1 预备:当系统写入文件时,会先在Journal 块中记录某个文件准备要写入的信息
    2 实际写入: 写入文件的权限与数据; 开始更新meta data
    3 结束:完成数据与meta data 的更新后,在journal块当中完成该文件的记录

    • 只要检查journal块就可以知道是哪些文件出现了inconsistent的状态,针对文件修复
    • dumpe2fs 中的 superblock 有Journal inode/backup/size 的信息
    • 为什么 从Ext2 转换到Ext3 ?可利用性 数据完整性 速度 和 易于转换(不用格式化)

8.1.6 Linux 文件系统的操作

Review #p
所有数据都得加载到内存后cpu才能够对数据进行处理。当编辑很大的文件时,频繁的要系统写入磁盘中,由于磁盘写入速度要比内存慢很多,耗在等待硬盘的写入和读取中,没效率。

  • Asynchronously 异步处理
    1 当系统加载一个文件到内存后,若没被改动,则内存区段的文件数据会被设置为clean
    2 如若被改动,内存中数据会被改成dirty
    3 改动被保存在内存里,未被保存到磁盘中
    4 系统会不定时将 dirty 的数据写回磁盘,保持磁盘和内存数据的一致性。(sync命令强制同步)
  • 内存 与 文件系统的关系
    1 系统将常用文件放置在主储存器的缓冲区,以提高文件系统的读写速度
    2 Linux的物理内存会被用光,正常。可加速系统性能
    3 sync 手动同步
    4 正常关机,关机命令会调用sync同步
    5 非正常关机会导致长时间的磁盘校验,甚至导致文件系统损毁

8.1.7 挂载点(mount point)的意义

文件系统链接到某个目录 -> 挂载
一定是目录,该目录为挂载点

?#p208 难道不是挂载到root下?

8.1.8 其他Linux支持的文件系统与VFS

传统文件系统
日志文件系统
网络文件系统:NFS SMBFS

  • 查看Linux支持的文件系统
    ls -l /lib/modules/$ (uname -r)/kernel/fs
  • 查看系统目前已经加载的内存支持的文件系统
    cat /proc/filesystems
  • VFS Virtual Filesystem System
    Linux 通过VFS的内核功能读取文件系统
    (文件系统略)

8.2 文件系统的简单操作

8.2.1 磁盘与目录的容量

  • df [-hiTa] display free disk space列出文件系统的整体磁盘使用量

    • -h human readable
      -i 不用硬盘容量,用inode数量显示
      -T 列出该分区的文件系统名称

    • Output
      Filesystem 代表文件系统是在哪个分区
      1K-block 说明下面单位为1kb
      Used 使用掉的硬盘空间
      Available剩下
      Use% 使用率
      mountedon 挂载点

    • df 针对整个文件系统 ,需特别关注 根目录 的剩余容量

    • 特殊的 /proc 和 /dev/shm(虚拟的,下次开机就没了)

  • du display disk usage statistics
    不使用任何参数时,会列出当前目录下的目录文件容量
    -a 列出目录和文件的容量
    -s 只列出总量 -S 去除子目录
    使用通配符 查看 每个目录所占用容量
    du -sm /*

8.2.2 连接文件 ln

softlink 快捷方式
hardlink 通过文件系统的inode连接产生新文件名,而非新文件

  • Hard Link
    ls -al link字段下的数字,实际是多少文件link到了这个inode号码
    为什么?
    安全。
    1 任意的文件名被删除,文件内容仍然实际存在。
    2 任意的文件名进入编辑,文件内容都可以被修改。
    3 就是多在block里写入一个关联信息而已

缺点
1 不能跨文件系统 2 不能连接到目录 ?#p214

  • symbolic link
    创建一个独立的文件(新的inode号码,新的block),让这个文件数据读取指向它连接的文件名。
    当源文件被删除后,slink文件无法打开,实际就是找不到连接的文件名。
  • ln link 源文件 目标文件
    -s 创建symbolic link
    -f 如果目标文件存在,则先将其删除再创建

  • Tips
    ln -s /bin /root/bin
    此时/root/bin(为符号连接文件) 下内容进入/bin下内容,如果被删除了,block中就没有这份数据了(软连接文件)
    挽救:赶紧删除/root/bin 这个符号链接文件
    原本hardlink,/root/bin下删除,与/bin下内容无关。

  • 关于目录的链接数量
    新目录底下存在 . 和 .. 目录
    该目录本身 链接数量为2 (自身+.)
    上级目录 链接数量+1 (原有 + ..)

8.3 磁盘的分区、格式化、检验与挂载

加磁盘怎么做?
1 对磁盘分区
2 对分区format创建可用文件系统
3 对文件系统检验
4 Linux,需要创建挂载点,并挂载。

8.3.1 磁盘分区

  • fdisk DOS partition maintenance program
    按m显示所有操作 离开q所有操作不会生效
    w操作生效 p 输出目前磁盘状态
    Device 设备文件名
    Boot 是否为开机引导模块
    Start End 哪个柱面号码之间 决定分区的大小
    Blocks 以1k为单位的容量
    ID system 提示文件系统
    最后dev的End柱面号码为多少 与最大柱面号码5005差距多少 即剩余可分区的大小
    Start End 判断拓展分区和逻辑分区
    fdisk -l 查阅系统内所有分区
    设备文件名不要加上数字 (数字就是分区)

  • 删除分区
    fdisk /dev/hdc
    p
    d 选择
    w or q

  • 新增分区
    后略,实操

8.3.2 磁盘格式化

mkfs -t 文件系统格式 /dev/hdc6
mke2fs 指定格式化 创建文件系统

8.3.3 磁盘检验 fsck badblocks

  • fsck filesystem consistency check and interactive repair

8.3.4 磁盘挂载与卸载

单一文件系统不应该被重复挂载在不同的挂载点
单一目录不应该重复挂载多个文件系统
作为挂载点的目录应该是空目录
挂载:
mount 刚才创建的文件系统/dev/hdc6 目录/mnt/hdc6
Linux有驱动程序和分析superblock可以自动识别出挂载的文件系统类型
依靠 两个文件
/etc/filesystems
/proc/filesystems
驱动程序目录
/lib/modules/$ (uname -r )/kernel/fs/
查看 mount -l
光驱一旦挂载之后就无法退出光盘

  • 格式化(mksf)与挂载软盘
  • 挂载U盘
  • 重新挂载
    mount -o remount,rw,auto/
  • 挂载不特定目录
    mount --bind /hom /mnt/home
  • 将设备文件卸载
    umount
  • 使用Label name 进行挂载的方法
    查看Label name (dumpe2fs -h /dev/hdc6)
    挂载(mount -L “vibird_logical” /mnt/hdc6)

8.3.5 磁盘参数修改

mknod(略)
修改Lable name (e2label)
tune2fs & hdparm 命令(略)

8.4 设置开机挂载

8.4.1 开机挂载文件/etc/fstab 及/etc/mtab

  • 系统挂载的一些限制
    1 根目录是必须挂载的,而且一定要先于其他mount point被挂载出来
    2 其他挂载点必须为已新建的目录,可任意指定,但一定要遵守必需的系统目录架构原则。
    3 所有挂载点在同一时间之内,只能挂载一次
    4 所有分区在同一时间之内,只能被挂载一次
    5 若进行卸载,你必须将工作目录移到挂载点外(以及子目录)之外

  • Lable 或设备文件名

  • mount point

  • 磁盘分区的文件系统

  • 文件系统的参数


    第八章 Linux磁盘与文件系统管理_第2张图片
    screenshot.png
  • 能否被 dump 备份命令作用
    dump 是一个用来做为备份的命令, 我们可以透过 fstab 指定哪个文件系统必须要进行 dump 备份! 0 代表不要做 dump 备份, 1 代表要每天进行 dump 的动作。 2 也代表其他不定日期的 dump 备份动作, 通常这个数值不是 0 就是 1 啦!

  • 是否以 fsck 检验扇区:
    启动的过程中,系统默认会以fsck检验我们的 filesystem 是否完整 (clean)。 不过,某些 filesystem 是不需要检验的,例如内存置换空间 (swap) ,或者是特殊文件系统例如 /proc 与 /sys 等等。所以,在这个字段中,我们可以配置是否要以 fsck 检验该 filesystem 喔。 0 是不要检验, 1 表示最早检验(一般只有根目录会配置为 1), 2 也是要检验,不过 1 会比较早被检验啦! 一般来说,根目录配置为 1 ,其他的要检验的 filesystem 都配置为 2 就好了。

你可能感兴趣的:(第八章 Linux磁盘与文件系统管理)