win7 ubuntu 12.04 xp双盘3系统grub配置

06-15

盘1: ubuntu12.04 win7

盘2: xp

sudo update-grub 的结果只有win7 和 ubuntu,点击win7进入系统,看到了win7和xp,win7可以启动,但是xp不能。于是在网上搜索找到了一个别人的xp和ubuntu共存的grub文件。

发现我的少了一句话,drivemap -s (hd0) ${root},于是加上就ok了。

即在/boot/grub/grub.cfg中添加如下内容即可

menuentry "Windows xp" --class windows --class os {

insmod ntfs

set root='(hd0,1)'

search --no-floppy --fs-uuid --set=root 4C844B34844B2036

drivemap -s (hd0) ${root}

chainloader +1

}

set root=(hd0,1),代表第0块磁盘的第一个分区,其中硬盘号是从0开始,分区号是从1开始。我的xp是在第0个分区。我的xp和ubuntu不再同一个磁盘,grub中ubuntu显示在hd1所以xp必然在hd0,而系统在c:盘,所以是第一个分区

整个的grub文件如下:

#

# 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 video_bochs

insmod video_cirrus

}

insmod part_msdos

insmod ext2

set root='(hd1,msdos6)'

search --no-floppy --fs-uuid --set=root 2636856c-62cc-4195-8995-148eb8cfb30c

if loadfont /usr/share/grub/unicode.pf2 ; then

set gfxmode=auto

load_video

insmod gfxterm

insmod part_msdos

insmod ext2

set root='(hd1,msdos6)'

search --no-floppy --fs-uuid --set=root 2636856c-62cc-4195-8995-148eb8cfb30c

set locale_dir=($root)/boot/grub/locale

set lang=zh_CN

insmod gettext

fi

terminal_output gfxterm

if [ "${recordfail}" = 1 ]; then

set timeout=-1

else

set timeout=10

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

if background_color 44,0,30; then

clear

fi

### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###

function gfxmode {

set gfxpayload="$1"

if [ "$1" = "keep" ]; then

set vt_handoff=vt.handoff=7

else

set vt_handoff=

fi

}

if [ ${recordfail} != 1 ]; then

if [ -e ${prefix}/gfxblacklist.txt ]; then

if hwmatch ${prefix}/gfxblacklist.txt 3; then

if [ ${match} = 0 ]; then

set linux_gfx_mode=keep

else

set linux_gfx_mode=text

fi

else

set linux_gfx_mode=text

fi

else

set linux_gfx_mode=keep

fi

else

set linux_gfx_mode=text

fi

export linux_gfx_mode

if [ "$linux_gfx_mode" != "text" ]; then load_video; fi

menuentry 'Ubuntu,Linux 3.2.0-23-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail

gfxmode $linux_gfx_mode

insmod gzio

insmod part_msdos

insmod ext2

set root='(hd1,msdos6)'

search --no-floppy --fs-uuid --set=root 2636856c-62cc-4195-8995-148eb8cfb30c

linux /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=2636856c-62cc-4195-8995-148eb8cfb30c ro quiet splash $vt_handoff

initrd /boot/initrd.img-3.2.0-23-generic-pae

}

menuentry 'Ubuntu,Linux 3.2.0-23-generic-pae (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail

insmod gzio

insmod part_msdos

insmod ext2

set root='(hd1,msdos6)'

search --no-floppy --fs-uuid --set=root 2636856c-62cc-4195-8995-148eb8cfb30c

echo '载入 Linux 3.2.0-23-generic-pae …'

linux /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=2636856c-62cc-4195-8995-148eb8cfb30c ro recovery nomodeset

echo '载入初始化内存盘…'

initrd /boot/initrd.img-3.2.0-23-generic-pae

}

### END /etc/grub.d/10_linux ###

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

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

### BEGIN /etc/grub.d/20_memtest86+ ###

menuentry "Memory test (memtest86+)" {

insmod part_msdos

insmod ext2

set root='(hd1,msdos6)'

search --no-floppy --fs-uuid --set=root 2636856c-62cc-4195-8995-148eb8cfb30c

linux16 /boot/memtest86+.bin

}

menuentry "Memory test (memtest86+, serial console 115200)" {

insmod part_msdos

insmod ext2

set root='(hd1,msdos6)'

search --no-floppy --fs-uuid --set=root 2636856c-62cc-4195-8995-148eb8cfb30c

linux16 /boot/memtest86+.bin console=ttyS0,115200n8

}

### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###

menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {

insmod part_msdos

insmod ntfs

set root='(hd0,msdos1)'

search --no-floppy --fs-uuid --set=root 4C844B34844B2036

chainloader +1

}

### END /etc/grub.d/30_os-prober ###

menuentry "Windows xp" --class windows --class os {

insmod ntfs

set root='(hd0,1)'

search --no-floppy --fs-uuid --set=root 4C844B34844B2036

drivemap -s (hd0) ${root}

chainloader +1

}

### 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 ###