本文来自依云's Blog,转载请注明。
志以备链。
一、准备设备
U 盘、SD 卡、硬盘、移动硬盘均可。不需要重新分区,但是引导部分将被覆盖。不要用太奇葩的分区格式,Windows 和 Linux 下常见的都行。要有地方装 grub。grub 一般情况是安装在第一个分区前的空闲空间(MBR 分区表)或者专门准备的一个分区(GPT 分区表,参见 ArchWiki)。把下回来的镜像文件(如archlinux-2014.01.05-dual.iso
)扔进去。注意据说 BIOS 只能读取 USB 设备前 8G 的内容,因此如果是移动硬盘,最好把文件放第一个分区中。
二、安装 grub2 到设备上(如果目标设备已经安装则跳过)
先挂载镜像所在分区,再执行安装命令。注意:老旧系统可能需要使用grub2-install
命令。
sudo mount /dev/sdb1 /mnt sudo grub-install /dev/sdb --boot-directory=/mnt
三、配置
默认没有配置文件,我这里给出一个:
set UUID=xxxxxxx set ver=2014.01.05 set label=ARCH_201401 set isofile="/archlinux-$ver-dual.iso" insmod part_gpt insmod part_msdos if [ -s $prefix/grubenv ]; then load_env fi if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="0" fi if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" else menuentry_id_option="" fi export menuentry_id_option if [ "${prev_saved_entry}" ]; then set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true fi function savedefault { if [ -z "${boot_once}" ]; then saved_entry="${chosen}" save_env saved_entry fi } function load_video { if [ x$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop insmod efi_uga insmod ieee1275_fb insmod vbe insmod vga insmod video_bochs insmod video_cirrus fi } set menu_color_normal=light-blue/black set menu_color_highlight=light-cyan/blue if [ x$feature_default_font_path = xy ] ; then font=unicode else insmod part_msdos insmod ext2 # 填入自己那个分区的 UUID search --no-floppy --fs-uuid --set=root $UUID font="/grub/fonts/unicode.pf2" fi if loadfont $font ; then set gfxmode=auto load_video insmod gfxterm set locale_dir=$prefix/locale set lang=zh_CN insmod gettext fi terminal_input console terminal_output gfxterm set timeout=500 menuentry "Archlinux Live ISO $ver (x86_64)" { loopback loop $isofile linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=$label img_dev=/dev/disk/by-uuid/$UUID img_loop=$isofile earlymodules=loop initrd (loop)/arch/boot/x86_64/archiso.img }
注意前几行。把UUID
设置成自己 grub 安装的那个分区的 UUID。UUID 可以使用命令lsblk -o +UUID
取得。ver
设置成自己所使用的安装镜像中间的日期部分,label
那里有相应的年份和月份,相应地修改一下。然后保存为/mnt/grub/grub.cfg
就可以了。isofile
指向自己放 ISO 文件的地方,路径也是相对于挂载点的。
四、外部链接
- 雪月秋水的使用GRUB2引导ISO镜像
Feb 03, 2014 08:35:52 AM
grub2 的配置文件真不是人写的。还是 grub4doc 的方便
Feb 04, 2014 08:48:00 PM
大部分是抄自动生成的版本。grub4dos 有以下若干弊端:
1. 不支持中文
2. 支持的文件系统有限
3. 不支持变量
4. 不支持从 ISO 文件载入内核
它有以下优点:
1. 可以将符合条件的 ISO 文件映射为设备并引导
2. 除了配置外,没有额外的位于文件系统的文件
Feb 06, 2014 09:19:41 AM
我也写过类似的文章~
http://blog.icehoney.me/posts/2013-04-25-grub2-boot-from-iso
Feb 06, 2014 05:04:41 PM
加了链接 =w=
Feb 07, 2014 04:31:44 PM
1.中文是支持的。现在有字体文件;
2.文件系统支持 fat、ntfs,exfat、ext1-ext4 其它不知;
3.变量也支持吧;
4可以啊,先映射 iso 为设备再加载就可以了。
变量参考
http://bbs.wuyou.com/forum.php?mod=viewthread&tid=324723&highlight=grub4dos%2B%B1%E4%C1%BF
Feb 07, 2014 06:02:27 PM
映射 ISO 为设备的要求:或者你的内存够大,能装下整个镜像(还要等很久很久很久),或者你的文件在磁盘上是连续的。
变量的支持我没见过有人使用呢。
字体竟然支持了,那是从文件系统上加载的啦?用的什么格式的字体呢?另外,我说的「支持中文」不仅仅是要能显示中文,而且要本地化。
Feb 08, 2014 01:51:23 PM
关于字体 http://code.google.com/p/grub4dos-chenall/
它调用十六进制的字模,本地化没问题,从对应字体提取就好了。
ISO 映射的可以调用 SYSLINUX 的 memdisk 来处理。GRUB2 模拟出来的设备出了 GRUB2 的环境就无效了。
Feb 10, 2014 05:14:31 PM
GRUB2 自带的字体是 GNU 自家的 Unifont 字体。其中汉字部分用的文泉驿的数据。
GRUB2 的中文化是有的。安装的时候系统语言是中文就是中文。但是 GRUB2 的汉化不完全,有时间可以去帮忙。
GRUB2 映射为 ISO 是个坑,GRUB4DOS 那个映射功能可以用。
我有个从 ISO 启动 Ubuntu LiveCD 的配置:http://p.vim-cn.com/cbt8?sh 放在 /etc/grub.d/40_custom 然后 sudo update-grub(ArchLinux 没有 update-grub 命令,要用 sudo grub-mkconfig -o /boot/grub/grub.cfg)就 OK 了。
Feb 15, 2014 04:18:09 PM
好东西呐
Mar 08, 2014 10:46:38 PM
grub4dos 不支持 GPT………………
Mar 11, 2014 03:38:01 PM
是不支持 UEFI。GTP 磁盘还是有办法的
Apr 06, 2014 10:15:39 PM
我現在升級內核都是手動編輯 /boot/grub/grub.cfg 的 linux 命令。grub2 真是麻煩……看來還是得學的……
Apr 06, 2014 10:32:46 PM
你的发行版应该提供 update-grub 或 grub-mkconfig 命令的。
grub2 不算太麻烦。自动生成的命令有很多 if 是为了照顾 grub2 的旧版本和不同硬件配置。去掉 if 很清爽。
Jul 19, 2014 04:55:04 PM
强
Jul 19, 2014 05:27:27 PM
不错,
Oct 09, 2023 09:47:48 AM
依云,有个问题请教一下,我装了 UEFI 的 grub,但是启动按 F12 选择启动项的时候,它提示我 U 盘上的启动是 Legacy 模式,选择这个之后,它直接略过这个项,启动我硬盘上的启动项了。而使用 ventoy 时,它的确是成了 UEFI。想问一下这是为什么,哪里做得有问题吗?
U 盘是 GPT 分区。
efi 分区的创建:
1. fdisk type 选择了 1 EFI SYTEM
2. mkfs.fat -F 32 /dev/sdb1
grub 安装方式:
grub-install --target=x86_64-efi --efi-directory=/mnt/boot
感谢!
Oct 09, 2023 11:50:10 AM
grub-install 得加 --removable 参数,这样才能在 UEFI 默认位置生成 efi 文件。不加这个参数,启动项会写到 UEFI 变量里去,等什么时候主板发现所记录的 efi 文件不在了,它就会清除掉。