tcs_chen 发表于 2012-8-10 05:44:40

双硬盘安装ubuntu 12.04和win7启动问题

双硬盘安装ubuntu 12.04和win7启动问题

两块SATA硬盘,一块是SSD (sda),一块是普通的普通的SATA硬盘(sdb)我先在SSD上安装了Win7,使用了整个SSD的空间
然后在普通SATA硬盘上安装了12.04,建立了个128MB的/boot挂载分区,和1TB的/挂载分区。
现在的情况是,可以通过修改bios启动设置来进入不同的系统,但是非常麻烦。。
如果选择从ubuntu那块硬盘启动的话,grub提供的自动生成启动菜单里最后一个menuentry是windows 7, 但是选中之后,有错误,启动不了win7系统。
我想知道如何修改/boot/grub/grub.cfg来使这个grub启动菜单能工作正常,也就是从这个菜单里可以选择ubuntu或者win7来启动。
非常感谢!!!

dgy18787 发表于 2012-8-10 10:22:26

首先要挂载windows所在分区,通过grub-probe探测UUID
grub-probe --target=fs_uuid /media/sda1/bootmgr
路径看你挂载到哪里了

然后在grub.cfg里面加入这些东西
menuentry "Windows7" {
    insmod part_msdos
    insmod ntfs
    insmod search_fs_uuid
    insmod ntldr   
    search --fs-uuid --no-floppy --set=root 你获取的UUID
    ntldr /bootmgr
}

应该就可以了。

不过grub2之后都是有命令生成配置文件的,建议你修改那个之后通过命令生成grub.cfg.

jiangtao9999 发表于 2012-8-10 13:55:21

计算机启动时,被启动的那个硬盘会被识别为第一个硬盘,但启动完 GRUB ,顺序就又回到系统重新根据硬件接口识别的顺序。
这样导致启动失败的。Windows 到硬盘顺序重新识别好像比较靠后,Linux 因为是内核识别,而内核本身启动时,又没有需要再一次读取硬盘的地方,所以 Linux 启动很容易,Windows 启动会出问题……

以前的 GRUB 1 ,可以用一个交换的功能使 GRUB 顺序和实际顺序变成一致。GRUB2 我就不知道了。

我建议,grub 装到第一个硬盘的 MBR 上吧……

zy_sunshine 发表于 2012-8-10 14:33:57

menuentry "Windows XP" {
    insmod ntldr
    search --no-floppy --set=root -f /ntldr
    drivemap -s (hd0) ${root}
    ntldr /ntldr
}

menuentry "Windows 7" {
    insmod ntldr
    search --no-floppy --set=root -f /bootmgr
    drivemap -s (hd0) ${root}
    ntldr /bootmgr
}

tcs_chen 发表于 2012-8-10 15:13:39

Thank you guys!
I tried dgy18787's method. I get the UUID, but using the following grub.cfg is not success full...


My current grub.cfg is as follows:


#
# 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 efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
}

insmod part_gpt
insmod ext2
set root='(hd1,gpt3)'
search --no-floppy --fs-uuid --set=root 90c9a503-fdce-4176-afda-8f3a5c853bbc
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=auto
load_video
insmod gfxterm
insmod part_gpt
insmod ext2
set root='(hd1,gpt2)'
search --no-floppy --fs-uuid --set=root 95614555-a1ff-4992-9ed7-5ef6c46f3687
set locale_dir=($root)/grub/locale
set lang=en_US
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, with Linux 3.2.0-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        gfxmode $linux_gfx_mode
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='(hd1,gpt2)'
        search --no-floppy --fs-uuid --set=root 95614555-a1ff-4992-9ed7-5ef6c46f3687
        linux        /vmlinuz-3.2.0-23-generic root=UUID=90c9a503-fdce-4176-afda-8f3a5c853bbc ro   quiet splash $vt_handoff
        initrd        /initrd.img-3.2.0-23-generic
}
menuentry 'Ubuntu, with Linux 3.2.0-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='(hd1,gpt2)'
        search --no-floppy --fs-uuid --set=root 95614555-a1ff-4992-9ed7-5ef6c46f3687
        echo        'Loading Linux 3.2.0-23-generic ...'
        linux        /vmlinuz-3.2.0-23-generic root=UUID=90c9a503-fdce-4176-afda-8f3a5c853bbc ro recovery nomodeset
        echo        'Loading initial ramdisk ...'
        initrd        /initrd.img-3.2.0-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/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
        insmod part_gpt
        insmod ext2
        set root='(hd1,gpt2)'
        search --no-floppy --fs-uuid --set=root 95614555-a1ff-4992-9ed7-5ef6c46f3687
        linux16        /memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
        insmod part_gpt
        insmod ext2
        set root='(hd1,gpt2)'
        search --no-floppy --fs-uuid --set=root 95614555-a1ff-4992-9ed7-5ef6c46f3687
        linux16        /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
    insmod search_fs_uuid
    insmod ntldr   
    search --fs-uuid --no-floppy --set=root C0503DF5503DF330
    ntldr /bootmgr


#        insmod part_msdos
#        insmod ntfs
#        set root='(hd0,msdos1)'
#        search --no-floppy --fs-uuid --set=root C0503DF5503DF330
#        chainloader +1



#        search --no-floppy --fs-uuid --set=root 1ce5-7f28
#        chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi

#        search --no-floppy --fs-uuid --set=root E3C9E316-0B5C-4DB8-817D-F92DF00215AE
#        search --no-floppy --fs-uuid --set=root 188CC8858CC85EBE
#        chainloader +1
}
### END /etc/grub.d/30_os-prober ###

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

ghw 发表于 2012-8-13 08:13:38

8) 8) 8) 期待mgc3

tcs_chen 发表于 2012-8-27 15:47:42

这个。。不解决问题啊

原帖由 ghw 于 2012-8-13 08:13 发表 http://forum.linuxfans.org/images/common/back.gif
8) 8) 8) 期待mgc3

scorp!o 发表于 2012-9-3 18:03:19

好青年 !!

tcs_chen 发表于 2012-9-13 19:37:09

求助!!!
页: [1]
查看完整版本: 双硬盘安装ubuntu 12.04和win7启动问题