Windows 下使用 grub2 制作美观的维护U盘

2023-11-10

本来是想用 grub4dos 的,但是那个的界面比较难看,于是就找到了 grub,就有了这篇文章
这篇文章主要针对 BIOS,UEFI 可能不适用


预览

这是最终效果:
主菜单
实用工具子菜单:
工具提取自老毛桃PE,当然也可以自己从其他地方找
子菜单
文件管理器:
可以从Github上下载
文件管理器
要用到的所有软件/文件:https://pan.baidu.com/s/1FSRUtPi7Md7jaAIUgJypQQ


创建虚拟磁盘

为了方便测试,先使用虚拟磁盘来安装
创建一个虚拟机,并用Daemon Tools Lite(注意安装的时候取消捆绑软件)加载虚拟磁盘
Daemon Tools Lite

右键计算机,选择管理,进入磁盘管理,此时应该会看到有一块新磁盘,记下那是几号磁盘
(注:如果你使用VMware来加载虚拟磁盘的话,这里是不会显示出磁盘的)
磁盘管理

安装 Grub2

从上面的网盘里下载grub-2.0.2-for-windows.zip,解压
解压后的文件

在解压的文件夹里打开 cmd,运行命令:
如果你不知道是 BIOS 还是 UEFI,那 3 个命令都运行一遍

//BIOS请运行:
grub-install --boot-directory=X: --recheck --target=i386-pc \\.\PHYSICALDRIVE2

//UEFI 32请运行:
grub-install --boot-directory=X: --recheck --target=i386-efi \\.\PHYSICALDRIVE2

//UEFI 64请运行:
grub-install --boot-directory=X: --recheck --target=x86_64-efi \\.\PHYSICALDRIVE2

注意X为你的盘符(下同),将\\.\PHYSICALDRIVE2中的2替换为之前记下来的数字

cmd-安装成功
取消挂载磁盘,运行虚拟机,成功出现了界面,不过是命令行模式
grub2命令行

最基本的菜单

下面来新建配置文件
X:/grub/中,新建文件grub.cfg,并加入以下内容:

#这是注释,脚本语法同 Bash
#关机
menuentry "shutdown" {
	halt;
}

#重启
menuentry "reboot"  {
	reboot;
}

保存,启动虚拟机,现在我们有了两个最基本的菜单项
grub2菜单

修改为中文界面

grub-2.02-for-windows\locale\zh_CN\grub.mo文件复制到X:\grub\locale中,并重命名为zh.mo
修改grub.cfg

#加载字体需要的模块
insmod font;  #insmod 加载一个模块
insmod gfxterm;
insmod vbe;

#-----加载中文界面(BIOS)---
#加载字体
loadfont unicode;
set gfxmode=auto;
set gfxpayload=keep;
set gfxterm_font=unicode;
terminal_output gfxterm;
	
#设置语言
set locale_dir=$prefix/locale;
set lang=zh_CN;

#---------菜单项-----------

#重启
menuentry "重启" { reboot; }

#关机
menuentry "关机" { halt; }

卸载磁盘,启动虚拟机,现在应该看得到中文了:
中文菜单界面

美化菜单

你可以在Gnome-look上搜索主题,或者在其他地方也行
搜索的时候要注意必须是 grub 主题
搜索主题页面
下载一个主题,解压,连着文件夹一起复制到X:\grub\themes\下,如果文件夹名字有空格请修改掉
我这里下的是 Poly Light 主题
theme文件夹
修改grub.cfg
(不变的地方省去,下同,在文章的最后有完整的配置文件)

#......

#设置主题文件路径
#注:$prefix 为 grub 所在目录(即 X:/grub/)
#poly-light 修改为你下载的主题的文件夹名字
set theme=$prefix/themes/poly-light/theme.txt;

#---------菜单项-----------
#......


顺便提一下,我下的这个支持多语言,但默认是英文,需要修改一下
如果是英文的话也可以按照这个方法翻译成中文

打开X:\grub\themes\主题名字\theme.txt

支持多语言的主题

找到某个text,按如下图修改,直到再找不到text为止
(注释英文的text,取消注释中文的text
修改示意图

不支持多语言的主题

找到某个text,直接修改引号内的内容,直到再找不到text为止
修改示意图
注意不要把%开头的字符给修改掉了(如%d%s!否则某些文本会失效(比如倒计时提示)

运行虚拟机,查看效果:
美化后的菜单
瞬间比之前的黑窗口要漂亮多了!

启动光盘/硬盘/软盘镜像

grub 原生并不支持直接启动 ISO 文件,需要借助外部工具memdisk来实现
下载syslinux.zip,解压,找到memdisk文件(没有扩展名)
为了保持目录整洁,在X:/下创建目录boot,将memdisk复制到boot文件夹下
boot目录
boot目录下创建pe文件夹,将你的 PE 镜像复制进去(或者其他路径也行)

修改grub.cfg文件:

#设置memdisk路径
set memdisk=/boot/memdisk

#......

insmod memdisk; #加载镜像文件需要的模块

#-----加载中文界面(BIOS)---

#......

#---------菜单项-----------

#启动老毛桃ISO
menuentry "启动老毛桃 PE" {
	echo "正在加载老毛桃 PE...";
	linux16 $memdisk iso raw;
	initrd16 /boot/pe/LaoMaoTao-PE.iso; #修改路径为你的 PE 的路径
}

#重启
menuentry "重启" { reboot; }

#关机
menuentry "关机" { halt; }

如果不是光盘镜像,只需要修改:

#如果是软盘镜像
linux16 $memdisk flopply raw;

#如果是硬盘镜像
linux16 $memdisk harddisk raw;

启动虚拟机,测试:
加载中
成功加载:
老毛桃启动菜单
你也可以专门把PE文件提取出来,只启动PE,具体请百度

加载ISO文件的时间有点久,为了方便查看进度,再增加一个进度条
修改grub.cfg

#......
insmod progress; #启用进度显示
#......

效果图:
加载进度

最终配置文件

下面只需要寻找各种 Win PE、Linux Live CD、工具等,再加进去就OK
这是一个简单的例子:
(文件管理器来自:https://a1ive.github.io/grub2-filemanager/)

#---------配置-----------

#默认启动第一个菜单项
set default=0;

#每一满屏后暂停输出,以免信息太多一闪而过看不清
set pager=1;

#设置菜单的超时时间为30秒
set timeout=30;

#设置主题文件路径
#注:$prefix 为 grub 所在目录(即 X:/grub/)
set theme=$prefix/themes/poly-light/theme.txt;

#设置memdisk路径
set memdisk=/boot/memdisk

#-------加载模块-------
insmod progress; #启用进度显示
insmod vbe;
insmod font; #加载字体需要的模块
insmod gfxterm;
insmod memdisk; #加载镜像文件的模块
insmod png;   #如果主题的背景是.png格式需要的模块
#insmod jpeg; #如果主题的背景是.jpg格式则需要这个

#-----加载中文界面(BIOS)---
#加载字体
loadfont unicode;
set gfxmode=auto;
set gfxpayload=keep;
set gfxterm_font=unicode;
terminal_output gfxterm;
	
#设置语言
set locale_dir=$prefix/locale;
set lang=zh_CN;



#---------菜单项-----------

#从硬盘启动
menuentry "[1]正常启动(Windows)" --hotkey=1 {  #--hotkey=某个按键 :设置快捷键
    if [ 'pc' == $grub_platform ] ; then
        if search --file --set /bootmgr ; then
            chainloader +1
        elif search --file --set /ntldr ; then
            chainloader +1
        fi
    elif [ 'efi' == $grub_platform ] ; then
        if search --file --set /EFI/Microsoft/Boot/bootmgfw.efi ; then
            chainloader /EFI/Microsoft/Boot/bootmgfw.efi
        fi
    fi
}

menuentry "[2]启动老毛桃 PE" --hotkey=2 {
	echo "正在加载老毛桃 PE...";
	
	linux16 $memdisk iso raw;
	initrd16 /boot/pe/LaoMaoTao-PE.iso;
}

#子菜单 - 工具箱
submenu "[3]实用工具箱" --hotkey=3 {
	set image=/boot/imgs/; #镜像文件目录
	load_theme; #重新加载主题
	
	menuentry "[1]运行 Ghost 三合一 (支持 SATA 光驱)" --hotkey=1 {
		echo "正在加载 Ghost 三合一...";
		linux16 $memdisk flopply raw;
		initrd16 $image/3GHOST.IMG;
	}
	
	menuentry "[2]运行 DiskGenius Dos 版" --hotkey=2 {
		echo "正在加载 DiskGenius Dos 版...";
		linux16 $memdisk iso raw;
		initrd16 $image/DGDOS.iso;
	}
	
	menuentry "[3]运行 Max Dos 工具箱" --hotkey=3 {
		echo "正在加载 Max Dos 工具箱...";
		linux16 $memdisk flopply raw;
		initrd16 $image/MAXDOS.IMG;
	}
	
	menuentry "[4]运行硬盘再生器 2011" --hotkey=4 {
		echo "正在加载硬盘再生器...";
		linux16 $memdisk iso raw;
		initrd16 $image/HDDREG.ISO;
	}
	
	menuentry "[5]运行 MHDD V4.6(硬盘检测)" --hotkey=5 {
		echo "正在加载 MHDD V4.6...";
		linux16 $memdisk flopply raw;
		initrd16 $image/MHDD.IMG;
	}
}

#文件管理器
menuentry "[4]Grub 文件管理器" --hotkey=4 {
	echo "正在加载文件管理器......";
	
	#BIOS
	if [ "${grub_platform}" = "pc" ]; then
		linux /boot/file_manager/loadfm;
		initrd /boot/file_manager/grubfm.iso;
	#UEFI(未测试)
	else
		chainloader /grubfm.efi;
	fi 
}

#重启
menuentry "[R]重启" --hotkey=r { reboot; }

#关机
menuentry "[S]关机" --hotkey=s { halt; }


#------------函数-----------

#加载主题
function load_theme {
	set theme=$prefix/themes/poly-light/theme.txt;
}

安装到U盘

很简单,用之前一样的方法安装,只不过替换一下盘符和磁盘号,再将文件都复制到U盘里即可

参考文章/网站

Grub 中文手册:http://www.jinbuguo.com/linux/grub.cfg.html
Grub 官方 Wiki:https://www.gnu.org/software/grub/manual/grub/grub.html
Arch Linux Grub Wiki:https://wiki.archlinux.org/index.php/GRUB_(简体中文)
grub2 详解(翻译和整理官方手册):https://www.cnblogs.com/f-ck-need-u/archive/2017/06/29/7094693.html

设置中文字体:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=308028
自己制作系统U盘:http://wuyou.net/forum.php?mod=viewthread&tid=404623
加载 ISO/IMG 文件:http://blog.sina.com.cn/s/blog_8ea8e9d50101kjfg.html
引导 ISO:https://blog.csdn.net/bush2582/article/details/18428555?locationNum=2
设置子菜单:https://unix.stackexchange.com/questions/62733/how-to-correctly-set-up-the-right-grub-2-default-menu-entry
安装主题:https://blog.csdn.net/w84963568/article/details/78884003
使用 grub2 制作 U盘引导 iso(需搭梯子):http://xstarcd.github.io/wiki/Linux/boot-multiple-iso-from-usb-via-grub2-using-linux.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 下使用 grub2 制作美观的维护U盘 的相关文章

  • 在 python 2 或 python 3 中编写 csv 文件的便携式方法

    在我的 Windows 机器上 我通常在 python 2 中这样做来编写 csv 文件 import csv f open out csv wb cr csv writer f delimiter cr writerow a b c f
  • 有什么工具可以了解 Windows 中正在运行的进程的布局(段)?

    我一直很好奇 该进程在内存中到底是什么样子的 其中有哪些不同的部分 部分 程序 在磁盘上 和进程 在内存中 到底是如何相关的 我之前的问题 有关可执行程序 进程 的内存布局的更多信息 https stackoverflow com ques
  • 如何使用 cython 编译扩展?

    我正在尝试从示例页面编译一个简单的 cython 扩展here http docs cython org src userguide tutorial html在我安装了 Python 2 6 64 位版本的 Windows 7 64 位计
  • NSIS获取参数

    to get n 0值作为字符串 不需要选项 传递给安装程序 我不太明白这个函数的工作原理是什么 GetParameters input none output top of stack replaces with e g whatever
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • TRichEdit和URL高亮问题

    我正在使用当前代码在 TRichEdit 上突出显示 URL procedure TForm1 WndProc var Message TMessage var p TENLink strURL string begin if Messag
  • 如何在以管理员身份运行模式下部署应用程序?

    如何部署应用程序 使其需要管理员权限 而无需最终用户手动执行此操作 我使用 Delphi 2009 来构建该应用程序 您可以使用以下命令通知 Windows 您的应用程序需要以管理员身份运行requestedExecutionLevel应用
  • WIX 工具集 - 自定义操作命令无法正确检测 Windows 10 版本

    我有一个安装程序 可以部署并运行单独的 exe文件以将驱动程序部署到系统 不幸的是 微软似乎已经放弃了对VersionNTWindows 10 及更高版本中的宏 所以我实施了另一篇文章中建议的方法 https stackoverflow c
  • 如何通过批处理脚本检查进程是否正在运行

    如何检查应用程序是否正在从批处理 以及 cmd 文件运行 如果程序已经在运行 我不需要启动另一个实例 我无法更改应用程序以使其仅作为单个实例 该应用程序还可以以任何用户身份运行 我想到的另一种可能性 不需要保存文件 灵感来自于使用grep
  • 为什么Windows 7无法加载程序集PresentationFramework.Aero2?

    我最近完成了我使用 Windows 8 开发的第一个 WPF 应用程序 它在我的机器上运行良好 我的一个朋友也在他的 Windows 8 机器上的 Visual Studio 中运行了它 并且成功了 我在我的机器上使用单击一次安装该程序 它
  • xampp openssl 调用 openssl_pkey_new() 时出错;

    所以我试图让 openssl 在我的 Windows 安装的 xampp 1 7 3 上工作 它是用 OpenSSL 0 9 8l 构建的 这只是我第二次在 amp 安装上安装 openssl 但第一次进展顺利 这是在同一台机器上的 wam
  • 从具有不同活动 perl 版本的另一个 perl 脚本调用 perl 函数

    我们有两个版本的 Active perl 5 6 和 5 24 我们有必须在 Active perl 5 24 版本 采用 TLS 1 2 版本 上执行的 Web 服务 并且需要从 Active perl 5 6 版本调用 我们使用的是wi
  • C++中最大化窗口时的问题

    我的程序需要任意最大化当前桌面上的任何窗口 我通过调用来实现这一点ShowWindow hWnd SW MAXIMIZE 其中 hWnd 是HWND我想要最大化的窗口 当该行代码执行时 相关窗口 此处为记事本 如下所示 一切看起来都很好 除
  • 在进程完成之前,Windows cmd.exe 中的管道不会转发标准输出?

    考虑 Windows 命令 shell cmd exe 中的管道 C gt feed filter 直到进料过程运行完成之后 进料过程的标准输出似乎才达到过滤过程的标准输入 这种类型的 缓冲 可能会导致长时间运行的馈送过程的输出消息出现烦人
  • 从 Windows 命令行打印 PDF

    我正在尝试打印当前目录中的所有 pdf 文件 当我在 cmd 中调用这个 bash 脚本时 singlepdf sh C Program Files x86 Adobe Reader 10 0 Reader AcroRd32 exe t G
  • Windows - 启动时自动启动特定应用程序

    在 Windows 操作系统中开发信息亭应用程序 当机器启动时 必须依次发生 3 件事 Node js 服务器启动 包含 Web 应用程序的浏览器以 kiosk 模式启动 另一个客户端应用程序启动 是否有一个实用程序可以轻松完成此操作 或者
  • 在 Windows 中使用脚本添加代理设置例外

    我使用的是 Windows 7 并且有一个在启动时初始化的代理配置 每次重新启动电脑时 我都必须重新打开代理设置并手动添加新的代理例外 IP 地址 例如每次重新启动时 www google com www yahoo com www fac
  • 30000 毫秒后量角器超时

    我正在尝试将量角器 e2e 测试集成到我的巡航控制中 我正在使用以下测试规范 describe index function var ptor it should have a title function browser get http
  • 为什么不鼓励在 Windows 上将 PPM perl 模块与 Strawberry perl 一起使用?

    任何人都可以解释为什么人们会发表此评论吗 我在 stackoverflow 上看到了几个线程 像这个 https stackoverflow com questions 6643939 installing modules using st
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl

随机推荐

  • java Json转string方法

    Java中Json转string方法 Java利用Json lib包进行json对象转换成string JSONArray转换string方法实例 public static void main String args throws JSO
  • springboot配置类编写

    以配置一个DataSource为例 其他的类似 接下来我就给大家介绍具体步骤 1 首先写两个类 并添加注解 ConfigurationProperties 表明这是一个配置类 其中一个为dataSource的配置类 一个为jdbc的配置类
  • 为什么docker容器启动不了?

    sudo docker run d centos bin bash创建容器之后 使用docker ps a 发现容器已经停止 再使用docker start id 启动容器之后 观察ps a 的操作时间 发现容器其实已经启动过 但是马上就停
  • wsl 修改 hostname

    我在使用Windows 的 wsl 功能的时候发现在默认情况下 wsl 的 hostname 是和当前 windows 系统的主机名称保持一致的 当我尝试使用 hostname 修改主机名时 发现并不能完全修改 在重新进入后又会恢复成原来的
  • IDEA忽略文件,防止git提交不想提交的文件的探索

    使用IDEA开发有 一段时间了 从陌生到熟悉的过程算是很平稳的度过 感谢IntelliJ IDEA交流群 群号244908708 里面的群友对我提供的帮助 感谢群主的github上面提供的资料 这篇文章是探索git忽略文件提交的一些方面的研
  • 麦克风音频服务器未响应,耳机和麦克风都没坏,插上电脑后为什么不能语音聊天?...

    耳机和麦克风都没坏 插上电脑后为什么不能语音聊天 以下文字资料是由 历史新知网www lishixinzhi com 小编为大家搜集整理后发布的内容 让我们赶快一起来看一下吧 耳机和麦克风都没坏 插上电脑后为什么不能语音聊天 先确认你的电脑
  • 第十七章 Chisel基础——数据类型

    一 Chisel的常见问题 在学习Chisel前 应该熟悉一些常见问题 这些问题在编写Chisel的任何时候都应该牢记 Chisel是寄宿在Scala里的语言 所以它本质还是Scala 为了从Chisel转变成Verilog 语言开发人员开
  • 径向基神经网络(RBF)回归预测MATLAB实现超详细

    在机械学习算法的过程中 我们常用到一种神经网络就是径向基神经网络 这是一种使用径向基函数作为激活函数的人工神经网络 这种神经网络也有很多用途 比如时间序列预测 数据分类以及回归预测等等 今天主要讲解径向基神经网络在MATLAB的实现过程 对
  • 003_linux驱动之_file_operations函数

    一 解析file operations函数 解析002 linux驱动之 register chrdev注册字符设备中的问题 二 file operations结构原型 使用举例 三 从上面的原型可以看出file operations函数有
  • 不走索引的情况

    1 条件字段选择性弱 查出的结果集较大 不走索引 2 where条件等号两边字段类型不同 不走索引 3 优化器分析的统计信息陈旧也可能导致不走索引 4 索引字段 is null 不走索引 5 对于count 当索引字段有not null约束
  • nn.Conv2d——二维卷积运算解读

    PyTorch学习笔记 nn Conv2d 二维卷积运算解读 nn Conv2d 二维卷积运算 代码案例 一般用法 输出卷积运算的参数 填充方式 零填充 镜像填充 复制填充 循环填充 官方文档 nn Conv2d 二维卷积运算 torch
  • Could not load 'clearsilver-jni' java.library.path = out/host/linux-x86/lib make: *** [out/target/common/docs/api-stubs-timestam

    Could not load clearsilver jni java library path out host linux x86 lib make out target common docs api stubs timestamp
  • 关于C++代码中中文字符的错误或者乱码的解决办法

    在文件头加入下面这段内容 pragmaexecution character set utf 8 如果还不行就同时用Notepad 等一些工具转换成utf 8的编码 如不出意外已经解决问题了
  • Halcon卡尺测量

    halcon之机器视觉测量 卡尺测量 read image ImageModel image png get image size ImageModel Width Height dev open window 0 0 Width Heig
  • 内网信息收集-入门概念

    内网信息收集 在内网渗透测试环境中 有很多设备和防护软件 例如Bit9 ArcSight Mandiant 等 它们通过收集目标内网的信息 洞察内网网络拓扑结构 找出内网中最薄弱的环节 信息收集的深度 直接关系到内网渗透测试的成败 1 内网
  • 树莓派4b刷入openwrt做旁路由

    你需要准备 树莓派4b主板 1 tf卡 16GB 1 tf卡读卡器 Win32DiskImager软件 1 首先下载符合树莓派4b的openwrt固件 由于目前官方暂未提供 此处需要自行编译 2 以管理员运行方式打开Win32DiskIma
  • 1.认识多态 2.多态调用成员的特点 3.多态优势与弊端

    1 多态前提是有继承关系 并且有方法的重写 2 创建多态对象 Fu f new Zi 等号左边父 右边子 1 多态调用成员变量 调用的就是 Fu f new Zi Fu的 2 多态调用成员方法 调用的就是 被覆盖掉的父类 也就是子类 1 多
  • 通过终端上传文件至github

    1 打开终端 config自己的name和email git config global user name 使用者名称 git config global user email 邮箱 2 建立本地git仓库 cd到你的本地项目根目录 就是
  • python3 open()函数调用方法简单示例

    python3 open 函数调用简介 Python open 方法用于打开一个文件 并返回文件对象 在对文件进行处理过程都需要使用到这个函数 如果该文件无法被打开 会抛出 OSError 注意 使用 open 方法一定要保证关闭文件对象
  • Windows 下使用 grub2 制作美观的维护U盘

    本来是想用 grub4dos 的 但是那个的界面比较难看 于是就找到了 grub 就有了这篇文章 这篇文章主要针对 BIOS UEFI 可能不适用 预览 这是最终效果 实用工具子菜单 工具提取自老毛桃PE 当然也可以自己从其他地方找 文件管