逐字节复制硬盘后如何再次启动 Windows 95?

逐字节复制硬盘后如何再次启动 Windows 95?

背景

我有一块非常老旧的 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

完全的救援日志(7个月)和救援地图文件

图像文件看起来不错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

经过几天的麻烦,我解决了我的问题,如下所示:

  1. 更新主板 BIOS
  2. 减少新硬盘的容量驱动器覆盖匹配两个硬盘的大小(由于我的主板最新的“最终官方” BIOS 版本中的一个特定错误就像 user3840170 解释的那样驱动器覆盖
  3. 将旧硬盘映像复制到新硬盘ddrescue(参见上文)
  4. 修复 MBR fdisk /mbr(从 DOS 启动视窗 95软盘
  5. 在命令提示符模式下启动系统(按 F8邮政
  6. 修复文件系统scandisk(CHKDSK 不能)校验

什么没有奏效 :

  • 使用特定工具修复 MBR(主引导记录),例如Ranish 分区管理器
  • 修复了 BIOS 中的 CHS(柱面、磁头和扇区)值
  • 修复 BIOS 中的 HDD 模式检测 (LBA/large/CHS)
  • 重新安装系统文件,sys c:如建议的那样TestDisk 手册(第 35 页)
  • 2022 年,相信软盘的坚固性

感谢你们所有人以及 retrocomputing.stackexchange.com 的朋友们

相关内容