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

grub应用+小linux系统初步

时间:2016-01-02 16:33:36      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:grup   自定义linux   

GRUB全称GNU GRUB

版本:grub (GNU GRUB 0.97)

GRUB2为GRUB的重写版本,可以说一点也不一样。

wiki: https://zh.wikipedia.org/wiki/GNU_GRUB

GRUB总共分3个阶段:
    bootloader:1st stage
    Partition:filesystem driver, 1.5 stage
    Partition:/boot/grub, 2nd stage

目录:

1、grub说明。

2、为grub添加认证。

3、安装grub

4、小linux。


1

    grub的配置文件是/boot/grub/grub.conf。

技术分享

在这个版本的GRUB中,定义GRUB的根目录,0表示GRUB所在的磁盘(对于GRUB来说它在的地方就是第一块磁盘),后面的0表示第一个分区,以此类推。不过在GRUB2上面好像无论磁盘和分区都是从1开始了。

定义内核或initrd的位置,是对于GRUB根所在位置来说的,因为现在运行的只有GRUB,内核和initrd都要GRUB来启动。


kernl后面的参数常用的有:

这些参数是传递给kernel的参数,跟grub没有关系。系统启动到达这一步以后,GRUB就已经退出江湖了。

ro:表示以只读挂载根分区,就是系统中的/。

root:定义根所在的位置,这个位置是kernel启动起来以后刷新硬件信息所得到的位置,与GRUB的位置不一样。上面的是lvm逻辑卷的地址。如果是直接物理地址,如:/dev/sda2。

selinux :定义是否启用selinux(内核有这个功能的话)。selinux=0表示半闭。1表示启用。默认启用。

init : 定义系统启动完成以后,用来管理用户空间的init程序在哪里。如:init=/bin/bash。

quiet: 静默模式,启动过程中不显示内核信息。

single或1或s或S。进入单用户模式,不用输入管理员密码。常在忘记root密码的情况下使用。


grub文件完整配置项:
        default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;
        timeout=#:指定菜单项等待选项选择的时长;
        splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
        hiddenmenu:隐藏菜单;
        password [--md5] STRING: 菜单编辑认证;
        title TITLE:定义菜单项“标题”, 可出现多次;
            root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
            kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
            initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
            password [--md5] STRING: 启动选定的内核或操作系统时进行认证;


GRUB第二阶段的功用:
        (1) 提供菜单、并提供交互式接口
            e: 编辑模式,用于编辑菜单;
            c: 命令模式,交互式接口;
        (2) 加载用户选择的内核或操作系统
            允许传递参数给内核
            可隐藏此菜单
        (3) 为菜单提供了保护机制
            为编辑菜单进行认证
            为启用内核或操作系统进行认证


技术分享

a 修改当前附加给内核的参数。

e 进入编辑模式,跟在grub.conf文件中的配置一样。

技术分享

我这里在kernel这一项按e进入这一项的编辑状态。

技术分享

在这里可以修改里面的设置,按Esc返回再按b开始引导。


c 交互式模式,也是按这样的方式进行设置。如下面这个,设置完成以后,输入boot就可以开始引导启动。

技术分享

help可以查看可以输入的指令。



2、添加认证

在/boot/grub/grub.conf中加入password认证。

在各个title中加入的表示对使用内核的认证,没有在title中的表示对编辑grub的时候的认证。

password [--md5]

不加--md5表示password后面的密钥是明文,

加上--md5表示是以md5加密的密钥。

生成加密的密钥可以用:grub-md5-crypt

技术分享

加入grub.conf文件。我这里内核和grub认证都加上了。

技术分享

保存并重启以后,到grub这里。要先按p输入密码以后才能编辑grub。这个就是grub认证。

技术分享

技术分享


而内核认证那个,只要启动相应的内核就会出现下面这个。只有密码正确才能启动内核进入系统。

技术分享



3、安装grub:

有两个命令,grub-install 和 grub命令交互模式中的setup命令。

(1) grub-install

        grub-install --root-directory=ROOT /dev/DISK

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


grub.conf配置文件都要自己写。

grub-install 可以安装一个完整的包含所有阶段的grub。

setup 安装每一阶段和1.5阶段的grub。并且依赖于第二阶段中的关于第1,1.5阶段的文件。也就是在/boot/grub/目录中的1,1.5阶段的文件。

技术分享

上面1阶段的文件stage1,就一个。但1.5的文件却有一大堆,但仔细看的话就明白是不同文件系统的。GRUB 1.5阶段的作用就是加载基本文件系统的驱动。setup安装的时候会自动识别使用哪个文件系统的文件。


先来试试grub-install。

技术分享

指定磁盘目录安装boot(GRUB第2阶段)。 指定磁盘安装第1,1.5阶段的grub.

不要直接指定boot目录,因为这个命令输出的就是boot。指定boot目录,会在boot目录里面又有一个boot目录。


再来看看setup:

技术分享

root指定grub目录,setup安装到哪个磁盘。可以看到,setup查找stage1、1.5、2阶段的文件。最终安装了e2fs(ext系列)的1.5阶段的文件,占用了27个扇区,和第1阶段的文件。


4、小linux

我这里安装了第二块磁盘,并分了两个区,一个作为boot分区,一个作为主分区。当然只有一个分区也是可以的。

技术分享

两个分区分别格式化成了ext4的文件系统。并且挂载到/mnt下面的boot和sysroot目录。

技术分享


安装grub:

技术分享

技术分享


复制系统上的内核到我们的小系统里面。

技术分享


编辑grub.conf文件。

技术分享

技术分享

上面的init可以直接init=/bin/bash。我这里就是为了echo点信息。


GRUB文件完成。再来给sysroot目录里面添点料。里面的proc目录一定要有,不然开机会失败。

技术分享

然后再把bash放到/bin/bash里面。注意软件都有所依赖的库,要都复制过去。

技术分享

这里有个脚本可以全部复制,我就用这个脚本测试啦。

技术分享

差不多了,如果前面是init=/bin/bash(bash所在的目录就是在/bin目录下面),那就可以关闭这一台主机,把硬盘挂到另一台主机上试试了。我这里是用的init,那咱们就要给创建一个init文件。

上面忘了创建sbin目录。我们init指定的是/sbin/init。

技术分享

技术分享

添加可执行权限。

技术分享

加执行几次sync命令,就可以挂起本机了。


技术分享

我这里是笔记本,磁盘有点慢,要等到硬盘灯不亮以后就可以开另一台虚拟机了。哦当然我们还没有建立呢。

新建的虚拟机使用刚才添加的磁盘。

技术分享


完成以后开机,下面这个是刚才我们做的GRUB的title。技术分享

技术分享

成功了,这次是一次性成功了。昨天做的时候都是好几次才好的。下面我们再修一下。

没有关机功能,我们这里从开始到最后都还没有关机功能。

直接关电源,再打开原主机。

再来几个命令:

技术分享

技术分享

下面想办法知道自己的网卡驱动模块。我这里是e1000.ko。

用lsmod可以查看所有已加载的模块,modinfo可以查看模块详细信息。

技术分享

复制到了我们小系统的lib目录下,一会儿在init文件中来加载它。

现在的init文件:让echo出颜色,并mount重新读写方式挂载根,挂载boot。加载网卡模块,配置IP地址。

技术分享


sync,sync,挂起,再来启动另一主机。注意千万不要直接关原主机的电源。

启动小主机来看看:

技术分享

技术分享

发现了一个问题,用ctrl+c不管用。

好吧,接下来不知道该干嘛了。这个就到这里吧。希望朋友们可以通过这个流程明白linux是如何启动的。


谢谢浏览,如有错误的地方,还请指出。 谢谢。

本文出自 “大蕃茄” 博客,请务必保留此出处http://fanqie.blog.51cto.com/9382669/1730875

grub应用+小linux系统初步

标签:grup   自定义linux   

原文地址:http://fanqie.blog.51cto.com/9382669/1730875

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