close

現場(環境):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

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 IT001 的頭像
    IT001

    IT001

    IT001 發表在 痞客邦 留言(0) 人氣()