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
关闭虚机,将硬盘拷贝到一个新的虚机挂载