以下是示例 boot.ini 的内容:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /NOEXECUTE=OPTIN /FASTDETECT
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows 2000 Professional" /fastdetect
multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Microsoft Windows XP Home Edition" /NOEXECUTE=OPTIN /FASTDETECT
该rdisk
值表示物理磁盘编号。
因此,如果我有三个硬盘,则说:
/dev/sda
/dev/sdb
/dev/sdc
那么如何知道哪个磁盘(/dev/sda 或 /dev/sdb 或 /dev/sdc)是 rdisk(0),哪个磁盘是 rdisk(1),等等?
答案1
反复试验?
我确信 Windows 有一种方法可以对磁盘进行排序,但即使我知道,我也不会相信它,并且在更改内容之前总会进行检查。
boot.ini 文件会为您提供一些线索,例如哪个磁盘上装有哪个操作系统。然后,您就可以从中找出答案。例如,某个磁盘上是否只有一个 ntfs 分区,而其他磁盘上则有两个 ntfs 分区,每个操作系统上有哪些用户,每个 Windows 系统上又有哪些目录。您甚至可以启动每个操作系统,并在其系统分区中保存一个文件来帮助您。
(如果您尝试找出 boot.ini 中损坏的条目指的是哪个磁盘,msconfig.exe 有一个选项可以检查启动路径,以确保每个选项都可以启动。)
答案2
根据微软文章Q102873:BOOT.INI 和 ARC 路径命名约定和用法(Wayback Machine 链接),其顺序rdisk()
为:
... 适配器上磁盘的序数,通常是 0 到 3 之间的数字。
因此,它似乎是通常的顺序(从 0 开始):主主设备、主从设备、次主设备、次从设备。(但我不知道它如何与 SATA 配合使用。)
答案3
可能还有另一种方法可以正确访问您想要的驱动器。驱动器的 ARC ID 还有另一种语法。示例如下:
signature(13579BDF)disk(0)rdisk(0)partition(n)
其目的是让 ntldr 在 MBR 中偏移量为 1B8h 的位置搜索具有该磁盘序列号的磁盘。Russinovich 和 Solomon 所著的《Windows internals》第 4 版第 255 页对此进行了描述。不过,我还没有尝试过。另外,不确定这是一个 32 位整数还是只有 4 个字节 — 如果是前者,则可能需要按相反顺序排列字节。