码迷,mamicode.com
首页 > 系统相关 > 详细

linux学习之:grub的应用

时间:2016-01-03 00:57:59      阅读:335      评论:0      收藏:0      [点我收藏+]

标签:操作系统   grub   配置文件   


grub: GRand Unified Bootloader是一个多重操作系统启动管理器,用来引导不同的操作系统。
    grub legacy
        stage1 : mbr
        stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;提供grub文件系统驱动和基本磁盘分区
        stage2:磁盘分区(/boot/grub/)
        
        配置文件:/boot/grub/grub.conf <-- /etc/grub.conf (符号链接文件)
    
        stage2及内核等通常放置于一个基本磁盘分区:
            功用:
                (1) 提供菜单、并提供交互式接口
                    e:编辑模式,用于编辑菜单;
                    c:命令模式,用于交互式接口;
                (2) 加载用户选择的内核或操作系统
                    允许传递参数给内核
                    可隐藏此菜单
                (3) 为菜单提供了保护机制
            
            如何识别设备:
                (hd#,#) 第几个磁盘的第几个分区;
                    hd#:磁盘编号,用数字表示;从0开始编号
                    # :分区标号,用数字表示;从0开始编号
                    (hd0,0)
            
        grub的命令行接口:    

     help:获取帮助列表           
     help KEYWORD:详细帮助信息            
     find(hd#,#)/PATH/TO/SOMEFILE:定位或查找文件            
     root(hd#,#)把哪个分区设置为根设备           
     kernel /PATH/TO/KERNEL_FILE:
         设定本次启动时用到的内核文件; 额外还可以添加许多内核支持使用的cmdline参数;
         例如:init=/path/to/init, selinux=0
     initrd /PATH/TO/INITRAMFS_FILE:
         设定为选定的内核提供额外的ramdisk;必须与内核版本号完全匹配,否则无法被内核装载;
         boot:引导启动选定的内核;

        手动在grub命令行接口启动系统:
             技术分享        
        配置文件:/boot/grub/grub.conf
            配置项:
                default=#:设定默认启动的菜单项;落单项(title)编号从0开始
                timeout=#:指定菜单项等待选项选择的时长;
                splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:

                                      # 指明菜单背景图片文件路径;gimp 640x480
                hiddenmenu:隐藏菜单;
                password [--md5] STRING:菜单编辑认证;
                title TITLE:定义菜单项“标题”,可出现多次
                    root(hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
                    kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
                    initd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件;
                    password [--md5] STRING:启动选定的内核或操作系统时进行认证;

            grub-md5-crypt命令 :生成对应要保护的认证密码

            技术分享           
        进入单用户模式:
            (1) 编辑grub菜单(选定要编辑的title,而后使用e命令);
            (2) 在选定的kernel后附加
                  1,s,S或single都可以;
            (3) 在kernel所在行,键入“b”命令; 



 
        安装grub:
            (1) grub-install
                  grub-install  - - root-directory=ROOT /dev/DISK

              示例:

               ●当前虚拟机上重新添加一块硬盘                

技术分享

               ●将该硬盘进行分区,sbd1为boot分区(200MB),sdb2为交换分区(2GB),sdb3为根分区(5GB),分区完成后使用cat命令查看配置文件如下;

                    技术分享

              ●在/mnt下创建boot目录,并把sdb1挂载至/mnt/boot目录下,安装grub程序:    

        [root@shakura ~]#  mkdir /mnt/boot
        [root@shakura ~]#  mount /dev/sdb1 /mnt/boot/
        [root@shakura ~]#  grub-install --root-directory=/mnt /dev/sdb

              ●复制当前系统的内核和initrd文件至/mnt/boot/目录下,编辑grub.conf文件         

        [root@shakura ~]# cp /boot/vmlinuz-2.6.32-573.el6.x86_64 /mnt/boot/vmlinuz
        [root@shakura ~]# cp /boot/initramfs-2.6.32-573.el6.x86_64.img /mnt/boot/initramfs.img
        [root@shakura ~]# vim /mnt/boot/grub/grub.conf
         default=0
         timeout=5
         title CentOS DIY        
            root (hd0,0)
            kernel /vmlinuz ro root=/dev/sda3 selinux=0 init=/bin/bash 
            initrd /initramfs.img

             ●在mnt目录下创建sysroot目录,并创建系统常用文件夹       

       [root@shakura ~]# mkdir /mnt/sysroot
       [root@shakura sysroot]# mount /dev/sdb3 /mnt/sysroot/
       [root@shakura ~]# cd /mnt/sysroot 
       [root@shakura ~]# mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media

            ●复制当前系统下的/bin/bash至/mnt/sysroot/目录下,并复制bash所用的库文件  

       [root@shakura sysroot]# cp /bin/bash /mnt/sysroot/bin/
       [root@shakura sysroot]# ldd /bin/bash    # 查看bash所需要的库文件
       linux-vdso.so.1 =>  (0x00007ffc97596000)
       libtinfo.so.5 => /lib64/libtinfo.so.5 (0x000000355b600000)
       libdl.so.2 => /lib64/libdl.so.2 (0x0000003553200000)
       libc.so.6 => /lib64/libc.so.6 (0x0000003553600000)
       /lib64/ld-linux-x86-64.so.2 (0x0000003552e00000)
      [root@shakura sysroot]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/
      [root@shakura sysroot]# cp /lib64/libdl.so.2  /mnt/sysroot/lib64/
      [root@shakura sysroot]# cp /lib64/libc.so.6 /mnt/sysroot/lib64/
      [root@shakura sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/
      [root@shakura sysroot]# chroot /mnt/sysroot/  # 切换至根目录,查看bash是否可用
      bash-4.1# exit

            ●接下来新建一个虚拟机使用现有的这块sdb硬盘,启动此虚拟机,可以发现自己DIY的linux;            

技术分享

技术分享

技术分享

        (2) grub
                  grub> root(hd#,#)   

             现在我们手动破坏当前磁盘上的mbr,再安装grub。在破坏之前先备份一下,注意:别破坏分区表,只破坏前446个字节。   

       [root@shakura ~]# dd if=/dev/sda of=/root/mbr.bak count=1 bs=512  #备份mbr信息
       记录了1+0 的读入
       记录了1+0 的写出
       512字节(512 B)已复制,0.000241106 秒,2.1 MB/秒
       [root@shakura ~]# dd if=/dev/zero of=/dev/sda bs=200 count=1
       记录了1+0 的读入
       记录了1+0 的写出
       200字节(200 B)已复制,0.000220939 秒,905 kB/秒
       [root@shakura ~]# grub-install --root-directory=/ /dev/sda  #手动安装grub
       Installation finished. No error reported.
       This is the contents of the device map //boot/grub/device.map.
       Check if this is correct or not. If any of the lines is incorrect,
       fix it and re-run the script `grub-install‘.

       # this device map was generated by anaconda
       (hd0)     /dev/sda

              至此,修复成功。

            grub> setup (hd#)

         [root@shakura ~]# grub
           Probing devices to guess BIOS drives. This may take a long time.
           GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
           [ Minimal BASH-like line editing is supported.  For the first word, TAB
           lists possible command completions.  Anywhere else TAB lists the possible
           completions of a device/filename.]
           grub> root (hd0,0)
           root (hd0,0)
           Filesystem type is ext2fs, partition type 0x83
           grub> setup (hd0)
           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
           Done.

                  esc /boot: linux rescue(破坏后重启,使用紧急救援模式)

                设置为光盘启动

技术分享

            进入修复模式

技术分享    

            选择语言,这里我直接选择默认了

技术分享

            选择键盘模式:

技术分享

技术分享

技术分享


 技术分享

            至此,重启系统,卸载光盘,系统修复成功。

本文出自 “南极熊” 博客,转载请与作者联系!

linux学习之:grub的应用

标签:操作系统   grub   配置文件   

原文地址:http://jianweixs.blog.51cto.com/9095175/1730887

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!