6

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

 2 years ago
source link: https://blog.lilydjwg.me/2014/2/2/load-arch-linux-iso-with-grub2.42632.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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镜像

发送到 Kindle

Category: Linux | Tags: grub grub2 Arch Linux | Read Count: 25798

评论 (15)
views63 说:
8 年前

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

依云 说:
8 年前

大部分是抄自动生成的版本。grub4dos 有以下若干弊端:
1. 不支持中文
2. 支持的文件系统有限
3. 不支持变量
4. 不支持从 ISO 文件载入内核

它有以下优点:
1. 可以将符合条件的 ISO 文件映射为设备并引导
2. 除了配置外,没有额外的位于文件系统的文件

views63 说:
8 年前

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

依云 说:
8 年前

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

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

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

views63 说:
8 年前

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

Star Brilliant 说:
8 年前

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 了。

依云 说:
8 年前

grub4dos 不支持 GPT………………

views63 说:
8 年前

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

雪月秋水 说:
8 年前

我也写过类似的文章~

http://blog.icehoney.me/posts/2013-04-25-grub2-boot-from-iso

MaskRay 说:
8 年前

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

Star Brilliant 说:
8 年前

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

lili 说:
7 年前
lili 说:
7 年前

[取消回复评论]

昵称 登录 E-mail: *
Web:
Twitter:
当有新评论通过 E-mail 通知我

loading captcha image...
(输入验证码)

or Ctrl+Enter


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK