Linux教程

08_linux磁盘与文件系统管理【Linux私房菜学习笔记】

本文主要是介绍08_linux磁盘与文件系统管理【Linux私房菜学习笔记】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

      • 1.EXT2文件系统
        • 1.1 硬盘组成与分割
        • 1.2 文件系统特性
        • 1.3 Linux的EXT2文件系统(inode)
        • 1.4 与目录树的关系
        • 1.5 EXT2/EXT3档案的存取与日志文件系统的功能
        • 1.6 Linux文件系统的运作
        • 1.7 挂载点的意义(mount point)
        • 1.8 其它Linux支持的文件系统与VFS
      • 2.文件系统的简单操作
        • 2.1 磁盘与目录的容量
        • 2.2 实体链接与符号链接:ln
      • 3.磁盘的分割、格式化、检验与挂载
        • 3.1 磁盘分区:fdisk、partprobe
        • 3.2 磁盘格式化:mkfs、mke2fs
        • 3.3 磁盘检验:fsck、badblocks
        • 3.4 磁盘挂载与卸除:mount、umount
        • 3.5 磁盘参数修订:mknod、e2label、tune2fs、hdparm
      • 4.设定开机挂载
        • 4.1 开机挂载 /etc/fstab及/etc/mtab
        • 4.2 特殊装置loop挂载(映像档不刻录就挂载使用)
      • 5.内存置换空间(swap)之建置
        • 5.1 使用实体分割槽建置swap
        • 5.2 使用档案建置swap
        • 5.3 swap使用上的限制
      • 6.文件系统的特殊观察与操作
        • 6.1 boot sector与superblock的关系
        • 6.2 磁盘空间之浪费问题
        • 6.3 利用GNU的parted进行分割行为
      • 7.本章重点回顾

1.EXT2文件系统

1.1 硬盘组成与分割

1、物理磁盘的组成

  • 圆形的磁盘盘(主要记录数据的部分)
  • 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据)
  • 主轴马达,可以转动磁盘,让机械手臂的读取头在磁盘上读写数据

2、磁盘衡量单位:

  • 扇区(Sector)为最小的物理存储单位,每个扇区为512bytes
  • 将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小单位
  • 第一个扇区最重要,里面有:(1)主要开机区(MBR)(2)分割表(partition table),其中MBR占有446bytes,而partition table则占有64bytes

3、不同接口的磁盘在linux中的文件名分别为:

  • /dev/sd[a-p] [1-15]:为 SCSI, SATA, USB, Flash 随身碟等接口的磁盘文件名;
  • /dev/hd[a-d] [1-63]:为 IDE 接口的磁盘文件名;

4、磁盘分区:

  • 磁盘分区就是指定分割槽的起始与结束磁柱。
  • 分割表仅仅能够记录四笔分割槽的记录(硬盘限制)
  • 这四笔分割槽有主要分割槽,延申分割槽,其中延申分割槽还可以再分割出逻辑分割槽。
  • 延申分割最多只能有一个(操作系统限制)
  • 只有作为数据存取的主要分割槽与逻辑分割槽能够被格式化,而延申分割槽无法格式化
  • 逻辑分割的数量依操作系统而不同,再linux系统中,IDE磁盘最多有59个逻辑分割(5号-63号),SATA磁盘则有11个逻辑分割(5号-15号)

1.2 文件系统特性

1、磁盘分区后进行格式化的目的:

  • 每种操作系统所设定使用的文件属性、权限并不相同,为了存放这些档案所需的数据,就必须对分割槽进行格式化,以成为操作系统能够利用的[文件系统格式]。
  • 每种操作系统能够使用的文件系统并不相同,如windows使用的是NTFS文件系统,linux的正统文件系统为Ext2
  • 传统情况下,一个分割槽只能被格式化为1个文件系统(一个filesystem就是一个partition)。目前的技术可以将一个分割槽格式化为多个文件系统(如LVM),也能将多个分割槽合成一个文件系统(LVM,RAID)。

2、文件系统的运作与操作系统的档案数据有关。文件系统会将不同的数据存放在不同的区块。(主要有以下三大区块)

  • inode:记录档案的属性。一个档案占用一个inode,同时记录此档案的数据所在的block号码。
  • block:实际记录档案的内容,若档案太大时,会占用多个block。
  • superblock:记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量,以及文件系统的格式与相关的信息。

**注意:**一般情况下,只要找到档案的inode的话,就可以找到这个档案放置数据的所有block的号码了。

3、不同文件的资料存储方式对比

  • inode/block资料存取示意图

    • image-20211116220058750
  • FAT文件系统资料存储示意图(每一个block号码都记录在前一个的block中)

    • image-20211116220116760

4、碎片整理

  • 整理档案的block,不让其过于离散,将同一个档案所属的blocks汇整在一起,方便数据的读取。

1.3 Linux的EXT2文件系统(inode)

1、Ext2文件系统格式化

  • 区分多个区块群组(block group)
  • 每个区块群组都有自己独立的inode/block/superblock系统。
  • 各个区块群组统一向上层汇报信息,分级管理。
  • image-20211116220139148
  • 在文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序,如此便可以将不同的开机管理程序安装到个别的文件系统中的最前端,而不用覆盖整颗硬盘唯一的MBR,由此可以制作出多重引导环境

2、每个区块群组的六个主要内容

  • **data block(资料区块):**用来放置档案内容数据的地方。Ext2文件系统中所支持的block大小有1k,2k以及4k。在格式化的时候block的大小就固定了,且每个block都有编号,方便与inode的记录。由于block大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一档案容量并不同。
    • image-20211116220157033
    • block的大小与数量在格式化完后就不能再改变了(除非重新格式化)
    • 每个block内最多只能放置一个档案的数据
    • 如果档案大于block的大小,则一个档案会占用多个block数量;
    • 若档案小于block,则该block的剩余容量就不能被再使用了(磁盘空间会被浪费),所以再进行文件系统格式化之前,先想好文件系统档案的预计使用情况,选择最合适的blcok大小与数量,尽可能减少磁盘空间浪费。
  • inode table(inode 表格)
    • inode记录的档案数据:
      • 档案的存取模式(r、w、x)
      • 档案的拥有者与群组
      • 档案的容量
      • 档案建立或者状态改变的时间
      • 档案最近一次的读取时间
      • 档案最近修改的时间
      • 定义档案特性的旗标(flag),如SetUID
      • 该档案真正内容的指向(pointer)
    • inode特点:
      • 每个inode大小均固定为128bytes
      • 每个档案都仅会占用一个inode
      • 文件系统能够建立的档案数量与inode的数量有关
      • 系统读取档案前,需要先找到该档案的inode,并分析inode里所记录的该档案的权限与用户是否符合,若符合才能开始实际读取block的内容。
    • 一个inode能够记录多少block的编号(每笔block号码会花去4bytes,设定一个block为1k)
      • 12个直接指向:12x1K = 12K
      • 一个间接指向:256x1K = 256K
      • 一个双间接指向:256x256x1K= 256^2K
      • 一个三间接记录区:256x256x256x1K = 256^3K
      • 总和:16GB,由此可知,当block格式化为1k时,能够容纳的最大档案大小为16GB.
  • Superblock(超级区块)
    • 记录的主要信息
      • block与inode的总用量;
      • 未使用与已使用的inode/blcok数量;
      • block与inode的大小(block为1,2,4k,inode为128bytes)
      • filesystem的挂载时间,最近一次写入数据的时间,最近一次检验磁盘(fsck)的时间等文件系统相关信息;
      • 一个valid bit数值,如果此文件系统已经被挂载,则valid bit为0,若未被挂载则valid bit为1;
    • 重要性:
      • superblock的大小为1024bytes,一个文件系统应该仅有一个superblock,且第一个block group才有,其它group所包含的superblock是用于对第一个block group内的superblock做备份,方便进行救援。
  • Filesystem Description(文件系统描述说明)
    • 这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段(superblock、bitmap、inodemap、datablcok)分别介于哪一个block号码之间。
  • block bitmap(区块对照表格)
    • block bitmap是用来记录使用与未使用的block号码。
    • 从该bitmap中可以知道哪些block是空的,当新建档案时会用到。
    • 当删除档案时,该档案原来占用的block号码就会被释放出来,这些blcok号码的标志会被修改为[未使用]。
  • inode bitmap(inode对照表)
    • inode bitmap是用来记录使用与未使用的inode号码。

3、观察文件系统指令:dumpe2fs

  • 选项与参数

    • image-20211116220221568
  • 例子:

    df ---------->该指令可以叫出目前挂载的装置
    dumpe2fs 装置文件名
    
    • image-20211116220236747

1.4 与目录树的关系

1、目录

  • 当再linux下的ext2文件系统建立一个目录时,ext2会分配一个inode与至少一块block给这个目录。所有每个目录的大小一般情况下就为block大小的整数倍。如1k、2k、4k等。
    • **目录inode的作用:**记录该目录的相关权限与属性,记录分配到的那块block的号码。
    • **目录block的作用:**block记录该目录下的文件名与该文件名占用的inode号码数据。
      • image-20211116220819385

2、档案

  • 当再linux下的ext2建立一个一般的档案时,ext2会分配一个inode与相对于该档案大小的block数量给该档案。

3、目录树读取

  • 步骤:
    • 从根目录读起,系统透过挂载信息可以找到挂载带你的inode号码(通常一个filesystem的最顶层inode号码会由2号开始),得到根目录的inode内容。
    • 根据根目录的inode内容读取根目录的block内的文件名数据,以及文件名对应的inode号码。
    • 再一层一层往下读取,直到读取到正确的文档名称。
  • 例子:
    • image-20211116222822043
    • image-20211116222835002

4、filesystem大小与磁盘读取效能

  • 档案数据离散问题:一个档案中所使用到的block号码太过离散,一些在头部、另一些在尾部,这就会导致数据读取效能的低落 。会造成硬盘的机械手臂移动幅度过大。当读取头搜寻整个filesysytem时,也会比较费时。
  • filesystem格式化:文件系统里的档案的blcok分布太过离散时,可以将整个filesystem的数据全部复制处理啊,将该filesystem重新格式化后,再将数据给复制回去,这样便可解决档案的block过于离散的问题。

1.5 EXT2/EXT3档案的存取与日志文件系统的功能

1、新增一个档案,文件系统的行为是:

  • 确定该用户用于对于欲新增档案所在的目录是否具有w与x权限,若有才可以新增;
  • 根据inode bitmap中找到没有使用的inode号码,并将新档案的权限、属性写入;
  • 根据block bitmap找到没有使用中的block号码,将实际数据写入到block中,且更新inode的block指向号码。
  • 将刚刚写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容。

2、数据不一致(inconsistent)状态

  • 发生原因
    • 当档案再在写入文件系统时,发生系统中断,导致写入的数据仅有inode table与data block而已。
  • 解决方式
    • 数据一致性检查:通过superblock中记录的valid bit(是否有挂载)与filesystem state(clean与否)等状态来判断是否强制进行数据一致性检查,但这种操作需要针对metadata区域与实际数据存放区来进行对比,要搜寻整个filesystem,非常耗时。
    • 日志式文件系统:在filesystem当中规划出一个区块,这个区块专门记录写入或者修订档案时的步骤。

3、日志式文件系统

  • 运作流程:

    • 预备:当系统写入一个档案时,会先在日志记录区块中记录某个档案准备要写入的信息;
    • 实际写入:开始写入档案的权限与数据;开始更新metadata的数据;
    • 结束:完成数据与metadata的更新后,在日志记录区块中完成该档案的记录;
  • 解决步骤:

    • 系统检查日志记录区块,确定哪个档案发生了问题,针对该档案来进行一致性检查即可。
  • 日志文件系统的大小:通过dumpe2fs输出的信息,ex3文件系统支持,128M。

    • image-20211117113824415

1.6 Linux文件系统的运作

1、异步处理:解决频繁将内存中的数据写入到磁盘中这一问题。

  • image-20211117114210911

2、linux系统的文件系统与内存关系

  • 系统会将常用的档案数据放置到主存储器的缓冲区,以加速文件的读写;
  • 为了加速系统效能,linux的物理内存最后都会被用光
  • 可以手动使用sync来强迫内存中设定为dirty的档案回写到磁盘内。
  • 如果不正常关系,由于数据尚未写回到磁盘内,因此重启后会花费很多时间进行磁盘检验,导致文件系统损毁(非磁盘损毁);

1.7 挂载点的意义(mount point)

1、基本意义

  • 每个filesystem都有自己独立的inode/block/superblock等信息,这个filesystem必须要链接到目录树才能被使用。将文件系统(partition分割槽/dev/sda1等等)与目录树结合的动作称为挂载。挂载点一定是目录。,如/、/home、/boot等目录;

1.8 其它Linux支持的文件系统与VFS

1、常见的文件系统有:

  • 传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
  • 日志式文件系统:ext3 / ReiserFS / Windows’ NTFS / IBM’s JFS / SGI’s XFS
  • 网络文件系统:NFS / SMBFS

2、查看linux支持的文件系统

 ls -l /lib/modules/$(uname -r)/kernel/fs

3、查看系统目前已加载到内存中的文件系统

cat /proc/filesystems

4、Linux VFS(Virtual Filesystem Switch)

  • linux的核心是如何管理这些认识的文件系统
    • 通过一个名为Virtual Filesystem Switch的核心功能去读取filesysytem。
    • linux认识的整个filesystem(包括ext2、ext3等)都是VFS在进行管理;
      • image-20211117145655939

2.文件系统的简单操作

2.1 磁盘与目录的容量

1、df:列出文件系统的整体磁盘使用量;

  • 使用方式以及选项
    • image-20211117150049827
  • 其中使用-a参数可能会发现某些挂载点(/proc)里的东西都是0,因为/proc里面的东西都是linux系统所需要加载的系统数据,而且是挂载在内存当中的,因此不会占用到磁盘空间。
    • image-20211117151541368

2、du:评估文件系统的磁盘使用量(常用在推估目录所占容量)

  • 使用方式以及可选项

    • image-20211117151609312
  • du指令会直接到文件系统内区搜寻所有的档案、目录数据。并计算出其大小;(默认以kbytes为单位)

    • image-20211117151946204

2.2 实体链接与符号链接:ln

1、Hard Link(实体链接,硬式连结或实际连结)

  • 链接方式:透过文件系统的inode连结来产生新档名,不产生新的档案;简单来说,hard link只是在某个目录下用于记录档名、目录名称的block内新增一笔档名链接到某个已经被另外档名对应的inode号码上的关联记录;
    • image-20211117160400907
  • 效果如下:
    • image-20211117153006739
    • 上图表示,用户可以通过1或2的目录之inode指定的记录档名、目录名称的block找到两个不同的档名,而不管使用哪个档名,均可以指向real指向的inode,去读取到real指向的inode指向的blcok数据。
    • hard link只是在某个目录下的记录档名的block中多写入一个关连inode的数据而已,既不会增加inode也不会耗费block数量;
  • 限制条件
    • hard link不能跨filesysytem
    • 不能link目录
      • 如果将/etc使用实体链接建立一个/etc_hd的目录时,那么在/etc_hd下的所有档名都要与/etc下的档名建立hard link,而不是仅仅连结到/etc_hd与/etc而已。未来如果需要在/etc_hd底下建立新的档案时,连带的/etc下的数据有得建立一次hard link,会造成相当大的环境复杂度;

2、Symbolic Link(符号链接,快捷方式)

  • 链接方式:符号链接就是在建立一个独立的档案,而这个档案会让数据的读取指向他link的档案的档名,只是利用档案来做指向的动作;下图所示符号链接档案的大小为12bytes是因为link的档案名称为12个英文,每个英文占用一个bytes;

    • image-20211117160604353
  • 效果如下:

    • image-20211117160834969
    • 由1号inode读取到符号链接档案的内容仅仅有档名,通过档名可以link到正确的目录去取得目标档案的inode,最终就可以读取正确的数据了;
    • 符号链接等价于windows上的快捷方式,由符号链接建立的档案会占用inode与block;

3、ln指令实战

  • 用法与可选项
    • image-20211117161335174

4、关于目录的link数量

  • image-20211117162029474

  • 可以看到上层目录/tmp的link数量由5增加为6,而新建的目录/tmp/testing则为2;

3.磁盘的分割、格式化、检验与挂载

当往系统里增加一颗磁盘时候,需要怎么做:

  • 对磁盘进行分割,以建立可用的partition(分割槽);
  • 对该partition进行格式化(format),以建立系统可用的filesystem;
  • 对刚刚建立好的filesystem进行检验;
  • 在linux系统上,需要建立挂载点(目录),并将filesystem(partition)挂载上来;

3.1 磁盘分区:fdisk、partprobe

1、指令使用方式

  • 选项与参数

    • image-20211118213119173
  • 范例1:

    • 步骤1:找出系统中根目录所在磁盘
      • image-20211118213356781
    • ·步骤2:输出fdisk后接的装置所有的partition内容
      • 某些旧版的软件与操作系统无法支持大于1024磁柱(cylinter)后的扇区使用,新版的Linux不存在该问题;
      • 后面是等待用户输入操作
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ylhfqpjn-1637592272946)(C:\Users\jielin\AppData\Roaming\Typora\typora-user-images\image-20211118213434957.png)]
      • image-20211118213604296
    • 步骤3:查看fdisk内的相关操作动作
      • 注意:在fdisk里操作后,仅有按下w才会使得动作生效,q会使得动作失效;
      • image-20211118213826390
    • 步骤4:输出目前磁盘的状态
      • 可以查看到分割表的信息;
      • 磁盘有41.1GB左右的容量,共有5005个磁柱,每个磁柱透过255个磁头在管理读写,每个磁头管理63个扇区,每个扇区的大小为512byte,所以每个磁柱的大小为255x63x512 = 16065x512 = 8225280bytes;
      • 当前整个磁盘还可以进行额外的逻辑分割,因为最大的磁柱为5005,但目前只使用到了2052号而已;
      • /dev/hdc5(逻辑分割)是由 /dev/hdc4 (延申分割)分割出来的,因为 /dev/hdc4 为 Extended,且 /dev/hdc5 磁柱号码在 /dev/hdc4 之内;
      • image-20211118214444312
      • Device:装置文件名,依据不同的磁盘接口/分割槽位置而变。
      • Boot:是否为开机引导快?通常windows系统的c需要这一块。
      • Start,End:这个分割槽在哪个磁柱号码之间,可以决定此分割槽的大小;
      • Blocks:就是以1k为单位的容量。如上图示,/dev/hdc1的大小为104391k = 102MB
      • ID,System:代表这个parition(分割槽)内的文件系统应该是啥,不一定代表此分割槽内真实的文件系统;
  • 范例2:插入USB磁盘到linux系统中

    • 可以看到多出了一个磁盘文件/dev/sda,这个即为刚刚插入的usb磁盘;

    • /dev/sda则有8GB左右的容量,该磁盘全部的磁柱都分割给了/dev/sda1,此文件系统应该为windows的FAT文件系统;

    • image-20211118222516419

    • 注意:fdisk只有root能够执行,使用的[装置文件名]不要使用数字,因为partition是针对整个硬盘装置,而不是某一个partition,所以[fdisk /dev/hdc1]这个是错误的,应该使用[fdisk /dev/hdc]才对;

  • 范例3:删除磁盘分区槽

    • 步骤1:fdisk /dev/hdc,进入到fdisk界面;

    • 步骤2:p,先看一下分割槽的基本信息,若要删除/dev/hdc1;

      • image-20211118223550376
    • 步骤3:d,选择一个要delete的partition,这里选1,表示删除/dev/hdc1;

      • image-20211118223610970
    • 步骤4:w(or)q,按w可以存储到磁盘数据表并离开fdisk,q使得动作失效并退出;

      • image-20211118223623646
      • image-20211118223629532
  • 范例4:新增磁盘分区槽,主要有三种(primary、extended、logical)

    • 步骤1:先删除掉所有的分割槽
      • image-20211118223828674
    • 步骤2:新增一个primary的分割槽,指定为4号;
      • image-20211118223936089
      • image-20211118223946124
      • image-20211118224005298
    • 步骤3:继续增加一个extended的分割槽
      • image-20211118224118390
      • image-20211118224135641
      • 由于延申分割最好默认会占用掉所有剩余的可用磁柱范围,所以一旦划分延申分割后,就不能再进行主要(primary)分割了;
      • 除非在进行延申分割的时候没有占用完所有的磁柱,则可以继续进行主要(primary)分割;
    • 步骤4:继续增加一个2GB的分割槽;
      • image-20211118224221616
      • image-20211118224322892
    • 步骤5:w,使得操作生效
      • 磁盘因无法卸除(因为含有根目录),所以核心无法重新取得”分割表“信息,此时系统会要求我们重新启动(reboot)以更新核心的分割表才行;
      • 或者可以通过GNU推出的工具来处理,使用partprobe指令,这个指令可以告知核心必须要读取分割表信息;
      • image-20211118224819005
  • 注意事项:

    • 以root身份进行磁盘分割时,最好在单人维护模式下比较安全;
    • 在进行fdisk的时候,如果该硬盘的某个partition还在使用,则系统核心有可能无法重载硬盘的partition table,可以通过将该使用中的parition给卸除掉,然后重新进入fdisk一遍,重新将其写入paritition table,就可以使得系统核心重载硬盘的parition table了;
    • 因为SATA硬盘最多能支持到15号的分割槽,IDE可以支持到63号,千万不要让分割槽超过磁盘支持的编号,一旦超过,即使有剩余的磁柱容量,也无法进行分割;
    • fdisk没有办法处理2TB以上的磁盘分区槽,虽然Ext3文件系统已经能够支持16TB以上的硬盘,但分割指令却无法支持,对于高于2TB的磁盘系统,只能通过parted这个指令来进行分割;

3.2 磁盘格式化:mkfs、mke2fs

1、mkds指令

  • 使用方法及可选项:

    • image-20211121203157440
  • 案例:

    • mkfs其实是一个综合指令,当使用【mkfs -t ext3 装置名称】这个指令时,系统会呼叫mkfs.ext3这个指令来进行格式化动作。本系统支持的文件系统格式化工具有,cramfs、ext2、ext3、msdoc、vfat。
      • image-20211121203712341
    • image-20211121203352913

2、mke2fs指令

  • 选项与参数:
    • image-20211121203831328
  • 案例:
    • 需求:
      • image-20211121203915442
    • 实现:
      • image-20211121203939317

3.3 磁盘检验:fsck、badblocks

1、fsck指令(filesystem check):用于检验文件系统是否出错。

  • 选项与参数:

    • image-20211121204133234
  • 用例:

    • 查询系统有多少文件系统支持fsck软件。
      • image-20211121204542739
    • 这是用来检查与修正文件系统错误的指令。
    • 通常只有身为root且文件系统有问题时才用这个指令,正常情况下使用会对系统产生危害。
    • 执行fsck时,被检查的partition务必不可挂载到系统上,需要在卸除状态下;
    • ext2/ext3文件系统最顶层(挂载点目录下)会存在一个(lost+found),该目录是为了记录在使用fsck检查文件系统后有问题的数据。若系统自动产生了数据在里面,则有可能文件系统出现了问题;
    • 系统指令的fsck指令,实际上是呼叫e2fsck这个软件;
    • image-20211121204550603

2、badblocks指令:用来检查硬盘或者软盘扇区有没有坏轨。(不常用)

  • 选项与参数

    • image-20211121205453331
  • 用例:

    • image-20211121205505810

3.4 磁盘挂载与卸除:mount、umount

1、挂载点的定义:

  • 挂载点就是目录,这个目录就是进入磁盘分区槽(文件系统)的入口。

2、挂载前需要注意的问题:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;(一个文件系统【partition】对应一个挂载点);
  • 单一目录不应该重复挂载多个文件系统(partition);
  • 要作为挂载点的目录,理论上应该为空目录;

3、mount指令(可以挂载ext3、vfat、nfs等文件系统)

  • 选项与参数:

    • image-20211121210145379
    • image-20211121210205770
  • 用例1:挂载Ext2/Ext3文件系统

    • 由于linux系统会通过superblock搭配linux自己的驱动程序去测试挂载,如果成功了,则会立即自动使用该类型的文件系统挂载起来,所以可以不用到 - t 选项。
      • image-20211121210422810
    • 系统测试挂载需要的条件
      • /etc/filesystems:系统指定的测试挂载文件系统类型;
      • /proc/filesystems: linux系统已经加载的文件系统类型;
      • /lib/modules/(uname -r)/kernel/fs/:Linux系统支持的文件系统之驱动程序;
  • 用例2:查看目前已经挂载的文件系统

    • image-20211121211205581
  • 用例3:挂载CD或者DVD光盘

    • 光驱一挂载后就无法推出光盘片了,需要将其卸除才可以推出;
    • /dev/cdrom是个链接文件,正确的磁盘文件名得看光驱是什么连接接口的环境,实际上本系统的光驱接在/dev/hdd,所以正确的挂载指令应该为:mount /dev/hdd /media/cdrom;
    • image-20211121211321031
  • 用例4:格式化与挂载软盘;

    • 软盘可以直接使用mkfs进行格式化,可以格式化为ext3或者vfat格式的。挂载时使用系统自动的测试挂载即可;
    • 挂载了软盘后可以退出软盘,但有可能会引起文件系统中莫名其妙的问题;
    • 最好先卸除之后再退出;
    • image-20211121211857826
  • 用例5:挂载随身碟

    • 首先确保随身碟不是NTFS文件系统的;
    • 若有中文文件名的数据,则可以再挂载的时候指定一下文件系统使用的语系数据,再man mount中可以找到vfat文件格式可以使用iocharset指定语系,中文语系是cp950;
    • 若使用的为文件系统为NTFS格式的随身硬盘,可以到NTFS官网下载提供的驱动程序,让linux能够使用NTFS的文件系统。
    • 由于文件系统与核心有很大的关系,所以如果linux系统有升级,就得重新下载一次相对应的驱动程序版本;
    • image-20211121212535729
  • 用例6:重新挂载根目录与挂载不特定目录

    • 更改根目录的挂载参数
      • image-20211121213358377
    • 挂载不特定的目录
      • 可以利用mount来将某个目录挂载到另外一个目录去,并不是挂载整个文件系统,而实额外挂载某个目录。也可以使用符号连接来实现,但在某些不支持符号连接的程序中,只可以通过这种方式;
      • image-20211121213426396
      • 可以看到,这两个目录连接到了同一个inode上,进入/mnt/home等价于进入/home目录,这一点有点像hard link;

2、将装置档案卸除:目的是直接将已挂载的文件系统给卸除,卸除后,可以使用df或者mount -I来查看是否还存在于目录树中;

  • 选项与参数:

    • image-20211121213757796
  • 案例1:

    • 由于装置文件均已经把其在挂载点上卸除掉了,所以现在可以退出光盘片、软盘片、USB随身碟等设备;
    • image-20211121214033000

3、使用Label name进行挂载

  • 好处:系统不必要知道文件系统所在的接口与磁盘文件名,只需要知道在进行磁盘分区时指定的partition的Label name即可;

  • image-20211121214324029

3.5 磁盘参数修订:mknod、e2label、tune2fs、hdparm

1、mknod指令

  • 用于设定装置作为档案的代码,分为主要代码和次要代码;
  • 不同的装置文件名使用的装置代码不一样,不能随便设置;

2、e2label指令

  • 用于在磁盘格式化完毕后,重新谁当文件系统的标头名称,label name;

3、tune2fs指令

  • 更新文件系统,如将ext2系统更新为ext3文件系统;

4、hdparm指令

  • 用于测定磁盘装置的效能

4.设定开机挂载

4.1 开机挂载 /etc/fstab及/etc/mtab

1、系统挂载的限制条件

  • image-20211121221922841

2、查阅/etc/fstab档案

  • 此档案是用于配置开机时的挂载情况的;
  • 其实 /etc/fstab (filesystem table) 就是将我们利用 mount 指令进行挂载时,将所有的选项与参数写入到这个档案中就是了。除外,/etc/fstab还加入了 dump 这个备份用指令的支持!与开机时是否进行文件系统检验 fsck等指令有关。
    • image-20211121222028318
    • image-20211121222036641

3、/etc/fstab档案内容的六大字段

  • 第一栏:硬盘装置文件名或该装置的Label;
    • 可以通过dempe2fs指令来查阅装置的Label name;
    • 可以通过e2label指令来修改装置的Label name;
  • 第二栏:挂载点
  • 第三栏:磁盘分区槽的文件系统
    • 必须手动写入文件系统;
  • 第四栏:文件系统参数
    • image-20211121222616808
    • image-20211121222624711
  • 第五栏:能否被dump备份指令作用
    • dump是一个用来做备份的指令,可以通过fstab指定哪个文件系统必须进行dump备份。
    • 0代表不要,1代表每天进行dump动作,2代表其它不定日期的dump备份动作;
  • 第六栏:是否以fsck检验扇区
    • 开机过程中,系统默认会以fsck检验我们的文件系统是否完整;
    • 但某些filesystem,如置换空间(swap),或者特殊文件系统/proc与/sys等,不需要开机检验;
    • 0表示要检验,1表示最早检验,2表示较慢检验;

4、修改/etc/fstab档案内容的例子

  • image-20211121223016975
  • image-20211121223037288

5、注意事项

  • image-20211121223113250

4.2 特殊装置loop挂载(映像档不刻录就挂载使用)

1、挂载光盘/DVD映像文件

  • 例子:将整个CentOS 5.2的DVD映像档挂载到测试机上;
    • 通过这种方式,就不需要将这个档案刻录成光盘或者DVD才能够读取内部的数据了;
    • image-20211121223257139

2、建立大档案以及制作loop装置档案:主要用于根目录的容量过大的情况,相当于建立除了一个虚拟的可以被挂载的虚拟分割槽;

  • 步骤1:建立大型档案

    • image-20211121223603658
  • 步骤2:格式化

    • image-20211121223625645
  • 步骤3:挂载

    • image-20211121223644181

5.内存置换空间(swap)之建置

swap的作用:处理在物理内存不足的情况下所造成的内存延伸记录的功能。为了保证在内存不足时,后续的程序可以顺利的运作,此时内存中暂时不使用的程序与数据就会被挪到swap中去;内存就会空出来给需要执行的程序加载。swap使用的是硬盘来暂时放置内存中的信息;

5.1 使用实体分割槽建置swap

1、分割:使用fdisk在磁盘中分割一个分割槽给系统作为swap。由于linux的fdisk预设会将分割槽的ID设定为Linux的文件系统,所以需要手动修改system ID。

  • 步骤1:分割

    • image-20211122213530722
  • 步骤2:修改分割槽系统ID:

    • image-20211122213608352
  • 步骤3:让核心更新partition table

    • image-20211122213636765

2、格式化:利用建立swap格式的【mkswap装置文件名】就可以格式化该分割槽为swap格式;

  • 开始建置swap格式
    • image-20211122213728865

3、通过free观察新的swap装置启动前,系统原有的swap有多大容量。

  • image-20211122214516058
  • image-20211122215017601

4、将swap装置启动,方式为【swapon 装置文件名】

  • image-20211122214541084

5、查看启动新的swap后,系统的swap空间有没有增加

  • image-20211122214618812

6、查看目前系统swap装置的使用情况

  • 可以看到旧的swap空间已经被使用96。

  • 新的swap空间还未被使用。

  • image-20211122215226279

5.2 使用档案建置swap

1、使用dd指令新增一个128MB的档案在/tmp底下

  • image-20211122214115981

2、使用mkswap将/tmp/swap这个文件格式化为swap的文件格式

  • image-20211122214149154

3、查看启动新的swap前系统的swap装置空间;

  • image-20211122214833348
  • image-20211122214954926

4、使用swapon来讲/tmp/swap启动;

  • image-20211122214913088

5、查看启动后系统swap的空间是否增加

  • image-20211122214936852

6、查看目前系统swap装置的使用情况

  • image-20211122215206054

7、使用swapoff关掉swap file

  • image-20211122215308654

5.3 swap使用上的限制

  • 如果主机支持电源管理模式,linux主机系统可以进入到休眠模式,则当前运作中的程序状态就会被记录到swap中去,以作为【唤醒】主机的状态依据。
  • 在某些程序运作时,也会利用swap的特性来存放一些数据段;
  • 对于服务器或者工作站这种常年上线的系统来说,必须要求swap,以防止同一时间段出现大量的访问请求,导致内存用尽;

6.文件系统的特殊观察与操作

6.1 boot sector与superblock的关系

1、前提

  • boot sector的大小为:1024bytes;
  • superblock的大小为:1024bytes;

2、当block为1024bytes(1k)时

  • boot sector会占用掉编号为0的block,用来存放开机管理程序;
  • superblock会占用掉编号为1的block;
    • image-20211122220824457

3、当block为2k,4k时

  • boot sector与superblock同时占用编号为0的block;
    • image-20211122220912478

6.2 磁盘空间之浪费问题

1、查询某个目录耗用的所有容量(du指令)

  • 占用的字节数

    • image-20211122221028791
  • 占用的block容量数

    • image-20211122221059442

2、通过(ll -s)指令来观察档案目录用掉的block容量和字节数

  • image-20211122221336883

6.3 利用GNU的parted进行分割行为

1、应用场景

  • 由于fdisk无法支持高于2TB以上的分割槽,所以得使用parted来进行处理;

2、用法

  • 选项与参数

    • image-20211122221552746
    • image-20211122221600121
  • 案例1:以parted列出目前本机得分割表资料

    • image-20211122221715325
    • Number:这个就是分割槽得号码,例如1号就是/dev/hdc1;
    • Start:起始的磁柱位置在这颗磁盘的多少MB处;
    • End:结束的磁柱位置在这颗磁盘的多少MB处;
    • Size:由上述两者可以得出该分割槽的容量有多大;
    • Type:分割槽的类型,有primary、extended、logical等类型;
    • File system:如沟通fdisk的System ID之意;
  • 案例2:建立一个约为512MB容量的逻辑分割槽;

    • image-20211122222337248
  • 案例3:删除刚刚建立的第八号磁盘分区槽

    • image-20211122222345106

7.本章重点回顾

1、Linux的正统文件系统为Ext2,该文件系统的主要内容有:

  • superblock:记录此filesystem的整体信息,包括inode、block的总量,使用量,剩余量,以及文件系统的格式与相关信息等;
  • inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码;
  • block:实际记录档案的内容,若档案太大,会占用多个block;

2、Ext2文件系统的数据存取为索引式文件系统;

3、若档案写入的block太过分散,可以通过碎片整理来将同一个档案所属的blocks汇整在一起;

4、Ext2文件系统主要有:boot sector、superblock、inode bitmap、block bitmap、inode table、data blcok等六大部分;

  • data block是用来防止档案内容数据的地方,在Ext2文件系统中所支持的block大小有1K、2K、4K三种;
  • inode记录档案的属性、权限等数据,每个inode大小均固定为128bytes,每个档案仅会占用一个inode,所以文件系统能够建立的档案数量与inode的数量有关;

5、档案block与目录block

  • 档案block:记录档案的实际数据;
  • 目录block:记录该目录底下文件名与inode号码的对照表;

6、日志式文件系统

  • 会多出一块记录区,随时记载文件系统的主要活动,可以加快系统复原时间;

7、linux文件系统为了增加效能,会让主存储器作为大量的磁盘高速缓存;

8、实体链接与符号链接

  • 实体链接(hard link):相当于多了一个文件名对应某个inode号码的链接;
  • 符号链接(symbol link):相当于快捷方式;

9、磁盘的使用过程:

  • 分割:fdisk
  • 格式化:mkfs
  • 挂载:mount

息,包括inode、block的总量,使用量,剩余量,以及文件系统的格式与相关信息等;

  • inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码;
  • block:实际记录档案的内容,若档案太大,会占用多个block;

2、Ext2文件系统的数据存取为索引式文件系统;

3、若档案写入的block太过分散,可以通过碎片整理来将同一个档案所属的blocks汇整在一起;

4、Ext2文件系统主要有:boot sector、superblock、inode bitmap、block bitmap、inode table、data blcok等六大部分;

  • data block是用来防止档案内容数据的地方,在Ext2文件系统中所支持的block大小有1K、2K、4K三种;
  • inode记录档案的属性、权限等数据,每个inode大小均固定为128bytes,每个档案仅会占用一个inode,所以文件系统能够建立的档案数量与inode的数量有关;

5、档案block与目录block

  • 档案block:记录档案的实际数据;
  • 目录block:记录该目录底下文件名与inode号码的对照表;

6、日志式文件系统

  • 会多出一块记录区,随时记载文件系统的主要活动,可以加快系统复原时间;

7、linux文件系统为了增加效能,会让主存储器作为大量的磁盘高速缓存;

8、实体链接与符号链接

  • 实体链接(hard link):相当于多了一个文件名对应某个inode号码的链接;
  • 符号链接(symbol link):相当于快捷方式;

9、磁盘的使用过程:

  • 分割:fdisk
  • 格式化:mkfs
  • 挂载:mount

10、开机自动挂载可以参考/etc/fstab档案的设定,设定完毕后需要通过mount -a 测试语法是否正确。

这篇关于08_linux磁盘与文件系统管理【Linux私房菜学习笔记】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!