如果当前能登入 CentOS 系统,则可登入后使用 grub-install
命令安装 grub。
该种方式会安装 grub 的全阶段,包括 mbr 中的 stage1、mbr 随后扇区的 stage1_5、硬盘设备分区中 boot
目录下的 stage2。
下面以在另一块磁盘上安装 grub 为例。
1、新添加一块磁盘,使用 fdisk
分区如下:
/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、关闭当前虚拟机,新建自定义虚拟机,选择现有虚拟磁盘:
13、选择之前新添加的虚拟磁盘:
14、启动新创建的虚拟机:
可以看到已经启动了在新磁盘上安装的 grub。
15、启动系统:
16、结束,成功通过 grub 引导启动了自定义的系统。
评论区