如何掃描和修復 Linux 磁碟錯誤

roc_guo發表於2021-10-26
什麼是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 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤

獲取 Linux 磁碟的上次掃描時間

你可以使用下命令找到 Ext2,Ext3,Ext4 型別分割槽的最後一次掃描時間。

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

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤

掃描和修復 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 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤
檢查並修復您的 Linux 磁碟後,在其各自的掛載點再次掛載分割槽。執行以下命令用來掛載 /etc/fstab 配置檔案中列出的所有磁碟分割槽。

[root@localhost ~]# mount -a

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤

在 Linux 啟動時啟用 Ext4 磁碟分割槽掃描

在系統啟動時啟用磁碟檢查。你必須修改該磁碟分割槽的  Mount Count 引數。

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

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤
重啟系統之後,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

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤
恢復 Mount Count 引數的預設值,否則它會在每次系統啟動時繼續執行磁碟掃描。

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

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤

什麼是 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.

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤
上述命令只執行磁碟檢查,不嘗試修復任何錯誤。現在,執行不帶 -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

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤
下面誠信掛載分割槽

[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

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤
根據新引數重新生成 GRUB 選單配置。

[root@localhost ~]# grub2-mkconfig

如何掃描和修復 Linux 磁碟錯誤如何掃描和修復 Linux 磁碟錯誤
然後重啟系統:

# reboot
總結

到目前為止已經成功掃描和修復XFS、Ext4檔案系統了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2839229/,如需轉載,請註明出處,否則將追究法律責任。

相關文章