全称Linux extended file system, extfs,即Linux扩展文件系统,Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版,只不过为了快速恢复文件系统,减少一致性检查的时间,增加了日志功能,所以Ext2被称为索引式文件系统,而Ext3/Ext4被称为日志式文件系统

    索引式文件系统
      ====================================================================================
    EXT2/3/4文件系统 - 图1
      Ext3/Ext4文件系统基本结构
    EXT2/3/4文件系统 - 图2
    EXT2/3/4文件系统 - 图3
    EXT2/3/4文件系统 - 图4
      • superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式等;
      • inode:记录文件的属性(文件的元数据metadata),一个文件占用一个inode,同时记录此文件数据所在的block number;
      • block:实际存储文件的內容,若文件太大时,会占用多个block。
    文件名存在于上级目录的data block 中
      Superblock 沒有Superblock ,就沒有filesystem
      • block 与 inode 的总量;
      • 未使用与已使用的 inode / block 数量;
      • block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128bytes 或 256bytes);
      • filesystem 的挂载时间、最近一次写入数据的时间、最近一次检查 (fsck) 的时间等文件系统相关信息;
      • 每个block group 都可能含有 superblock,这样可以进行用于 superblock 的修复;
      inode table: 存储文件的元数据
      • 文件的权限(read/write/excute);
      • 文件的属主/属组(owner/group);
      • 文件的大小;
      • 文件的(ctime);
      • 文件的(atime);
      • 文件的(mtime);
      • 记录文件内容所在的block number (pointer);
      data block: 存储文件的实际数据
      查看文件系统的信息
      dumpe2fs
      [root@tianyun ~]# dumpe2fs /dev/sda2
      tune2fs
      [root@tianyun ~]# tune2fs -l /dev/sda3
      tune2fs 1.39 (29-May-2006)
      Filesystem volume name: yang
      Last mounted on:
      Filesystem UUID: 28459f88-87dc-4624-94a7-07b0f3eb2420
      Filesystem magic number: 0xEF53
      Filesystem revision #: 1 (dynamic)
      Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
      Default mount options: (none)
      Filesystem state: clean
      Errors behavior: Continue
      Filesystem OS type: Linux
      Inode count: 48960
      Block count: 195312
      Reserved block count: 9765
      Free blocks: 183410
      Free inodes: 48946
      First block: 1
      Block size: 1024
      First inode: 11
      Inode size: 128
      Journal inode: 8

    1. **  EXT2/EXT3/EXT4 日志式文件系統**<br />   新建一个文件的过程:<br />   1. 先确定使用者对于想新创建文件目录是否具有 w x 的权限;<br />   2. 根据 inode bitmap 找到沒有使用的 inode 号码,并将文件的权限和属性写入;<br />   3. 根据 block bitmap 找到沒有使用的 block号码,将文件的实际数据写入 block 中,且更新 inode block 指向信息;<br />   4. 将刚刚写入的 inode block 信息同步更新 inode bitmap block bitmap,并更新 superblock 的內容。
    2.    文件的不一致 (Inconsistent) 状态<br />   例如突然断电、kernel发生错误等。这样可能写入的信息仅有 inode table data block 而已,最后一个同步更新的步<br />   骤并沒有做完,此时就会发生 metadata 的內容与实际信息产生不一致 (Inconsistent) 的情況。
    3.    日志式文件系统 (Journaling filesystem)<br />   1. 准备:当系统要写入一个文件时,会先在日志区记录某个文件准备写入的信息;<br />   2. 实际写入:写入文件的权限与数据,更新 metadata 的信息;<br />   3. 结束:完成数据与 metadata 的更新后,在日志记录区块中完成文件的记录。<br /> ![](https://cdn.nlark.com/yuque/0/2020/png/1692564/1598628433961-35b702f6-ecd2-484b-a155-cc77ba4f2a7c.png#align=left&display=inline&height=366&margin=%5Bobject%20Object%5D&originHeight=366&originWidth=800&size=0&status=done&style=none&width=800)
    4. **  修复文件系统 fsck,e2fsck -fy**<br /> **  案例1 系统无法启动**<br /> ![](https://cdn.nlark.com/yuque/0/2020/png/1692564/1598628433970-b5d96968-5f18-463b-9732-4829051ab8ea.png#align=left&display=inline&height=647&margin=%5Bobject%20Object%5D&originHeight=647&originWidth=794&size=0&status=done&style=none&width=794)<br /> ![](https://cdn.nlark.com/yuque/0/2020/png/1692564/1598628433959-301e7e21-1f81-43c2-ac83-111d52355cbb.png#align=left&display=inline&height=647&margin=%5Bobject%20Object%5D&originHeight=647&originWidth=794&size=0&status=done&style=none&width=794)<br /> **  案例二:Read-only file system**<br />   如果运行中的服务器的某一个分区出现readonly,导致进程无法写这个分区(比如nginx进程无法写日志文件到此分区,<br />   手动测试touch文件到此分区也显示:cannot touch ‘xxxxx’:Read-only file system),该怎么办?<br />   解决:磁盘read-only的原因一般有2种,一种是没有正常关机导致,还有一种是硬盘故障导致。<br />   如果是/分区,这种情况只能下线报修磁盘了。<br />   如果是其它分区,则可以尝试三步解决此问题:<br />   1. 先取消挂载此分区<br />   2. 再fsck.ext4 -fy /dev/sdb1<br />   3. 最后挂载此分区,检查是否可以正常读写。<br />   如果仍旧不可以正常读写,请报修磁盘。<br />   注:以上操作过程,请保证服务器不在线上提供服务。
    5.   案例三:修复superblock<br />   找到备份的superblock<br />   [root@tianyun ~]# dumpe2fs -h /dev/datavg/lv1 |grep 'Blocks per group'<br />   dumpe2fs 1.42.9 (28-Dec-2013)<br />   Blocks per group: 8192<br />   利用备份的 superblock恢复superblock<br />   [root@tianyun ~]# fsck.ext4 -b 8192 /dev/datavg/lv1