#Forever twenly one ,I have a lot of things to do.The morning sun always don't wake me.
阴天有小雨,我坐在17楼的窗前开始思考一台电脑是如何启动的,它怎么就那么神奇可以做那么多的事情,给我们的世界带来这么大的变化,虽然它只是一台没有生命的机器。假如它能够说话,它会对我说什么呢?它会说喊我出去玩吗或者喊我留下来陪它吗?它会思考我现在的烦恼吗?它会笑着对我唱歌吗?是我想太多还是它需要我去想它?都不是吧,是我一直离不开你,让我魂牵梦绕的你,我要请求上帝给你生命,再赐给你一个灵魂,一双美丽的眼睛可以看到我,一双灵敏的耳朵可以听到我说的话,一张可以说话的嘴巴,最好赋予你甜美的声音,这样你就可以把自己唱给我听了,唱米店,唱梵高,唱你的forever21......
一台没有生命的你该怎样唤醒呢?我想是需要先给你通电吧,有了电就有了色彩,再给你装一个系统那是你的灵魂,最后再用魔法将你体内的灵魂激活吧,grub召唤术,苏醒吧mysun!linux!
linux启动流程:
加电自检--->加载主板BIOS--->引导主扇区MBR--->加载内核kernel至内存--->启动跟文件系统init设定系统运行等级--->执行rc.sysinit进行系统初始化--->启动内核模块--->根据系统等级开始启动各种服务--->执行/etc/rc.d/rc.local个性化设置文件--->执行/bin/login
从系统启动流程中grub的位置我们可以看出,它就是大召唤术,将主机硬件与系统内核链接起来。
grub是gun项目研发的多操作系统启动程序,它可以允许一台主机上存在多种不同的系统,你可以从中选一个加载启动,这一切的功能都是它提供的。
grub的位置:grub分为三个部分
第一部分被放在MBR中前446字节里(MBR共512字节,中间54字节存放磁盘分区信息,最后2字节判断MBR是否损坏),主板启动时首先会读取MBR里的内容,所以grub是系统内核启动之前就启动的。
第二部分放在MBR之后的扇区中,存放的是文件系统的驱动程序,可以在系统内启动分区没挂载的情况下读取磁盘内里的指定内容
第三部分就是存在磁盘分区中的内容,里面是grub的配置信息,内核文件,这里就是gurb的根分区
grub的两种形式
一、图形界面模式
系统启动之前开始出现倒数秒数的时候,按住esc可以进入grub界面(一般是隐藏的,会启动默认的系统)选择我们想要启动的不同系统。我这里只有一个系统,所以只有一项可以选
按e键进入命令行模式编辑
按enter键保存编辑,按o新添一行,d删除此行,b启动系统
二、命令行模式
系统启动前倒数秒数的时候按esc进入图形界面,之后按c键会进入命令行模式
grub的配置文件
/boot/grub/grub.conf
timeout=5表示系统启动前倒数5秒
splashp_w_picpath定义grub图形界面背景图片的
hiddenmenu表示开启隐藏grub
title 定义系统名称
root (hd0,0)定义grub的根为hd0上的0分区
kernel 定义内核版本
initrd 定义辅助内核启动的驱动程序
一般我们自己制作grub的时候只需要其中关键几项
timeout、title、root、kernel、initrd
grub硬盘设备格式与系统的表示不一样
系统中IDE硬盘用hd,scsi硬盘用sd,软盘用fd
grub第一块硬盘表示为(hd0),第一块硬盘的第一个分区表示为(hd0,0)#仅以centos6为例,其他系统表示方式略有不同。
文件表示法( , ) /path/to/file
grub的工作在图形界面下:
选择一个系统名称(title定义的名称)例如CentOS 6 (2.6.32-504.el6.x86_64),grub就会从root定义的根分区中查找kernel和initrd;kernel和initrd文件存放在与grub同级的根目录/boot下
grub的工作在命令行模式下:
先用root指定grub的跟分区为(hd0,0)
在指定启动的内核为kernel (hd0,0)/vmlinuz-2.6.32.....
再指定启动辅助驱动initrd (hd0,0)/initramfs-2.6.32.....
最后输入boot启动系统内核
使用help获得帮助信息,使用find查找文件版本号
我们自己如何制作自己的grub呢?
很简单的,只需要几个步骤:
1.给linux主机添加一块新硬盘,例如/dev/sdb
2.给新硬盘分区,例如分为/dev/sdb1和/dev/sdb2
3.新建挂载点/mnt/boot /mnt/sysinit 分别挂载sdb1,sdb2
4.格式化两个分区为ext4文件系统
5.执行grep-install --root-directory=/mnt /dev/sdb 在sdb上装载grub并把/mnt/boot设置为grub的根分区(命令中不能指定/mnt/boot,它会自动寻找boot,如果指定了它会在boot下在建boot)
6.下载你想要的内核和对应的辅助驱动程序文件到/mnt/boot目录中
7.在/mnt/boot/grub目录下新建grub.conf文件,编辑其内容,此步骤就是设置grub的配置文件
8.在/mnt/sysinit目录下创建很多目录,例如mkdir -pv /mnt/sysinit/root etc bin sbin lib lib64 home tmp usr boot media dev var sys proc
9.复制一个bash到bin下,例如
10.使用ldd /bin/bash命令查看运行bash所需要的库文件,将所有需要的库文件复制到对应的sysinit/lib64下面
例如:我们先将/bin/ls命令复制到/mnt/bin/ls
使用ldd /bin/ls获得ls所需的库文件
将所有的库文件复制到对应的/mnt/lib64下
最后使用chroot /mnt/sysinit /bin/bash 命令(意思是将/mnt/sysinit当作根,运行根下 的/bin/bash)
运行ls,命令成功执行。
13.关闭当前主机
14.在虚拟机上新建一个linux主机,不给它装系统,使用已有硬盘给此linux创建一块硬盘,选我们 刚才操作的sdb那块硬盘
15.启动此虚拟机linux,看看是不是成功了,我们不但自己制作了一个gurb,还制作了一个什么功能 都没有的小系统(除了我们添加的ls命令)。此系统无法登陆,退出后没有在登录的选项,我们 只能关机重启了,这些都不是重点,重点是我们的grub成功了!!!!
注意:因为启动主机进入系统之前可以先进入grub,grub支持选择系统等级(系统分为0-6级,0关机,1单用户模式,2关闭网络接入的多用户模式,3正常模式,4预留模式,5启用桌面系统模式,6重启),如果在grub下选择了第一等级,那么允许用户不使用密码就可以用root身份登陆系统中。
例如:进入grub图形界面,e选择系统名,光标移到kernel按e进入设置界面,敲一个空格后面补上数字1就表示设定1单用户模式登录,这样不用密码就可以登录系统了
为了避免这个安全漏洞,grub支持加密
使用grub-md5-crypt PASSWD 命令可以创建一个grub密码,将复制到grub.conf文件中的title上面 一行表示给grub加密,复制到下面一行,表示给kernel加密
给grub设置了密码,当我们启动主机进入grub界面的时候需要按p键,输入密码后才能操作。
三月的烟雨飘摇的南方,你坐在你空空的米店
你一手拿着苹果一手拿着命运,在寻找你自己的香
我还是喜欢大胖子宋东野翻唱的这首《米店》
转载于:https://blog.51cto.com/wuhf2015/1634869