(其实这篇备忘本来应该放在我的博客中的,不过鉴于我一直搭不好博客环境;先前的静态博客环境被我给删了,懒的再搭,就先贴在这里好了。希望能有用。)
基本思路:分别安装GRUB(一次为BIOS安装,另一次为UEFI安装)于同一个设备(本文中为U盘)上,两种系统有两个不同的配置文件。
需求:
过程中不使用Windowz;
目标BIOS应该可以从GPT磁盘上成功引导(注:据说某些buggy的系统,如某些i原厂板,不支持自使用GPT的磁盘上以Legacy模式引导);
给U盘以GPT分区,视容量可分二到三个区(或更多):
一个「BIOS boot」区:GRUB在以传统(Legacy)方式自使用GPT的存储设备引导时需要用到此区,不需要格式化,1MiB就好。类型编号:fdisk中为4,gdisk中为ef02
一个「EFI System」区:主板上的UEFI固件会在使用GPT的存贮设备中搜寻这个类型的分区中的EFI executable,格式为FAT32(vfat),尺寸按需分配(至少260MiB,见此)。类型编号:fdisk中为1,gdisk中为ef00
(可选)一个ext4区:这个就看U盘的尺寸了,如果是8G或16G的话可能会需要再分个ext4出来(请记得FAT32不支持4GiB以上文件)
分完之后的输出(fdisk -l截取):
Disk /dev/sdb: 14.9 GiB, 16008609792 bytes, 31266816 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A72C7351-ACF1-4BA6-857B-C682AFB678FB
Device Start End Sectors Size Type
/dev/sdb1 2048 4095 2048 1M BIOS boot
/dev/sdb2 4096 536575 532480 260M EFI System
/dev/sdb3 536576 31266782 30730207 14.7G Linux filesystem
格式化分区:
EFI System区,FAT32(/dev/sdb2,其中150909_EFI是卷标):
# mkfs.vfat -F 32 -n 150909_EFI /dev/sdb2
可选的ext4(/dev/sdb3,150909为卷标,选项为闪存设备优化,按需调整):
# mkfs.ext4 -b 4096 -c -O ^has_journal -L 150909 -m 0 /dev/sdb3
# tune2fs -i 0 /dev/sdb3
挂载ESP(EFI System分区)并安装GRUB(BIOS):
# mount /dev/sdb2 /mnt
# grub-install --boot-directory=/mnt/boot --target=i386-pc --compress=xz --locales= --themes= /dev/sdb
挂载分区并往里面复制iso镜像。
编辑GRUB配置(BIOS),本例中位于/mnt/boot/grub/grub.cfg,以下为样板,其中isofile指定的是iso在分区中的路径,变量volume_label为分区卷标:
insmod acpi
insmod all_video
insmod gfxterm
loadfont /boot/grub/fonts/unicode.pf2
set gfxmode=auto
set gfxpayload=keep
export gfxmode
export gfxpayload
terminal_input console
terminal_output gfxterm
set volume_label=150909
export volume_label
search --set=root --label $volume_label
set default=0
set timeout=-1
menuentry '[loopback]archlinux-2015.09.06-x86_64' {
set isofile='/data/iso/archlinux-2015.09.06-x86_64.iso'
loopback loop $isofile
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201509 img_label=$volume_label img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/x86_64/archiso.img
}
menuentry 'Boot HDD' {
chainloader +1
}
menuentry 'Reboot'{
reboot
}
menuentry 'Halt'{
halt
}
安装GRUB(UEFI):
# mkdir -p /mnt/EFI/boot
# echo 'configfile ${cmdpath}/grub.efi.cfg' > /tmp/grub.tmp
# grub-mkstandalone -O x86_64-efi --modules='part_gpt' --fonts=unicode --locales= --themes= -o /mnt/EFI/boot/bootx64.efi boot/grub/grub.cfg=/tmp/grub.tmp
配置GRUB(UEFI),本例中位于/mnt/EFI/boot/grub.efi.cfg,配置文件样板与刚才的一样。
如需要更多引导项(Fedora・Ubuntu 等),参见这里。
最近编辑记录 泉夏禾 (2015-09-14 14:58:19)
The community-maintained ArchWiki is the primary resource that should be consulted if issues arise.
离线
参考出处:ArchWiki:UEFI ArchWiki:GRUB
The community-maintained ArchWiki is the primary resource that should be consulted if issues arise.
离线
感谢分享,这个还真是近来比较关心的事情,可以机子都太老,没一个支持uefi的
离线