
背景
我有一個非常舊的 PATA HDD (1998 Fujitsu 3.2GB),插入一台非常舊的電腦(Pentium 2 / Asus P2L97 主機板),帶有可啟動分割區(Windows 95 和 Fat32 檔案系統)。正如預期的那樣,這個硬碟死了很多聰明的警報。
我的目標不是恢復數據,而是將舊硬碟的副本複製到新硬碟(2003 PATA WD 80GB)以再次啟動。
我保存了整個舊硬碟ddrescue
(從系統救援)將故障硬碟插入較新的電腦後,儲存至影像檔案(USB 磁碟機上的 rescue.img),如中所述地址救援手冊。不幸的是,當我嘗試在較新的 HDD 上恢復映像時,MBR 已損壞,我無法啟動。
我詳細做了什麼:
[root@sysrescue]# ddrescue /dev/sda /mnt/usb/SAVEDD/rescue.img /mnt/usb/SAVEDD/rescue.mapfile
GNU ddrescue 1.26
Press Ctrl-C to interrupt
ipos: 305664 B, non-trimmed: 0 B, current rate: 0 B/s
opos: 305664 B, non-scraped: 1024 B, average rate: 184 kB/s
non-tried: 0 B, bad-sector: 154624 B, error rate: 1024 B/s
rescued: 3243 MB, bad areas: 2, run time: 4h 53m 15s
pct rescued: 99.99%, read errors: 305, remaining time: n/a
Finished
圖像檔看起來不錯fdisk
[root@sysrescue]# fdisk -l copy_rescue.img
Disk copy_rescue.img: 3.02 GB, 3243663360 bytes, 6335280 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 label type: dos
Disk identifier: 0x5902d932
Device Boot Start End Sectors Size Id Type
copy_rescue.img1 * 63 6330239 6330177 3G b W95 FAT32
但file
顯示損壞的 MBR 和分區表。
[root@sysrescue]# file -s copy_rescue.img
copy_rescue.img: DOS/MBR boot sector MS-MBR 9M english at offset 0x10+0xFF "Invalid partition table" at offset 0x127 "Error loading operating system" at offset 0x146 "Missing operating system", disk signature 0x5902d932, created with driveID 0x80; partition 1 : ID=0xb, active, start-CHS (0x0, 1, 1), end-CHS (0x310, 127, 63), startsector 63, 6330177 sectors
清理後,我嘗試將映像複製到「更新」、更大且健康的 SATA HDD (2003 WD 80GB)
dd if=/dev/zero of=/dev/sda
dd: writing to '/dev/sda': no space left on device
80026361856 bytes (80 GB, 75GiB) copied
ddrescue -f /mnt/usb/SAVEDD/rescue.img /dev/sda restore.mapfile
完全的恢復地圖文件
結果分區很奇怪,在 /dev/sda 上看起來不錯
[root@sysrescue]# fdisk -l /dev/sda
Disk /dev/sda: 74.53 GB, 80026361856 bytes, 156301488 sectors
Disk model: WDC WD800BB-00CA
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 label type: dos
Disk identifier: 0x5902d932
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 63 6330239 6330177 3G b W95 FAT32
但完全錯誤/dev/sda1
,舊電腦的 BIOS 甚至無法辨識 HDD。
我的問題是為什麼我在恢復時遇到損壞的分區表?當我將非常舊的啟動 Win95 3GB HDD(帶有 dd 或 ddrescue)複製到“較新”的 80GB HDD 時,我會看到什麼?
我嘗試重建分區表但testdisk
沒有成功,但我不確定這是正確的方法。進一步testdisk
警惕 HDD 磁頭/柱面幾何結構中的錯誤。
我應該挖掘 testdisk 和 MBR/分區表修復的方向還是複製/ddrescue 問題?
編輯 1:
舊 BIOS 偵測到新 HDD
我透過減少新硬碟的容量(帶驅動器覆蓋)並再次將舊硬碟的映像複製到新硬碟來解決舊BIOS無法偵測到新硬碟的問題
ddrescue -f /mnt/usb/SAVEDD/rescue.img /dev/sda restore.mapfile
fdisk -l /dev/sda
Disk /dev/sda: 33.8 GB, 33820284928 bytes
128 heads, 63 sectors/track, 8191 cylinders, total 66055244 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: 0x5902d932
Device Boot Start End Blocks Id System
/dev/sda1 * 63 6330239 3165088+ b W95 FAT32
但一些 PBM 仍然存在:
- 作業系統無法啟動即使在表格分割區修復之後
Testdisk
Testdisk
檢測一些 CHS 不匹配Warning: number of heads/cylinder mismatches 128 (FAT) != 255 (HD)
這裡是完整的testdisk.log
拷貝後如何啟動作業系統ddrescue
?
編輯 2:舊 BIOS 找到 Windows 95
我重建了新硬碟的MBR如下
- 用DOS軟碟啟動
A: fdisk /mbr
現在我有一個Windows 95 啟動但崩潰時沒有錯誤訊息(電腦關機)。
我嘗試啟動'逐步確認'且啟動過程失敗
WIN [Enter=Y, Esc=N]?Y
Load all Windows drivers [Enter=Y, Esc=N]?Y
C:\WINDOWS\system\vmm32.vxd: Missing/unable to load.
Press any key to continue...
VMM32 似乎是一個關鍵的系統文件,但我仍然可以在命令提示字元模式下啟動系統並可能修復它,因為該文件位於好地方。
C:\WINDOWS\SYSTEM>dir vmm32.vxd /s
Volume in drive C has no label
Volume Serial Number is 232E-1BD3
Directory of C:\WINDOWS\SYSTEM
VMM32 VXD 709.556 16.07.98 20:39
1 file(s) 709.556 bytes
Total files listed:
1 file(s) 709.556 bytes
0 dir(s) 2.849.947.648 bytes free
C:\WINDOWS\SYSTEM>
答案1
我的問題是為什麼我在恢復時會得到損壞的分區表?
Fdisk 告訴您您的分割區類型為「b」。
如果你在中尋找這個 https://en.wikipedia.org/wiki/Partition_type
描述欄位表示“具有 CHS 尋址的 FAT32”
這種分區需要使用由柱面、磁頭和扇區組成的三元組來解決。當您的磁碟安裝在 P2L97 機器中時,您的 BIOS 包含整個磁碟的最大 C、H 和 S 值的參數集。
如果該參數集發生變化,則基於 c,h,s 尋址的單一磁區的任何請求都會指向不同的磁區。
由於您希望新磁碟在舊電腦上運行,我想您需要使用兩個磁碟的相同 CHS 設定在舊電腦上複製磁碟。此外,CHS 設定應該等於移除緩慢死亡的磁碟時設定的設定。
問題是現代的 live Linux 可能無法在您的舊機器上運行,並且舊的 Linux 版本將不包含 ddrescue。但是您可以使用 dd 來代替,將其限制在可以恢復的區域。這樣您就不會對磁碟造成壓力,也不會陷入 ddrescue 地圖檔案中所示的損壞區域。
答案2
經過幾天的麻煩我解決了我的問題如下:
- 更新主機板BIOS
- 減少新硬碟的容量驅動器覆蓋以匹配兩個硬碟的大小(由於我的主機板的最新“最終官方”BIOS 版本中的特定錯誤就像用戶3840170的解釋一樣)
- 將舊硬碟映像複製到新硬碟
ddrescue
(請參閱上文) fdisk /mbr
使用(從 DOS 啟動)修復 MBR視窗95軟碟)- 以命令提示字元模式啟動系統(啟動後按 F8郵政)
- 修復檔案系統用
scandisk
(CHKDSK不行)
什麼沒有奏效 :
- 使用特定工具修復了 MBR(主開機記錄),例如拉尼什分區管理器
- 修正了 BIOS 中的 CHS(柱面、磁頭和磁區)值
- 修正了 BIOS 中的 HDD 模式檢測(LBA/large/CHS)
- 重新安裝系統文件,
sys c:
如建議的測試盤手冊(第 35 頁) - 2022 年相信軟碟的穩健性
感謝你們所有人以及 Retrocomputing.stackexchange.com 的人們