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。
在这个版本的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) 为菜单提供了保护机制
为编辑菜单进行认证
为启用内核或操做系统进行认证
a 修改当前附加给内核的参数。
e 进入编辑模式,跟在grub.conf文件中的配置同样。
在这里能够修改里面的设置,按Esc返回再按b开始引导。
c 交互式模式,也是按这样的方式进行设置。以下面这个,设置完成之后,输入boot就能够开始引导启动。
help能够查看能够输入的指令。
二、添加认证:
在/boot/grub/grub.conf中加入password认证。
在各个title中加入的表示对使用内核的认证,没有在title中的表示对编辑grub的时候的认证。
password [--md5]
不加--md5表示password后面的密钥是明文,
加上--md5表示是以md5加密的密钥。
生成加密的密钥能够用:grub-md5-crypt
加入grub.conf文件。我这里内核和grub认证都加上了。
保存并重启之后,到grub这里。要先按p输入密码之后才能编辑grub。这个就是grub认证。
而内核认证那个,只要启动相应的内核就会出现下面这个。只有密码正确才能启动内核进入系统。
最后一点:只有内核认证而没有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阶段的文件。
上面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查找stage一、1.五、2阶段的文件。最终安装了e2fs(ext系列)的1.5阶段的文件,占用了27个扇区,和第1阶段的文件。
四、小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命令,就能够挂起本机了。
我这里是笔记本,磁盘有点慢,要等到硬盘灯不亮之后就能够开另外一台虚拟机了。哦固然咱们尚未创建呢。
新建的虚拟机使用刚才添加的磁盘。
成功了,此次是一次性成功了。昨天作的时候都是好几回才好的。下面咱们再修一下。
没有关机功能,咱们这里从开始到最后都尚未关机功能。
直接关电源,再打开原主机。
再来几个命令:
下面想办法知道本身的网卡驱动模块。我这里是e1000.ko。
用lsmod能够查看全部已加载的模块,modinfo能够查看模块详细信息。
复制到了咱们小系统的lib目录下,一下子在init文件中来加载它。
如今的init文件:让echo出颜色,并mount从新读写方式挂载根,挂载boot。加载网卡模块,配置IP地址。
sync,sync,挂起,再来启动另外一主机。注意千万不要直接关原主机的电源。
启动小主机来看看:
上面提示了root已经从新挂载了;咱们好像没有建立boot目录啊;网络模块已加载,IP已设置。
下面咱们来看一下:
发现了一个问题,用ctrl+c无论用。
好吧,接下来不知道该干吗了。这个就到这里吧。但愿朋友们能够经过这个流程明白linux是如何启动的。
谢谢浏览,若有错误的地方,还请指出。 谢谢。