无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6175|回复: 14
打印 上一主题 下一主题

【求助】如何使用Grub启动逻辑盘上NTFS分区的NT系统

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-18 14:13:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
先说一下我的情况:
我的硬盘分了一个主分区(sda1)和一个扩展分区,扩展分区上有N个逻辑盘,后面的逻辑盘上装了Linux系统,装Linux时选择把Grub装到MBR,第一个主分区((hd0,0),C盘装了Win2K3,NTFS文件系统)。Grub菜单通过
root (hd0,0)
chainloader +1
启动Win2k3。我想把Win2K3移动到D盘((hd0,4)),于是我直接把C盘纯净ghost备份还原到D盘,在Grub菜单里写
root (hd0,4)
chainloader +1
因为我C盘和D盘的boot.ini配置菜单项不一样,我发现启动的ntldr的菜单是C盘的菜单。
C盘boot.ini的首项是:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /noexecute=alwaysoff
于是我在C盘boot.ini增加一项:
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, partition2" /fastdetect /noexecute=alwaysoff
发现选第2项可以进入D盘的系统,但问题是它是使用C盘的ntldr启动的,所以我还是不敢乱动C盘(我打算把系统移到D盘就把C盘格了)。
我尝试隐藏C盘((hd0,0)),即Grub写:
hide (hd0,0)
root (hd0,4)
chainloader +1
结果还是启动在(hd0,0)上的ntldr,启动后只看到(hd0,4)(在win下为C:盘),其他一切正常。
我想应该有办法直接启动D盘上的系统,而不要使用C盘的ntldr,但不知道怎么做,只好来这里请教了~~

这里高手很多,请大家帮帮我吧,谢谢拉~~
14#
发表于 2011-12-10 22:39:22 | 只看该作者
本人新手,我现在还在摸索中,楼主如果有好的方法,介绍下啊
回复

使用道具 举报

13#
发表于 2007-11-11 12:50:56 | 只看该作者
12楼  Climbing   分析的正确     出错的原因 不在grub  或隐藏分区这边     而是系统注册表这里
回复

使用道具 举报

12#
发表于 2007-9-20 08:54:00 | 只看该作者
其实Windows的启动过程跟PE类似,PE是通过setupldr.bin配合winnt.sif来启动,而Windows是通过ntldr配合boot.ini来启动(Vista是bootmgr配合BCD)。所以,只要搞清楚了这个原理,从逻辑分区上直接启动Windows也不是不可能,稍微修改一下boot.ini即可。

但楼主直接将(hd0,0)上的Windows克隆到(hd0,4)并尝试启动它,这样是百分百会出现问题的,因为Windows在安装时在注册表中记住了自己的安装分区,尽管你从(hd0,4)上启动它,它还会尝试从(hd0,0)上查找自己的文件,如果将(hd0,0)上的Windows删除,就会导致(hd0,4)上的系统启动失败。所以,一定要对注册表中有关的分区记忆部分进行清除操作,才能保证使用grub4dos直接启动(hd0,4)上的Windows系统。
回复

使用道具 举报

11#
发表于 2007-9-20 07:41:25 | 只看该作者
我多年来一直用楼上的办法,采用独立主分区。
回复

使用道具 举报

10#
发表于 2007-9-20 07:33:15 | 只看该作者
NTLDR的能力本来也就如此
只能加载主分区上的boot.ini和ntdetect.com等
map实际上是欺骗ntldr(setupldr.bin, 也是一样)
这在启动逻辑分区上的PE时非常有用


如果真要第一分区和第二分区系统完全相互独立
推荐将第二分区更改为主分区
一共可以设置4个主分区
扩展分区用了一个, 你也还可以设置3个呢
这样gho回去
启动就容易多了
不用map
直接启试试看
回复

使用道具 举报

9#
发表于 2007-9-19 19:05:28 | 只看该作者
map具有透天换日之力
map (hd0,4)  (hd0) #这时可以理解为(hd0,4)已经变成(hd0,0)了
map --hook
root (hd0,0)     #没错,如果这时进入命令行键入root (hd0,0),显示的是原(hd0,4)的信息
chainloader +1
回复

使用道具 举报

8#
 楼主| 发表于 2007-9-19 15:31:47 | 只看该作者
谢谢以上各楼的回复。
今天继续尝试,果然map这一步是有必要的。boot.ini里面对分区定位跟DOS类似,如果隐藏了(hd0,0),hd(0,4)就变成了partition(1),也要手动改一改。
map (hd0,4)+1 (hd0)
map (hd0) (hd1)  
# 一开始不明白上面这句的作用,后来启动ntldr后又可以通过grldr启动Grub
# 此时(hd0)已经被映射,但可以通过(hd1,x)可以访问实际的(hd0,x)
root (hd0,4)
chainloader /ntldr
boot
这样果然正确启动了(hd0,4)上的ntldr,但是进入系统后加载配置文件时出现错误提示,
找不到模块:c:\windows\system32\mscories.dll。
点确定不管。然后不断发现新硬件-磁盘驱动器,但是又说没有系统资源可用,无法按装。
再稍等一下,就突然黑屏死机了。
以后每次启动都直接黑屏重启。

经检查,确实不存在c:\windows\system32\mscories.dll文件,而在(hd0,0)复制过来,还是不行。
我的ghost镜像确认是没问题的,不知道为什么会这样?
现在使用Grub启动系统的问题应该是解决了吧,剩下的应该研究下系统为什么不正常。

另外请问一下 hytmtet,你的硬盘分区是如何安排的,你的逻辑盘上的XP是如何装上去的?
我的做法是先隐藏(hd0,4),在(hd0,0)装系统,然后ghost备份,隐藏(hd0,0),取消隐藏(hd0,4),再把备份的系统还原到(hd0,4)。如果还不行,我打算把以上过程再重复一遍,但是不确定这样做对不对,想参考一下你的做法,谢谢!!

[ 本帖最后由 hyerty 于 2007-9-19 03:34 PM 编辑 ]
回复

使用道具 举报

7#
发表于 2007-9-19 09:42:43 | 只看该作者
原帖由 lianjiang 于 2007-9-19 07:56 AM 发表

这种情况,很可能是boot.ini文件中指定的分区有误,需自行修改。

是的,把他给改为multi(0)disk(0)rdisk(0)partition(1)\
回复

使用道具 举报

6#
发表于 2007-9-19 07:56:34 | 只看该作者
原帖由 hyerty 于 2007-9-18 11:30 PM 发表
这回出现了(hd0,4)上的启动菜单,yes,看样子是要成功了,可是选择启动系统后提示:
找不到文件
<Windows dir>\system32\ntoskrnl.exe


这种情况,很可能是boot.ini文件中指定的分区有误,需自行修改。
回复

使用道具 举报

5#
发表于 2007-9-19 05:56:47 | 只看该作者
原帖由 hyerty 于 2007-9-18 11:30 PM 发表
谢谢楼上两位的回答,经尝试可以启动逻辑盘上的ntldr,但是却没办法启动独立放在逻辑盘上的NT系统。以下说说我的尝试过程:
1. 我以前尝试过chainloader (hd0,4)/ntldr,但发现根本不能这样访问NTFS分区上的文 ...


仿真那一步必须做的

例如我在逻辑分区上的XP
用GRUB4DOS来启动

title 启动 Winows XP Professional
find --set-root /ntldr
map +1 (hd0)
chainloader /ntldr

grub4dos最新版本应该是2007-08-27
功能上比grub应该强大不少.....
建议安装到MBR
能自动搜索所有分区(包括更改ID的隐藏分区)上的grldr来启动
回复

使用道具 举报

4#
 楼主| 发表于 2007-9-18 23:30:56 | 只看该作者
谢谢楼上两位的回答,经尝试可以启动逻辑盘上的ntldr,但是却没办法启动独立放在逻辑盘上的NT系统。以下说说我的尝试过程:
1. 我以前尝试过chainloader (hd0,4)/ntldr,但发现根本不能这样访问NTFS分区上的文件。难道grub4dos比Linux的原版grub强大?于是我先启动到纯DOS,在启动grub4dos,果然可以访问NTFS分区了。
# map 命令似乎没用
root (hd0,4)
chainloader (hd0,4)/ntldr
boot
以上命令执行成功,可是进入的竟然还是(hd0,0)分区上的boot.ini的菜单。可以正常进入系统。
这下我郁闷了,心想难道ntldr总是从第一个分区查找启动菜单?于是,

2. 将(hd0,0)的boot.ini改名,重启动。这回显示:boot.ini不正确,从C:\windows启动,然后开始启动Windows,没有启动菜单。启动之后出现几个找不到文件的提示,确定后似乎一切正常。没仔细测试系统是否异常,我关心的是系统是否摆脱了对(hd0,0)的依赖性。

3.  这回决定来狠点的,备份MBR后直接删除(hd0,0),应该只是改了分区表,数据都还在,但(hd0,0)没了。用如下命令启动:
root (hd0,4)
chainloader +1
boot
这回出现了(hd0,4)上的启动菜单,yes,看样子是要成功了,可是选择启动系统后提示:
找不到文件
<Windows dir>\system32\ntoskrnl.exe
然后当机。这个文件在(hd0,4)上是肯定存在的啊。看来系统还是在试图访问(hd0,0)的某些文件来启动。但是可以启动PE了,一切正常。

最后得出的结论:可以启动逻辑盘上的ntldr,但还是没办法不依赖于(hd0,0)启动逻辑盘上的NT系统。不过,不知道是不是我的操作有什么问题?

我想是可以把NT系统移动到逻辑盘的,但需要把(hd0,0)设成一个NT可以访问的分区,然后放几个必要的文件。哎,既然不能完全独立地在逻辑盘上装系统,没兴趣继续尝试了。

但是如果选择双系统共存的话,还是可以在逻辑盘上放一个系统的。但是ntldr始终是(hd0,0)上的菜单,所以选择系统这一步不能在Grub完成,必须在ntldr的菜单选,这样就要选2次菜单,感觉很不爽。
回复

使用道具 举报

3#
发表于 2007-9-18 14:35:45 | 只看该作者
map 命令也可以, 下面的命令可能不大正确,你看看

map (hd0,4)+1 (hd0)
map (hd0) (hd1)
#map --hook
root (hd0,4)
chainloader (hd0,4)+1
makeactive
boot


#unhide (hd0,4)
hide (hd0,0)
rootnoverify (hd0,4)
makeactive
chainloader +1
boot
回复

使用道具 举报

2#
发表于 2007-9-18 14:26:43 | 只看该作者
这个
不知道grub支持仿真命令不
要是grub4dos
仿真一下就好
例如
map (hd0,4)+1 (hd0)
chainloader (hd0,4)/ntldr
就可以启动逻辑分区上的ntldr了

通常
将PE的PELDR等文件放在逻辑分区时
就是这么处理的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-10 20:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表