你们好,我是高胜寒,本文是Linux运维-按部就班学运维-基础篇的第53篇文章。node
今天咱们来聊聊,文件系统的修复:
文件系统损坏,可能是因为忽然断电或者设备读写数据异常等缘由致使的文件系统损坏。linux
也遇到过文件系统变为只读,通常是由于多机写入时同步机制出现问题,或者单机写入时断电。运维
常见使用的修复命令为: fsckide
本文采用的系统为:日志
[root@xinsz08-15 ~]# cat /etc/redhat-release CentOS release 6.9 (Final)[root@xinsz08-15 ~]# uname -r2.6.32-696.el6.x86_64
增长了一块硬盘方便作实验用blog
这种状况咱们能够修改/etc/fstab文件,将受损的文件的开机自动挂载先注释掉,而后使用rw的方式进行挂载。图片
mount -o remount rw /dev/sdb1 /mntrem
实验步骤:同步
a. 建立一个1G的分区
b. 对分区进行格式化
c. 破坏文件系统并从新挂载
d. 修复超级快
e.查看修复成功的效果it
[root@xinsz08-15 ~]# fdisk /dev/sdb
上面截图是分区了一个1G大小的sdb1分区
[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]#
[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命令
[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 ~]#
能够看到文件系统已修复的提示,咱们从新挂载来试一下
[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 来检查和修复
常见的参数
参数 | 做用 |
---|---|
a | 自动修复文件系统,不询问任何问题 |
A | 依照/etc/fstab配置文件内容,检查文件内所列的所有文件系统 |
P | 与-A搭配使用,会检查全部的文件系统 |
-r | 互动模式,让用户确认 |
-t | 指定要检查的文件系统类型 |
-V | 显示指令执行的过程 |
-y | 关闭互动模式 |
-f | 强制检查 |
-C | 显示完整的检查进度 |
-p | 自动修复文件系统的错误 |
[root@xinsz08-15 sdb1]# fsck /dev/sdb1
[root@xinsz08-15 sdb1]# fsck -f /dev/sdb1
[root@xinsz08-15 sdb1]# fsck -t ext4 -a /dev/sdb1
特别说明的是尽可能不要使用 -f -y 这样的强制自动修复功能,或者fsck 提示大量的inode错误,就不要强制修复了,须要以只读的方式仔细查看修复过程。
我是高胜寒,一个在教培行业不忘初心的人。欢迎点赞收藏,咱们下篇文章见!