Board logo

标题: grub如何从扩展分区盘上引导系统? [打印本页]

作者: hq421     时间: 2006-1-7 12:51    标题: grub如何从扩展分区盘上引导系统?

我是新手,看了不点等朋友关于grub方面的介绍文章,很感兴趣,想学习一下。
我在单80G硬盘上已经安装两个操作系统:
C:安装win98,D:盘安装WinXP。使用Vfloopy的菜单多系统引导启动。
从虚拟软盘进入纯Dos以后,进入Grub for dos目录,启动grub后,执行:
root (hd0,4)
chainloader (hd0,4) +1
boot
机器停止响应,并没有从D盘启动WinXP。
我研究半天没弄明白。请各位帮忙看看我这个初级问题,先谢谢了。
作者: hq421     时间: 2006-1-8 13:03
自己顶一下。
作者: 不得不爱     时间: 2006-1-8 19:47
那个菜单得你的D盘是主分区,而且D盘是的系统是在D盘激活时安装的!
作者: hq421     时间: 2006-1-8 22:02


  Quote:
Originally posted by qwe1234567 at 2006-1-8 19:47:
那个菜单得你的D盘是主分区,而且D盘是的系统是在D盘激活时安装的!

感谢指点,可我还是不明白。
    D是扩展分区的逻辑盘,先装的win98是安装在主分区,后装的winxp是安装在D盘,你的意思是说后装的winxp在D盘就被激活为主分区?
我试验过导入 root (hd0,0),结果还是从默认的多系统菜单启动,可导入root (hd0,4),系统就没有反映了,仿佛死机。也没有任何错误的提示。
    我感觉,grub应该可以分别启动主分区或者扩展分区里的逻辑盘上已经安装的系统。这样,即使主分区C盘万一被破坏了,可以通过grub轻松启动其他系统。因为菜单多系统引导太依赖主分区C盘,非常不可靠啊!
    请您再帮我看看好吗?我对grub for dos非常感兴趣。谢谢~~~~~
作者: newswan     时间: 2006-1-9 13:39
xp本身不能从逻辑分区启动,所有的dos、windows都不能。
你把xp安装到逻辑分区,其实启动文件仍然在主分区上,你看看ntldr在那个地方?启动xp后,c盘是哪个分区?

如果你要试验grub启动逻辑分区里面的操作系统,请用linux、unix等。

[ Last edited by newswan on 2006-1-9 at 13:41 ]
作者: DOSforever     时间: 2006-1-11 13:20
newswan说的对。但据本人所知和实际使用,只有Linux是最灵活的,可以安装在任何分区和任何一个物理硬盘上,而DOS/Windows,UNIX也是必须只能安装在主分区上并且是“第一”个硬盘上。注意,这里的“第一”并不是一定就是第一个物理硬盘,而是启动时所认的“第一”个“物理”硬盘。
作者: willsort     时间: 2006-1-11 17:20
Re DOSforever:

      任何操作系统想要实现自引导,就必须在 BIOS 引导装入程序能访问的位置设置上自己的引导链接,而这个引导链接应该可以方便灵活的将系统引导权引入更人性化的空间位置。

      就此点来看,Linux 通过 LILO, Grub 等工具将自己与 BIOS 之间架起一道桥梁,而这个桥梁的位置则必然是特殊的、受限制的。DOS / Windows / Unix 本也应该如此,可能是它的此方面的用户需求仍不够强烈吧,好在 NT 系列便能置于扩展分区了, PE/Mini9x 系列则可以访在光盘、USB存储设备中。DOS 也许也会有自己的转折。

      众人的脚步始终向前,只是前后不同;我个人,若能“不落于人后,不落人于后”,便是美事了。

[ Last edited by willsort on 2006-1-11 at 17:23 ]
作者: DOSforever     时间: 2006-1-12 13:19
NT 系列现在能置于扩展分区了?不知“笑天”所说的能够安装在扩展分区以内是指安装目录可以在任意一个盘,还是指启动文件可以安装在任意一个盘。如果是后者我表示疑惑,但我也从来没有试过。请参见我在“第一次安装纯dos,有些不明白的问题,请教。” 一贴中对 GOTOmsdos 的回答。

http://www.cn-dos.net/forum/viewthread.php?tid=17404&fpage=10
作者: hq421     时间: 2006-1-14 22:58
多谢各位的指点,现在我已经弄清楚了在扩展分区安装操作系统的引导问题。在虚拟机vmware安装winxp在D盘,发现ntldr确实在C盘上,证实引导系统确实是在C盘。
作者: GOTOmsdos     时间: 2006-1-16 00:41
我试过用MAP的方法启动到扩展分区上的系统(预先装的)
不过其实质是: 把他模拟成第一分区(使BIOS认为是),但是盘符有时会错乱的

不知什么原因,
也许跟操作系统版本也有关系吧,很复杂的..
由于GRUB还未完善,加上灵活引导系统的不容易,总会有很多遗憾的

只能尝试测试,千万不能指望他干正事..

[ Last edited by GOTOmsdos on 2006-1-16 at 00:48 ]
作者: willsort     时间: 2006-1-16 01:59
Re DOSforever:

      我的陈述与你的思路其实并无任何冲突。

      因为我们关于“系统是否可以安装在其它位置”的讨论前提是,这个“系统”如何界定。对于 Linux 来说,对安装位置有特殊要求的 LILO/GRUB 也属于其中的一部分,那么是否可以认为 Linux 对安装位置有特殊要求呢?

      我的 NT 系列可以置于扩展分区的言论,自然是指 NTLDR 存于第一主分区,系统核心与主体可存于扩展分区中。我的认识中, NTLDR 如同 LILO 一样属于“引导链接”,自然会有其特殊的空间要求。

      同时,鉴于 MSDOS/Win9x 仍使用 IO.sys/Command.com 完成很多底层访问的事实,而因此有系统核心或主体的嫌疑,故并未将之列于可任意安装的系统之中,但是一般意义上的安装位置是从系统安装程序中位置选择的自由度来认定的,因此也通常认为他们可以安装于非主分区(当然分区格式的壁垒限定仍然是存在的)。这应该不会误导初学者和DOS执业者。

[ Last edited by willsort on 2006-1-16 at 02:02 ]
作者: DOSforever     时间: 2006-1-17 11:37
呵呵,你的陈述有点文学化了,我看了有点模糊不清。

对 LILO/GRUB 我是这么认为的:对 Linux 来说它也是所附带的应用程序,并不是 Linux 自身的一部分,所以不能认为 LILO/GRUB 对安装位置有特殊的要求就认为 Linux 也有特殊的要求。

我现在就想搞清楚的是 NT 系列的引导顺序,因为我没怎么对它研究过,但我如果为此再装个系统试验一下又太麻烦了。对 DOS/Win9X 系列很清楚,从分区引导扇区开始 -> IO.SYS -> (config.sys) -> (MSDOS.SYS) -> ……。我不知道 NT 系列从 NTLDR 开始后面一系列要调用的文件是什么。如果 NTLDR 只是一个引导程序,从它后面的一系列启动文件都可以放在任意分区,那么我认为 NT 系列也是可以安装在任意分区的。因为,也就是说如果我可以不用 NTLDR 也可以用其它的引导管理程序来引导 NT / 2K / XP / 2K3 。我现在就想请你或其他知道的各位给我一个确认, NT 系列是否只是对 NTLDR 的位置有特殊的要求。如果是的话,我就想把 2K 装到逻辑分区中去了。
作者: DebianGrub     时间: 2006-1-19 17:20
确保D盘的系统可以引导就行了。

如果你能从XP里面NTLDR引导,WIN系统的引导记录一定会在主引导区的。

按你的启动方法,你是想直接从D盘记动WIN98???可是在D盘没有98的引导记录啊。
它的引导记录在你随之安装XP时就变成了一个512字节的文件被放在系统盘了。也就是主DOS分区C盘。

而不管你的系统(所有的系统,包98,2000,XP)安装在哪里。它的引导记录及相关文件如ntldr,boot.ini文件都会出现在C盘里面。

所以你要启动98只能这样
grub------------------------>ntldr----------------->98或xp选一个启动。

不管你怎么装系统,装在哪个盘。你的启动命令都只能是
root (hd0,0)
chainloadr +1
boot

[ Last edited by DebianGrub on 2006-1-19 at 17:21 ]
作者: 不得不爱     时间: 2006-6-16 17:41
楼上忽略了个问题吧,那就是grub可以启动引导记录文件呀,如果直接启动引导记录文件不是就可以不通过ntldr启动98系统了吗?
作者: 不得不爱     时间: 2006-6-16 22:02


  Quote:
Originally posted by GOTOmsdos at 2006-1-16 00:41:
我试过用MAP的方法启动到扩展分区上的系统(预先装的)
不过其实质是: 把他模拟成第一分区(使BIOS认为是),但是盘符有时会错乱的

不知什么原因,
也蠮..

在启动扩展分区上的系统时要隐藏FAT主分区!只要隐藏FAT主分区GRUB就可以把扩展分区上的DOS系统启动起来
作者: dato     时间: 2008-10-26 20:47
今天顺便google一下又来这里了.偶一直想尝试如何在单硬盘环境逻辑分区安装windows系统并能与其它3个主分区上的windows系统相互独立互相不干扰通过grub来启动。

从这帖看来也许用map方式可以模拟实现或者使用grub加载
http://www.nu2.nu/bootdisk/ntboot/ ntldr启动盘,有空时真的得试试,现在真的有需求需要上四个独立的windows系统。汗
作者: 不点     时间: 2008-10-27 11:24
dato,你尝试探索一下 map --in-situ 的功能,它的目的就是将一个逻辑分区模拟成一个主分区。
作者: fujianabc     时间: 2008-10-27 17:46
windows安装的时候必须要有主分区,否则会拒绝继续安装。
装完之后,可以把主分区上的启动文件移至系统分区,并修改boot.ini,然后就可以用grub的map来启动逻辑分区上的windows了。
作者: dato     时间: 2008-10-27 20:01
在三主分区一扩展分区的环境.刚刚已经尝试了一下in-place,xp sp2系统是起来了但是在进入桌面之前提示rundll加载c:\windows\system32\mscories.dll出错,不确定吗桌面出不了,一确定桌面一出现就立马蓝屏.后来删除第三个主分区,换用in-situ仍然是一样的错误提示.不过好像用关键字"site:bbs.znpc.net/ situ"没提到修改boot.ini具体怎么改.

其实以前在三主分区的装法母盘都是在第一主分区生成的,今天才注意到原来在使用grub的hide隐藏其它分区的方式启动系统,但是系统仍然会自动按现有分区的排序顺序自动修改了multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

再重新分区试试看
作者: dato     时间: 2008-10-27 21:29
我不清楚是否成功而且可能很难描述这个问题.

在使用gdisk分区后如下所示,预先通过ghost发射系统到(hd0,2),(hd0,5),修改menu.lst添加
map --in-place (hd0,5)+1    (hd0)
find --set-root /ntldr
chainloader /ntldr
boot

想尝试启动(hd0,5)处的系统结果进去的都是(hd0,2)处系统,偶今天的一个很大的疑问就是这东东难道需要依赖(hd0,0)处的系统吗,后来就发射系统到(hd0,0)处,再次启动耶没问题,写的数据也都在(hd0,5)处.然后把(hd0,0)处的系统格式化掉又有问题了.那么(hd0,0)处的系统充当什么角色,除了使用磁盘工具写盘外,这种启动方式还有其它安全问题吗.

# 清除主引导记录
/mbr
# 删除所有分区
/del /all
# 建立3个主分区用来分别安装不同的系统
/cre /pri /sz:35000 /for /q /v:OS1 /ntfs
/cre /pri /sz:35000 /for /q /v:OS2 /ntfs
/cre /pri /sz:35000 /for /q /v:OS3 /ntfs
# 建立扩展分区
/cre /ext
# 建立用于Grub安装分区的分区
/cre /log /sz:600 /for /q /v:Grub /ntfs
# 将余下空间建立逻辑分区用于系统共享数据分区
/cre /log /for /q /v:Data_share /ntfs
作者: zw2312914     时间: 2008-10-27 21:37
3个主分区,一个逻辑分区,menu.lst:

title boot (hd0,0)____NT
makeactive (hd0,0)
root (hd0,0)
chainloader (hd0,0)/ntldr
boot

title boot (hd0,1)____NT
makeactive (hd0,1)
root (hd0,1)
chainloader (hd0,1)/ntldr
boot

title boot (hd0,2)____NT
makeactive (hd0,2)
root (hd0,2)
chainloader (hd0,2)/ntldr
boot

title boot (hd0,4)------ NT
map --in-place (hd0,4)+1 (hd0,3)
map --hook
maketive (hd0,3)
chainloader (hd0,3)/ntldr
root (hd0,3)
boot

(hd0,4)下boot.ini,其他分区boot.ini中partition(4)改为相应数字

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(4)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(4)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect


其实grub4dos中还有个partnew命令,来建立主分区,解决楼上的问题更简单,只要你硬盘够大,在一个分区中装n个Windows应该都没问题。(parttnew建立的分区表项虽然是重叠的,但可骗过nt。)

[ Last edited by zw2312914 on 2008-10-27 at 21:47 ]
作者: dato     时间: 2008-10-27 21:38
再回头看看18楼 fujianabc 提供的方法似乎是采用传统的方法安装系统.而我这种跟他的差别就是,不管主分区逻辑分区里的系统都是在(hd0,0)上通过ghost备份的系统并发射到任意分区,发射后系统会自动修改boot.ini指向正确的分区信息.这种方式在硬件还原卡上和软件分隔的3个主分区上都是没有任何问题的.现在使用--in-place似乎一定要求在(hd0,0)处存在某种东西才能正常运行.这样的话如果(hd0,0)处的系统被破坏不是连带这个逻辑分区也无法运行了.
作者: fujianabc     时间: 2008-10-29 19:16
我这两天在一台没有windows可认主分区的机子上装了xp(三个主分区都是linux分区),把xp所有文件都在(hd0,7)分区上(ntfs)。
因为xp要求存在windows可认的主分区才让启动,所以我用了比较特殊的手段正常启动了xp。
我的menu.lst:
title xp
map --harddrives=2
map (hd0,7)+1 (hd0)
map (hd0) (hd1)
map --hook
chainloader (hd0,0)/ntldr

然后boot.ini改为
default=multi(0)disk(0)rdisk(1)partition(7)\WINDOWS
注意把rdisk(0)改成了rdisk(1)
作者: dato     时间: 2008-10-29 21:34
在分区格式化为,使用grub4dos-0.4.4-2008-10-26.zip
# 清除主引导记录
/mbr
# 删除所有分区
/del /all
# 建立3个主分区用来分别安装不同的系统
/cre /pri /sz:35000 /for /q /v:OS1 /ntfs
/cre /pri /sz:35000 /for /q /v:OS2 /ntfs
/cre /pri /sz:35000 /for /q /v:OS3 /ntfs
# 建立扩展分区
/cre /ext
# 建立用于Grub安装分区的分区
/cre /log /sz:600 /for /q /v:Grub /ntfs
# 将余下空间建立逻辑分区用于系统共享数据分区
/cre /log /for /q /v:Data_share /ntfs

由fujianabc 23楼的方法最好暂时没发现有什么不良反应
zw2312914 21楼的方法没成功
dato 20楼的方法似乎有依赖问题.
作者: FX88888     时间: 2009-2-12 12:01
23楼的办法可以引导XP到画面,有滚动条,然后就蓝屏了
作者: dato     时间: 2009-2-14 12:59
ghost软件发送到1:1 1:2 1:3它都会自动将boot.ini指向正确的分区。但是如果用grub虚拟的方式,那就得注意修改boot.ini。也就是你用主分区生成的ghost镜像恢复到该逻辑分区,再用gdisk32之类的显示隐藏分区软件修改boot.ini就可以了具体看23的描述。没有任何问题。
作者: dralisk     时间: 2009-2-14 15:25
完全看不懂。
作者: FX88888     时间: 2009-2-14 16:54
就是按23楼的作法改的,不然为什么会引导到XP画面,但是就是启动不了呀