【linux】循序渐进学运维-基础篇-修复文件系统实战


文章目录


大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-基础篇的第53篇文章。


前言:

今天我们来聊聊,文件系统的修复:
文件系统损坏,多是由于突然断电或者设备读写数据异常等原因导致的文件系统损坏。

也遇到过文件系统变为只读,一般是因为多机写入时同步机制出现问题,或者单机写入时断电。

常见使用的修复命令为: fsck

实验环境

本文采用的系统为:

[root@xinsz08-15 ~]# cat /etc/redhat-release CentOS release 6.9 (Final)[root@xinsz08-15 ~]# uname -r2.6.32-696.el6.x86_64

增加了一块硬盘方便做实验用

【linux】循序渐进学运维-基础篇-修复文件系统实战

解决方案

1) 系统出现只读的情况的解决方案

这种情况我们可以修改/etc/fstab文件,将受损的文件的开机自动挂载先注释掉,然后使用rw的方式进行挂载。

mount -o remount rw /dev/sdb1 /mnt

2) 系统文件受损,可以使用fsck命令

实验步骤:

a. 创建一个1G的分区
b. 对分区进行格式化
c. 破坏文件系统并重新挂载
d. 修复超级快
e.查看修复成功的效果

a. 创建一个1G的分区
[root@xinsz08-15 ~]# fdisk /dev/sdb

【linux】循序渐进学运维-基础篇-修复文件系统实战
上面截图是分区了一个1G大小的sdb1分区

b. 对分区进行格式化
[root@xinsz08-15 ~]# mkfs.ext4 /dev/sdb1[root@xinsz08-15 ~]# ll /dev/sdb*brw-rw---- 1 root disk 8, 16 7月   1 22:59 /dev/sdb
brw-rw---- 1 root disk 8, 17 7月   1 23:01 /dev/sdb1[root@xinsz08-15 ~]# mkdir /sdb1[root@xinsz08-15 ~]# mount /dev/sdb1 /sdb1   ##挂载分区[root@xinsz08-15 ~]# df -hFilesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  5.5G   13G  31% /
tmpfs           491M   72K  491M   1% /dev/shm
/dev/sda1       190M   35M  146M  20% /boot
/dev/sdb1       988M  1.3M  935M   1% /sdb1

查看是否可以写入内容

[root@xinsz08-15 ~]# cp /etc/passwd /sdb1/[root@xinsz08-15 ~]# cd /sdb1/[root@xinsz08-15 sdb1]# lslost+found  passwd[root@xinsz08-15 sdb1]#

c. 破坏文件系统并重新挂载
[root@xinsz08-15 ~]# dd if=/dev/zero of=/dev/sdb1 bs=512 count=4记录了4+0 的读入
记录了4+0 的写出
2048字节(2.0 kB)已复制,0.00266775 秒,768 kB/秒[root@xinsz08-15 ~]# df -hFilesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  5.5G   13G  31% /
tmpfs           491M   72K  491M   1% /dev/shm
/dev/sda1       190M   35M  146M  20% /boot
/dev/sdb1        64Z   64Z  986M 100% /sdb1

可以看到 /dev/sdb1的大小变成了64Z ,我们看看还能否写入

[root@xinsz08-15 sdb1]# touch aaatouch: 无法创建"aaa": 输入/输出错误[root@xinsz08-15 sdb1]# pwd/sdb1

可以看到已经无法写入了,现在我们进入下一步开始修复,使用fsck命令

d. 修复超级快
[root@xinsz08-15 ~]# umount /dev/sdb1   #切记一定要先卸载在修复[root@xinsz08-15 ~]# fsck -y -t ext4 /dev/sdb1fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)fsck.ext4: 超级块无效, trying backup blocks...
超级块 needs_recovery flag is clear, but 日志 has data.
Recovery flag not set in backup 超级块, so running 日志 anyway.
/dev/sdb1: 正在修复日志
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
Free 块s count wrong for 簇 #1 (32702, counted=32701).处理? 是

Free 块s count wrong (252369, counted=252368).
处理? 是

Free inodes count wrong for 簇 #0 (7365, counted=7364).处理? 是

Free inodes count wrong (66373, counted=66372).
处理? 是


/dev/sdb1: ***** 文件系统已修改 *****
/dev/sdb1: 12/66384 files (0.0% non-contiguous), 12696/265064 blocks[root@xinsz08-15 ~]#

可以看到文件系统已修复的提示,我们重新挂载来试一下

e.查看修复成功的效果
[root@xinsz08-15 ~]# mount /dev/sdb1 /sdb1    ##挂载[root@xinsz08-15 ~]# df -hFilesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  5.5G   13G  31% /
tmpfs           491M   72K  491M   1% /dev/shm
/dev/sda1       190M   35M  146M  20% /boot
/dev/sdb1       988M  1.3M  935M   1% /sdb1[root@xinsz08-15 ~]# cd /sdb1[root@xinsz08-15 sdb1]# touch aaa   #可以看到已经能够重新创建文件[root@xinsz08-15 sdb1]# lsaaa  lost+found  passwd[root@xinsz08-15 sdb1]#

fsck 命令详解

1)fsck详解:

作用: 用来检查和维护不一致的文件系统,若系统断电或者磁盘发生异常,可以使用fsck 来检查和修复

常见的参数

参数 作用
a 自动修复文件系统,不询问任何问题
A 依照/etc/fstab配置文件内容,检查文件内所列的全部文件系统
P 与-A搭配使用,会检查所有的文件系统
-r 互动模式,让用户确认
-t 指定要检查的文件系统类型
-V 显示指令执行的过程
-y 关闭互动模式
-f 强制检查
-C 显示完整的检查进度
-p 自动修复文件系统的错误
fsck使用举例
1)检查磁盘/dev/sdb1的文件系统
[root@xinsz08-15 sdb1]# fsck /dev/sdb1

2) 强制检查/dev/sdb1的文件系统
[root@xinsz08-15 sdb1]# fsck -f /dev/sdb1

3) 检查/dev/sdb1的ext4文件系统是否正常,如果有异常自动修复
[root@xinsz08-15 sdb1]# fsck -t ext4 -a /dev/sdb1

总结

特别说明的是尽量不要使用 -f -y 这样的强制自动修复功能,或者fsck 提示大量的inode错误,就不要强制修复了,需要以只读的方式仔细查看修复过程。

我是高胜寒,一个在教培行业不忘初心的人。欢迎点赞收藏,我们下篇文章见!

上一篇:IO测试工具之fio详解


下一篇:并发编程-park/unpark原理