Linux基础(58)之安装并使用grub引导启动CentOS内核

Linux基础(58)之安装并使用grub引导启动CentOS内核

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

如果当前能登入 CentOS 系统,则可登入后使用 grub-install 命令安装 grub。
该种方式会安装 grub 的全阶段,包括 mbr 中的 stage1、mbr 随后扇区的 stage1_5、硬盘设备分区中 boot 目录下的 stage2。
下面以在另一块磁盘上安装 grub 为例。
1、新添加一块磁盘,使用 fdisk 分区如下:

image.png

/dev/sdb1 做 boot 分区,100M;
/dev/sdb2 做 swap 分区,2G;
/dev/sdb3 做根分区,5G;

2、格式化 /dev/sdb{1,3}ext4 格式的文件系统:

mke2fs -t ext4 /dev/sdb1
mke2fs -t ext4 /dev/sdb3

3、将 /dev/sdb2 格式化为 swap 分区:

mkswap /dev/sdb2

4、创建 /mnt/boot 目录,将 /dev/sdb1 挂载至该目录:

mkdir /mnt/boot -p
mount /dev/sdb1 /mnt/boot

5、使用 grup-install 将 grub 安装到 /dev/sdb1

grub-install --root-directory=/mnt /dev/sdb

--root-directory:指定安装时的根目录,安装时会自动去找根目录下的 boot 目录;
/dev/sdb:安装 grub 的磁盘设备;

6、此时 grub 就已经安装到 /dev/sdb1 中了,查看:

[root@zze ~]# ls /mnt/boot/
grub  lost+found

7、将内核和 ramfs 复制到 /dev/sdb1 中:

cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz
cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs.img

8、编辑 grub 的配置文件:

vim /mnt/boot/grub/grub.conf

default=0
timeout=5
title My CentOS
	root (hd0,0)
	kernel /vmlinuz ro root=/dev/sda3 selinux=0 init=/bin/bash
	initrd /initramfs.img

9、挂载新磁盘中的根文件系统所在分区及 /dev/sdb3,创建基本目录:

mkdir /mnt/sysroot -p
mount /dev/sdb3 /mnt/sysroot
cd /mnt/sysroot
mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media

10、复制 bash 程序以及其依赖库到 /dev/sdb3 的对应目录:

cp /bin/bash /mnt/sysroot/bin/
ldd /bin/bash
cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/
cp /lib64/libdl.so.2 /mnt/sysroot/lib64/
cp /lib64/libc.so.6 /mnt/sysroot/lib64/
cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/

11、切换根文件系统测试:

[root@zze sysroot]# chroot /mnt/sysroot/
bash-4.1# 

chroot 命令切换根文件系统后会自动执行 ${SHELL} -i,即 /bin/bash,所以可以看到 bash 程序自动执行了。

12、关闭当前虚拟机,新建自定义虚拟机,选择现有虚拟磁盘:

image.png

13、选择之前新添加的虚拟磁盘:

image.png

14、启动新创建的虚拟机:

image.png

可以看到已经启动了在新磁盘上安装的 grub。

15、启动系统:

image.png

16、结束,成功通过 grub 引导启动了自定义的系统。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/linux-base-58.html

Buy me a cup of coffee ☕.