系统篇: ext4 文件系统
Posted 旧年不在cd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统篇: ext4 文件系统相关的知识,希望对你有一定的参考价值。
一、ext4文件系统
ext4:第四代扩展文件系统,是目前Linux发行版比较常用的文件系统。
特点:
上图简单介绍了ext4文件系统的布局:磁盘划分为分区,每个分区又划分为N个块组,在每个块组中,又根据块组的编号有不同的内部结构,Ext4文件系统主要使用块组0中的超级块和块组描述符表,在其他一些特定的块组中有超级块和块组描述符表的冗余备份。如果块组中不含冗余备份,那么块组就以数据块位图开始。当格式化磁盘成为ext4 文件系统的时候,mkfs 将在块组描述符表后面分配预留GDT表数据块(“Reverse GDT blocks”)以用来将来扩展文件系统。紧接在预留GDT表数据块后的是数据块位图与inode表位图,这两个位图分别表示本块组内的数据块与inode表的使用,inode表数据块之后就是存储文件的数据块了。
- 大容量文件系统
-
与ext3相比,ext4文件系统可支持最高1EB的分区与最大16TB的文件
-
拓展了子目录的数量,理论上可以无限个
-
与ext3相比,引入了块组的概念,提高了存取的效率
-
预留空间、延迟获取空间,减少了文件的分散
-
更详细的inodes,提高了系统的性能
-
可以实现快速的文件系统检查
-
提供日志校验和,提高了可靠性
参考链接:https://blog.csdn.net/a912952381/article/details/81050672
二、分割与格式化硬盘
1、添加分区
fdisk dev:
#对sda分区
fdisk /dev/sda
- p、打印分区表
- n、新建一个新分区
- d、删除一个分区
- q、退出不保存
- w、把分区写进分区表,保存并退出
2、格式化分区
mkfs [-opt] -fstype dev:
- -t:制定文件系统的类型 mkfs -t ext4 /dev/sda1 等价于 mkfs.ext4 /dev/sda
- -F:强制格式化
3、挂载分区
mount [-opt] dev mountdir:
- -t:指定档案系统的类型,通常不必指定。mount 会自动选择正确的类型
#将/dev/sda1以ext4类型挂载到/mnt/disk/disk1
mount -t ext4 /dev/sda1 /mnt/disk/disk1**
参考链接:
https://www.cnblogs.com/rosepotato/p/8177988.html
https://blog.csdn.net/tsz0000/article/details/85719204
https://www.runoob.com/linux/linux-comm-mount.html
三、查看硬盘或目录的容量
df:查看已挂载磁盘的总容量、使用容量与 inode 等等
du:查看档案使用掉的容量有多少
df [-opt]:
- -i: 使用 i-nodes 显示结果
- -k: 使用 KBytes 显示结果
- -m: 使用 MBytes 显示结果
du [-opt] [dirname]:
- -a :全部的档案与目录都列出来!默认值是只列出当前目录的值!
- -b :列出的值以 bytes 输出
- -c :最后加总 total
- -k :列出的值以 KB 输出
- -m :列出的值以 MB 输出
- -s :只列出最后加总的值
四、检查与修复文件系统
fsck [-opt] dev:
- -t : 给定档案系统的类型
- -a : 如果检查有错则自动修复
- -r : 如果检查有错则由使用者回答是否修复
- -A : 对/etc/fstab 中所有列出来的 partition 做检查
参考链接:https://www.runoob.com/linux/linux-comm-fsck.html
五、自动挂载文件系统
当系统启动的时候,系统会自动地从/etc/fstab这个文件读取文件系统配置信息,并且会自动将此文件中指定的文件系统挂载到指定的目录:
-
: 要挂载的分区或存储设备(设备名称、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开始向后顺序排列,可以同时并列,则同时检查
参考链接:https://blog.csdn.net/richerg85/article/details/17917129
六、同步内存和磁盘的文件
sync:强制将内存中的数据回写到硬盘中
七、坏块检测与修复
badblocks [-svw] [-b <区块大小>] [-o <输出文件>] [磁盘装置] [磁盘区块数] [结束区块数] [开始区块数]
#将坏块检测结果写入badblocks.txt文件中
badblocks -s -v /dev/sda1 > 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 xxx
参考链接:https://www.runoob.com/linux/linux-comm-badblocks.html
八、磁盘检测与分析(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 显示硬盘检测日志
参考链接:https://blog.csdn.net/u011065164/article/details/77099225
以上是关于系统篇: ext4 文件系统的主要内容,如果未能解决你的问题,请参考以下文章