2
2
2014
17

grub2 引导 Arch Linux 安装镜像的方法

本文来自依云'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 文件的地方,路径也是相对于挂载点的。

四、外部链接

  1. 雪月秋水的使用GRUB2引导ISO镜像
Category: Linux | Tags: grub grub2 Arch Linux | Read Count: 28883
Avatar_small
views63 说:
Feb 03, 2014 08:35:52 AM

grub2 的配置文件真不是人写的。还是 grub4doc 的方便

Avatar_small
依云 说:
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

Avatar_small
views63 说:
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

Avatar_small
依云 说:
Feb 07, 2014 06:02:27 PM

映射 ISO 为设备的要求:或者你的内存够大,能装下整个镜像(还要等很久很久很久),或者你的文件在磁盘上是连续的。

变量的支持我没见过有人使用呢。

字体竟然支持了,那是从文件系统上加载的啦?用的什么格式的字体呢?另外,我说的「支持中文」不仅仅是要能显示中文,而且要本地化。

Avatar_small
views63 说:
Feb 08, 2014 01:51:23 PM

关于字体 http://code.google.com/p/grub4dos-chenall/
它调用十六进制的字模,本地化没问题,从对应字体提取就好了。
ISO 映射的可以调用 SYSLINUX 的 memdisk 来处理。GRUB2 模拟出来的设备出了 GRUB2 的环境就无效了。

Star Brilliant 说:
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 了。

Avatar_small
依云 说:
Mar 08, 2014 10:46:38 PM

grub4dos 不支持 GPT………………

Avatar_small
views63 说:
Mar 11, 2014 03:38:01 PM

是不支持 UEFI。GTP 磁盘还是有办法的

MaskRay 说:
Apr 06, 2014 10:15:39 PM

我現在升級內核都是手動編輯 /boot/grub/grub.cfg 的 linux 命令。grub2 真是麻煩……看來還是得學的……

Star Brilliant 说:
Apr 06, 2014 10:32:46 PM

你的发行版应该提供 update-grub 或 grub-mkconfig 命令的。
grub2 不算太麻烦。自动生成的命令有很多 if 是为了照顾 grub2 的旧版本和不同硬件配置。去掉 if 很清爽。

Ben 说:
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
 

感谢!

Avatar_small
依云 说:
Oct 09, 2023 11:50:10 AM

grub-install 得加 --removable 参数,这样才能在 UEFI 默认位置生成 efi 文件。不加这个参数,启动项会写到 UEFI 变量里去,等什么时候主板发现所记录的 efi 文件不在了,它就会清除掉。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com