怎样用windows启动管理器引导grub

怎样用windows启动管理器引导grub,第1张

我贴一段网上收藏的文章 我简要概括下 我就是这么做得 可以用win来引导grub 当然实际上结果也就是grub和win的引导菜单调换了下主从顺序Linux下:如果你的是IDE硬盘终端输入 sudo dd if=/dev/hda of=/media/linux.lnx bs=512 count=1如果你的是SATA硬盘终端输入 sudo dd if=/dev/sda of=/media/linux.lnx bs=512 count=1在 /media 目录找到linux.lnx 复制到windows所在盘根目录在windows根目录找到隐藏文件boot.ini 怕出问题可以先备份打开在后面加入C:\linux.lnx="linux" (双引号内可随便写) 然后保存重启想办法进入纯DOS环境 执行fdisk /mbr重启win引导菜单选择新加入的选项即可进入ubuntu

步骤 1. 设置磁盘分区

在开始配置系统之前,确保有一个最新的系统备份,并且手头有一张援助用的CD。如果在执行这些步骤时出现了问题,那么机器可能无法启动。如果发现自己面临的风险是无法接受的,那么最好不要继续执行以下步骤。

创建 Bootcontrol 分区

在一块硬盘上创建一个小分区。在这个分区上必须创建这样一个文件系统:要切换的所有 *** 作系统都能够加载这个文件系统,并可以对这个文件执行写入 *** 作。我们选择使用FAT32。尽管整个Bootcontrol 系统只需要不到1MB的磁盘空间,但是 FAT32 默认最小限制为256MB,因此这会浪费一些空间。

如果没有足够的未分配空间,可以通过缩小或删除现有分区来创建这部分空间。 在Linux 中可以使用 GNU parted 命令来实现这项功能。如果在执行 parted *** 作之后,现有分区的次序发生了变化,那么可能还需要更新 /etc/fstab 文件。有关的更多信息,请参阅parted的文档。

当使用parted在测试机器上创建所需的分区时,会看到如清单1中所示的结果:

清单 1. 创建必需的分区

repton:~# cat /etc/fstab

# /etc/fstab: static file system information.

#

proc /proc proc defaults 0 0

/dev/hda2 / ext3 defaults 0 1

/dev/hda6 /home ext3 defaults 0 2

/dev/hda7 /opt ext3 defaults 0 2

/dev/hda5 none swap sw 0 0

/dev/hdc /media/cdrom0 iso9660 ro,user,noauto 0 0

/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0

repton:~# umount /home

repton:~# parted

Using /dev/hda

(parted) print

Disk geometry for /dev/hda: 0.000-57231.562 megabytes

Disk label type: msdos

Minor Start End Type Filesystem Flags

1 0.031 18412.734 primary ntfs boot

2 18418.271 25085.874 primary ext3

3 25085.874 57231.562 extended

5 25085.905 26458.615 logical linux-swap

6 26458.646 49999.174 logical ext3

7 49999.206 57231.562 logical ext3

(parted) resize 6 26458 49739

(parted) mkpartfs logical fat32 49739 49999

(parted) print

Disk geometry for /dev/hda: 0.000-57231.562 megabytes

Disk label type: msdos

Minor Start End Type Filesystem Flags

1 0.031 18412.734 primary ntfs boot

2 18418.271 25085.874 primary ext3

3 25085.874 57231.562 extended

5 25085.905 26458.615 logical linux-swap

6 26458.646 49740.314 logical ext3

8 49740.346 49999.174 logical fat32

7 49999.206 57231.562 logical ext3

(parted) q

repton:~# mount /home 挂载 Linux 分区

在为控制分区创建好空间之后,需要将其挂载到 Linux 中,这样就可以在 Linux 中看到这个分区。在本例中,我们将以下内容添加到了 /etc/fstab 中:#/dev/hda8 /boot/control vfat umask=022,dmask=022,fmask=022 0 2然后使用下面的命令来创建挂载点并挂载这个文件系统:mkdir /boot/control mount /boot/control还需要更新 GRUB 在分区结果上维护的信息。在这个测试系统上,我们使用下面的命令:grub-install /dev/hda。

挂载 Windows 分区

通过(手工)重新启动到 Windows,验证上面的分区编辑步骤不会破坏 Windows 的引导过程。 然后为刚才创建的 Bootcontrol 卷分配一个驱动器字符。在现代版的 Windows 上,可以使用 Computer Management MMC snap-in(右键点击 My Computer,然后选择 Manage)。在以前的版本上,可以选择 Start >Administrative Tools。

图 1. 为 Bootcontrol 分区分配一个 Windows 驱动器字符

步骤 2. 重定向 GRUB 引导菜单

将 GRUB 配置文件 /boot/grub/menu.lst 放入 Bootcontrol 分区中,Windows 和 Linux 都可以对其进行写入 *** 作。这让我们可以使用一个在两种 *** 作系统上都可以运行的脚本来修改默认的引导设置。默认情况下,GRUB 不会在这个位置来寻找配置文件,因此我们必须在初始位置上通过一个小技巧来使用该文件。

打印原始文件的一个硬拷贝。如果 GRUB 加载失败,那么可以手工键入所需的命令来引导系统。有关的更多信息,请参阅 GRUB 的信息页。

在这个示例系统上,我们首先复制文件 cp /boot/grub/menu.lst /boot/control/menu.lst,然后将下面的内容(参见清单 2)添加到原始 /boot/grub/menu.lst 文件中,并将其放到现有引导选项之前。

清单 2. 让两个 *** 作系统都可以访问引导文件

title BOOTCONTROL REDIRECT : PLEASE WAIT

root (hd0,7)

configfile /menu.lst

boot

确保 root 命令的参数对于您的系统来说是正确的。通常,驱动器是从0开始编号的(而不是采用从a到 z 的字母),分区也是从0(而不是1)开始编号的。因此对于我们的例子来说,/dev/hda8 变成了(hd0,7)。我们从其他所有地方中删除 savedefault 命令,并更新以下设置,确保10秒种之后 Bootcontrol 选项会被选中。在GRUB文档中可以找到更多这方面的信息。default 0 timeout 10现在已经完成了 GRUB 配置的重定向,接下来将重新启动系统,检查菜单显示是否仍然正确。此处最常见的错误是确定分区时出现错误。请检验parted中的分区号(“Minor”)是否与 /etc/fstab 匹配,GRUB 在 /boot/grub/menu.lst 中使用的分区号是该编号减1。

步骤 3. 配置 Bootcontrol

从后面的 下载 一节中下载zip文件,并将其展开到Bootcontrol分区中。这个zip文件包含了一个 Perl 脚本,用来以一种通用的方式处理切换 *** 作系统的问题;还有几个用来在Windows和Linux之间实现切换的示例脚本。这些脚本期望将当前的工作目录设置成Bootcontrol分区。

以下是使用的脚本:

bootcontrol.pl,grub-config-file 参数是要编辑的配置文件的路径。通常应该修改menu.lst,但是我们可能会希望通过使用 menu.lst 副本来测试所有的修改是否都像我们所期望的那样。

platform-title 参数被用作一个子字符串(技术上是一个正则表达式),以便与 /boot/control/menu.lst 中的标题字段进行匹配。该参数是不区分大小写的,bootcontrol.pl 会选择第一个匹配的实例。如果为 platform-title 指定的是一个数字,那么该数字会被当作是要引导的菜单选项(而不是要匹配的平台)。菜单文件中的第一项是0。

辅助脚本与bootcontrol.pl 一起提供的还有另外两个小脚本,它们是作为模板提供的,可以促进Windows与Linux之间的切换。在任意一个 *** 作系统上,都可以输入to_linux.pl 或to_windows.pl.这些脚本只在需要时才重新启动,但是它们通常都会更新 GRUB 的默认设置。

步骤 4. 维护系统

对已经安装的 *** 作系统进行任何修改或更新都可能对Bootcontrol使用的设置产生影响,因此在对系统进行任何可能会影响GRUB或Linux内核的更新 *** 作之后,需要检查系统的重新启动能力。这些更改可能会在不更改 /boot/control/menu.lst的情况下更改/boot/grub/menu.lst。

如何使用GRUB引导 *** 作系统进行自定义多启动

本文主要内容是使用GRUB来引导目前的绝大部分的系统,包括Windows、linux、bsd、UNIX、OSX等,对于其中涉及系统启动原理和硬盘工作原理部分都是来自于资料和个人理解,难免有错漏之处,请大家多多包涵。关于硬盘结构构成的部分就不附上了。

我们日常使用得最多的 *** 作系统是Windows,包括Windows xp、Windows 2000、Windows 2003和Windows vista、Windows2008等。Windows目前的系统的引导都是通过ntldr文件来传递引导参数Windows 2000-Windows 2003是通过boot.ini文件来作为启动菜单到了Windows Vista至目前最新的Windows 7是通过bootmgr启动管理器来管理启动菜单,也就是我们看到的启动windows时候给你选择的按F8,安全模式等等那个菜单。当然各个系统的 ntldr文件大小引导参数各不相同,但作用都是一样的。而linux、bsd等类unix系统是通过lilo或者grub等启动菜单直接加载内核(通常 是一个vmlinuz的内核)来启动,和Windows完全不同。

在用grub来引导所有系统之前,先看一下mbr的原理,这样对于使用grub来引导系统有很大帮助。mbr是“主引导记录”master boot record的英文缩写。一个扇区的硬盘主引导记录MBR由4部分组成:

1. 主引导程序(偏移地址0000H--0088H)。它负责从活动分区中装载,并运行系统引导程序。

2. 出错信息数据区。偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。

3. 分区表(DPT,Disk Partition Table)。含4个分区项,偏移地址01BEH--01FDH。每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。

4. 结束标志字。偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

mbr占用512个字节,位于硬盘的0柱面、0磁头、1扇区,可以直观的理解为mbr处于硬盘的最开始位置,一切硬盘的 *** 作都是由它开始。mbr不 属于任何一个 *** 作系统,也不能用 *** 作系统提供的磁盘 *** 作命令来读取它。我们通常所用的pqmagic(硬盘分区大师)、pm(partition manager)、diskgen(分区精灵),甚至dos的最常见命令fdisk(fdisk/mbr这个重建分区表的命令相信一些朋友用过了)都是通 过用ROM-BIOS中提供的INT13H(中断)的2号功能来读出该扇区的内容。 512字节的小空间只能作为一个引导符号标志用哪些引导文件来启动,所以MBR可以看做只是一个引导的符号链接。

Windows的启动便是通过修改mbr的第一个数据-主引导程序来实现对Windows的引导,直观的理解就是安装Windows的时候,它会修 改主引导程序,“通知”它 “我是Windows系统”,你只要寻找活动分区,然后找到ntldr,用这个文件来启动就好了。问题是如果是多类型系统的硬盘或者多样系统多硬盘混合的 硬盘,那就没辙了。Windows/dos的启动叫做链式启动,它不能直接启动linux,只能通过婉转的方式在boot.ini中加入对grub的支 持,再间接启动linux/bsd等。我们通常所用的矮人工具箱,或者grub4dos就是属于这一种。

Windows在 vista之前,使用这个方式启动linux配置起来是很简单的事情,但到了vista时代又不同了。微软不再是用boot.ini来管理启动菜单,而是 通过bootmgr启动菜单管理器。从此修改启动菜单只能通过命令行来修改。当然可以通过vistaboot等有gui界面的软件来修改,问题是经常不能 启动。这是个“划时代”的愚蠢作品。首先我完全看不出这个bootmgr有何新亮点,一样不支持命令组合,一样不支持直接引导类unix系统,一样不支持 虚拟光驱,对于这么一个产品,只能说它是个废物,目的只是为了加速grub进入电脑玩家的视野。

我便是因为Windows vista开始的bootmgr超级废物才决心去研究一下grub这个引导软件。grub有自己的命令组合(它的命令解释器很复杂,本人也没有完全掌握所 有的命令),可以随时调试分区启动,不用每次都进入系统去修改启动配置。grub现在已经作为各种linux发行版的标准配置了,甚至越来越多人使用 grub4dos。它是个万能的引导工具。

了解了一些硬盘引导的原理,接下来使用grub引导系统就很好理解了。目前虽然linux也渐渐普及,几个比较好的发行版桌面化也做得非常好,比如 opensuse、ubuntu,但是大多数人使用的还是Windows系统为主。对于linux系统的grub使用和Windows的完全相同。 grub4dos完全是绿色版的。了解过了mbr的简单知识之后,可以知道换个引导工具只需要修改主引导程序。直接解压附件grub4dos到C盘,启动 grubinst_gui.exe,如图,如果有多硬盘,务必在磁盘的选项选中需要安装grub4dos的硬盘,包括U盘也可以直接使用grub启动(前 提是把U盘格式化成zip/hd/flopy模式)。一般情况下按照图中的选项配置后重启计算机就会进入grub的菜单。注意的是某些U盘就算使用硬盘模 式或者zip模式格式化之后还是无法直接使用grub-install gui修改其主引导程序,这是只能用命令行安装,加上--skip-mbr-test参数,总命令如下:grubinst.exe--pause-- verbose--no-backup-mbr--mbr-disable-floppy --mbr-disable-osbr --skip-mbr-test (hd你自己要安装的硬盘,参考GUI界面的磁盘选择)。

菜单文件menu.lst可以用编辑器打开。如果用记事本打开行列顺序会错乱。最好是右击文件,用写字板打开。编写menu.lst之前,先要理解 grub对硬盘和分区的定义。在grub中,第一硬盘为hd0,第一硬盘的第一分区为(hd0,0),接下去类推,而不是由1开始的,如果不知道是第几分 区也不重要,在grub命令的(hd0,按TAB键,就可以列出硬盘的分区列表)。这点对确定linux的根分区很重要,因为根分区是从1开始的。

(1)Windows类系统和osx使用tboot引导:Windows类系统的引导前面已经说过是链式引导,grub支持直接链式引导任意的 Windows系统,也就是本来硬盘的引导顺序是主引导程序-Windows链式引导文件ntldr 变为主引导程序-grub-Windows链式引导文件ntldr 而已,其根本是完全没有变化的。Windows类的引导只需三行,指明分区和加上链接启动。如Windows2003的启动(假设装在第一硬盘第一分区)

title  Windows 2003

root  (hd0,0)

chainloader +1

chainloader就是声明链式启动的意思,其他Windows版本也是相同。如果OSX4x86系统是使用tboot来引导,也是属于链式引导,所以也可以这样编写:

title osx

chainloader (hd0,0)/tboot

有的文章指出链式连接启动Windows必须加上makeactive参数,不过只要Windows装在主分区,无论怎么试验,加不加 makeactive参数都是能启动的,反而加上makeactive会频繁修改mbr不是很稳当的做法,个人认为在不使用makeactive无法启动 的情况下再加上这个参数。

需要注意的是,如果是多硬盘环境,务必要加上map参数,因为Windows系统启动只认第一硬盘,比如Windows系统装在第二硬盘第一分区,需要加上map参数,把第二硬盘映射为第一硬盘。

title Windows 2003

root (hd1,0)

map (hd0) (hd1)

map (hd1) (hd0)

chainloader +1

map映射顺序绝对不能搞错,首先要把hd0映射为装系统的盘,然后再把装系统的盘映射为hd0。

出现这个错误一般是因为分区表混乱或者错误,有时在U盘进行HD模式修改后,兼容性不好也会出现。

附件是我自己精简了一下的grub最小化Windows包,纯绿色,加上gui界面很直观,

附件还有一个32位的bootsect,可以把方便把MBR修改回Windows引导,包括NT52(对应WINDOWS XP和WINDOWS2003,通过NTLDR引导)和NT60类型(WINDOWS VISTA以及后续的WINDOWS版本,bootmgr引导)。

中:

(2)linux/bsd类系统的引导

(3)直接链接ISO等映像文件引导……。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11628479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存