在本文中,将学习如何使用 fsck 和 xfs_repair 命令修复 Linux 磁盘错误。

什么是FSCK?

fsck(文件系统一致性检查)是用于检查Linux操作系统文件系统一致性的工具。

列出 Linux 磁盘分区和类型:

首先,需要确定 Linux 系统的磁盘分区、它们各自的文件系统以及挂载点。

下面使用lsblk命令列出磁盘明、文件系统类型、挂载点:

[root@localhost ~]# lsblk -o NAME,FSTYPE,MOUNTPOINT
NAME        FSTYPE      MOUNTPOINT
sda
sdb
sdc
sdd
sr0         iso9660
nvme0n1
├─nvme0n1p1 ext4        /boot
└─nvme0n1p2 LVM2_member ├─cl-root xfs         /└─cl-swap swap        [SWAP]

获取 Linux 磁盘的上次扫描时间

你可以使用下命令找到 Ext2,Ext3,Ext4 类型分区的最后一次扫描时间。

[root@localhost ~]# tune2fs -l /dev/nvme0n1p1 |grep checked
Last checked:             Wed Sep  1 15:42:11 2021

扫描和修复 Ext4 类型的磁盘分区

扫描 Linux 磁盘分区,可以使用 fsck(文件系统一致性检查)命令。但是在检查和修复它之前,需要卸载该分区。下面实例中,我们卸载的是/boot分区。

[root@localhost ~]# umount /dev/nvme0n1p1

卸载成功后,使用fsck.ext4检查/dev/nvme0n1p1分区

[root@localhost ~]# fsck.ext4 /dev/nvme0n1p1
e2fsck 1.44.3 (10-July-2018)
/dev/nvme0n1p1: clean, 311/65536 files, 55546/262144 blocks

检查并修复您的 Linux 磁盘后,在其各自的挂载点再次挂载分区。执行以下命令用来挂载 /etc/fstab 配置文件中列出的所有磁盘分区。

[root@localhost ~]# mount -a

在 Linux 启动时启用 Ext4 磁盘分区扫描

在系统启动时启用磁盘检查。你必须修改该磁盘分区的 Mount Count 参数。

[root@localhost ~]# tune2fs -c 1 /dev/nvme0n1p1
tune2fs 1.44.3 (10-July-2018)
Setting maximal mount count to 1

重启系统之后,fsck命令现在会在启动时检查你的 Ext4 磁盘分区。

[root@localhost ~]# reboot

重新启动后,获取磁盘分区的Last Checked值,现在它会显示 Linux 上次启动的时间。

[root@localhost ~]# tune2fs -l /dev/nvme0n1p1 |grep checked
Last checked:             Tue Sep 14 11:08:11 2021

恢复Mount Count 参数的默认值,否则它会在每次系统启动时继续执行磁盘扫描。

[root@localhost ~]# tune2fs -c -1 /dev/nvme0n1p1
tune2fs 1.44.3 (10-July-2018)
Setting maximal mount count to -1

什么是 XFS_REPAIR?

xfs_repair 实用程序具有高度可扩展性,旨在有效修复具有许多 inode 且非常大的文件系统。与其他 Linux 文件系统不同,xfs_repair 不会在启动时运行,即使 XFS 文件系统没有完全卸载。如果发生不干净的卸载,xfs_repair 只会在挂载时重放日志,确保文件系统一致。

扫描和修复 XFS 类型的磁盘分区

XFS 类型的磁盘分区有自己的一组命令,与 Ext4 有点不同。在检查其一致性之前,必须卸载 XFS 磁盘分区。

[root@localhost ~]# umount /dev/sda1

我们有 xfs_repair 命令用于检查和修复磁盘错误。使用xfs_repair 命令的-n选项来检查磁盘错误。

[root@localhost ~]# xfs_repair -n /dev/sda1
Phase 1 - find and verify superblock...
Phase 2 - using internal log- zero log...- scan filesystem freespace and inode maps...- found root inode chunk
Phase 3 - for each AG...- scan (but don't clear) agi unlinked lists...- process known inodes and perform inode discovery...- agno = 0- agno = 1- agno = 2- agno = 3- process newly discovered inodes...
Phase 4 - check for duplicate blocks...- setting up duplicate extent list...- check for inodes claiming duplicate blocks...- agno = 0- agno = 1- agno = 2- agno = 3
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...- traversing filesystem ...- traversal finished ...- moving disconnected inodes to lost+found ...
Phase 7 - verify link counts...
No modify flag set, skipping filesystem flush and exiting.

上述命令只执行磁盘检查,不尝试修复任何错误。现在,执行不带 -n 选项的 xfs_repair 命令,它将执行 Linux 磁盘分区的扫描和修复。

[root@localhost ~]# xfs_repair /dev/sda1
Phase 1 - find and verify superblock...
Phase 2 - using internal log- zero log...- scan filesystem freespace and inode maps...- found root inode chunk
Phase 3 - for each AG...- scan and clear agi unlinked lists...- process known inodes and perform inode discovery...- agno = 0- agno = 1- agno = 2- agno = 3- process newly discovered inodes...
Phase 4 - check for duplicate blocks...- setting up duplicate extent list...- check for inodes claiming duplicate blocks...- agno = 0- agno = 1- agno = 2- agno = 3
Phase 5 - rebuild AG headers and trees...- reset superblock...
Phase 6 - check inode connectivity...- resetting contents of realtime bitmap and summary inodes- traversing filesystem ...- traversal finished ...- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

下面诚信挂载分区

[root@localhost ~]# mount /dev/sda1 /data/

在 Linux 启动时启用 XFS 磁盘分区扫描

在某些情况下,如果 Linux 操作系统正在使用磁盘分区,则无法卸载磁盘分区。出于这个原因,您可能不得不将磁盘检查推迟到下一次系统启动。

要使 xfs_repair 命令能够在 Linux 启动时运行,请在 GRUB 菜单内核命令的末尾添加“fsck.mode=force fsck.repair=yes”。

查看系统日志以验证磁盘修复命令的执行情况。

[root@localhost ~]# journalctl |grep systemd-fsck

要在启动时永久启用磁盘检查,您必须在 GRUB 配置文件中添加“fsck.mode=force fsck.repair=yes”。

下面编辑grub配置文件,找到 GRUB_CMDLINE_LINUX 参数并在行尾附加fsck.mode=force fsck.repair=yes。

[root@localhost ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap fsck.mode=force fsck.repair=yes"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

根据新参数重新生成 GRUB 菜单配置。

[root@localhost ~]# grub2-mkconfig

然后重启系统:

# reboot

总结

到目前为止已经成功扫描和修复XFS、Ext4文件系统了。

如何扫描和修复 Linux 磁盘错误相关推荐

  1. 如何修复带有问号错误的 Mac 文件夹

    启动 Mac 时,您是否一直看到带有问号的文件夹?这表明计算机无法在启动盘上找到操作系统.如果 Mac 在启动时一直显示问号文件夹,这里是您可以用来修复 Mac 的所有故障排除步骤. 有时,您的 Ma ...

  2. Linux 磁盘坏块修复处理(错误:read error: Input/output error)

    当磁盘出现坏块时,你对所关联的文件进行读取时,一般会出现 read error: Input/output error 这样的错误. 反过来讲,当你看到 read error: Input/outpu ...

  3. gnome硬盘分析_三款基于GUI和终端的实用Linux磁盘扫描工具

    [51CTO.com快译]扫描计算机硬盘主要出于两个原因:一个原因是分析硬盘,找出文件系统的不一致或错误.引起这些问题的可能因素包括:持续的系统崩溃,关键的系统软件关闭不当,更主要的是破坏性程序(比如 ...

  4. linux磁盘坏块 cp报错,Linux磁盘坏道的检测及修复

    磁盘坏道,是所有人都不希望遇到的事情-- 磁盘坏道,轻则磁盘性能下降,重则系统启动失败,数据丢失.所以我们要时刻关注磁盘健康状况,及时备份重要数据. 什么是S.M.A.R.T? 全称为 Self-Mo ...

  5. linux全盘扫描,3个有用的基于GUI和终端的Linux磁盘扫描工具

    扫描计算机硬盘主要有两个原因:一个是检查文件系统不一致或错误,这可能是由于持续的系统崩溃,关键系统软件关闭不当,更显着的是由于破坏性程序(如恶意软件,病毒等). 而另一个是分析其物理条件,在这里我们可 ...

  6. php 文件写入磁盘错误,Linux磁盘读写故障的通常处理流程

    问题 使用Linux作为服务器操作系统的时候 维护少不需要重新启动的优势非常明显 但有时候会遇到莫明其妙的故障 例如数据无法写入,执行某程序报错 这个时候建议检查一下,是否是磁盘子系统的故障 例如SC ...

  7. Linux磁盘相关-分区与修复

    转自:http://balistardut.github.io/2016/01/30/Linux%E7%A3%81%E7%9B%98%E7%9B%B8%E5%85%B3-%E5%88%86%E5%8C ...

  8. php 检查磁盘,window_Win7系统中关闭检查磁盘和扫描并修复提示的方法, Win7系统关闭“检查磁盘r - phpStudy...

    Win7系统中关闭检查磁盘和扫描并修复提示的方法 Win7系统关闭"检查磁盘"和"扫描并修复"提示的技巧分享到这里,操作系统过程中会遇到"检查磁盘&q ...

  9. 扫描到电脑计算机访问错误,Win10计算机怎么扫描修复磁盘驱动器错误?

    Win10计算机怎么扫描修复磁盘驱动器错误?敝帚自珍,自己的东西都是好的.没事别自寻烦恼,系统任何作为都会引起磁盘读写.只要系统不出故障不要画蛇添足.关于扫描修复磁盘驱动器错误的问题,默认安装的华Wi ...

最新文章

  1. Linux环境下使用Mysql连接外部机器
  2. android 键盘搜索按钮事件,Android EditText 软键盘搜索事件
  3. 《LeetCode力扣练习》第31题 下一个排列 Java
  4. spring boot配置文件【application.yml】常见问题之一,未添加空格
  5. 从Java到Ruby——我的最近一次技术转型
  6. java时间日期类(Date、DateFormat、Calendar)学习
  7. JAVA 模拟瞬间高并发
  8. Android 学习笔记之Volley(七)实现Json数据加载和解析...
  9. 1486mysql,mysql_error.md
  10. 杂记 什么是ABC记谱法
  11. 【数学模拟卷总结】2023李林六套卷数学二第二套
  12. 利用googlemap查询经纬度
  13. 记录cesium移动模型绘制轨迹
  14. html电子印章,挑战电子印章系统 HTML版
  15. 计算机故障图片,电脑提示损坏的图像该如何处理?
  16. vue开发公众号 在钩子里面处理登录获取code
  17. 网络摄像头无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?
  18. 失败者的人性弱点,来看看你中了几点
  19. 高级数据结构之赫夫曼树
  20. Oracle数据库常用SQL语句查询

热门文章

  1. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...
  2. Nacos源码系列——第三章(全网最经典的Nacos集群源码主线剖析)
  3. 爬虫之 xpath的节点关系
  4. JSP第二次作业_5小题
  5. 多项式加法C语言_只愿与一人十指紧扣_新浪博客
  6. C语言,统计0~9出现次数。_只愿与一人十指紧扣_新浪博客
  7. 【直播回顾】蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程
  8. Zabbix 3.2.6 通过SNMP和iDRAC监控DELL服务器
  9. 阿里云云服务器Centos7部署JDK8+Nginx+Tomcat8+Mysql5.7
  10. Oracle的SQL语句