現場(環境):CentOS 7 套件:隨身硬碟一顆、e2fsck指令
原因:
在Linux 主機上原本有一顆外接硬碟掛載在上面,但某一天半夜無預警的停電後,
那顆外接硬碟就完全無法讀取了。
處理方式:
上網查詢了一下資訊,隨身硬碟無法讀取大多時候是磁區損毀造成,
這時候我們就必須將損毀的磁區進行修復。
Step 1. 掛載看看,並確認錯誤訊息
我們先試著mount上故障的外接式硬碟看看
(因為已經有先將掛載路徑寫在/etc/fstab中,所以可以這樣省略)
!###/etc/fstab設定檔#########
/dev/sdd1 /home/bak/ auto defaults 0 0
!###################
把fstab內所有路徑全部重新掛載一次
#mount -a
出現錯誤訊息
mount: wrong fs type, bad option, bad superblock on /dev/sdd1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
用指令確認一下更詳細的錯誤訊息
# dmesg | tail
#!####################
EXT4-fs (sdd1): error loading journal
usb 2-1.2: USB disconnect, device number 4
sd 13:0:0:0: [sdd] Synchronizing SCSI cache
sd 13:0:0:0: [sdd] Synchronize Cache(10) failed:
Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
#!################
Step 2. e2fsck 修復測試
接著看到有人說要要用e2fsck做修復磁區的動作
直接透過指令開始修復磁區時發現,
他要求我更新我的e2fsck !!
#e2fsck -f -c -v /dev/sdd1
#!###########
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdd1 has unsupported feature(s): metadata_csum
e2fsck: Get a newer version of e2fsck!
補充一下e2fsck的套件
#!############
#yum install e2fsprogs* -y
Step 3. 修復之前還要做件事
在網站有查到,磁碟損毀的狀況下,
可能連原本的格式都無法判別,
所以我們要先將磁碟重新設定為ext4格式。
(格式部份要依你當初的硬碟格式設定,我的是ext4)
# mkfs.ext4 -S /dev/sdd1
#!################
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
….
Skipping journal creation in super-only mode
Writing superblocks and filesystem accounting information: done
#!##############
Step 4. 再次修復我們的磁區
這次套件跟格式都準備好的狀況下,我們來修復磁區!!
# e2fsck -f -c -v /dev/sdd1
#!#############
e2fsck 1.42.9 (28-Dec-2013)
詢問你的superblock中是否有未知不相容的flag存在?
Journal superblock has an unknown incompatible feature flag set.
Abort<y>? no (是否退出)
詢問你的superblock是否正確?
Journal superblock is corrupt.
Fix<y>? yes (確定)
是否有多個block group 的descriptor checksum 無效?
One or more block group descriptor checksums are invalid.
Fix<y>? yes (確定)
回答到這邊就會開始修復,這次修復的硬碟大小為2TB。
但光這樣修復就花了6個小時左右時間。
備份你的inode資訊
Backing up journal inode block information.
檢查你故障的bad block數量
Checking for bad blocks (read-only test): 0.00% done, 0:00 elapsed. (0/0/0 errdone
/dev/sdd1: Updating bad block inode.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
之後會詢問你一些問題,都回答Yes就好。
接著就會開始幫你修復錯誤的block group。
錯誤的block group有多少,你就要Yes幾次。
Free blocks count wrong for group #0 (23285, counted=23283).
Fix<y>? yes
….
Free inodes count wrong for group #7168 (8192, counted=8191).
Fix<y>? yes
Directories count wrong for group #7168 (0, counted=1).
Fix<y>? yes
修復完block之後,會詢問你是否要一同修正inode
Free inodes count wrong (122101759, counted=122101543).
Fix<y>? yes
修復完之後會跳出訊息,告訴你這顆硬碟的修復狀況。
最後我們再試著掛載外接硬碟看看
#mount -a
#!#############
/dev/sdd1 ext4 1.8T 84G 1.7T 5% /home/bak/
#!#############
看到又可以重新掛載上去,
而且資料都還在,這樣就算完成了。
(本篇完)
superblock 小知識:
Superblock 是記錄整個 filesystem 相關資訊的地方,
沒有 Superblock ,就沒有這個 filesystem 。
一個檔案系統中,我們所有的基本資料都會寫在這裡,
主要的superblock會寫在第一個block group當中,
後續的block group中如有superblock的存在,
用途主要是為第一個superblock做備援。
雖說有備援,但若是主要的superblock損毀,
也是需要花很長時間來修復。
詳情請參閱鳥哥網站。
http://linux.vbird.org/linux_basic/0230filesystem.php#super_block
參考網站:
https://forums.linuxmint.com/viewtopic.php?t=242823
留言列表