centos8系统中使用blsgcfg来解析文件生成菜单项。 菜单项配置文件在/boot/loader/entries/下,每一个文件表示一个启动项。 启动项的命名,官网建议:包括机器ID(/etc/machine-id),内核版本(uname -r)和OS标识符(/etc/redhat-release),以此来保证id的唯一性。 参数定义

  • title:启动菜单标题 可以随意自定义
  • version 版本信息,决定菜单项的顺序
  • linux 内核文件
  • initrd 临时根文件系统
  • options 内核参数
  • id 系统的唯一标识,用来指定那个系统

自定义菜单项后可以使用 grub2-set-default id 来启动指定系统,其本质上是修改了 /boot/grub2/grubenv 中saved_entry 的值

点击访问原文


以下为个人整理 第一阶段的内容存储位置: /dev/sda 的前 446 字节;

dd if=/dev/sda of=/dev/sdb bs=1 count=446

第二阶段的启动数据位置: /boot (/dev/sdx1-boot分区)下的grub[2]

mount /dev/sdb1 /mnt/boot
grub2-install --root-directory=/mnt/ /dev/sdb

第三阶段的内容存储位置:

find / -name "vmlinuz*"
cp -avf /path/vmlinuz /mnt/boot/vmlinuz-`uname -r`

以下生成过程需要等待一会,大小在26~30M

mkinitrd -f /mnt/boot/initramfs-`uname -r`.img `uname -r`

拷贝命令(使用脚本):

cd /mnt/root
wget https://code.aliyun.com/centosx/init/raw/master/homework/copycmd.sh
chmod +x ./copycmd.sh
copycmd.sh
CMDS(输入待拷贝的命令,空格分隔)

拷贝驱动(执行前替换命令中的e1000为指定驱动):

cp `modinfo e1000|sed -nr 's/^filename.* (\/.*)$/\1/p'` /mnt/root/lib/

以上文件准备完成后,尝试切换根目录:

chroot /mnt/root

如有异常,根据提示继续修改 GRUB相关文件准备:

cp /etc/default/grub /etc/default/grub.bak
vim /etc/default/grub

grub文件的大致格式:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto root=/dev/sda2  rhgb quiet net.ifnames=0"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

保存退出后生成对应配置文件:

grub2-mkconfig -o /mnt/boot/grub2/grub.cfg

关闭虚机,将硬盘拷贝到一个新的虚机挂载