原创:win7 xp ubuntu 多系统grub单级引导的简单方法

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
头像
lemontry
帖子: 8
注册时间: 2009-10-11 12:39

原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#1

帖子 lemontry » 2010-12-04 22:13

前些日子由于学习需要,不得不在本子上又装了一个原版的xp系统,这下电脑变成了win7 + xp + ubuntu三系统,可随之而来的就是找回win7和ubuntu10.10系统和多系统的引导问题,找回系统容易,可三系统的引导却在网上没找到合适的解决方案,不是要分两级(两层:grub层和windows引导层)就是要步骤繁琐还会多安装一些冗余的程序,更有甚者要按顺序重装所有系统并需要隐藏分区。于是要达到完美,只有靠自己摸索了,侥幸的是本人成功的发现一种简单的仅靠grub单级引导的方法,与大家一起分享,希望能对大家有所帮助。

首先还是介绍一下找回win7和ubuntu过程。说一下我电脑中系统安装的位置,最开始装的win7,在第一分区C盘;然后装的ubuntu,在sda8分区;再然后装的xp,在H盘。装好xp后,自然只能进入xp系统了,开机不会显示grub菜单,更进不了win7,不过不用着急。先找回win7,进入xp后下载一个工具“xp中寻回win7工具”,网上很容易就可以找到及其使用方法,找回重启便可进入windows多系统引导菜单,选择win7进入,可能win7的启动界面会变成英文的,启动动画也会消失,这是由win7启动程序的语言设置引起的,下载“bcdfix”小工具修复一下即可。下一步找回ubuntu,我用的是ubuntu10.10,应用安装光盘进行grub修复,方法网上有很多介绍,具体可参考‍ viewtopic.php?t=297514 这篇帖子,但要注意一点,其中的第四步需要修改一下 ,即 “‍4. grub-install --root-directory=/mnt/ /dev/sda” 最关键这一步应该为“‍grub-install --root-directory=/home/ubuntu/mnt/ /dev/sda”否则可能提示错误修复不成功,顺便补充一下,如果自己不清楚自己的ubuntu安装在哪个区,有个笨法,可以在‍/home/ubuntu目录下多建几个文件夹譬如mnt1、mnt2、mnt3.。。。然后分别将分区挂载在这些文件夹下,直到你发现ubuntu系统的分区被挂载了,就可以确定ubuntu的安装的分区了。重启就可以看到grub菜单了。

但现在是三系统双级的引导,下面介绍本文的核心内容——多系统grub单级引导。我的基本想法是进入ubuntu后用 sudo update-grub 命令让grub自动搜索已安装的系统。但是我发现在H盘(装xp的)下只有几个文件夹,没有boot.ini bootmgr 等系统引导文件以及boot文件夹,原来在装xp时这些引导文件直接被装在硬盘第一分区C盘下了。于是我找了个win PE系统(这个很好找,各种盗版系统盘里都有,不行就下个软件将pe装到u盘里,很容易),进入PE后显示系统隐藏文件,将C盘根目录下的所有小文件和Boot文件夹一并复制到H盘(注意:其中可能会有个虚拟内存文件大约1~2G不需要复制,复制过程中不需要覆盖H盘下的内容),然后用pe下的PG分区工具将H盘设为“活动”的分区。退出重启进入ubuntu 打开终端输入‍sudo update-grub 即可找到三个系统了。

更新grub后可能系统的名称会有些问题,如windws xp的名称不能正常显示,可在终端下用sudo gedit /boot/grub/grub.cfg 命令进行修改,顺便可以修改下默认系统启动顺序及grub菜单界面停留时间等。还有就是删除win7启动过程中的windows双系统引导菜单,具体方法是‍启动 Windows 7 系统,点击“开始” -> “所有程序” -> “附件”,右击“命令提示符” -> “以管理员身份运行”,打开“命令提示符”窗口,输入:bcdedit /delete {ntldr} /f 回车即可。至此就可以完美实现三系统的grub单级引导了,方法简单,启动过程没有丝毫缀余。


补充:其一,本人随后用PE下PG将H盘改回非活动分区,三系统的引导并未出现问题,因此可能并不需要将H盘设为活动分区,但本人未曾尝试;其二,如果上一步成立,完全可以不用Win PE系统,在ubuntu下即可将‍将C盘根目录下的所有小文件和Boot文件夹一并复制到H盘,然后运行‍sudo update-grub命令即可。

因此此方法可简化为:完全找回所有系统后,进入ubuntu,‍在ubuntu下即可将‍将C盘根目录下的所有小文件和Boot文件夹一并复制到H盘(装xp的系统),然后运行‍sudo update-grub命令即可。然后再做些修饰修改就完美了,但由于本人很忙未尝尝试。

如大家还遇到其他问题,或本方法可进行改进,欢迎提出,大家一起讨论解决~
上次由 lemontry 在 2010-12-07 23:19,总共编辑 1 次。
jfm23
帖子: 11
注册时间: 2010-12-03 20:02

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#2

帖子 jfm23 » 2010-12-06 10:43

这个一定要顶,我去试试,好使的话回来再顶~找了好久好久了~!
头像
lemontry
帖子: 8
注册时间: 2009-10-11 12:39

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#3

帖子 lemontry » 2010-12-06 21:47

第一次发帖,终于有人顶了,呵呵,楼上的兄弟有问题给我留言,一定鼎力相助
头像
onshoestring
论坛版主
帖子: 4666
注册时间: 2009-09-06 5:53

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#4

帖子 onshoestring » 2010-12-06 21:58

用grub4dos,menu.lst如下,就能引导三系统了。


title Windows 7
chainloader (hd0,0)/bootmgr
boot

title Ubuntu
find --set-root /boot/grub/core.img
kernel /boot/grub/core.img
boot
jfm23
帖子: 11
注册时间: 2010-12-03 20:02

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#5

帖子 jfm23 » 2010-12-06 23:11

lemontry 写了:第一次发帖,终于有人顶了,呵呵,楼上的兄弟有问题给我留言,一定鼎力相助
唉~想起这个引导真是让我郁闷死了,重装好几次系统(俺是超级小白)
一开始我也是win7+ubuntu后来装了XP,用BCDautofix找回了win7但是ubuntu死活找不到了,没办法全部重装(我只有XP盘,其他的全是硬盘安装的)
于是按照程序,先装XP然后win7然后ubuntu,然后在ubuntu下用sudo update-grub找回了win7的,重启进入的时候选择win7,出现的一个惊喜,就是有个二级菜单,但是很悲剧只有win7的好使,XP的不好使进不去,唉~鉴于之前的几次悲剧,我都忧郁了~现在还不好使,前几天折腾的饭都吃不下,这几天在恢复体力中~哈哈,刚刚安装的ubuntu还不会用,练安装软件都不会呢,貌似和windows不太一样,要在终端输入命令吧,我们学校很悲剧,用的电信的网线,有个登录器是exe的,我还不知道咋链接网络了~我是装系统新手,在安装ubuntu之前也就是win7+XP,而且用了不久~等我研究一下你的帖子,有问题找你的~哈哈~ :em11
jfm23
帖子: 11
注册时间: 2010-12-03 20:02

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#6

帖子 jfm23 » 2010-12-07 14:24

出现了一点问题哦~
我装系统的顺序如下:XP——WIN7——ubuntu,然后在ubuntu里sudo updare-grub找到了win7的,但是然后进入win7的有个二级菜单,选择win7可以正常启动选择XP则不能正常启动而且屏幕全黑没有任何提示。
后来我参照了一下LZ的帖子,在win7下降XP所在盘设置成‘活动’,在ubuntu里将win7下的‘将C盘根目录下的所有小文件和Boot文件夹一并复制到XP盘’然后在sudo update-grub于是找到了XP的启动项,重启果然可以看到xp的启动项,但是点击却认出不了XP,显示的是boot manger(图片中有)
怎么才能找到并正常启动XP啊,PS:XP和WIN7双系统的时候我用BCDfix找回启动项可以正常启动双系统。
还有就是在ubuntu中sudo /boot/grub/grub.cfg显示没有该命令
图片
图片
图片挂了~移步这里http://photo.163.com/jfm23/big/#aid=187 ... 6615767566
头像
lemontry
帖子: 8
注册时间: 2009-10-11 12:39

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#7

帖子 lemontry » 2010-12-08 0:06

现在是xp启动引导出了问题,楼上的兄弟可以试一下在win7下修复xp启动引导,百度一下就会有很多答案,修复好了之后再去实现单级引导
还有在复制boot文件夹时有没有替换覆盖xp盘下的文件,如果替换过就有些麻烦了,上一步不行可以用安装盘修复一下
一时疏忽,应该是sudo gedit /boot/grub/grub.cfg :em06 已经改过,不好意思哈

再有ubuntu中联网还是挺方便的,大多数联网的客户端都有linux版本的,学校中用的比较多的是锐捷的,装个mentohust软件就可搞定
tawnde
帖子: 44
注册时间: 2009-11-23 20:19

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#8

帖子 tawnde » 2010-12-10 19:33

:em20 :em20 :em20 :em20 :em20 :em20 同惑求解;
我的xp-Windows7 -ubuntu ,怎么变成一级引导三系统。
鸟兽鸣以号群兮,草苴比而不芳。
鱼葺鳞以自别兮,蛟龙隐其文章。
故荼荠不同亩兮,兰茝幽而独芳。
头像
lemontry
帖子: 8
注册时间: 2009-10-11 12:39

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#9

帖子 lemontry » 2010-12-10 22:35

楼上的可以尝试,‍在ubuntu下即可将‍将C盘根目录下的所有小文件和Boot文件夹一并复制到xp或win7的安装盘下,然后运行‍sudo update-grub命令;但千万注意复制过程不要替换原有文件,而且此方法前提是这三个系统已经都能正常引导使用;这一步不能成功的话再考虑我帖子上原来的方法
tawnde
帖子: 44
注册时间: 2009-11-23 20:19

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#10

帖子 tawnde » 2010-12-13 9:58

lemontry 写了:楼上的可以尝试,‍在ubuntu下即可将‍将C盘根目录下的所有小文件和Boot文件夹一并复制到xp或win7的安装盘下,然后运行‍sudo update-grub命令;但千万注意复制过程不要替换原有文件,而且此方法前提是这三个系统已经都能正常引导使用;这一步不能成功的话再考虑我帖子上原来的方法
下午我试试,我的三个系统都能引导,就是感觉二级引导xp+Windows7 还麻烦了,切10.10 的gurb不能自动进入系统,还要选择确定才能进入,从哪里修改啊?
鸟兽鸣以号群兮,草苴比而不芳。
鱼葺鳞以自别兮,蛟龙隐其文章。
故荼荠不同亩兮,兰茝幽而独芳。
头像
lemontry
帖子: 8
注册时间: 2009-10-11 12:39

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#11

帖子 lemontry » 2010-12-14 7:45

:em05 终于有人成功了
LSXD删除windows下二级引导的方法我的帖子里面提到了,WIN7系统下点击“开始” -> “所有程序” -> “附件”,右击“命令提示符” -> “以管理员身份运行”,打开“命令提示符”窗口,输入:bcdedit /delete {ntldr} /f 回车即可。修改grub启动信息可在ubuntu下修改grub.cfg文件,命令是sudo /boot/grub/grub.cfg 修改其中的timeout 数值可设定grub启动菜单的等待时间,将下面不同系统启动信息的内容重新排序可更改启动顺序,我的系统启动顺序是win7然后xp然后ubuntu,在启动菜单界面停留1秒后直接进入win7,下面是我的grub.cfg文件信息,可供参考,其中我删除了两个test启动项

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}

function recordfail {
set recordfail=1
if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}

function load_video {
insmod vbe
insmod vga
}

insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640x480
load_video
insmod gfxterm
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
set locale_dir=($root)/boot/grub/locale
set lang=zh
insmod gettext
if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=1
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/06_ubuntu_theme ###
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
insmod png
if background_image /boot/grub/splash-image.png ; then
set color_normal=white/black
set color_highlight=white/light-gray
else
set menu_color_normal=white/black
set menu_color_highlight=white/light-gray
fi
### END /etc/grub.d/06_ubuntu_theme ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set cea0e56fa0e55f09
chainloader +1
}
menuentry "Windows xp professional (loader) (on /dev/sda4)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos4)'
search --no-floppy --fs-uuid --set 68f04bc1f04b946a
chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.35-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=8ae80e79-06b4-41ab-8389-beb09d680964 ro quiet splash
initrd /boot/initrd.img-2.6.35-23-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
echo 'Loading Linux 2.6.35-23-generic ...'
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=8ae80e79-06b4-41ab-8389-beb09d680964 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-23-generic
}
### END /etc/grub.d/10_linux ###


### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###





### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
tawnde
帖子: 44
注册时间: 2009-11-23 20:19

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#12

帖子 tawnde » 2010-12-14 9:46

lemontry 写了::em05 终于有人成功了
LSXD删除windows下二级引导的方法我的帖子里面提到了,WIN7系统下点击“开始” -> “所有程序” -> “附件”,右击“命令提示符” -> “以管理员身份运行”,打开“命令提示符”窗口,输入:bcdedit /delete {ntldr} /f 回车即可。修改grub启动信息可在ubuntu下修改grub.cfg文件,命令是sudo /boot/grub/grub.cfg 修改其中的timeout 数值可设定grub启动菜单的等待时间,将下面不同系统启动信息的内容重新排序可更改启动顺序,我的系统启动顺序是win7然后xp然后ubuntu,在启动菜单界面停留1秒后直接进入win7,下面是我的grub.cfg文件信息,可供参考,其中我删除了两个test启动项

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}

function recordfail {
set recordfail=1
if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}

function load_video {
insmod vbe
insmod vga
}

insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640x480
load_video
insmod gfxterm
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
set locale_dir=($root)/boot/grub/locale
set lang=zh
insmod gettext
if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=1
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/06_ubuntu_theme ###
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
insmod png
if background_image /boot/grub/splash-image.png ; then
set color_normal=white/black
set color_highlight=white/light-gray
else
set menu_color_normal=white/black
set menu_color_highlight=white/light-gray
fi
### END /etc/grub.d/06_ubuntu_theme ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set cea0e56fa0e55f09
chainloader +1
}
menuentry "Windows xp professional (loader) (on /dev/sda4)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos4)'
search --no-floppy --fs-uuid --set 68f04bc1f04b946a
chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.35-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=8ae80e79-06b4-41ab-8389-beb09d680964 ro quiet splash
initrd /boot/initrd.img-2.6.35-23-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set 8ae80e79-06b4-41ab-8389-beb09d680964
echo 'Loading Linux 2.6.35-23-generic ...'
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=8ae80e79-06b4-41ab-8389-beb09d680964 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-23-generic
}
### END /etc/grub.d/10_linux ###


### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###





### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
烦请解释一下各行的代码作用啊,我不太明白,谢谢了!
鸟兽鸣以号群兮,草苴比而不芳。
鱼葺鳞以自别兮,蛟龙隐其文章。
故荼荠不同亩兮,兰茝幽而独芳。
头像
lemontry
帖子: 8
注册时间: 2009-10-11 12:39

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#13

帖子 lemontry » 2010-12-16 13:23

:em20 这个文件其实是个grub的配置文件,其中包括grub菜单的外观设置和硬盘上各个系统的引导位置,以及菜单的引导顺序及菜单停留时间,你只要注意我用红色标记的部分就好了,其中timeout是开机时启动引导菜单的显示时间,正常为10,即停留10s,时间有点长,我将其改为1s,这样不至于太影响开机启动时间,下面红色的部分是硬盘上各个系统的位置,正常时ubuntu的信息在前,我将windows的部分(包括7和xp)剪切后放在ubuntu部分的前面,这样开机时菜单显示第一项为win7,第二项为xp,第三项就为ununtu,grub界面停留1s后直接进入win7系统
也可以用软件来调整,在软件仓库就有,好像是startup之类的,具体记不清了
楼下香樟
帖子: 18
注册时间: 2010-10-21 10:08

Re: 原创:win7 xp ubuntu 多系统grub单级引导的简单方法

#15

帖子 楼下香樟 » 2013-05-14 17:15

最近想装个多系统了
G+圈我哦~ https://plus.google.com/u/0/103874277836164960450/posts?hl=zh-CN
回复