本帖最后由 liuzhaoyzz 于 2020-12-31 08:42 编辑
基于svbus驱动+grub4dos或grub2制作的UEFI-RAMOS和BIOS-RAMOS教程 用grub4dosUEFI或grub22020-12-10版本搭配svbus驱动,在wintoflash、2011yaya2007777 、sunsea等诸位大神的努力下,终于攻克了UEFI-RAMOS制作,这是不依赖于微软的ramdisk.sys驱动的全内存的UEFI-RAMOS全新方案,其实制作方法很简单,就是安装驱动+写引导菜单而已,只是还有很多方面没有进行具体验证,有待通过大家的讨论和实战进一步验证其稳定性、兼容性等各个方面,同时期待这个帖子的发布能够进一步引领大家研究基于primo驱动的全内存UEFI-RAMOS方案,起到一个抛砖引玉的作用。本文同时附带地讲了下BIOS-RAMOS下面的引导菜单。 1、软硬件要求 UEFI启动,现在的UEFI固件一般都是64位的,一般需要64位的WIN7、8、10操作系统,目前我成功地制作了基于svbus的WIN7、WIN8、WIN10X64-RAMOS。(注意WIN7企业版和旗舰版原生支持VHD启动,WIN7家庭版和专业版原生不支持VHD启动;WIN8专业版以上似乎都是原生支持VHD启动)推荐用WINNTSETUP安装在固定大小的VHD中,安装的时候优化设置中建议勾选关闭虚拟内存和休眠,物理内存≥VHD盘总空间的50%~70%+4GB,物理内存推荐8G或以上(越大越好),推荐用精简系统。 BIOS启动,WIN7企业版和旗舰版以上因为原生支持VHD启动,制作起来较为方便;XP/2003因为原生不支持VHD启动,需要离线注入svbus驱动才可以(这个我没有尝试),或者在线安装驱动之后拷贝到VHD中(这个我没有尝试),BIOS-RAMOS制作,还是推荐大家直接用芈员外的《RAMOS一键批处理多合一V3.8.7》的方案更好。 2、可能用到的工具和软件 grub4dos UEFI2020-12-15之后的版本或grub22020-12-15之后的版本,bootice,WINPE,WINNTSETUP单文件版,Windows安装包(可能是iso、esd、wim格式)、double drive或者驱动精灵,对于WIN7可能需要红毛樱木的ceomsx或者sinoxer的usb3驱动注入工具备用(WIN8以上不需要)。 微信扫描二维码登录即可下载。(免费的) 3、VHD系统安装 需要注意:建议采用固定大小的VHD。 3.1如果VHD内部采用MBR分区表,只有一个NTFS分区方案(推荐) 对于g4e2020-12-15以后版本,需要用load/EFI/grub/ntfs_x64.efi加载ntfs_x64.efi驱动,否则g4e会出现” boot_image_handle notfound”的错误。 对于grub2,需要加载grub2-latest2020-12-17\arch\x64\builtin.txt最后加上 efiload模块,用build_grub.bat定制得到grubx64.efi,然后用efiload/EFI/grub/ntfs_x64.efi加载ntfs_x64.efi驱动,否则g4e在加载vhd镜像到内存之后会跳转回菜单。 3.2如果VHD内部采用MBR分区表,一个激活的FAT32分区+NTFS分区方案(不推荐) (1)WIN7、WIN8的VHD内部要用FAT32+NTFS双分区,WIN10的VHD我测试了NTFS单分区也可以,分区格式我用的是MBR,这样子可以确保BIOS/UEFI双启动。(2)采用FAT32+NTFS双分区VHD内部的BCD和VHD外部的BCD都需要做相应调整,否则VHD和RAMOS无法启动。具体如下: 1)如果原来VHD内部是单分区,可以进入PE,挂载该VHD,用傲梅分区助手在硬盘前部划分出一个分区出来,创建一个新的FAT32分区,然后格式化,然后用bcdboot修复引导,bcdboot%windisk%:\windows /s %bootdisk%: /l zh-CN /f %bootmode%,注意windows所在的盘符,要选择VHD的NTFS所在分区的那个盘符。批处理网盘里面有。 然后删除NTFS分区里面的EFI和boot目录,(改个名字也可以),否则对于WIN7、WIN8,grub4dos UEFI版本加载的时候仍然会出现” boot_image_handlenot found”的错误。 2)分区调整好之后,还要调整VHD内部的BCD,(VHD的FAT32/ESP)\EFI\Microsoft\Boot\BCD,手工选择启动磁盘和启动分区,启动分区就是VHD内部的那个NTFS分区:
(3)VHD内部的启动分区调整好之后,还要调整VHD外部的BCD,否则用bootmgfw.efi启动vhd的时候会提示0xc000000f错误,(主硬盘FAT32/ESP)\EFI\Microsoft\Boot\BCD:
如果你原来的VHD系统是BIOS模式启动的,想增加UEFI启动模式,可以挂载VHD之后,用bcdboot命令一键修复引导,因为我记住不命令参数,为了方便,我提供一个《一键修复引导.bat》的批处理。 bcdboot %windisk%:\windows/s %bootdisk%: /l zh-CN /f %bootmode%
4、svbus驱动安装 VHD系统安装好之后,进入VHD系统,安装svbus驱动,因为WIN10有比较严格的驱动签名机制,关闭BCD中驱动签名验证实测无效(可能需要按F8关闭签名验证吧,没有实际测试),开源的原版svbus没有通过win10的签名,我联系了朱玛,给svbus驱动添加了HT Srl证书签名。 (1)首先双击EVRootCA.reg注册表文件导入到注册表,否则svbus安装的时候可能会出现“试图将驱动程序添加到存储区时遇到问题”的错误。 (2) 直接右击安装svbus.inf,选择安装,可能会提示“系统策略组禁止安装此设备”,百度了下,开始——运行 ,输入 gpedit.msc 确定——计算机配置——管理模板——系统——设备安装——设备安装限制——禁止安装未有其他策略组描述的设备(在右边),双击后设置为“未配置”或“禁用”——确定。重启下电脑再次安装签名的svbus驱动。 (3)如果上面的方法安装失败,用添加过时硬件的方法添加,右击我的电脑→属性→设备管理器→选择本机→操作→添加过时硬件→安装我手动从列表选择的硬件(高级)→从磁盘安装→选择svbus.inf,信任HT Srl证书确认即可。 【温馨提示】svbus安装好之后最好重启下电脑,以确保驱动生效。 5、VHD碎片消除(不一定必须) VHD安装好之后可能有碎片,BIOS下启动如果碎片超过32个可能不行;UEFI下未验证,消除碎片的办法,不要挂载VHD,在PE中: 方法一,复制粘贴该vhd,副本就是没有碎片的,前提是需要硬盘有足够的剩余空间用于腾挪。 方法二,直接用wincontig分析并整理文件。前提也是需要硬盘有足够的剩余空间。 一般地来说,上面的方法对于机械硬盘很有效。对于ssd不一定有效果,因为ssd有FTL逻辑转换电路中间层,ssd直接格盘拷贝文件进去,应该就是连续的吧。 6、复制引导文件并建立引导菜单 上面的网盘里面有grub4dos和grub2引导器目录结构及其引导菜单示例.rar,解压缩到ESP或者FAT32引导分区,然后对照着自己vhd的路径作相应修改既可,grub4dos、grub2引导器最新版可以从官网下载更新。
grub4dos UEFI默认引导菜单是\EFI\grub\menu.lst文件,文件要用utf-8编码,示例如下: timeout 5 default 0 graphicsmode -1 800 #graphicsmode -1 -1 -1 24:32 #graphicsmode -1 640:800 480:600 24:32 || graphicsmode -1 -1 -1 24:32 find --ignore-floppies --set-root /efi/grub/unifont.hex.gz font /efi/grub/unifont.hex.gz #splashimage /efi/grub/lt.jpg color normal=0x55ffff highlight=0xff00ff helptext=0xffff55 standard=0x55ffff border=0xaaaaaa #color normal=0x07 highlight=0xE1 helptext=0x07 heading=0x02 setmenu --box x=4 w=60 y=6 h=9 l=2 setmenu --keyhelp=1 --lang=zh setmenu --auto-num-on setmenu --keyhelp=1=0x66ff00 setmenu --string=m=2=0x0000000000ffff="G4D维护菜单" setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd HH:mm:ss" setmenu --timeout=90=2=0x88000000ffff setmenu --hotkey -A [F4] commandline
title WIN7X64-SVBUS (/VHD/SX70211.vhd) find --ignore-floppies --ignore-cd --set-root /EFI/grub/ntfs_x64.efi load /EFI/grub/ntfs_x64.efi find --ignore-floppies --ignore-cd --set-root /VHD/SX70211.vhd map --mem --top /VHD/SX70211.vhd (hd) chainloader (hd-1)
grub2默认引导菜单是\boot\grub\grub.cfg文件,文件要用utf-8编码,示例如下: set default=0 set fallback=1 set timeout=2 set pager=20 set grub_draw_border=1
#设定菜单字体及背景颜色 set menu_color_normal=white/black set menu_color_highlight=white/blue
loopback -m ramdisk /boot/grub/unicode.xz loadfont (ramdisk)/grub2/fonts/unicode.pf2 set locale_dir=(ramdisk)/grub2/locale set lang=zh_CN terminal_output gfxterm
#loadfont /boot/grub/fonts/unicode.pf2 #set locale_dir=/boot/grub/locale #set lang=zh_CN #set gfxmode=auto,800x600,1024x768 #terminal_output gfxterm
menuentry "0.Windows" "/EFI/Microsoft/Boot/bootmgfw.efi" --hotkey=0 { search --no-floppy --set --file $2 chainloader $2 }
menuentry "SX70211.vhd-svbus" "/VHD/SX70211.vhd" { search --no-floppy --set=ntfs --file /EFI/grub/ntfs_x64.efi efiload ($ntfs)/EFI/grub/ntfs_x64.efi search --no-floppy --set --file $2 map --mem --rt -l $2 }
menuentry "SX70211.vhd-svbus-ntboot" "/VHD/SX70211.vhd" {
search --no-floppy --set --file $2
map --mem --rt -l $2
ntboot --win --highest=no --efi=(vd0,1)/EFI/boot/bootx64.efi --winload=\\Windows\\System32\\winload.efi (vd0,1)
}
grldr会依次查找\menu.lst→\boot\menu.lst→\boot\grub\menu.lst文件并加载,\menu.lst文件推荐用utf-8编码,菜单示例如下: graphicsmode-1 640:800 480:600 24:32 || graphicsmode -1 -1 -1 24:32 #foregroundFFFFFF #background0000AD find--ignore-floppies --set-root /EFI/grub/unifont.hex.gz font/EFI/grub/unifont.hex.gz #colorwhite/blue blue/yellow light-red/blue 10 #colornormal=0x07 highlight=0xF1 helptext=0x07 heading=0x02 standard=0x07 border=0x09 colornormal=0x07 highlight=0xE1 helptext=0x07 heading=0x02 timeout5 default0
title0 boot Windows by zhaohj find--set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr map() (hd0) map(hd0) () map--rehook find--set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr #rootnoverify(hd0,0) chainloader/ntldr || chainloader /bootmgr
title WIN10X64-SVBUS (/VHD/ltsb-svbus.vhd) find --ignore-floppies --ignore-cd --set-root /VHD/ltsb-svbus.vhd map --mem --top /VHD/ltsb-svbus.vhd (hd0) map (hd0) (hd1) map --e820cycles=-1 map --hook root (hd0,0) chainloader (hd0,0)/bootmgr
7、BIOS设置 前面我们安装系统都是用的windows的bootmgr/bootmgfw.efi作为主引导,微软的引导体系能够过“安全启动”,“安全启动”实质是微软为了加强其垄断地位打压linux,收取保护费的肮脏手段,grub4dos/grub2没有给微软交保护费,因此不能直接通过安全启动,一般地建议在BIOS设置中关闭安全启动,我随便从论坛找了个截图设置来说明问题。启动→安全启动→操作系统类型选择OtherOS。有的BIOS直接有Secure Boot的disable选项更直接。 论坛里面有绕过安全启动的方法,我感觉被微软封杀只是早晚的事情,我没什么研究,在此略过不表(惭愧)。
8、重启进入RAMOS 开机出现logo的时候按F12/F8/F9/F10启动快捷键选择从bootx64.efi或者grubx64.efi启动,然后选择想要启动的VHD-RAMOS即可。
Svbus-UEFI-WIN10-RAMOS测速:
g4e+UEFI-WIN7-RAMOS
g4e/grub2+svbus+win8.1RAMOS 32GB内存=vhd占用6GB+Windows使用了1.6GB+剩余可用24.3GB
9、UEFI-RAMOS未来的技术展望 基于svbus的UEFI-RAMOS启动原理是,grub4dos_UEFI或者grub2_UEFI用EFI_RESERVED_MEMORY类型的map --mem –top xxx.vhd (hd0)加载vhd到内存,配合svbus驱动,让windows识别这个内存盘,并从这个内存盘上面启动。这个启动流程类似于grub4dos_BIOS的map--mem+firadisk/winvblock/svbus磁盘仿真启动。 (1)svbus驱动速度的优化和提升还有一定的空间,svbus内存盘连续读写我测试大概4~5GB/S,而primo6.3.1驱动可以达到16GB/S,是svbus的4倍。 (2)基于svbus制作的RAMOS把物理内存分成了三部分:第一部分是grub4dos/grub2仿真到内存盘;第二部分是windows本身及其应用程序占用的内存;第三部分是剩余可用内存。第一部分内存盘中剩余部分只能用来安装程序,不能转化为第三部分剩余可用内存,造成浪费;而第三部分剩余可用内存也不能转化为第一部分内存盘空间,想安装程序在RAMOS_C盘,剩余空间又太小。 对比下BIOS下primo驱动制作的RAMOS,第一部分和第三部分内存可以互为转化,内存即硬盘,硬盘即内存,你有多大的内存就可以建立多大的内存盘,比如你有32GB内存,就可以建立32GB的内存盘,扣除windows本身运行所需的1.5GB内存之后,RAMOS的C盘空间可以和剩余可用内存在保持总和32-1.5=30.5GB不变的情况下,可以互为转化,C盘大可以安装测试很多软件,充分利用内存。 未来展望(已实现):grub4dos_UEFI或者grub2_UEFI的map xxx.vdf (hd0)加载vdf到虚拟磁盘C:盘,windows从这个虚拟磁盘C:盘接着启动,加载,比如primo内存盘驱动,由primo驱动把xxx.vdf加载到内存盘比如R:盘,这个xxx.vdf里面互换了C:盘和R:盘的mounteddevice,windows可以从这个内存盘C:盘继续启动,这个primo驱动是现成的,速度很快。 Svbus驱动方案,内存盘是由grub4dos/grub2创建的,而primo驱动方案内存盘则是由primo驱动创建的,这是这两个方案的区别。
10、特别鸣谢 不点——grub4dos项目发起人 Bean——grub4dos开发者 Chenall——grub4dos开发者 2011yaya2007777——grub4dos开发者 Wintoflash——grub2开发者 Pauly——bootice作者 Kai Schtrom——开源SVBus驱动作者,来自德国。 Sunsea——超版,svbus源代码级别的解读支持。 朱玛12345678——超版,给svbus驱动制作了签名,确保顺利安装。 Sinoxer——USB3_Drivers_Smart_Install_For_Win7 红毛樱木——ceomsx(USB3及NVME等驱动注入工具) xyzy1008——飞天舞,1.9GB WIN8.1极限精简版,用于测试。 alacran——svbus-UEFI-RAMOS大量测试和反馈,来自墨西哥。 Liuzhaoyzz——超版,grub4dos/grub2+svbus-UEFI-RAMOS大量测试和反馈。 Wuwuzz——grub4dos/grub2问题反馈。 Xianglang——NTFS_x64.efi驱动加载测试和反馈。 t5481194版主——不同品牌电脑启动热键。 等等等等……
|