Linux文件系统

Linux文件系统

1.磁盘组成与分区

磁盘的组成:

 圆形的磁盘盘(主要记录数据的部分);

 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);

 主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据。

 扇区(Sector)为最小的物理储存单位,且依据磁盘设计的不同,目前主要有 512bytes 与 4K 两种格式;

 将扇区组成一个圆,那就是磁柱(Cylinder);

 早期的分区主要以磁柱为最小分区单位,现在的分区通常使用扇区为最小分区单位

 磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。

 MBR 分区表中,第一个扇区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分区表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。

 GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB

 /dev/sda-p:为实体磁盘的磁盘文件名;

 /dev/vda-d:为虚拟磁盘的磁盘文件名

2.文件系统特性

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

一个可被挂载的数据为一个文件系统而不是一个分区槽

在Linux文件系统中权限与属性放置到inode 中,至于实际数据则放置到 data block 区块中。

——————(索引式文件系统indexed allocation)

 superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

 inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码;

 block:实际记录文件的内容,若文件太大时,会占用多个 block 。

惯用的闪存为FAT格式,没有inode存在,每一个block号码都记录在前一个block当中,故对于FAT文件系统就可以经常碎片整理(文件写入的block太过于离散,此时文件读取的效能很差,可以透过碎片整理将同一个文件所属的blocks汇整在一起,这样数据的读取会比较容易)

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

文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等指令变更文件 系统大小),否则inode与block固定后就不再变动。

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

文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序,这样我们可以将不同的开机管理程序安装到个别的文件系统最前端,而不用覆盖整个磁盘唯一的MBR,这样可以制作处多重引导环境。

Block Group分为以下6个部分,从左到右依次为

superblock,文件系统描述说明,块对应表,inode对应表,inode table,data block。

1.data block(资料区块)

data block用来放置文件内容数据的地方,**在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及
4K 三种。**在格式化block时大小就固定了,且每个block都有编号,以便inode记录。因block大小不同而产生的Ext2文件系统限制如下:
这里写图片描述

 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);

 每个 block 内最多只能够放置一个文件的数据;

 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;

 承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。

2.inode table(inode表格)

inode在记录文件的属性以及该文件实际数据是放置在哪几号block内

inode记录的文件数据有:

该文件的存取模式(read/write/excute);

 该文件的拥有者与群组(owner/group);

 该文件的容量;

 该文件建立或状态改变的时间(ctime);

 最近一次的读取时间(atime);

 最近修改的时间(mtime);

 定义文件特性的旗标(flag),如 SetUID...;

 该文件真正内容的指向 (pointer);

inode特色:

 每个 inode 大小均固定为 128 bytes (新的 ext4 与 xfs 可设定到 256 bytes);

 每个文件都仅会占用一个 inode 而已;

 承上,因此文件系统能够建立的文件数量与 inode 的数量有关;

 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够           开始实际读取 block 的内容。

3.superblock(超级区块)

superblock是记录整个文件系统相关信息的地方。

 block 与 inode 的总量;

 未使用与已使用的 inode / block 数量;

 block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128bytes 或 256bytes);

 filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;

 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

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

这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock,

bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。

5.block bitmap(区块对照表)

bilock bitmap记录的是使用与未使用的block号码。

6.inode bitmap(inode 对照表)

inode bitmap记录使用与未使用的inode号码。

7.dumpe2fs:查询Ext家族superblock信息的指令

dumpe2fs [-bh] 装置文件名

选项与参数:

-b :列出保留为坏轨的部分

-h :仅列出 superblock 的数据,不会列出其他的区段内容

4.与目录树的关系

1.目录

当我们在Linux下的文件系统建立一个目录时,文件系统会分配一个inode与至少一块block给该目录。

inode记录该目录的相关权限与属性,并可记录分配到的那块block号码。

block记录在这个目录下的文件名与该文件名占用的inode号码数据。

ls -i 可以来观察root家目录内的文件所占用的inode号码。

2.文件

当我们在Linux下的ext2建立一个一般文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。

3.目录树读取

inode本身并不记录文件名,文件名的记录是在目录的block中

由于目录树是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的inode号码,此时就能够得到根目录的inode内容,并依据该inode读取根目录的block内的文件名数据,再一层一层的往下读到正确的档名。

ll -di,可以显示具体的步骤

5.EXT2/EXT3/EXT4文件的存取与日志式文件系统的功能

新增一个文件,文件系统的行为是:

  1. 先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;
  2. 根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;
  3. 根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且更新 inode 的 block 指向数据;
  4. 将刚刚写入的 inode 与 block 数据同步更新 inode bitmap 与 block bitmap,并更新 superblock 的内容

inode table与data block称为数据存放区域,因为superblock,block bitmap,inode bitmap等区域的数据经常变动,每次新增,移除,编辑时都可能会影响到这三个部分的数据,所以被称为metadata(中介资料)

1.数据的不一致状态(Inconsistent)

在不知名原因导致系统中断,写入的数据仅有inode table及data block而已,最后一个同步更新中介数据并没有做完,就会出现不一致情况。

早期的Ext2,由 Superblock 当中记录的 valid bit (是否有挂载) 与 filesystem state (clean 与否)

等状态来判断是否强制进行数据一致性的检查!若有需要检查时则以 e2fsck 这支程序来进行的。比较费时。

2.日志式文件系统(Journaling filesystem)

在filesystem当中规划出一个区块,该区块专门在记录写入或修订文件时的步骤,简化一致性检查的步骤。

  1. 预备:当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;
  2. 实际写入:开始写入文件的权限与数据;开始更新 metadata 的数据;
  3. 结束:完成数据与 metadata 的更新后,在日志记录区块当中完成该文件的纪录

万一数据的记录过程当中发生了问题,那么我们的系统只需要去检查日志记录区块,而不需要针对整块filesystem去检查。

6.Linux文件系统的运作

为解决硬盘写入的速度比内存速度不匹配,效率问题,故Linux使用的方式是异步处理(asynchronously)。

系统加载一个文件到内存后,如果该文件没有被更动过,则在内存区段的文件数据会被设定为干净

(clean)的。

但如果内存中的文件数据被更改过了(例如你用 nano 去编辑过这个文件),此时该内存中

的数据会被设定为脏的 (Dirty)。

此时所有的动作都还在内存中执行,并没有写入到磁盘中。系统会不定时的将内存中设定为Dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。

将常用的文件放置到内存中,可以增加系统性能

 系统会将常用的文件数据放置到主存储器的缓冲区,以加速文件系统的读/写;因此Linux的物理内存最后都会被用光,可加速系统效能。也可以手动使用sync来强迫内存中设定为dirty的文件回写到磁盘中。

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

将文件系统与目录树结合称为挂载,挂载点一定是目录,该目录为进入该文件系统的入口。
这里写图片描述
同一个 filesystem 的某个 inode 只会对应到一个文件内容而已(因为一个文件占用一个 inode 之故), 因此我们可以透过判断 inode 号码来确认不同文件名是否为相同的文件。

第二个由于挂载点均为/,因此三个文件(/ /. /..)均在同一个filesystem内。

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

传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;

 日志式文件系统: ext3 /ext4 / ReiserFS / Windows’ NTFS / IBM’s JFS / SGI’s XFS / ZFS

 网络文件系统: NFS / SMBFS

Linux 支持的文件系统有哪些,可以察看底下这个目录:;

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

系统目前已加载到内存中支持的文件系统则有:

cat /proc/filesystems

9.XFS文件系统简介

Ext 文件系统家族对于文件格式化的处理方面,采用的是预先规划出所有的 inode/block/meta data 等数据,未来系统可以直接取用, 不需要再进行动态配置的作法。EXT 家族当前较伤脑筋的地方:支持度最广,但格式化超慢

1.XFS文件系统的配置

基本上 xfs 就是一个日志式文件系统。xfs 文件系统在资料的分布上,主要规划为三个部份,一个资料区 (data section)、一个文件系统活动登录区 (log section)以及一个实时运作区(realtimesection)。

1.资料区(data section)

数据区就跟我们之前谈到的 ext 家族一样,包括 inode/data block/superblock 等数据,这个数据区与 ext 家族的 block group 类似,也是分为多个储存区群组(allocation groups) 来分别放置文件系统所需要的数据。 每个储存区群组都包含了

(1)整个文件系统的 superblock、

 (2)剩余空间的管理机制、

 (3)inode 的分配与追踪。

inode与block都是系统需要用到时,才动态配置产生,所以格式化动作超级快。

2.文件系统活动登录区(log section)

在登录区这个区域主要被用来纪录文件系统的变化,其实有点像是日志区啦!文件的变化会在这

里纪录下来,直到该变化完整的写入到数据区后, 该笔纪录才会被终结。避免系统某些缘故损毁时,系统会拿这个登录区块来进行检查,快速修复文件系统。

3.实时运作区(realtime section)

当有文件要被建立时,xfs 会在这个区段里面找一个到数个的 extent 区块,将文件放置在这个区

块内,等到分配完毕后,再写入到 data section 的 inode 与 block 去! 这个 extent 区块的大小

得要在格式化的时候就先指定,最小值是 4K 最大可到 1G。

2.XFS文件系统的描述数据观察

xfs_info 挂载点|装置文件名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值