ext4文件系统

时间:2024-03-20 12:30:42

ext4文件系统

一、ext4文件系统

ext4:第四代扩展文件系统,是目前Linux发行版比较常用的文件系统。
特点:

ext4文件系统

上图简单介绍了ext4文件系统的布局:磁盘划分为分区,每个分区又划分为N个块组,在每个块组中,又根据块组的编号有不同的内部结构,Ext4文件系统主要使用块组0中的超级块和块组描述符表,在其他一些特定的块组中有超级块和块组描述符表的冗余备份。如果块组中不含冗余备份,那么块组就以数据块位图开始。当格式化磁盘成为ext4 文件系统的时候,mkfs 将在块组描述符表后面分配预留GDT表数据块(“Reverse GDT blocks”)以用来将来扩展文件系统。紧接在预留GDT表数据块后的是数据块位图与inode表位图,这两个位图分别表示本块组内的数据块与inode表的使用,inode表数据块之后就是存储文件的数据块了。
  • 大容量文件系统

ext4文件系统

  • 与ext3相比,ext4文件系统可支持最高1EB的分区与最大16TB的文件

  • 拓展了子目录的数量,理论上可以无限个

  • 与ext3相比,引入了块组的概念,提高了存取的效率

  • 预留空间、延迟获取空间,减少了文件的分散

  • 更详细的inodes,提高了系统的性能

  • 可以实现快速的文件系统检查

  • 提供日志校验和,提高了可靠性

参考链接

二、分割与格式化硬盘

①、添加分区

fdisk dev**:**对硬盘设备分区

eg:fdisk /dev/sda 对sda分区

  • p、打印分区表
  • n、新建一个新分区
  • d、删除一个分区
  • q、退出不保存
  • w、把分区写进分区表,保存并退出

②、格式化分区

mkfs [-opt] -fstype dev

  • -t:制定文件系统的类型 mkfs -t ext4 /dev/sda1 等价于 mkfs.ext4 /dev/sda
  • -F:强制格式化

③、挂载分区

首先创建挂载目录:mkdir mountdir

  • eg:mkdir /mnt/disk/disk1 创建/mnt/disk/disk1挂载目录

挂载文件系统:mount [-opt] dev mountdir

  • -t:指定档案系统的类型,通常不必指定。mount 会自动选择正确的类型
  • eg:mount -t ext4 /dev/sda1 /mnt/disk/disk1 将/dev/sda1以ext4类型挂载到/mnt/disk/disk1

参考链接一
参考连接二
参考链接三

三、查看硬盘或目录的容量:

**df:**查看已挂载磁盘的总容量、使用容量与 inode 等等

**du:**查看档案使用掉的容量有多少

df:

df [-opt]

  • -i: 使用 i-nodes 显示结果
  • -k: 使用 KBytes 显示结果
  • -m: 使用 MBytes 显示结果

du:

du [-opt] [dirname]

  • -a :全部的档案与目录都列出来!默认值是只列出当前目录的值!
  • -b :列出的值以 bytes 输出
  • -c :最后加总 total
  • -k :列出的值以 KB 输出
  • -m :列出的值以 MB 输出
  • -s :只列出最后加总的值

四、检查与修复文件系统

**fsck:**fsck命令用于 检查与修复 Linux 文件系统,可以同时检查一个或多个 Linux 文件系统

fsck [-opt] dev

  • -t : 给定档案系统的类型
  • -a : 如果检查有错则自动修复
  • -r : 如果检查有错则由使用者回答是否修复
  • -A : 对/etc/fstab 中所有列出来的 partition 做检查
    参考链接

五、自动挂载文件系统

当系统启动的时候,系统会自动地从**/etc/fstab**这个文件读取文件系统配置信息,并且会自动将此文件中指定的文件系统挂载到指定的目录:

ext4文件系统

  • : 要挂载的分区或存储设备(设备名称、UUID、label)
  • : 的挂载位置
  • : 要挂载设备或是分区的文件系统类型,支持许多种不同的文件系统:ext2, ext3, ext4, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap 及 auto,

​ 设置成auto类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的

  • :挂载时使用的参数,注意有些mount 参数是特定文件系统才有的
  • :dump 会检查分区内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 ,0 表示忽略, 1 则进行备份
  • : fsck 读取 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1,其它所有需要被检查的设备从2开始向后顺序排列,可以同时并列,则同时检查

参考链接

六、同步内存和磁盘的文件

sync:强制将内存中的数据回写到硬盘中

七、坏块检测与修复

坏块的检测:

badblocks:用于检查磁盘装置中损坏的区块

badblocks [-svw] [-b <区块大小>] [-o <输出文件>] [磁盘装置] [磁盘区块数] [结束区块数] [开始区块数]

  • eg:badblocks -s -v /dev/sda1 > badblocks.txt 将坏块检测结果写入badblocks.txt文件中

参数说明:

  • -b<区块大小> 指定磁盘的区块大小,单位为字节
  • -o<输出文件> 将检查的结果写入指定的输出文件
  • -s 在检查时显示进度
  • -v 执行时显示详细的信息
  • -w 在检查时,执行写入测试
  • [磁盘装置] 指定要检查的磁盘装置
  • [磁盘区块数] 指定磁盘装置的区块总数
  • [启始区块] 指定要从哪个区块开始检查

坏块的修复:

硬盘在使用时不能修复,否则可能存在写并发的问题,所以修复前需要umount对应分区(若为系统所在分区就没办法在线修复了,因为无法umount):

经过上面的扫描,我們得到了一个文件badblocks.txt:

16435904

sda1有1个坏块16435904,先用dd备份坏块:

  • dd if=/dev/sda1 bs=4096 skip=16435904 of=/tmp/15435904.dat count=1

badblocks写测试功能,对这些坏块进行重写(注意:-w写测试会覆盖数据,所以一定要备份):

  • badblocks -s -w /dev/sda1 16435904 16435904

对修复后的坏块重新检查:

  • badblocks -s -v /dev/sda1 16435904 16435904

如果前面的操作有成功的备份/tmp/15435904.dat,就把它写回(可选):

  • dd if=/tmp/15435904.dat of=/dev/sda1 seek=15435904 bs=4096 count=1

对分区重新检查:

  • badblocks -s -v /dev/sda1 > badblock.txt

若没有坏道说明修复已完成,若有坏道可以尝试重复以上方法

完成后重新mount分区:

  • mount -t ext4 /dev/sda1 ***

参考链接

八、磁盘检测与分析(smartctl)

SMART是一种磁盘自我分析检测技术,早在90年代末就基本得到了普及,每一块硬盘(包括IDE、SCSI)在运行的时候,

都会将自身的若干参数记录下来。这些参数包括型号、容量、温度、密度、扇区、寻道时间、传输、误码率等。硬盘运行

了几千小时后,很多内在的物理参数都会发生变化,某一参数超过报警阈值,则说明硬盘接近损坏,此时硬盘依然在工作,

如果用户不理睬这个报警继续使用,那么硬盘将变得非常不可靠,随时可能故障。

smartctl [option] device

  • -i 指定设备
  • -d 指定设备类型,例如:ata, scsi, marvell, sat, 3ware,N
  • -a 或A 显示所有信息
  • -l 指定日志的类型,例如:TYPE: error, selftest, selective, directory,background, scttemp[sts,hist]
  • -H 查看硬盘健康状态
  • -t short 后台检测硬盘,消耗时间短
  • -t long 后台检测硬盘,消耗时间长
  • -C -t short 前台检测硬盘,消耗时间短
  • -C -t long 前台检测硬盘,消耗时间长
  • -X 中断后台检测硬盘
  • -l selftest 显示硬盘检测日志

参考链接