《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

一、认识 Linux 文件系统

(1)这些文件权限与属性分别记录在文件系统的哪个区块内?
这就得要谈到 filesystem 中的 inode 与 block 了

(2)为了虚拟化与大容量磁盘, 现在的 CentOS 7 默认使用大容量效能较佳的 xfs 当预设文件系统了!

(3)Linux 最传统的磁盘文件系统 (filesystem) 使用的是 EXT2 这个啦!

1.磁盘组成与分区的复习

(1)首先说明一下磁盘的物理组成,整颗磁盘的组成主要有:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(2)磁盘盘上的物理组成:重点
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(3)这里主要介绍的以实体磁盘虚拟磁盘为主喔!
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(4)CentOS 7 的分区软件, 已经将最小单位改成扇区了,所以容量大小的分区可以切的更细~此外,由于新的大容量磁盘大多得要使用 GPT 分区表才能够使用全部的容量, 因此过去那个 MBR 的传统磁盘分区表限制就不会存在了

2.文件系统特性

(1) 在默认的情况下, windows 操作系统是不会认识 Linux 的 Ext2 的。
windows 98 以前的微软操作系统主要利用的文件系统是 FAT (或 FAT16);
windows 2000 以后的版本有所谓的 NTFS文件系统;
至于 Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)

(2)磁盘与文件系统之间的关系如下:
LVM 与软件磁盘阵列(software raid), 这些技术可以将一个分区槽格式化为多个文件系统(例如 LVM),也能够将多个分区槽合成一个文件系统(LVM, RAID)!
所以,一个可被挂载的数据为一个文件系统而不是一个分区槽

(3)文件系统是如何运作的呢?
例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。
文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

(4)inode,block,superblock介绍如下

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
inode与block之间的关系是:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(5)用索引式文件系统来说明inode与block之间的关系
假设某一个文件的属性与权限数据是放置到 inode 4 号(下图较小方格内),而这个 inode 记
录了文件数据的实际放置点为 2, 7, 13, 15 这四个 block 号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个 block 内容读出来!
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

补充说明:FAT格式的文件系统
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(6)碎片整理的原因是:block太过于分散

(a)碎片整理的概念
需要碎片整理的原因就是文件写入的 block 太过于离散了,此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所属的 blocks 汇整在一起,这样数据的读取会比较容易啊!

(b)linux的EXT2相较于windows的FAT,是不需要磁盘整理的
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

3. Linux 的 EXT2 文件系统(inode)

(1)EXT2文件系统中区块群组block group
文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用resize2fs 等指令变更文件系统大小),所有的 inode 与 block 通通放置在一起将是很不智的决定,因为 inode 与 block 的数量太庞大。

为此之故,因此 Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。

(2)Ext2 格式化后,ext2文件系统示意图:

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

说明:
(a)启动扇区boot sector的作用
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(b) data block (资料区块)

(i)data block 是用来放置文件内容数据地方, 在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及4K 三种而已。
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(ii)EXT2文件系统的block的基本限制如下:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
eg:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(iii)如果block太小?
因为如果 block 较小的话,那么大型文件将会占用数量更多的 block ,而 inode 也要记录更多的 block 号码,此时将可能导致文件系统不良的读写效能。

补充:事实上,现在的磁盘容量都太大了!所以,大概大家都只会选择 4K 的 block 大小吧!

(c)inode table (inode 表格)

(i) inode 的内容在记录文件的属性以及该文件实际数据是放置在哪几号 block 内!
(ii) inode 的数量和大小在格式化的时候就已经固定了,特点如下:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(iii)EXT2 的 inode / block 与文件大小的关系如下:
inode 记录一个 block 号码要花掉 4byte ;
假设我一个文件有400MB 且每个 block 为 4K 时, 那么至少也要十万笔 block 号码的记录呢!

但是呢?只有1K的block能这么计算。。。所以上面的计算,肯定是鸟哥的经验!
(4K/4=1024笔记录,如果是直接指向+间接指向的话是:12✖4K+1024✖4K)

(iiii)inode结构示意图
为此,我们的系统很聪明的将 inode 记录 block 号码的区域定义为 12 个直接,一个间接,一个双间接与一个三间接记录区。
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
说明:
直接:
上图最左边为 inode 本身 (128 bytes),里面有 12 个直接指向 block 号码的对照,这 12 笔记录就能够直接取得 block 号码啦! ;
间接:
再拿一个 block 来当作记录 block 号码的记录区,如果文件太大时, 就会使用间接的 block 来记录编号。
双间接:第一个 block 仅再指出下一个记录编号的 block 在哪里, 实际记录的在第二个 block 当中。
三间接:利用第三层 block 来记录编号。

(iiii)inode 能够指定多少个 block 呢?我们以较小的 1K block 来说明好了
(从block的方向去考虑)
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
注意:但这个方法不能用在 2K 及 4K block 大小的计算中, 因为大于 2K 的 block 将会受到 Ext2 文件系统本身的限制,所以计算的结果会不太符合之故。

(如果从inode本身去考虑的话)
eg:CentOS 6.x系统,那么默认还是使用 Ext4 的文件系统喔! Ext4 文件系统的 inode 容量已经可以扩大到 256bytes 了。
按照间接的方式的话:256/4=64笔记录,如果是指向1k的block,那么64*1k=64k,也就是说,指向的block的内容也就这么大点。。。

(d)Superblock (超级区块)

(i)Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem 了。
记录的信息主要有:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(ii)一般来说, superblock 的大小为 1024bytes。
相关的 superblock 讯息我们等一下会以 dumpe2fs 指令来呼叫出来观察喔!

(iii)此外,每个 block group 都可能含有 superblock 喔!
而若含有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 的备份咯,这样可以进行 superblock 的救援呢!

(e)Filesystem Description (文件系统描述说明)

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(f)block bitmap (区块对照表)

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(g)inode bitmap (inode 对照表)

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(h)dumpe2fs: 查询 Ext 家族 superblock 信息的指令

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
现在是superblock的信息
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
现在是block group的信息
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
说明:
dumpe2fs查询的结果说明:
不过依内容主要可以区分为上半部是superblock 内容, 下半部则是每个 block group 的信息了;
从上面的表格中我们可以观察到鸟哥这个 /dev/vda5 规划的 block 为 4K, 第一个 block 号码为 0 号,且 block group 内的所有信息都以block 的号码来表示的。

至于 block group 的内容我们单纯看 Group0 信息好了: 主要如下
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
注意:4096*512代表的是:多少个bytes的block
数量的话,已经说清楚是512个block了。

4.与目录树的关系(目录与文件在文件系统中如何记录数据??)

(1) block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(2)查看目录内的文件所占用的 inode 号码,用ls -i
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(3)当你使用『ll / 』时,出现的目录几乎都是 1024的倍数,为什么呢?因为每个 block 的数量都是 1K, 2K, 4K 嘛!
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
注意:目录并不只会占用一个 block 而已
在目录底下的文件数如果太多而导致一个 block 无法容纳的下所有的档名与 inode 对照表时, Linux 会给予该目录多一个 block来继续记录相关的数据;

(4)新建一个文件,block的分配情况如下:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(5)目录树是如何用inode读取block的内容的??

(i)
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(2)eg:举例来说,如果我想要读取 /etc/passwd 这个文件时,系统是如何读取的呢?
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(6)filesystem 大小与磁盘读取效能:

(i)如果文件写入的 block 真的分的很散,会咋样?
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(ii)如果 filesystem 真的太大了,会咋样?
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

5. EXT2/EXT3/EXT4 文件的存取与日志式文件系统的功能—— block bitmap 及 inode bitmap

(1)假设我们想要新增一个文件,此时文件系统的行为是:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(2)数据的不一致 (Inconsistent) 状态及早期的解决办法
出现日至式文件系统的原因:数据的不一致状态
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(3)日志式文件系统 (Journaling filesystem)——解决数据的不一致状态

(i)早filesystem 当中规划出一个区块,该区块专门在记录写入或修订文件时的步骤,
日志式文件的工作过程:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(ii)日志式文件最基础的功能
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
(iii)
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

6.Linux 文件系统的运作

(1)如果你常常编辑一个好大的文件, 在编辑的过程中又频繁的要系统来写入到磁盘中,由于磁盘写入的速度要比内存慢很多, 因此你会常常耗在等待磁盘的写入/读取上。
为了解决这个效率的问题,因此我们的 Linux 使用的方式是透过一个称为异步处理 (asynchronously)的方式。

异步处理的主要过程如下:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(2)我们知道内存的速度要比磁盘快的多,因此如果能够将常用的文件放置到内存当中, 这不就会增加系统性能吗?
因此我们 Linux 系统上面文件系统与内存有非常大的关系喔:

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

7.挂载点的意义 (mount point)

(1)每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。
将文件系统与目录树结合的动作我们称为『挂载』
重点是: 挂载点一定是目录,该目录为进入该文件系统的入口。

so:因此并不是你有任何文件系统都能使用,必须要『挂载』到目录树的某个目录后,才能够使用该文件系统的。

(2)按照前面的centos7.0的安装方法,
那么应该会有三个挂载点才是,分别是 /, /boot, /home 三个 (对应的装置文件名为 LVM, LVM, /dev/vda2)。
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
说明:
(i)观察这三个目录的inode发现:
由于 XFS filesystem 最顶层的目录之 inode 一般为 128 号,因此可以发现 /, /boot, /home为三个不同的 filesystem 啰! (因为每一行的文件属性并不相同,且三个目录的挂载点也均不相同之故。 )

(ii)同一个 filesystem 的某个 inode 只会对应到一个文件内容而已(因为一个文件占用一个 inode 之故),
因此我们可以透过判断 inode 号码来确认不同文件名是否为相同的文件喔!

(iii)eg:曾经提到根目录下的 . 与 … 是相同的东西
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
说明:
上面的信息中由于挂载点均为 / ,因此三个文件 (/, /., /…) 均在同一个 filesystem 内(判断方法:看inde号码以及目录属性);
而这三个文件的 inode 号码均为 128 号,因此这三个档名都指向同一个 inode 号码,当然这三个文件的内容也就完全一模一样了!

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

(1)常见的支持的文件系统有:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(2)想要知道你的 Linux 支持的文件系统有哪些,可以察看底下这个目录:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(3)Linux VFS (Virtual Filesystem Switch):VFS文件系统
(i)整个 Linux 的系统都是透过一个名为 Virtual Filesystem Switch 的核心功能去读
取 filesystem 的。

也就是说,整个 Linux 认识的 filesystem 其实都是 VFS 在进行管理!!

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(ii)eg:
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

9.XFS 文件系统简介-CentOS 7 开始,预设的文件系统已经由原本的 EXT4 变成了 XFS 文件系统了!

(1)为啥用法XFS来代替EXT文件系统呢?
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(2)XFS文件系统的配置:数据区、登陆区、实时运作区

(a)基本上 xfs 就是一个日志式文件系统,这个 xfs 就是被开发来用于高容量磁盘以及高性能文件系统之用。

(b)xfs 文件系统在资料的分布上,主要规划为三个部份,一个资料区 (data section)、一个文件系统活动登录区 (log section)以及一个实时运作区 (realtime section)。 这三个区域的数据内容如下:
(i)数据区 (data section)
xfs 的这个数据区的储存区群组 (allocation groups, AG),你就将它想成是 ext家族的 block 群组 (block groups) 就对了!
该数据区也是分为多个储存区群组(allocation groups) 来分别放置文件系统所需要的数据。
每个储存区群组都包含了

  • 整个文件系统的 superblock、
  • 剩余空间的管理机制、
  • inode 的分配与追踪。
    此外, inode 与 block 都是系统需要用到时, 这才动态配置产生,所以格式化动作超级快!
    《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(ii)文件系统活动登录区 (log section)
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(iii)实时运作区 (realtime section)
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理

(c)XFS 文件系统的描述数据观察:xfs_info

找出系统 /boot 这个挂载点底下的文件系统的 superblock 纪录: df -T /boot

《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理
《鸟哥的私房菜基础篇》第四版学习笔记——第7章LInux磁盘与文件系统管理