使用 GNU ddrescue 複製故障磁碟,我錯過了什麼嗎?

使用 GNU ddrescue 複製故障磁碟,我錯過了什麼嗎?

讓我解釋一下我的想法,以便大家可以告訴我我是否做錯了什麼。

我有兩個外部硬碟驅動器,其中一個出現故障(Windows 告訴我將其格式化以再次使用),第二個是空的並且大得多,所以我用它來複製故障的硬碟。起初,我考慮使用Testdisk它,因為我有一些經驗。然而,在嘗試任何修復工具之前,我想擁有故障磁碟的完整副本。那就是我發現的地方GNU ddrescue。所以我的計劃是製作一個副本GNU ddrescue,然後Testdisk在副本上使用。

所以我用GNU ddrescue - GUI version.恢復完成後彈出3個選項供我選擇:1.重置2.掛載驅動器3.退出;我是一個菜鳥GNU ddrescue,我認為最好退出程式而不重置或安裝任何東西(我不知道安裝對驅動器的實際作用,抱歉)。

接下來,我計劃使用Testdisk副本來恢復遺失的分區。

但在繼續之前,我想知道我是否真的正確地同時使用這兩個程序,或者我在這個過程中是否犯了任何錯誤。我是否認為新驅動器現在與舊驅動器完全重複?

編輯:

/dev/sdd/ ...舊的故障硬碟

/dev/sde/ ...新硬碟

root@PartedMagic:~# sudo gdisk -l /dev/sdd

GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************

Disk /dev/sdd: 976773168 sectors, 465.8 GiB
Model: Portable        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): A6D24F7F-47D5-4FAA-8595-5E56582C1DB1
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 8-sector boundaries
Total free space is 5099 sectors (2.5 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              63       976768064   465.8 GiB   0700  Microsoft basic data

root@PartedMagic:~# sudo gdisk -l /dev/sde

GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************


Warning! Secondary partition table overlaps the last partition by
244209734 blocks!
You will need to delete this partition or resize it in another utility.
Disk /dev/sde: 732558336 sectors, 2.7 TiB
Model: Elements 10B8   
Sector size (logical/physical): 4096/4096 bytes
Disk identifier (GUID): E797BEEA-722B-4903-8086-B2A84B5E741C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 5
First usable sector is 6, last usable sector is 732558330
Partitions will be aligned on 8-sector boundaries
Total free space is 57 sectors (228.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              63       976768064   3.6 TiB     0700  Microsoft basic data

輸出sudo blkid

root@PartedMagic:~# sudo blkid
/dev/sdd1: LABEL="Expansion Drive" UUID="3C148148148105DC" TYPE="ntfs" PARTUUID="3df9d654-01"

sudo blkid沒有提到/dev/sdeX/

澄清一下:/dev/sdd/ 在失敗之前只有一個分區

答案1

這不會那麼容易實現。

新磁碟上的邏輯磁區大小為4096,而舊磁碟上的邏輯磁區大小為512。分區表中的數字保持不變,但由於新扇區增大了 8 倍,因此克隆中的整個分區表沒有任何意義。

在某些情況下,可以翻譯這些數字(比較我的這個答案)但這裡(舊)分割區從 63*512 位元組的偏移量開始,該偏移量不能被 4096 整除。裡面一個更大的扇區(雖然它應該從扇區的開頭開始),所以沒有分區表可以立即完成這項工作。

現在做什麼?下面是一些想法。在繼續之前,請先中斷舊磁碟的連線(以防萬一)。


無論(現在無效)分割表如何,您仍然可以嘗試掛載檔案系統:

mount -o ro,offset=$((63*512)) /dev/sde /some/mountpoint

如果檔案系統是健康的,這應該可以工作。在您的情況下,該命令可能會因檔案系統損壞而失敗。但也許它會起作用,並且您將設法取出所有重要數據。


您可以將整個磁碟對應到報告磁區大小的循環設備512

losetup -f --show /dev/sde       # 512 is the default value

這應該列印一個像這樣的節點/dev/loop7。在此設備的上下文中,分區表是有效的。需要分區表的工具現在應該可以與設備一起使用(儘管有些工具可能需要/dev/loop7p1, 才能與分區一起使用;kpartx可能會有所幫助,但首先考慮下一個想法)。

注意:您可以使用 銷毀節點losetup -d /dev/loop7


您可以將真實分區對應到循環設備:

losetup -f --show --offset $((63*512)) --sizelimit $(( (976768064+1-63)*512 )) /dev/sde

同樣,這應該會列印一個類似 的節點/dev/loop8。 (可能已損壞的)檔案系統從該設備的最開始處啟動,因此分析檔案系統的復原工具預計將在沒有任何分割表的情況下找到它(或至少其中的檔案)。


您可以將分區複製到另一個偏移量,這樣分區表被修復。這有點棘手;所有的數字都必須計算正確。如果前面的任何一種方法對您來說足夠了,請不要打擾。

請注意,舊磁碟為 465.8 GiB,新磁碟為 2.7 TiB;所以你有足夠的空間。讓我們將檔案系統複製到磁碟的末尾。

舊分割區佔用從磁區號63到(含)976768064的512位元組磁區,總共976768002個磁區。這意味著您至少需要 122096001 個更大的磁區(4096 位元組)。

在 4096 位元組磁區中,開始和結束轉換為 7(部分採用)和 122096008(也部分採用)。

您的磁碟擁有 732558336 個磁區,您需要退後 122096001 個磁區(更多,如果您打算在其上使用 GPT)。起始扇區 610459648 看起來不錯。它會在末尾為輔助 GPT 留下一些空間(它與 32-MiB 邊界對齊,但這並不重要)。現在,新分割區的最後一個磁區應該至少為732555648(732555655,如果您希望磁區的大小可以被8 整除,這可能會讓一些工具滿意;大於足夠大的分割區不應該影響檔案系統,它知道它的大小)自己的尺寸)。

編輯分區表,銷毀舊的(無效)條目並按計劃建立一個新條目:

  • 第一部門 610459648
  • 最後一個部門 732555655
  • 適用於 NTFS 的程式碼或型別

這麼大的磁碟有 512 位元組磁區,需要 GPT,而不是 MBR 分割區表。對於 4096 位元組磁區,GPT 或 MBR 應該可以工作。

然後(在 後partprobe,如果分區程式沒有隱含地呼叫它)您應該有權訪問新分區。

將資料從/dev/loop8(上面建立的)複製到新分區:

dd if=/dev/loop8 of=/dev/sdeN bs=32M
# or better use ddrescue again

該命令複製大約 465.8 GiB 後,檔案系統在分割區內正確對齊(它從開頭開始,而不是在磁區的中間)。以前的想法有些「hacky」;這個為您提供了相當標準的設定。


請注意,如果需要,您可以為復原的資料建立另一個分割區。您最初編寫的檔案系統ddrescue以扇區 122096008 結束。

相關內容