Rexdf

The devil is in the Details.

关于GPT+EFI双系统启动菜单

| Comments

物理机上面我一直都是多系统,现在基本是Ubuntu+Win的方式,对于多系统的启动菜单,之前一直都是采用MBR+grub方案,这个方案成熟,而且绝大部分工具都是基于这个方式的。今年在新笔记本上面额外添加一块250G的SSD之后,起初也是用的MBR方案。

我之前的方案:

1T机械硬盘,把Win8.1格式化掉用来保存数据,上面的Linux保留。

250G的SSD,仅仅MBR分一个区,然后空余10%作为三星数据冗余。

启动方式:BIOS的引导MBR在1T的机械硬盘位置上(因为第二个机械硬盘位置似乎在北桥芯片上面,所以我想在似乎放SSD比放机械硬盘少发一些热量). BIOS –> /dev/sda(1T)MBR –> /dev/sda9 (/boot)

–>1 /dev/sda8(/) /dev/sda10(/home)

–>2 /dev/sdb1(win8.1,200+G)

现在的方案:

1T的机械硬盘上面Ubuntu系统保留不动。

250G的SSD改成GPT分区方式。

启动方式:EFI启动。

具体操作步骤

首先备份所有C盘数据,没必要删除,后面直接删除SSD的全部分区,因为多删除一次就是SSD的一次寿命。

然后把电脑启动方式调整到EFI启动,这个对于自己电脑,setup里面找找很容易找到,我发现网上的与我的似乎都不一样。

然后准备Win8.1的U盘,和Ubuntu的U盘,这两个系统的U盘都是都是直接可以在UEFI模式下启动的,不像一直感觉还不错的大白菜,那个600+M的EFI工具制作出来的U盘只能在MBR方式才能启动。

  • 安装Win8.1

在EFI模式下启动Win8.1的U盘,可以明显发现与BIOS方式启动慢很多,然后启动过程画面略有不同。不过最终都是一样的安装界面。

首先,由于前面说过大白菜的EFI模式U盘,在EFI模式无法启动,因此我也不想使用Diskgenius来分区。其次,在EFI模式启动的Win8.1安装程序,只能安装到GPT分区的磁盘上面,而且Win安装盘实际上操作Win范围内的磁盘工具绰绰有余。最后,Diskgenius处理GPT格式没问题,但是Win8.1会要求300M的恢复分区(Recovery Partion, RE),100M的EFI分区(又叫系统分区),以及128M的MSR分区。参考这里 , 以及 这里。可以看出这个EFI和MSR分区非常特殊,Diskgenius应该还不能一键生成,而按照官方最准确无误的方法就是diskpart,既然如此何必使用PE呢。

我采简单高效的办法是,进入Win8.1的安装界面,选择手动安装之后,在分区选择界面,直接把 磁盘1 也就是我的SSD上面分区全部删掉,然后把整个 磁盘1 选为安装目标。Win8.1安装程序会自动格式化成GPT分区,以及自动生成RE+EFI+MSR+C的四个分区,大小应该是200M+100M+128M+余下的全部。

接下去就没什么注意点了,常规系统安装。吐槽下,Win8.1被禁止有理由啊,想想我每次重装,我的IE收藏夹(包括顺序),我的桌面背景,开机画面背景,我的Skydrive文档,甚至我的豆沙绿注册表等都被直接同步下来。免去了Win7以及之前的配置烦恼。

我开机之后直接先断网,然后驱动,重启,Office2013+Viso2013+VSU2013+AdobeCC2014+Acrobat11.0.7+Maya2015大约不到一个小时就OK了。然后联网开始漫长的Update下载,与此同时,安装杀毒,QQ,输入法啥的。以及安装Firefox+Opera并同步。再开启全局VPN,然后同步Chrome扩展。吐槽:想想现在还有隐私吗?显然没有了,所以我基本都是用隐私模式常开的状态。

  • 修复Ubuntu启动

我现在状态是一块曾经用BIOS+MBR启动的另一块硬盘上的Ubuntu要修复启动成EFI启动。

插入Ubuntu的U盘直接就能EFI方式启动的(需要注意的是Win8.1必须重启同时按键盘才能进入启动选项,关机然后开机可能不行,因为Win可能采用的快速关机)。成功进入EFI模式启动Ubuntu的U盘,标志还是比较明显的,反正与BIOS启动U盘界面明显不同。

然后应该选择try Ubuntu进入图形界面测试环境,同时开启网络(因为我需要从MBR启动迁移到EFI上面,需要联网安装新的软件)。

启动gparted,不要进行任何写操作,我们只是看看那个重点中的重点EFI分区在哪里。我这里是/dev/sdb2.

这里要注意下sudo fdisk -l 是没有办法检测到RE,EFI,MSR这三个分区的。这就是为何要启动图形界面gparted的原因。

#提升到root,方便下面操作而已
sudo -s

#挂载Ubuntu的原来分区,根据你自己的情况挂载
mount /dev/sda8 /mnt
mount /dev/sda9 /mnt/boot
mount /dev/sda10 /mnt/home

#把efi也挂载一下,后面要用到,必须注意要先挂载/mnt,然后再挂载/mnt/efi
mkdir /mnt/efi
mount /dev/sdb2 /mnt/efi
#测试下,如果看到EFI蓝色目录就是对的,如果什么都没有或者不是EFI,则挂载错了分区。
ls /mnt/efi

#准备工作,以及chroot,这在arch好lfs都是家常便饭
mount --bind /dev /mnt/dev
mount -t sysfs /sys /mnt/sys
mount -t proc /proc /mnt/proc
chroot /mnt bash 

#另外开一个终端,里面输入 cat /etc/resolv.conf,然后把屏幕输出复制到下面的chroot中
#启动网络
echo nameserver:127.0.0.1 > /etc/resolv.conf
#更新软件缓存
apt-get update
#安装grub-efi
apt-get install grub-efi-amd64-bin grub-efi-amd64
#修复grub启动
grub-install --efi-directory=/efi
update-grub2

现在已经做好了Ubuntu的启动文件,但是还没法启动到Ubuntu。上面代码部分源头来自这里。在chroot环境继续进行:

cd /EFI
#备份原来的bootx64.efi
mkdir backup_Boot
mv EFI/bootx64.efi backup_Book/bootx64.efi
#使用Ubuntu的efi二进制来启动系统
cp Ubuntu/grubx64.efi Boot/bootx64.efi
exit
exit

现在重启就可进入Ubuntu,然后再次执行 update-grub2 并修改 /boot/grub/grub.cfg 即,完成全部工作。双系统完美启动。

本文全部命令以及操作都是rexdf凭借记忆写出来的,如有笔误欢迎指出。

Comments