LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2299|回复: 3

在EFI/GPT硬盘上利用grub2实现Ubuntu/Win7等多重启动

[复制链接]
发表于 2011-10-7 15:59:38 | 显示全部楼层 |阅读模式
一、本文所提的必要条件:主板支持UEFI的BIOS,改成GPT分区格式的硬盘,并已经装好Windows 7/Ubuntu Linux,一个容量不限的U盘,确定Ubuntu所在分区的设备名,比如/dev/sda5。不同品牌主板的UEFI BIOS可能有一定的差异。笔者使用的是华擎Z68 Pro3-M主板。据我所知Intel的主板对EFI支持的比较好。
二、步骤
1、将U盘格式化成fat32格式,在Linux下可以使用命令行(假如U盘设备是/dev/sdb的话)
mkfs.vfat /dev/sdb1
2、进入Ubuntu,如果不能直接进入的话可先从Ubuntu光盘以Live方式启动,打开Term控制台(可以直接进入Ubuntu的可以跳过这个部分),执行:
sudo -s
mkdir /mnt/ubuntu && mount /dev/sda5 /mnt/ubuntu
mount --bind /dev /mnt/ubuntu/dev
mount -t sysfs /sys /mnt/ubuntu/sys
mount -t proc /proc /mnt/ubuntu proc
chroot /mnt/ubuntu bash
3、安装grub-efi-amd64-bin
apt-get install grub-efi-amd64-bin grub-efi-amd64
grub-install
上面这个命令不需带任何参数。
4、更新启动菜单
update-grub2可以加入windows7启动项,但并不能启动成功,我们需要作些修改。直接修改/boot/grub/grub.cfg这个文件并不明智。Ubuntu在更新内核时会执行update-grub2升级更新这个文件,可以用这种办法自动加入Windows7作为默认启动项:
cd /etc/grub.d
cp 40_custom 06_custom
然后用编辑器打开06_custom,在最后一行中拷入:
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
        insmod part_gpt
        insmod fat
        set root='(hd0,gpt1)'
        search --no-floppy --fs-uuid --set=root 46bd-600e
        chainloader ($root)/EFI/Boot/bootx64.efi
}
注意search --no-floppy --fs-uuid --set=root 46bd-600e这行中的46bd-600e实际就是/dev/sda1即efi引导分区的uuid,可以在/dev/disk/by-uuid中查到(Ubuntu 11.10 beta2中的grub-probe有bug,这里我们并不一定需要grub-probe来获取efi分区的uuid。做完这些后我们就可以执行update-grub2来更新/boot/grub/grub.cfg了。
5、插上U盘,在自动挂载后在U盘中建立/efi/boot目录:
mkdir -p efi/boot
然后将Ubuntu中的/boot/grub/grub.efi文件拷入U盘中的/efi/boot下,并将其改名为bootx64.efi
6、重新启动机器,将进入cmos将EFI:USB作为第一启动项。告成!
发表于 2011-10-7 19:36:07 | 显示全部楼层
謝謝樓主分享。

我真落後仍用 Grub legacy,也不知 Grub2 的類用途,看來要趕上 Grub2 班車才行。
回复 支持 反对

使用道具 举报

发表于 2011-11-17 13:19:51 | 显示全部楼层
楼主的意思是只能通过u盘启动win7?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-1-7 13:11:44 | 显示全部楼层
Post by allisfree;2155273
楼主的意思是只能通过u盘启动win7?


可以这么说。因为我不愿随意更改硬盘EFI分区里的东西。
回复 支持 反对

使用道具 举报

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

本版积分规则

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