背景
我有一块非常老旧的 PATA 硬盘(1998 年富士通 3.2GB),插在一台非常老旧的计算机(奔腾 2 / 华硕 P2L97 主板)上,该计算机只有一个可启动分区(Windows 95 和 Fat32 文件系统)。正如预期的那样,这块硬盘坏了很多聪明的警报。
我的目标不是恢复数据,而是将旧硬盘的副本复制到新硬盘(2003 PATA WD 80GB)以重新启动。
我保存了整个旧硬盘ddrescue
(从系統�态編輯将故障硬盘插入新电脑后,将其复制到映像文件(USB 驱动器上的 rescue.img),如ddrescue 手册。不幸的是,当我尝试在较新的 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 硬盘(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 硬盘(使用 dd 或 ddrescue)复制到“较新的”80GB 硬盘时,我会看到什么?
我尝试重建分区表,但testdisk
没有成功,但我不确定这是不是正确的方法。此外,testdisk
警告硬盘磁头/磁柱几何结构存在错误。
我应该深入研究 testdisk 和 MBR/分区表修复的方向还是复制/ddrescue 问题?
编辑 1:
旧 BIOS 检测新硬盘
我通过减少新硬盘的容量(使用驱动器覆盖)并将旧硬盘的映像再次复制到新硬盘来解决旧 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 设置应等于移除缓慢损坏的磁盘时设置的设置。
问题是现代实时 Linux 可能无法在您的旧机器上运行,而旧版 Linux 不包含 ddrescue。但您可以通过将其限制在可以恢复的区域来使用 dd。这样您就不会给磁盘带来压力,也不会被困在 ddrescue 映射文件中显示的损坏区域。
答案2
经过几天的麻烦,我解决了我的问题,如下所示:
- 更新主板 BIOS
- 减少新硬盘的容量驱动器覆盖匹配两个硬盘的大小(由于我的主板最新的“最终官方” BIOS 版本中的一个特定错误就像 user3840170 解释的那样)
- 将旧硬盘映像复制到新硬盘
ddrescue
(参见上文) - 修复 MBR
fdisk /mbr
(从 DOS 启动视窗 95软盘 - 在命令提示符模式下启动系统(按 F8邮政)
- 修复文件系统
scandisk
(CHKDSK 不能)
什么没有奏效 :
- 使用特定工具修复 MBR(主引导记录),例如Ranish 分区管理器
- 修复了 BIOS 中的 CHS(柱面、磁头和扇区)值
- 修复 BIOS 中的 HDD 模式检测 (LBA/large/CHS)
- 重新安装系统文件,
sys c:
如建议的那样TestDisk 手册(第 35 页) - 2022 年,相信软盘的坚固性
感谢你们所有人以及 retrocomputing.stackexchange.com 的朋友们