使用rEFInd实现OpenWRT / LEDE支持UEFI GPT启动

实际上我使用的Hyper-v第一代虚拟机运行LEDE17真的非常的稳定,网速各方面都非常满意了。最近可能没事找事的把Windows Server2012 R2 Hyper-v第一代虚拟机里面也是运行的非常稳定的CentOS7,重新安装到Hyper-v第二代虚拟机里。据说第二代Hyper-v性能更好更稳定,实际上使用了感觉好像并没有什么区别,可能心理作用感觉是快了点。感觉最明显的是WordPress运行速度快了,特别是NextCloud16运行速度更明显的快了。也许是之前WordPress由于测试安装了许多插件然后又删除,NextCloud之前版本13的时候速度很快的,后来版本一直更新到了16之后,卡到不想用,日志里的错误一堆堆的,所以干脆推到了重新来。其实在第二代Hyper-v虚拟机里运行CentOS7速度感受不明显,WordPress与NextCloud16也许是重新部署的原因,速度快了很多,特别是NextCloud16将各种的警告与错误都一个个的配置与排除了。

那么剩下Hyper-v第一代的LEDE17是不是也应该搬到第二代上面来,并且现在LEDE又跟OpenWRT合并了,最新的版本是OpenWRT18.06.4。好吧,下载最新版本的OpenWrt18.06.4测试一下看看能否运行在二代虚拟机上吧。

经过测试,OpenWrt18.06.4无法在第二代Hyper-v上启动,最根本的原因就是Hyper-v第二代虚拟机固件是UEFI的,与第一代的BIOS根本的不同。详细的区别我也不懂,反正就是不兼容BIOS的MBR启动方式。

折腾了2天,中间试过很多种方法,失败了无数次之后终于搞好了。

GRUB2,但是无论怎么搞都失败告终,实际上还是不懂这个东西怎么配置。

配置这个GRUB2从来就没有成功的启动过,因为我使用CentOS7来配置的。只是安装GRUB2这个家伙到EFI启动分区,这个步骤都出错失败了很多次,最后安装了grub2-efi-x64-modules才顺利完成。然后我CentOS都被他搞得无法启动了,最后放弃了…

rEFInd,其实也不懂怎么配置,因为这些说明文档都是英文的,看得头晕眼花就是没搞懂什么意思,百度机器翻译的中文也是理解不了。

最开始使用rEFInd弄过可以识别OpenWrt的启动文件vmlinuz,可以启动但无限重启,不能正常启动工作,一直无限启动又重启反复循环。其中我也截屏看了启动过程记录,大概是启动过程需要加载参数,无法加载正确的参数导致启动失败,然后就重启的。

时间花了不少,最后不但没有成功,还把人都给累坏了,累并失望中决定了放弃折腾 … …

第三天,回想起前两天付出的代价,真的不甘心就此罢休,继续翻阅rEFInd的英文文档,终于发现了其中的一些玄机!其实非常的简单就能实现UEFI启动,只是配置文件这里没有配置好而已。太多的细节与失败的过程就不说了,下面就记录整理正确的配置步骤。

一、磁盘分区

在Hyper-v第二代虚拟机新建一个动态扩展的10GB磁盘,然后使用Gparted分区软件分区。我下载了一个Gparted-live-1.0.0-3-amd64.iso启动盘来为此硬盘分区,启动盘启动之后,一路按照默认选项进入。

首先空硬盘先要建立GPT分区表(我已经建好的,这里是演示步骤)

建立GPT分区表后,建立一个128MB的分区,格式化为FAT16,然后标记为boot、esp

好了,剩下的就可以分作一个分区并格式化为ext4即可。(剩下的空间,我这里分了2个分区,之前是测试,实际上剩余的空间就一个分区即可)

二、拷贝文件并配置refind.conf

磁盘分区完成之后,将该磁盘挂载到CentOS7系统里,拷贝必要的启动文件与OpenWrt系统文件以及进行修改refind.conf配置文件。

下载好refind-cd-0.11.4.iso启动光盘,CentOS挂载光盘,打开并将里面的EFI文件夹包括里面的所有文件,复制到OpenWRT虚拟磁盘的128MB引导分区。

修改配置文件refind.conf,该文件所在目录 /EFI/boot/refind.conf

配置文件内容如下:

# refind.conf
# Configuration file for the rEFInd boot menu

timeout -1

scan_all_linux_kernels false

menuentry OpenWRT {
    icon EFI/boot/icons/os_linux.png
    loader EFI/boot/vmlinuz
    options "root=PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd"
}

配置文件里需要特别注意的是 options "root=PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd" 这个参数

之前的所有失败,我想都是应该在这里出问题。

下面这参数内容来自OpenWrt引导分区的grub.cfg配置文件

root=PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd

其中 PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a 这个我们需要通过终端命令 blkid ,获取OpenWrt虚拟磁盘的PARTUUID,或者在使用Gparted分区的时候做好记录,然后正确填好这个值。

貌似重新调整磁盘分区就会改变PARTUUID的值,重新格式化好像也会改变吧?我忘记了,反正这个值是需要提别注意不能出错

OpenWrt引导分区的grub.cfg配置文件完整内容如下:

serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 --rtscts=off
terminal_input console serial; terminal_output console serial

set default="0"
set timeout="5"
set root='(hd0,msdos1)'

menuentry "LEDE" {
	linux /boot/vmlinuz root=PARTUUID=24ed3806-02 rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd
}
menuentry "LEDE (failsafe)" {
	linux /boot/vmlinuz failsafe=true root=PARTUUID=24ed3806-02 rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd
}

OpenWRT官网下载最新稳定版的OpenWrt18.06.4,只需下载generic-rootfs.tar.gz与vmlinuz这两个文件即可。

vmlinuz这个文件直接复制到128MB引导分区 /EFI/boot/ 里面即可

generic-rootfs.tar.gz这个直接用CentOS7里面的 归档管理器 打开,里面只有个一点.的文件夹直接右键提取到OpenWRT虚拟磁盘的ext4分区即可。

所有工作都已经完成了,在CentOS7系统移除OpenWRT虚拟磁盘,将虚拟盘挂载到新建的Hyper-v第二代虚拟机开机即可顺利完美启动运行了!!

需要注意的是第二代虚拟机固件这里,不要勾选 启用安全启动

完了。

还有很多细节,但不知怎么描述。

OpenWrt18.06.4我觉得有点问题,或者说可能在我的虚拟机里运行有点问题。进入软件包,刷新列表所有都签名通过Signature check passed.唯独 /luci/Packages.gz 这里出现Signature check failed. Remove wrong Signature file。然后,就不能搜索下载到官方的与luci相关的软件包,最基本的中文语言界面都无法搜索安装,这个Bug不能忍,搞不懂什么原因!还有并没发现OpenWrt18.06.4有什么出众的功能,就连主界面总览的CSS框架都没有优化好。不能尝鲜,还是用回LEDE17.01.7吧!还是喜欢LEDE多一点,原本的OpenWrt并不支持Hyper-v虚拟机运行的,是OpenWrt内部发生矛盾,一部分成员离开后创建了LEDE才支持Hyper-v虚拟机,我是还记得很清楚的。现在LEDE又与OpenWrt合并了,发布的新版本OpenWrt18,之后就再没有LEDE的版本发布了。所以LEDE17我觉得是最值得收藏的一个版本,没有之一了。

关于OpenWRT下载哪个压缩包合适我使用,这里是有点纠结。

combined-ext4.img.gz 这个是img镜像文件,别用dd if=/xx/xx.img of=/dev/sdb 这会造成我们建立的分区出问题,千万别使用这个命令。

generic-rootfs.tar.gz 所以我使用这个压缩包文件,不带引导分区的。

网上很多这些第三方固件都支持UEFI启动,为什么要那么累的自己折腾!

第三方的都靠得住?母猪都会上树!!

“使用rEFInd实现OpenWRT / LEDE支持UEFI GPT启动”的一个回复

发表评论