列出 Linux 磁盘分区和类型
首先,我们需要确定 Linux 服务器中的磁盘分区、它们各自的文件系统以及安装它们的路径。
通过使用控制台或者 ssh 客户端,以 root 用户身份连接到 Linux 服务器。
我们可以在 Linux bash 提示符下使用以下开关执行 lsblk 命令以列出所需的信息。
# lsblk -o NAME,FSTYPE,MOUNTPOINT NAME FSTYPE MOUNTPOINT sda ├─sda1 ext4 /boot └─sda2 LVM2_member ├─cl-root xfs / ├─cl-swap swap [SWAP] └─cl-home xfs /home sr0
在 Linux 启动时启用 XFS 磁盘分区扫描
在某些情况下,如果 Linux 操作系统正在使用磁盘分区,则无法卸载磁盘分区。
出于这个原因,我们可能不得不将磁盘检查推迟到下一次系统启动。
要使 xfs_repair 命令能够在 Linux 启动时运行,请在 GRUB 菜单内核命令的末尾添加“fsck.mode=force fsck.repair=yes”。
我们可以参考我们之前关于编辑 GRUB 菜单的帖子。
Linux 启动后,查看系统日志以验证磁盘修复命令的执行情况。
# journalctl | grep systemd-fsck
要在启动时永久启用磁盘检查,我们必须在 GRUB 配置文件中添加“fsck.mode=force fsck.repair=yes”。
在 vim 文本编辑器中编辑 grub 配置文件。
# vi /etc/default/grub
找到 GRUB_CMDLINE_LINUX 参数并在行尾添加“fsck.mode=force fsck.repair=yes”。
GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet fsck.mode=force fsck.repair=yes"
根据新参数重新生成 GRUB 菜单配置。
# grub2-mkconfig
重新启动 Linux 操作系统以验证新设置。
# reboot
在本文中,我们将学习如何使用 fsck 和 xfs_repair 命令修复 Linux 磁盘错误。
获取 Linux 磁盘的上次扫描时间
我们可以在以下命令的帮助下找到 Linux Ext4 类型分区的最后一次扫描时间。
# tune2fs -l /dev/sda1 | grep checked Last checked: Sun Sep 29 20:03:14 2019
什么是 FSCK?
系统实用程序 fsck(文件系统一致性检查)是用于检查 Unix 和类 Unix 操作系统(例如 Linux、macOS 和 FreeBSD)中文件系统的一致性的工具。
通常,fsck 或者在引导时自动运行,或者由系统管理员手动运行。
该命令直接作用于存储在磁盘上的数据结构,这些数据结构是内部的并且特定于正在使用的特定文件系统,因此通常需要为文件系统定制的 fsck 命令。
各种 fsck 实现的确切行为各不相同,但它们通常遵循内部操作的通用顺序,并为用户提供通用的命令行界面。
在 Linux 启动时启用对 Ext4 磁盘分区的扫描
在 Linux 启动时启用磁盘检查。
我们必须修改该磁盘分区的装载计数参数。
# tune2fs -c 1 /dev/sda1 tune2fs 1.45.6 (20-Mar-2020) Setting maximal mount count to 1
现在重启你的 Linux 服务器。
# reboot
Linux 命令 fsck 现在会在启动时检查 Ext4 磁盘分区。
重新启动后,获取磁盘分区的 Last Checked 值,现在它会显示上次 Linux 启动的时间。
# tune2fs -l /dev/sda1 | grep checked Last checked: Sun Aug 1 22:50:46 2021
设置回 Mount Count 参数,否则它会在每次 Linux 启动时继续执行磁盘扫描。
# tune2fs -c -1 /dev/sda1 tune2fs 1.45.6 (20-Mar-2020) Setting maximal mount count to -1
扫描和修复 XFS 类型的磁盘分区
XFS 类型的磁盘分区有自己的一组命令,与 Ext4 有点不同。
在检查其一致性之前,我们必须卸载 XFS 磁盘分区。
# umount /dev/mapper/cl-home
我们有 xfs_repair 命令用于检查和修复磁盘错误。
在某些 Linux 发行版中,我们可能还会找到 xfs_check 命令。
此命令仅执行 XFS 类型磁盘分区的扫描,不执行任何修复。
但是 xfs_check 命令并非在所有 Linux 发行版中都可用。
或者,我们可以使用带有 -n 开关的 xfs_repair 命令来获得与 xfs_check 相同的功能。
# xfs_repair -n /dev/mapper/cl-home 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 磁盘分区的扫描和修复。
# xfs_repair /dev/mapper/cl-home 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
在 /etc/fstab 文件中列出的原始挂载点重新挂载 XFS 分区。
# mount -a
扫描和修复 Ext4 类型的磁盘分区
要扫描 Linux 磁盘分区,我们可以使用 fsck(文件系统一致性检查)命令。
但是在检查和修复它之前,我们需要卸载该分区。
# umount /dev/sda1
卸载成功后,在 Linux bash 提示符下执行 fsck 命令。
# fsck.ext4 /dev/sda1 e2fsck 1.45.6 (20-Mar-2020) /dev/sda1: clean, 320/65536 files, 61787/262144 blocks
检查并修复 Linux 磁盘后,在其各自的挂载点再次挂载分区。
为此,执行以下 Linux 命令以挂载 /etc/fstab 文件中列出的所有磁盘分区。
# mount -a
什么是 XFS_REPAIR?
XFS 是由 Silicon Graphics, Inc (SGI) 于 1993 年创建的高性能 64 位日志文件系统。
它是 SGI 的 IRIX 操作系统从 5.3 版开始的默认文件系统。
XFS 于 2001 年移植到 Linux 内核;截至 2014 年 6 月,大多数 Linux 发行版都支持 XFS,其中一些将其用作默认文件系统。
xfs_repair 实用程序具有高度可扩展性,旨在有效修复具有许多 inode 的非常大的文件系统。
与其他 Linux 文件系统不同,xfs_repair 不会在启动时运行,即使 XFS 文件系统没有完全卸载。
如果发生不干净的卸载,xfs_repair 只会在挂载时重放日志,确保文件系统一致。