grub各种安装方法 - 搬马

时间:2024-02-20 09:34:08

目录:

一、在命令行界面,给本机安装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(重启好像会执行检查,时间会长一些),这样就安装好了

    

 

 

 

 

 

 

  

 

posted on 2019-07-10 12:55  搬马  阅读(1092)  评论(0编辑  收藏  举报