從 ext3 檔案系統中搶救存在物理錯誤的文件

從 ext3 檔案系統中搶救存在物理錯誤的文件

我有一張來自崩潰的 Linux 筆記型電腦的磁碟,上面有文件,如果可能的話,不滿意的所有者希望取回這些文件(請不要提供備份解決方案)。我以前沒有和它有任何關係。 OS X 和 Ubuntu 11.10 都能辨識該磁碟:

root@ubuntu1110:~# fdisk -l /dev/sdc

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80d549b4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *          63   953602334   476801136   83  Linux
/dev/sdc2       953602335   976768064    11582865    5  Extended
/dev/sdc5       953602398   976768064    11582833+  82  Linux swap / Solaris

這看起來與帶有交換分割區的 Linux 發行版的常規安裝一致。

不幸的是,在 Ubuntu 表示無法掛載 sdc1 分割區之後,dmesg 中出現了一些相當令人討厭的消息:

[  181.228092] sd 6:0:0:0: [sdc] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[  181.232176] sd 6:0:0:0: [sdc] Write Protect is off
[  181.232181] sd 6:0:0:0: [sdc] Mode Sense: 21 00 00 00
[  181.236359] sd 6:0:0:0: [sdc] No Caching mode page present
[  181.236364] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[  181.246696] sd 6:0:0:0: [sdc] No Caching mode page present
[  181.246707] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[  182.835915]  sdc: sdc1 sdc2 < sdc5 >
[  182.854199] sd 6:0:0:0: [sdc] No Caching mode page present
[  182.854204] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[  182.854208] sd 6:0:0:0: [sdc] Attached SCSI disk
[  218.250174] sd 6:0:0:0: [sdc] Unhandled sense code
[  218.250179] sd 6:0:0:0: [sdc]  Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[  218.250182] sd 6:0:0:0: [sdc]  Sense Key : Hardware Error [current] 
[  218.250187] Info fld=0x0
[  218.250188] sd 6:0:0:0: [sdc]  Add. Sense: No additional sense information
[  218.250193] sd 6:0:0:0: [sdc] CDB: Read(10): 28 00 00 00 01 08 00 00 08 00
[  218.250200] end_request: I/O error, dev sdc, sector 264
[  218.250206] Buffer I/O error on device sdc, logical block 33
[  255.398994] sd 6:0:0:0: [sdc] Unhandled sense code
[  255.399029] sd 6:0:0:0: [sdc]  Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[  255.399032] sd 6:0:0:0: [sdc]  Sense Key : Hardware Error [current] 
[  255.399037] Info fld=0x0
[  255.399038] sd 6:0:0:0: [sdc]  Add. Sense: No additional sense information
[  255.399053] sd 6:0:0:0: [sdc] CDB: Read(10): 28 00 00 00 01 08 00 00 08 00
[  255.399061] end_request: I/O error, dev sdc, sector 264
[  255.399066] Buffer I/O error on device sdc, logical block 33
[  281.340599] sd 6:0:0:0: [sdc] Unhandled sense code
[  281.340609] sd 6:0:0:0: [sdc]  Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[  281.340618] sd 6:0:0:0: [sdc]  Sense Key : Hardware Error [current] 
[  281.340653] Info fld=0x0
[  281.340655] sd 6:0:0:0: [sdc]  Add. Sense: No additional sense information
[  281.340659] sd 6:0:0:0: [sdc] CDB: Read(10): 28 00 00 00 00 67 00 00 08 00
[  281.340667] end_request: I/O error, dev sdc, sector 103
[  281.340739] EXT3-fs (sdc1): error: can't read group descriptor 4

我目前的理論是硬碟已經沒有多餘的區塊了,所以現在引入了一個真正的壞塊,它位於安裝分區時使用的區域中。 dd 證實了這一點:

root@ubuntu1110:~# dd if=/dev/sdc1 of=/dev/null bs=10240 conv=noerror
dd: reading `/dev/sdc1': Input/output error
2+0 records in
2+0 records out
20480 bytes (20 kB) copied, 44.7084 s, 0.5 kB/s
dd: reading `/dev/sdc1': Input/output error
9+1 records in
9+1 records out
96256 bytes (96 kB) copied, 162.933 s, 0.6 kB/s
dd: reading `/dev/sdc1': Input/output error
9+1 records in
9+1 records out
96256 bytes (96 kB) copied, 180.083 s, 0.5 kB/s

早期出現壞塊,甚至在製程後期傳輸速度也非常緩慢(未顯示)

我現在的問題是如何從這裡出發。我需要一些可以從損壞的ext2/ext3 文件系統中讀取的東西,這樣我們就可以從磁碟上複製那些仍然存在的文件,而且在過去15 年裡我沒有做過太多Linux 系統管理,所以我不知道搜尋的正確術語。

我可能可以在一夜之間複製磁碟映像,但隨後「此區塊是壞的」資訊就會丟失。

在這種情況下什麼樣的程序會有用?

答案1

磁碟復原的第一條規則:停止使用該磁碟。 如果有硬體問題(例如磁頭碰撞),任何使用都有進一步損壞的風險;如果檔案系統損壞,任何損壞mountfsck有可能使情況變得更糟。 (即使在ro模式下!請注意mount -t ext3 -o ro 將要嘗試回放日誌並寫入磁碟! )

使用dd_救援或者解救若要將盡可能多的磁碟映像複製到另一個系統,請收起磁碟,然後製作映像的副本。執行從其中一個副本進行復原的所有嘗試。

現在,我給了一些關於擴展資料復原的技巧這裡。簡而言之,

  • 您的分區佈局似乎仍然有效。如果不是,你可以使用測試磁碟或者部分嘗試恢復分區表。
  • e2fsck也許能夠將檔案系統恢復到可安裝狀態。它將放置懸掛的 inode/lost+found並報告錯誤。
  • ext4magic嘗試從記錄的元資料中復原資料。是否可以從日誌中恢復文件取決於運氣和機會,但其中可能有東西。
  • 偵探套件可以解析和輸出大多數檔案系統結構。如果您對文件系統的內部佈局有相當多的了解,並且有一個方便的十六進制編輯器(可以執行諸如“超級塊已損壞並且備份超級塊已過時,但我可以挑選足夠的數據來自己重建它」之類的事情),IMO 這是絕對是恢復最多資料最有用的工具。
  • 攝影記錄將嘗試尋找看起來像檔案的位元組序列。它只是猜測檔案的開始/結束,不會知道任何有關檔案系統結構的信息,例如目錄和檔案名,也不會找到碎片檔案。

答案2

假設您已經了解了專業資料復原服務的所有常見優點和缺點,您已經權衡了遺失資料的成本與自行修復的風險...使用者認為資料不值 000 美元,但它值得你花幾個小時的時間...

這就是我要做的事。

如果我在 dd 上始終獲得 0.5kB/s,則可能不值得您花時間嘗試此操作。

可以對磁碟運行 Testdisk。它可能工作。如果成本/風險決定了沒有其他選擇,那麼…這就是你的決定。它可能會起作用。

總的來說,嚴重的是,這些問題是一個政治雷區。用戶要么不好意思要求同事重新發送文件,要么不想面對管理層並承認自己沒有定期進行備份,現在需要花費數千美元進行資料恢復。他們希望您可以為他們修復它並讓他們所有的問題消失......並且如果驅動器在此過程中自毀。他們會把你丟到公車底下以保全自己。

相關內容