《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)

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

1 磁盘组成与分区复习

  • 扇区为最小的物理存储单位,每个扇区为512bytes
  • 将扇区组成一个圆,那就是柱面,柱面是分区的最小单位
  • 磁盘分区意即指定分区的起始与结束柱面就可以
  • 指定分区的柱面范围记录在第一个扇区的分区表中
  • 主分区与扩展分区最多可以有4个(硬盘的限制)
  • 扩展分区最多只能有一个(操作系统的限制)
  • 逻辑分区是有扩展分区持续分出来的分区
  • 能够被格式化后作为数据访问的分区为主要分区与逻辑分区,扩展分区无法格式化

2 文件系统特性

  • super block:记录此文件系统的整体信息,包括inode/block的总量、剩余量,以及文件系统的格式与相关信息
  • inode:记录文件的属性,一个文件占用一个inode,同事记录此文件的数据所在的block号码
  • block:实际记录文件的内容,若文件太大时,会占用多个block
  • Linux的Ext2系统采用索引式文件系统,读取方式如下:
    《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)_第1张图片
  • U盘使用的文件系统一般为FAT格式,FAT这种格式的文件系统并没有inode存在,所以FAT没有办法将这个文件的所有block在一开始就读取出来。每个block号码都记录在前一个block中,读取方式如下:
    《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)_第2张图片

3 Linux的Ext2文件系统

Ext2文件系统在格式化的时候基本上是区分为多个块组(block group)的,每个块组都有独立的inode/block/superblock系统。
《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)_第3张图片

  • data block(数据块)
    ① 原则上,block的大小与数量在格式化完就不能改变了(除非重新格式化)
    ② 每个block文内最多只能够放置一个文件的数据
    ③ 承上,如果文件大于block的大小,则一个文件会占用多个block数量
    ④ 承上,如果文件小于block,则该block的剩余空间都不能够再被使用了(磁盘空间会被浪费)
    例:假如Ext2文件系统使用4KB的block,而该文件系统中有10000个小文件,每个文件大小为50bytes,则浪费了多少磁盘空间?
    答:(4096-50)*10000=38.6MB,不到1MB的总文件容量却浪费了将近40MB的容量。
    但是也不可以将block定义为1K,因为block太小的话,大型文件将占用数量更多的block,而inode也会记录更多的block号码,此时将可能导致文件系统不良的读写性能。
  • inodetable(inode表格)
    inode的内容主要记录文件的属性以及该文件实际数据是防止在哪几号block内,基本上,inode记录的文件数据至少有下面这些:
    ① 该文件的访问模式(rwx)
    ② 该文件的所有者与组
    ③ 该文件的大小
    ④ 该文件创建或状态改变的时间ctime
    ⑤ 最近一次的读取时间atime
    ⑥ 最近修改的时间mtime
    ⑦ 定义文件特性的标志(flag),如SetUID等
    ⑧ 该文件真正内容的指向(pointer)
    inode的数量与大小也是在格式化时就已经固定了,另外:
    ① 每个inode的大小均固定为128bytes
    ② 每个文件都仅会占用一个inode,所以inodemap中多个inode存贮了多个文件的信息
    ③ 承上,因此文件系统能够创建的文件数量与inode的数量有关
    ④ 系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否相符合,若符合才能够开始实际读取block的内容
    ⑤ inode记录block号码的区域定义为12个直接、1个间接、1个双间接、1个三间接记录区
    结构如:
    《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)_第4张图片
    以较小的1KB的block来说明,每个block号码会使用4bytes
    12个直接指向:12✖️1KB=12KB
    1个间接指向:1✖️(1KB/4bytes)✖️1KB=256KB
    1个双间接指向:1✖️(1KB/4bytes)✖️(1KB/4bytes)✖️1KB=256²KB
    1个三间接指向:1✖️(1KB/4bytes)✖️(1KB/4bytes)✖️(1KB/4bytes)✖️1KB=256³KB
    因此当文件系统将block格式化为1KB大小,能够容纳的最大文件为12+256+256²+256³=16GB。但是这个计算方法不适合block为2K或者4K时,因为大于2K的block会受到文件系统本身的限制。
    block为2K时,最大文件为256GB。
    block为4K时,最大文件为2TB。
  • Superblock(超级块)
    Superblock是记录整个文件系统相关信息的地方,主要有:
    ① block与inode总量
    ② 未使用与已使用的inode/block数量
    ③ block与inode的大小(block为1K,2K,4K,inode为128bytes)
    ④ 文件系统的挂在时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息。
    ⑤ 一个validbit数值,若此文件系统已被挂载,则validbit为0,若未被挂载为1
  • File system Description(文件系统描述说明)
    描述每个block group的开始与结束的block号码,以及说明每个区段(superblcok、bitmap、inodemap、date block)分别介于哪一个block号码之间
  • block bitmap(块对照表)
    记录使用与未使用的block号码
  • inode bitmap(inode对照表)
    记录使用与未使用的inode号码
  • 使用dumpe2fs [-bh] 设备文件名 查询文件系统信息

4 与目录树的关系

  • 目录:新建一个目录时,ext2会分配一个inode与至少一块block给该目录,其中inode记录该目录的相关权限与属性,并可记录分配到的那块block号码,而block则是记录在这个目录下的文件名与该文件名占有的inode号码数据。
    想要查看目录下文件所占用的inode,使用ls -li命令
  • 文件:新建一个文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。
    《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)_第5张图片
  • 当新建一个文件时,文件系统的行为是:
    ① 先确定用户对于欲添加文件的目录是否具有w和x权限
    ② 根据inode bitmap找到没有使用的inode号码,并将新文件的权限/属性写入
    ③ 根据block bitmap找到没有使用中的block号码,并将实际的数据写入block中,且更新inode的block指向数据。
    ④ 将刚才写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容
  • 数据存放区域与中间数据:我们将inode table和data block称为数据存放区域,至于其他例如super block、block bitmap、inode bitmap等区段称为中间数据,因为它们的数据是经常变动的,每次添加、删除、编辑时都可能会影响到这三个部分的数据,因此才称为中间数据。

5 文件系统相关的操作

(1)df 列出文件系统的整体磁盘使用量

-h:以人们较易阅读的GB、MB、KB等格式自行显示
-i:不用硬盘容量,而以inode的数量显示

(2)du 评估文件系统的磁盘使用量

du [-ahskm] 文件或者目录
-s:列出总量而以,而不列出每个个别的目录与所占容量。
-h:以人们较易阅读的GB、MB、KB等格式自行显示
常用命令:du -h --max-depth=1 /home/test1/test2,查看 /home/test1/test2目录下各个文件、目录的大小

(3)ln 连接文件

  • hard link 硬连接或实际连接
    硬连接是在某个目录下新建一条文件名连接到某inode号码的关联记录。
    创建实际连接的命令 ln /etc/crontab . 在当前目录创建/etc/crontab的硬连接
    ① 不能跨文件系统
    ② 不能连接到目录
    《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)_第6张图片
  • symbolic link 符号连接、也即是快捷方式
    symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。
    《鸟哥的linux私房菜》学习笔记(第八章 Linux磁盘与文件系统管理&第九章 文件与文件系统的压缩与打包)_第7张图片
    创建符号连接的命令:ln -s 源文件 目标文件
  • 目录的连接数量
    当创建一个新的目录名称为/tmp/testing时,基本上会有三个东西
    ①/tmp/testing
    ②/tmp/testing/.
    ③/tmp/testing/…
    其中①和②是一样的,都代表该目录,③代表/tmp,所以新建一个目录时,新的目录连接数是2,而上层目录连接数+1。查看连接数的命令为ls -ld 目录

六 磁盘的分区、格式化、检验和挂载

想要在系统中新增一块硬盘时,有以下动作:
1、对磁盘进行分区,以新建可用的分区
2、对该分区进行格式化,以创建系统可用的文件系统
3、若想要仔细一点,则可对刚才新建好的文件系统进行检验。
4、在Linux系统上,需要创建挂载点(也即是目录),并将它挂载上来。

第九章 文件与文件系统的压缩与打包

1、压缩与解压

tar

-c:新建打包文件,可搭配-v来查看过程中被打包的文件名
-x:解压缩的功能
-t:查看打包文件的内容含有哪些文件名
-v:在压缩/解压的过程中,将正在处理的文件名显示出来
-z:通过gzip的支持进行压缩/解压缩,此时文件名最好命名为*.tar.gz
-f:后面要接被处理的文件名

  • 常用命令
    压缩
    tar -cvzf xxx.tar.gz 要被压缩的文件或者目录名称
    解压
    tar -xvzf xxx.tar.gz 欲解压缩的目录
    查询文件名
    tar -tvzf xxx.tar.gz

你可能感兴趣的:(linux,学习笔记,linux)