3TB HDD是混沌的奴隸 ~ 修复死去的3TB HDD的壞扇區並使其復活 ~

7 min

language: ja bn en es hi pt zh-cn zh-tw

大家好,我是無能。
雖然我在上一篇文章中沉浸在絕望之中,但我不是一個輕易放棄的人。
夏天還沒結束。直到作業完成為止______

事情的經過

昨天,SSH 連線突然中斷,GNU/Linux 似乎卡住了,重啟後我檢查了 syslog。

Aug 27 04:03:55 localhost kernel: [2768521.366336] EXT4-fs (sdc1): error count since last fsck: 52  
Aug 27 21:19:27 haturatu kernel: [   28.915465] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended  
Aug 27 21:24:30 haturatu kernel: [  332.803482] EXT4-fs (sdc1): error count since last fsck: 53  
Aug 27 22:28:45 haturatu kernel: [    5.694598] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended  
Aug 27 22:33:55 haturatu kernel: [  316.412146] EXT4-fs (sdc1): error count since last fsck: 53  
Aug 28 08:19:17 haturatu kernel: [    5.710007] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended  
Aug 28 08:24:39 haturatu kernel: [  316.427213] EXT4-fs (sdc1): error count since last fsck: 53  

嗯?

HDD,一去不復返

嘗試 fsck

總之,用 USB-HDD 連接。

$ sudo fsck -f -y /dev/sdb  

lsblk確認磁碟後,先執行。

727810) +(77856769--77859749) +(77987841--77990269) +(78118913--78121629) +(78249985--78252434) +(78381057--78383008) +(78512129--78515588) +(78643201--78644782) +(78774273--78776000) +(78905345--78907598) +(79036417--79038955) +(79167489--79169769) +(79298561--79300360) +(79429633--79431425) +(79560705--79562857) +(79691777--79695179) +(79822849--79857556) +(79953921--79960927) +(80084993--80113787) +140247041  
Fix? yes  
  
Padding at end of inode bitmap is not set. Fix? yes  
  
Error reading block 32768 (輸入/輸出錯誤).  Ignore error? yes  
  
Force rewrite? yes  
  
Error writing block 32768 (輸入/輸出錯誤).  Ignore error? yes  
  
Error reading block 98304 (輸入/輸出錯誤).  Ignore error? yes  

果然是這樣啊!!!!!
是的,這是我過去見過的那種絕望的 I/O 錯誤。

用 dmesg 查看

雖然會省略一些,但會用 grep 確認相關磁碟的項目。

$ sudo dmesg | grep ' I/O error,' | grep "sdb"  
[227123.296980] I/O error, dev sdb, sector 62916608 op 0x0:(READ) flags 0x83700 phys_seg 1 prio class 0  
[227175.622027] I/O error, dev sdb, sector 78880 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0  
[227175.622087] I/O error, dev sdb, sector 62916624 op 0x0:(READ) flags 0x83700 phys_seg 14 prio class 0  
[227459.286465] I/O error, dev sdb, sector 373295104 op 0x0:(READ) flags 0x80700 phys_seg 5 prio class 0  
[227490.240900] I/O error, dev sdb, sector 377489408 op 0x0:(READ) flags 0x80700 phys_seg 4 prio class 0  

啊啊啊
我的心快碎了,帕特拉修。

Google 搜尋

借鑒過去工程師們的智慧。

(Linux 硬碟出現壞扇區,嘗試修復)[https://web.archive.org/web/20240828125146/https://neocat.hatenablog.com/entry/2019/10/21/061645]

大概讀了一下,理解了其機制。

這種時候,如果對這個扇區進行寫入操作,HDD 的韌體應該會將其替換為備用扇區。

據說如此。總之,我一邊焦急,一邊不斷輸入 dmesg 輸出中顯示的扇區。

$ cat secter.sh   
#!/bin/bash  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((62916608 / 8)) count=1  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((62916624 / 8)) count=1  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((373295104 / 8)) count=1  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((406849536 / 8)) count=1  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((411043840 / 8)) count=1  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((415238144 / 8)) count=1  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((419432448 / 8)) count=1  
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((423626752 / 8)) count=1  

這裡也省略了,但由於我每次嘗試 fsck 都會因為 I/O 錯誤而拔插,所以磁碟名稱從 sdb 變成了 sdc 再變成了 sdd,請見諒。
總之,我對 dmesg 輸出中顯示的扇區一次性執行了腳本化的指令。
雖然可以做得更簡潔,但在這種時候根本顧不上效率。如果因為粗糙的戰鬥方式而搞砸,導致整個磁碟資料毀滅,那我寧願喝泥水也要繼續。

然後,進行 fsck...

在同一個扇區上執行了幾次之後,
Bad sectors playing hide and seek on my hard drive
這裡提到 smartctl 也能檢查壞扇區,所以我一開始就嘗試了,但沒有成功。
然而,在進行了幾次上述那種粗糙的戰鬥後,它開始成功了,所以我執行了 sudo smartctl -a /dev/sda, sudo smartctl -t short /dev/sda 並成功了,然後又重複了粗糙的過程...

$ sudo fsck -f -y /dev/sdd1  
fsck from util-linux 2.40.2  
e2fsck 1.47.1 (20-May-2024)  
Pass 1: Checking inodes, blocks, and sizes  
Pass 2: Checking directory structure  
Pass 3: Checking directory connectivity  
Pass 4: Checking reference counts  
Pass 5: Checking group summary information  
Block bitmap differences:  +(7864320--7872543) +(7929856--7946227) +(7946240--7962599) +(46661632--46669855) +(50855936--50864159) +(51380224--51388447) +(51388796--51404769) +(51404800--51412989) +(51904512--51928992) +(51929026--51929058) +(51929088--51937274) +(52428800--52453339) +(52453376--52461542) +(52953088--52962248) +(52964143--52977649) +(52977664--52985847)  

Fix? yes

嗚啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!

復活!!!!

Image
雖然還沒完全確認哪些檔案損壞了,但 1TB 的大部分資料都回來了。

這一天,我深刻體會到前人的智慧是多麼偉大。
早上發現硬碟壞了,沒想到當天就能恢復,真是出乎意料的一天。
那麼。
下次再見了。

Related Posts