linux学习之: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程序:

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

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

        [[email protected] ~]# cp /boot/vmlinuz-2.6.32-573.el6.x86_64 /mnt/boot/vmlinuz
        [[email protected] ~]# cp /boot/initramfs-2.6.32-573.el6.x86_64.img /mnt/boot/initramfs.img
        [[email protected] ~]# 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目录,并创建系统常用文件夹

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

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

       [[email protected] sysroot]# cp /bin/bash /mnt/sysroot/bin/
       [[email protected] 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)
      [[email protected] sysroot]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/
      [[email protected] sysroot]# cp /lib64/libdl.so.2  /mnt/sysroot/lib64/
      [[email protected] sysroot]# cp /lib64/libc.so.6 /mnt/sysroot/lib64/
      [[email protected] sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/
      [[email protected] sysroot]# chroot /mnt/sysroot/  # 切换至根目录,查看bash是否可用
      bash-4.1# exit

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

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

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

       [[email protected] ~]# 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/秒
       [[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=200 count=1
       记录了1+0 的读入
       记录了1+0 的写出
       200字节(200 B)已复制,0.000220939 秒,905 kB/秒
       [[email protected] ~]# 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#)

         [[email protected] ~]# 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(破坏后重启,使用紧急救援模式)

设置为光盘启动

进入修复模式

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

选择键盘模式:

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

时间: 2024-12-19 06:03:48

linux学习之:grub的应用的相关文章

linux学习笔记——grub故障排除

注:本文为本人学习笔记,故只代表本人的理解,如有错误,请见谅并欢迎指正 1.grub简介 详细描述请自行搜索网络,非常多.这里只简单引用网络上的描述.grub是电脑的启动管理程序.是 计算机启动后运行的第一个程序,他是用来负责加载.传输控制到操作系统的内核,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化及启动过程则完全由内核来控制完成. Linux下除了Grub,还有LILO等,windows环境还有其他相关软件. 2.grub的常见故障 a.grub.c

linux 学习总结

下列是linux学习的基本知识点梳理: Vim编辑器 vi:visual interface 模式化: 编辑模式:命令模式 输入模式 末行模式 编辑模式-->输入模式 i:insert a:append o:new line I:行首 A:行尾 O:新建上方 编辑模式-->输入模式 ESC 编辑模式-->末行模式 : 末行模式-->编辑模式 ESC 打开Vim vim vim  /path/to/somewhere +# :#为行号 关闭vim :q  直接退出 :q! 强制退出

Linux学习之CentOS(三)----将Cent0S 7的网卡名称eno16777736改为eth0

Linux系统版本:CentOS_7(64位) 一.前言: 今天又从Centos 6.5装回了Centos 7,毕竟还是要顺应潮流嘛.安装完成之后,发现发现CentOS 7默认的网卡名称是eno16777736,如图所示: 像我这种有轻微强迫症的人看到这个名字总感觉不爽,于是偏要把eno16777736改成以前版本的eth0,那就开始吧. 二.修改CentOS 7的网卡名称: 输入如下命令,进入对应目录,编辑文件: vim /etc/sysconfig/grub 然后,往这个文件中添加“net.

Linux学习日志1-基本知识

1.冯.诺依曼体系计算机五大组成部件: 1.控制器:控制其他四个部件的运作 2.运算器:负责计算加减乘除 3.存储器:存放运算的数据来源与结果 4.输入设备:接收数据输入存入存储器 5.输出设备:从存储器接收数据输出 2.Linux的起源: 1991年一个芬兰大学生Linus Torvalds参考其老师的教学用操作系统Minix的思想(注意仅仅是思想),自己写了一个操作系统内核,命名为Linux 0.0.1,发布在comp.os.minix新闻组上,正式宣告Linux内核的诞生.从那时起,Lin

linux 学习基本知识

转自:http://blog.sina.com.cn/s/blog_55465b470100kixw.html 1.linux分区--在linux里面所有的设备.任何东西,在linux看来都是文件.--文件在它看来,有两种形式:  第一种是字符型(键盘输入.打印机):  第二种是二进制型(硬盘.光驱.U盘)--linux中所有硬件--手动分区--A.至少有两个分区  /    根分区  SWAP 交换分区(物理内存大小的两倍)--B.个人桌面分区  /  /boot 128MB is enoug

(转)Linux学习要点(转载自红联)

Linux学习要点(转载自红联) 一.学习Linux的基本要求1. 掌握至少50个以上的常用命令. 2. 熟悉Gnome/KDE等X-windows桌面环境操作 . 3. 掌握.tgz..rpm等软件包的常用安装方法 4. 学习添加外设,安装设备驱动程序(比如网卡) 5. 熟悉Grub/Lilo引导器及简单的修复操作 . 6. 熟悉Linux文件系统 和目录结构. 7. 掌握vi,gcc,gdb等常用编辑器,编译器,调试器 . 8. 理解shell别名.管道.I/O重定向.输入和输出以及shel

Linux学习之CentOS(三)--初识linux的文件系统以及用户组等概念

进入到了Linux学习之CentOS第三篇了,这篇文章主要记录下对linux文件系统的初步认识,以及用户组.用户权限.文件所有者.文件所在组等概念 一.Linux文件结构及基本文件夹 文件系统是Linux系统中最基础的一环,但是又是学习Linux系统必学的.因为目前只是刚入门学Linux系统,还不能总结出Linux文件系统的精华部分,所以只是对Linux系统的文件系统做知识的初步整理. 虽然Linux系统有很多种类,但是对于文件系统分区这块,基本上各个版本的Linux系统都是一样的.Linux文

Linux 技巧之 Grub 超有用技巧

1. 简介 什么是 GRUB?GRUB 全名Grand Unified Boot Loader,它是一个引导装入器 -- 它负责装入内核并引导 Linux 系统.GRUB 还可以引导其它操作系统,如 FreeBSD.NetBSD.OpenBSD.GNU HURD .DOS以及 Windows.尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要.如果引导装入器不能很好地完成工作或者不具有弹性, 那么就可能锁住系统,而无法引导计算机.另外,好的引导装入器可以给您灵活性,让您可以在计算机上安

linux学习笔记二:linux文件系统

各大linux的版本都遵循着FHS(Filesystem Hierarchy Standard)文件系统目录标准,是一个树形结构的组织文件.在此简要记录各目录. linux下所有文件都处在/文件下. 树形结构图: /boot:  系统启动相关的文件 主要文件 1.vmliunx:内核    2.initramfs:磁盘映像文件   3.grub(bootloader) /dev:设备文件 块设备:随机访问设备. 字符设备:线性设备,顺序访问.按字符为单位.键盘.鼠标. 设备号:主设备号(majo