grub

Boot Loader:Grub

Boot loader是加载核心的重要工具,没有boot loader的话,那么kernel就无法被系统加载。
    BISO读完配置后,就会到第一个启动位置去读取MBR去读取boot loader,这个boot loader具有菜单功能,直接加载核心文件及控制权转移的功能等。系统需要有loader才能加载该操作系统的核心。
    
Linux将boot loader发程序代码运行与配置分成两个阶段(stage)来执行:
    .stage 1:执行boot loader的主程序
        这个主程序必须安装在MBR,因为MBR太小了,所以MBR只能安装boot loader的最小程序,并没有安装boot loader的配置文件
    .stage 2:注程序加载配置文件:
        第二阶段透过boot loader加载所有配置文件与相关的环境参数文件(包括文件系统定义与主配置文件menu,lst)
这些配置文件一般都是放置在/boot/grub中,目录下最重要的就是配置文件(menu.lst)以及各种文件系统定义,loader读取完文件系统的定义数据后,就可以识别文件系统并加载核心文件。grub的配置文件,其实应该还menu.lst,在cantos被命名为grub.conf

grub的配置文件/boot/grub/menu.lst与菜单类型
    .认识与支持较多的文件系统,并且可以使用grub的主程序直接在文件系统中搜获内核文件
    .开机的时候,可以自行编辑与修改开机设定的项目,类似bash的指令模式
    .可以动态的搜寻配置文件,而不需要再修改配置文件后重新安装grub。
    
硬盘与分区在grub中的代号:(hd0,0)
    .硬盘代号以小括号()包起来
    .硬盘以hd表示后,后面会接一组数字
    .以搜寻顺序作为硬盘的编号,而不是按照硬盘电缆的排序
    .第一搜寻的硬盘为0号,第二搜寻为1号,以此类推
    .每颗硬盘的第一个分区为0,依序类推
/boot/grub/menu.lst配置文件:
    deafult=0
        如果读秒时间结束前没有动键盘,grub默认使用title项目来开机
    timeout=5
        开机会进行读秒,如果五秒内没有按键盘,就会使用上面default后面接的那个title
    splashimage=(hd0,0)/grub/splash.xpm.gz
        开机背景文件
    hiddenmenu
        这个是开机是否显示选项菜单,如果要就需要注释掉这个
开机读取内核的方式:
    1.直接指定核心开机:必须要以grub的硬盘识别方式找出完整的kernel和initrd文件名
    2.利用chain loader的方式转交开机控制权:
        所谓chain loader(开机管理程序的链接)仅是将控制权交给另一个boot loader,他只是将boot loader的控制权交给了下一个boot loader或MBR内的boot loader而已, 所以通常是不需要检查下一个boot loader的文件系统。
        一般来说,chain loader设定两个就够了,一个是预计要前往的boot sector所在的分区,另一个是设定chainloader的分区的boot loader(第一个扇区)上。
initrd的重要性与建立新的initrd文件
        它的的主要功能是加载开机过程的重要核心模块,以让开机过程顺利的完成,会需要initrd的原因,是应为核心模块放置于/lib/modules/$(uname -r)/kernel/当中,这些模块就必须要挂载根目录下才能被读取,但内核本身是不有磁盘的驱动程序,当然无法挂载根目录,也就无法读取驱动程序了。
        initrd可以将/lib/modules/..内开机必须的模块打包成一个文件,也就是initrd文件,然后开机通过init 13硬件功能将该文件读出来解压,并且initrd在内存中国会仿真出根目录,由于此虚拟(Initial RAM Disk)主要包含磁盘于文件系统的模块与文件系统模块,因此我们的磁盘就可以识别实际磁盘,那就能够进行实际根目录的挂载啦。
一般来说需要initrd的时刻为:
        1.根目录所在为SATA,USB或SCIS等接口
        2.根目录的文件系统为RAID,LVM等特殊格式
        3.根目录所在的文件系统为Linux非认识的文件系统
        4.其他必要再核心加载时提供的模块

mkinitrd [-v] [--with=模块名称] initrd 文件名 核心版本
            -v:显示mkinitrd的运作过程
            ---with=模块名称:模块名称指的是模块的名字而已,不需要填写文件名
                例如:目前的内核版本ext4文件系统模块为底下的文件名:/lib/modules/$(uname -r)/kernel/fs/ext4/ext4.ko
                    那就应该写成:--with=ext4就好(省略.ko)
initrd 建立完成,同时内核处理完毕后,我们就可以使用grub来建立选单,如果你的Linux主机本来就使用grub做为loader就不需要重新安装,应为grub会主动的读取配置文件,下面演示安装grub:
            grub-install [--root-directory=DIR] INSTALL_DEVICE
                --root-directory=DIR
grub-install 是安装grub相关的文件到你的装置上面去等待开机时读取,但还需要设定好配置文件(menu.lst)后,在以grub shell 来安装主程序到MBR或者是boot sector上。

BIOS无法读取大硬盘的问题:
        我们的硬盘的容量越来越大,如果你使用的就主板安插大容量的硬盘时,可能由于BIOS或者其他问题导致BIOS无法判断该硬盘的容量,此时你的系统读取可能会有问题。
        我们开机的流程讲过,当进入Linux核心功能后,他会主动去侦测整个系统,因此BIOS抓不到的硬件在Linux进入核心反而可能抓到正常使用,如果使用DVD开机安装系统,很多人都会发现,顺利安装后,第一次开机屏幕出现黑压压一片,且只出现grub>字样:
            .安装过程是由于使用DVD开机,所以Linux内核加载不是问题,所以可以抓到BIOS抓不到的硬盘
            .但是在进入硬盘开机的时候,由于kernel与initrd文件都是透过BIOS的INT 13通道读取的,因此你的kernel与intrd如果放置在BIOS无法判断的扇区,当然无法被系统识别加载。
        如何解决这一问题:让kernel与initrd文件放在大硬盘的最前头,由于BIOS至少可以读取到大硬盘的1024磁柱内的数据,那如何让kernel与initrd放置到整颗硬盘的最前面,就是建立/boot独立的分区,
        并将/boot放在最前面即可。

为个别选项菜单加上密码
        如果公用的计算机,那么为每个选单做个加密防止他人查看你开机密码,如何建立加密密码
            grub-md5-crpt
开机过程的问题解决
        1.忘记root密码的解决之道
            1.重新启动,一定要重新启动
            2.开机进入grub选项菜单:(1)在你要进入选单上点'e'进入详细设定;(2)将光标移到kernel上放点e'进入编辑画面;(3)然后进入出现如下的界面处理在kernel 路径后面加上以下内容:single
            3.进入单人维护模式,系统就会以root权限直接给你一个shell,此时你就能执行passwd 这个指令重建root的密码。
init配置文件错误
    当/etc/inittab这个文件错误的时候,连单用户模式都无法进入,无法用上面的方法救援了。应为init文件无法被执行,那么我们就告诉核心不要执行init,改呼叫bash,可以略过init。
    同样是进入grub后,,同样在grub edit下在内核路径后加上以下内容:init=/bin/bash
    应为我们指定内核的第一支进程变成了/bin/bash,因此/sbin/init就不会执行了,根据开机流程此时只有根目录被挂载为只读,其他目录都没有被挂载,所以首先是将根目录的权限改为可以读写。
    然后使用两个命令 mount -o remount,rw /  :将根目录挂载为可以读写;mount -a:参照/etc/fstab的内容挂载文件系统!此时就可以进行其他救援工作,恢复inittab文件。
    
因文件系统错误无法开机
    最容易出错的设定而导致无法顺利开机的步骤,通常就是/etc/fstab这个文件了,尤其是在做Quota操作的时候,容易写错参数,有没有经过mount -a来挂载次测试,就立刻直接重启,造成文件系统问题。
    可以以root用户登录,重新挂载文件系统为可读写,就绪救援,造成这种原因除了/etc/fstab编辑错误之外,或者如果你曾经有不正常关机后,也可能导致文件系统不一致的情况,也可能出现相同的问题, 一般用fsck去检测相应的磁盘即可啦,等系统发现错误,并且出现[clear [Y/N]]时,就输入y。

利用chroot切换到另一块硬盘去工作:change root directory

    可以暂时将根目录一定到某一个目录下,然后去处理这个问题,最后离开这个目录,该root回到原来的系统当中。

用chroot来切换,以处理你的硬盘问题!
        1.用尽任何方法进入一个完整的Linux系统
        2.假设有问题的linux磁盘在/dev/sdb1上面,且他的系统排列是:
        3.        挂载点 装置文件名
        4.        / ->  /dev/sdb1
        5.        /var -> /dev/sdb2
        6.        /home -> /dev/sdb3
            /usr -> /sdb5
            若是如此的话,那么在我目前的linux底下,我可以建立一个目录,然后可以这么做:
                挂载点        装置文件名
                 /chroot  ->/dev/sdb1
                 /chroot/var->/dev/sdb2
                 /chroot/home->/dev/sdb3
                 /chroot/usr  -> /dev/sdb5
        7.全部挂载往后,再输入 chroot /chroot 你就会发现根目录/变成那个/dev/sdb1的环境。

   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值