QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7088|回复: 8

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

[复制链接]
发表于 2012-8-10 05:44:40 | 显示全部楼层 |阅读模式
双硬盘安装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来启动。
非常感谢!!!
发表于 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.
回复

使用道具 举报

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

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

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

使用道具 举报

发表于 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
}
回复

使用道具 举报

 楼主| 发表于 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 ###
回复

使用道具 举报

发表于 2012-8-13 08:13:38 | 显示全部楼层
期待mgc3
回复

使用道具 举报

 楼主| 发表于 2012-8-27 15:47:42 | 显示全部楼层
这个。。不解决问题啊

原帖由 ghw 于 2012-8-13 08:13 发表
期待mgc3
回复

使用道具 举报

发表于 2012-9-3 18:03:19 | 显示全部楼层
好青年 !!
回复

使用道具 举报

 楼主| 发表于 2012-9-13 19:37:09 | 显示全部楼层
求助!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 19:23 , Processed in 0.093529 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表