目录:
一、在命令行界面,给本机安装grub
(1)使用grub-install命令安装
(2)在grub命令提示符下安装
二、在本机上给其它硬盘安装grub
(1)boot单独分区
(2)boot目录不单独分区
三、在救援模式下安装grub
正文:
注:本机环境为centos6
一、在命令行界面,给本机安装grub
1、使用grub-install命令安装
(1)破坏磁盘分区上MBR
dd if=/dev/zero of=/dev/sda bs=200 count=1 #of后面跟的为整块磁盘,不能为分区,因为分区是不包括MBR扇区的。
(2) 执行grub-install命令
grub-install --root-directory=/ /dev/sda
后面跟的为/dev/sda设备,非分区,因为grub的第一阶段是装在MBR中的,即指定第一阶段安装位置,但是经过测试,后面即使指的为分区,系统会理解为装在该分区所在设备,仍然可以安装成功。
--root-directory指定第二阶段安装位置,此目录下必须要有boot目录,如果没有会安装不了(待验证),如果不指定,默认为当前根。
注:此种方式为三个阶段都会安装,不需要boot目录下有grub文件。但不会生成grub的配置文件(待验证)
2、在grub命令提示符下安装
(1) 在命令行键入grub,进入grub命令提示符界面
~]# grub
(2) 执行grub下的操作命令
grub> root (hd0,0) # 指定根,个人觉得和上面命令中的--root-directory一个意思
grub> setup (hd0) # 指定磁盘,个人觉得和上面的/dev/sda一个意思,如有大神知道的,请告知。
setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
二、在本机上给其它硬盘安装grub
1、boot单独分区
通常情况下boot分区均为第一分区,这次特地将第二分区设为boot分区。
(1) 在/mnt目录下创建boot目录,将sdb2挂载到boot目录。(一定是先创建目录,再挂载)
~]# mount /dev/sdb2 /mnt/boot/
~]# grub-install --root-directory=/mnt /dev/sdb
安装后在会在/mnt/boot目录下多一个grub目录
(2) 在/media目录下创建sysroot目录,将sdb1挂载到sysroot目录
~]# mkdir /media/sysroot
(3) 在sysroot目录下创建目录
sysroot]# mkdir -pv bin dev etc home lib lib64 opt proc root sbin srv sys tmp usr var # 没有创建boot目录,有没有什么问题?
(4) 将内核文件cp至新磁盘
sysroot]# cp /boot/vmlinuz-2.6.32-754.el6.x86_64 /mnt/boot/vmlinuz
sysroot]# cp /boot/initramfs-2.6.32-754.el6.x86_64.img /mnt/boot/initramfs.img
sysroot]# cp /bin/bash /media/sysroot/bin/ # 当init来用
(5) 查看/bin/bash依赖的库,并将其复制到/media/sysroot/lib64目录下
sysroot]# ldd /bin/bash
(6) 创建grub配置文件(grub-install不会自动生成,如果不创建,开机直接进行grub命令行)
default=0
timeout=5
title CentOS 6 (my linux)
root (hd0,1) # 分区从0开始,由于之前设置的是第二分区,所以此处填1
kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash # 在之前的主机上是sdb,换到新主机上为sda;init用bash代替
initrd /initramfs.img # 后面的img别忘加了,另外initrd后面没有等号
(7) 开机启动,正常进入bash。
2、boot不单独分区
(1) 将sdb1挂载到/mnt目录,并创建boot目录(一定先挂载再创建)
~]# mount /dev/sdb1 /mnt/
~]# mkdir /mnt/boot
~]# grub-install --root-directory=/mnt /dev/sdb
~]# cd /mnt
mnt]# mkdir -pv bin dev etc home lib lib64 opt proc root sbin srv sys tmp usr var
mnt]# cp /boot/vmlinuz-2.6.32-754.el6.x86_64 /mnt/boot/vmlinuz
mnt]# cp /boot/initramfs-2.6.32-754.el6.x86_64.img /mnt/boot/initramfs.img
mnt]# cp /bin/bash /mnt/bin/
mnt]# ldd /bin/bash
mnt]# cp /lib64/libtinfo.so.5 /mnt/lib64
mnt]# cp /lib64/libdl.so.2 /mnt/lib64
mnt]# cp /lib64/libc.so.6 /mnt/lib64
mnt]# cp /lib64/ld-linux-x86-64.so.2 /mnt/lib64
mnt]# cp /boot/grub/grub.conf /mnt/boot/grub/
然后修改grub配置信息如下:
default=0
timeout=5
title CentOS 6 (linux)
root (hd0,0)
kernel /boot/vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
initrd /boot/initramfs.img # 如果不加boot,会导致启动就卡住,左上角就一个“_”符号。
终于大功告成了,在这个点卡了两天了。
三、在救援模式下安装grub
(1) 破坏磁盘分区上MBR
dd if=/dev/zero of=/dev/sda bs=200 count=1 #of后面跟的为整块磁盘,不能为分区,因为分区是不包括MBR扇区的。
(2) 插入光盘,先择救援模式
(3) 提示如果发现系统,将发现的系统挂载在了/mnt/sysimage目录下
(4) 如果真的发现了系统,系统会提示已经挂在/mnt/sysimage
(5) 切换根,安装grub(安装要等一会),然后退出,reboot(重启好像会执行检查,时间会长一些),这样就安装好了