|
一、本文所提的必要条件:主板支持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作为第一启动项。告成! |
|