zoukankan      html  css  js  c++  java
  • linux基础之grub基本应用

    一、基本概念

    GRUB(boot  loader):  GRand Unified Bootloader

    两个版本:
      grub 0.x: grup legacy   grub 1.x: grub2

    grub legacy: 

    运行阶段:
        stage1: mbr
        stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在分区上的文件系统
        stage2: 磁盘分区(/boot/grub/)
    配置文件:/boot/grub/grub.conf  <-- /etc/grub.conf
    stage2及内核通常放置于一个基础磁盘分区
        功用:      1. 提供菜单,并提供交互接口     e:编辑模式,用于编辑菜单     c:命令模式,交互式接口      2. 加载用户选择的内核或操作系统      允许传递参数给内核      可隐藏此菜单     3. 为菜单提供了保护机制      为编辑菜单进行认证      为启用内核或操作系统进行认证
    如何识别设备:
        (hd#,#): 第#块磁盘第#个分区,#为从0开始编号,grub2从1开始编号
    grub的命令行接口
            help:获取帮助列表
            help  KEYWORK:详细帮助信息
            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> root (hd0,0)
        grub>kernel /vmlinuz-2.6.32-754.el6.x86_64 ro  root=/dev/mapper/vg0-root quiet
        grub>initrd /initramfs-2.6.32-754.el6.x86_64.img
        grub>boot
    配置文件:/boot/grub/grub.conf (/etc/grub.conf)
                配置项:
                    default #: 设定默认启动的菜单项,菜单项编号从0开始
                    timeout=#: 指定菜单项等待用户选择的等待时长
                    splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE: 指明菜单背景图片路径
                    hidemenu: 隐藏菜单
                    password [--md5] STRING:菜单编辑认证
                    title TILE: 定义菜单项的标题,可出现多次
                        root (hd#,#): grub查找stage2及kernel文件所在设备分区,为grub的“根”
                        kernel /PATH/TO/BMLINUZ_FILE [PARAMETERS]:启动的内核
                        initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件            
                        password [--md5] STRING:启动选定的内核或操作系统时进行认证
    grub-md5-crypt命令:返回输入的密码的MD5格式的密码

    二、grub应用

    如果root账号密码忘了,如何登录系统: 进入单用户模式,执行passwd命令修改密码后重新登录系统
            1.编辑grub菜单(选定要编辑的title,使用e命令)
            2.在选定的kernel后附加   1、s、S或single
            3.在kernel所在行,键入“b”命令
         4. 执行passwd命令修改密码
         5. 切换运行级别:init 3
    如果grub损坏,如何修复grub进入系统: dd if=/dev/zero of=/dev/sda count=1 bs=300  //用0覆盖mbr前446个字节中的一部分数据,让grub损坏
       第一种情况:grub损坏后系统还没重启的情况下,修复系统就需要安装grub
         安装方案一 : 使用grub-install命令,这种方式不要求系统上存在boot目录和grub目录以及stage1、stage1_5、stage2,命令执行后会自动安装好这些目录和文件   # grub-install --root-directory=ROOT /dev/DISK  //比如本机: grub-install --root-directory=/ /dev/sda

       安装方案二 :使用grub命令进入命令提示符,这种方式就要求系统上必须存在boot目录,grub目录以及stage1、stage1_5、stage2   grub> root (hd#,#)  //指明root根所在的位置    grub> setup (hd#)  //指明磁盘

      第二种情况: grub损坏后系统也重启了
         进入紧急救援模式:
            连接CD/DVD原装光盘,选择rescue system...直到start shell,
            切换根:chroot /mnt/sysimage
            安装grub:grub-install --root-directory=/ /dev/sda
            退出救援模式:exit
            重启:reboot
    添加一块新硬盘,实现能够单独运行bash的系统
          [root@alen ~]# fdisk /dev/sdc  //分区 sdc1 sdc2 sdc3
          [root@alen ~]# mke2fs -t ext4 /dev/sdc1  //格式化sdc1和sdc3为ext4格式
          [root@alen ~]# mke2fs -t ext4 /dev/sdc3
          [root@alen ~]# mkswap /dev/sdc2  //格式化sdc2为swap格式

          [root@alen ~]# mkdir /mnt/boot  //mnt下创建boot目录       [root@alen ~]# mount /dev/sdc1 /mnt/boot  //sdc1挂载到/mnt/boot,作为sdc磁盘的boot分区
          [root@alen ~]# grub-install --root-directory=/mnt /dev/sdc  //在boot分区上安装grub,安装grub会根据给出的指定目录寻找/boot目录           Probing devices to guess BIOS drives. This may take a long time.           Installation finished. No error reported.           This is the contents of the device map /mnt/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'.           (fd0) /dev/fd0           (hd0) /dev/sda           (hd1) /dev/sdb           (hd2) /dev/sdc       [root@alen ~]# ls /mnt/boot           grub lost+found
          [root@alen ~]# ls /mnt/boot/grub           device.map iso9660_stage1_5 stage1 xfs_stage1_5           e2fs_stage1_5 jfs_stage1_5 stage2           fat_stage1_5 minix_stage1_5 ufs2_stage1_5           ffs_stage1_5 reiserfs_stage1_5 vstafs_stage1_5
          [root@alen ~]# cp /boot/vmlinuz-2.6.32-754.el6.x86_64 /mnt/boot/vmlinuz  //为了测试方便,复制现在系统上的内核重命名为vmlinuz到/mnt/boot下

          [root@alen ~]# cp /boot/initramfs-2.6.32-754.el6.x86_64.img /mnt/boot/initramfs.img  //同上,复制initrafs到/mnt/boot/下

          [root@alen ~]# vim /mnt/boot/grub/grub.conf  //在/mnt/boot/grub下创建grub.conf文件,编辑简单配置
              default=0
              timeout=5
              tile=CentOS(Express)
                root (hd0,0)
                kernel /vmlinuz ro root=/dev/sda3 init=/bin/bash  //测试/bin/bash能否开机运行
                initrd /initramfs.img
          [root@alen ~]# mkdir /mnt/sysroot  //mnt下创建sysroot目录作为根文件
    
          [root@alen ~]# mount /dev/sdc3 /mnt/sysroot  //sdc3挂在到sysroot目录下
    
          [root@alen ~]# cd /mnt/sysroot
    
          [root@alen sysroot]# ls
          lost+found
    
          [root@alen sysroot]# mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home mnt media  //sysroot作为根目录,增加一些常用目录
    
          [root@alen sysroot]# cp /bin/bash /mnt/sysroot/bin  //复制当前系统/boot/bash到/mnt/sysroot.bin下,用作测试
    
          [root@alen sysroot]# ldd /bin/bash  //查看bash的依赖文件
           linux-vdso.so.1 =>  (0x00007ffd56d5d000)
           libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ac7000000)
           libdl.so.2 => /lib64/libdl.so.2 (0x0000003ab7000000)
           libc.so.6 => /lib64/libc.so.6 (0x0000003ab7400000)
           /lib64/ld-linux-x86-64.so.2 (0x0000559a9c9de000)
    
          [root@alen sysroot]# cp /lib64/libdl.so.2 /mnt/sysroot/lib64  //复制bash的依赖文件到/mnt/sysroot指定目录下
          [root@alen sysroot]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64
          [root@alen sysroot]# cp /lib64/libc.so.6 /mnt/sysroot/lib64
          [root@alen sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64
          最后新建一个新的虚拟机,使用sdc这个虚拟磁盘开机启动,bash可以开机运行了

     

     

     

     

     

     

  • 相关阅读:
    1062 Talent and Virtue (25 分)
    1083 List Grades (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1121 Damn Single (25 分)
    1120 Friend Numbers (20 分)
    1084 Broken Keyboard (20 分)
    1092 To Buy or Not to Buy (20 分)
    数组与链表
    二叉树
    时间复杂度与空间复杂度
  • 原文地址:https://www.cnblogs.com/ckh2014/p/9576535.html
Copyright © 2011-2022 走看看