grub应用+小linux系统初步

GRUB全称GNU GRUBlinux

版本:grub (GNU GRUB 0.97)
bash

GRUB2为GRUB的重写版本,能够说一点也不同。网络

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

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

目录:ui

一、grub说明。加密

二、为grub添加认证。
spa

三、安装grub操作系统

四、小linux。3d


1

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

wKiom1aHQ9mR7txvAAE4eL8n8LA392.jpg

在这个版本的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=#:指定菜单项等待选项选择的时长;
        splashp_w_picpath=(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) 为菜单提供了保护机制
            为编辑菜单进行认证
            为启用内核或操做系统进行认证


wKiom1aHWmyRDUldAACd7POjNQQ269.jpg

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

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

wKiom1aHWs_zJC5SAAAwz4ongzM176.jpg

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

wKiom1aHXmChmz2QAAAb2wEnbLw660.jpg

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


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

wKiom1aHW-6CD4e-AADNoC5qL8k307.jpg

help能够查看能够输入的指令。



二、添加认证

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

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

password [--md5]

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

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

生成加密的密钥能够用:grub-md5-crypt

wKiom1aHZE2gQKaXAAA1cvxcFNE379.jpg

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

wKiom1aHZVnQh6eSAAC6g3oxxa8598.jpg

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

wKioL1aHZe6iru7nAAB4e1ClLZw257.jpg

wKiom1aHZc_hT8uoAAB_nDVz6yI845.jpg


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

wKioL1aHZfHwqEsGAAAIfrATdEY372.jpg


最后一点:只有内核认证而没有GRUB认证,就跟没有内核认证同样。由于在GRUB菜单里能够删除内核的认证。



三、安装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阶段的文件。

wKioL1aHaXLjiGl3AADs7LXQWuM969.jpg

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


先来试试grub-install。

wKioL1aHbPnjb1olAABYmi4J_L4253.jpg

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

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


再来看看setup:

wKioL1aHb8bzDXl7AAGHVjnrZ1s883.jpg

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


四、小linux

我这里安装了第二块磁盘,并分了两个区,一个做为boot分区,一个做为主分区。固然只有一个分区也是能够的。

wKiom1aHcduwJcK_AAC-6c-3Nz0418.jpg

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

wKiom1aHctbTDKsDAAAsIkz2Ps8819.jpg


安装grub:

wKioL1aHc3WQVGa1AABoU-M3ZM8275.jpg

wKiom1aHdHCzrEySAACcRCfe8Dc790.jpg


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

wKiom1aHdNWBnTjWAABL2SPES6A331.jpg


编辑grub.conf文件。

wKiom1aHdTCy6oAVAAARD8LQ2eY925.jpg

wKiom1aHcz7xYVlwAAAti2vQzc8967.jpg

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


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

wKioL1aHdmngFatOAAA-79BNYy8868.jpg

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

wKioL1aHdxyw3GxcAACJm4YpfT8570.jpg

这里有个脚本能够所有复制,我就用这个脚本测试啦。

wKioL1aHd92z-wHEAAB10u5l1pU561.jpg

差很少了,若是前面是init=/bin/bash(bash所在的目录就是在/bin目录下面),那就能够关闭这一台主机,把硬盘挂到另外一台主机上试试了。我这里是用的init,那我们就要给建立一个init文件。

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

wKioL1aHeqvwD4q2AAAOtIy_LxQ379.jpg

wKiom1aHemWyvikzAAAQPy-YNHo615.jpg

添加可执行权限。

wKioL1aHeoehWNAqAAAa9R9Gf0U385.jpg

加执行几回sync命令,就能够挂起本机了。


wKioL1aHfBCz7xBfAAA1HpkyLcY392.jpg

我这里是笔记本,磁盘有点慢,要等到硬盘灯不亮之后就能够开另外一台虚拟机了。哦固然咱们尚未创建呢。

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

wKiom1aHfBXDcAAtAABcaA87vd0089.jpg


完成之后开机,下面这个是刚才咱们作的GRUB的title。wKiom1aHfPaTuBNFAAAurub0fSs815.jpg

wKiom1aHfQfQe9FAAAHAPCgKeQ8327.jpg

成功了,此次是一次性成功了。昨天作的时候都是好几回才好的。下面咱们再修一下。

没有关机功能,咱们这里从开始到最后都尚未关机功能。

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

再来几个命令:

wKiom1aHf9jBJF_3AABUWG_PMUw339.jpg

wKioL1aHggSgjV64AAAUkWeVEUE601.jpg

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

用lsmod能够查看全部已加载的模块,modinfo能够查看模块详细信息。

wKiom1aHgDbhfO1MAAAo_ES328Q766.jpg

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

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

wKiom1aHggyx5PfuAAB-lFX4RMo607.jpg


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

启动小主机来看看:

wKioL1aHg1vgJNbxAAEJovrkVqI554.jpg

上面提示了root已经从新挂载了;咱们好像没有建立boot目录啊;网络模块已加载,IP已设置。

下面咱们来看一下:

wKiom1aHgzyQseZgAAEVz6_ccRw782.jpg

发现了一个问题,用ctrl+c无论用。

好吧,接下来不知道该干吗了。这个就到这里吧。但愿朋友们能够经过这个流程明白linux是如何启动的。


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

相关文章
相关标签/搜索