【linux】循序漸進學運維-基礎篇-修復文件系統實戰


大家好,我是高勝寒,本文是Linux運維-循序漸進學運維-基礎篇的第53篇文章。

前言:

今天我們來聊聊,文件系統的修復:
文件系統損壞,多是由於突然斷電或者設備讀寫數據異常等原因導致的文件系統損壞。

也遇到過文件系統變爲只讀,一般是因爲多機寫入時同步機制出現問題,或者單機寫入時斷電。

常見使用的修復命令爲: fsck

實驗環境

本文采用的系統爲:

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

增加了一塊硬盤方便做實驗用

在這裏插入圖片描述

解決方案

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

在這裏插入圖片描述
上面截圖是分區了一個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 -h
Filesystem      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]# ls
lost+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 -h
Filesystem      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 aaa
touch: 無法創建"aaa": 輸入/輸出錯誤
[root@xinsz08-15 sdb1]# pwd
/sdb1

可以看到已經無法寫入了,現在我們進入下一步開始修復,使用fsck命令

d. 修復超級快
[root@xinsz08-15 ~]# umount /dev/sdb1   #切記一定要先卸載在修復
[root@xinsz08-15 ~]# fsck -y -t ext4 /dev/sdb1
fsck 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 -h
Filesystem      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]# ls
aaa  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錯誤,就不要強制修復了,需要以只讀的方式仔細查看修復過程。

我是高勝寒,一個在教培行業不忘初心的人。歡迎點贊收藏,我們下篇文章見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章