#Forever twenly one ,I have a lot of things to do.The morning sun always don't wake me.

   阴天有小雨,我坐在17楼的窗前开始思考一台电脑是如何启动的,它怎么就那么神奇可以做那么多的事情,给我们的世界带来这么大的变化,虽然它只是一台没有生命的机器。假如它能够说话,它会对我说什么呢?它会说喊我出去玩吗或者喊我留下来陪它吗?它会思考我现在的烦恼吗?它会笑着对我唱歌吗?是我想太多还是它需要我去想它?都不是吧,是我一直离不开你,让我魂牵梦绕的你,我要请求上帝给你生命,再赐给你一个灵魂,一双美丽的眼睛可以看到我,一双灵敏的耳朵可以听到我说的话,一张可以说话的嘴巴,最好赋予你甜美的声音,这样你就可以把自己唱给我听了,唱米店,唱梵高,唱你的forever21......

    一台没有生命的你该怎样唤醒呢?我想是需要先给你通电吧,有了电就有了色彩,再给你装一个系统那是你的灵魂,最后再用魔法将你体内的灵魂激活吧,grub召唤术,苏醒吧mysun!linux!

wKiom1Ux7iHRy0Q1AAEJ9fu3LX8402.jpg

    


     linux启动流程:

   加电自检--->加载主板BIOS--->引导主扇区MBR--->加载内核kernel至内存--->启动跟文件系统init设定系统运行等级--->执行rc.sysinit进行系统初始化--->启动内核模块--->根据系统等级开始启动各种服务--->执行/etc/rc.d/rc.local个性化设置文件--->执行/bin/login

wKioL1Ux8oDznMHFAAKuj8uzqco398.jpg


     从系统启动流程中grub的位置我们可以看出,它就是大召唤术,将主机硬件与系统内核链接起来。

grub是gun项目研发的多操作系统启动程序,它可以允许一台主机上存在多种不同的系统,你可以从中选一个加载启动,这一切的功能都是它提供的。

      grub的位置:grub分为三个部分

    第一部分被放在MBR中前446字节里(MBR共512字节,中间54字节存放磁盘分区信息,最后2字节判断MBR是否损坏),主板启动时首先会读取MBR里的内容,所以grub是系统内核启动之前就启动的。

    第二部分放在MBR之后的扇区中,存放的是文件系统的驱动程序,可以在系统内启动分区没挂载的情况下读取磁盘内里的指定内容

    第三部分就是存在磁盘分区中的内容,里面是grub的配置信息,内核文件,这里就是gurb的根分区

wKiom1Ux9xyyhLXPAADbJpwGaBs139.jpg


   grub的两种形式

一、图形界面模式

系统启动之前开始出现倒数秒数的时候,按住esc可以进入grub界面(一般是隐藏的,会启动默认的系统)选择我们想要启动的不同系统。我这里只有一个系统,所以只有一项可以选

wKiom1Ux-fqiY9ccAADhvrxM4xQ360.jpg按住e键选择,esc键退出选择,

wKioL1Ux-87h5gSwAAGiD0q9w_Y652.jpg

按e键进入命令行模式编辑

按enter键保存编辑,按o新添一行,d删除此行,b启动系统

二、命令行模式

系统启动前倒数秒数的时候按esc进入图形界面,之后按c键会进入命令行模式

wKioL1Ux_KrjIC6AAADTp5Y6j4A562.jpg


    grub的配置文件

    /boot/grub/grub.conf

wKioL1Ux_VywpA7JAAK1r2uO9r0314.jpgdefault=0表示默认启动此配置文件里的系统

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下

wKiom1UyAvPR__87AADJ-MHsLKs983.jpg然后就开始装载内核,最后启动系统。

   grub的工作在命令行模式下:

先用root指定grub的跟分区为(hd0,0)

在指定启动的内核为kernel (hd0,0)/vmlinuz-2.6.32.....

再指定启动辅助驱动initrd (hd0,0)/initramfs-2.6.32.....

最后输入boot启动系统内核

使用help获得帮助信息,使用find查找文件版本号

wKioL1UyByvDYwtmAAFrEBavqmg894.jpg


     我们自己如何制作自己的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目录中

wKioL1UyEWrDklOxAACBiV_aeHI526.jpg

    7.在/mnt/boot/grub目录下新建grub.conf文件,编辑其内容,此步骤就是设置grub的配置文件

wKiom1UyD6_hDeIUAACacapS4bk944.jpg

    8.在/mnt/sysinit目录下创建很多目录,例如mkdir -pv /mnt/sysinit/root etc bin sbin lib lib64 home tmp usr boot media dev var sys proc

wKiom1UyC0uSNdG2AABqXWpiVdk430.jpg

    9.复制一个bash到bin下,例如

wKiom1UyDIjD86sEAADLyoHRlPg796.jpg    10.使用ldd /bin/bash命令查看运行bash所需要的库文件,将所有需要的库文件复制到对应的sysinit/lib64下面

       wKioL1UyDqaCcYoqAAFVke7cbhY110.jpg   11.使用chroot 命令测试一下新的根下的命令好不好用

     例如:我们先将/bin/ls命令复制到/mnt/bin/ls

           使用ldd /bin/ls获得ls所需的库文件

           将所有的库文件复制到对应的/mnt/lib64下

           最后使用chroot /mnt/sysinit /bin/bash 命令(意思是将/mnt/sysinit当作根,运行根下            的/bin/bash)

           运行ls,命令成功执行。

wKioL1UyEJfRQ1mQAACi8PBWMCg346.jpg   12.运行sync命令将数据同步到磁盘上

   13.关闭当前主机

   14.在虚拟机上新建一个linux主机,不给它装系统,使用已有硬盘给此linux创建一块硬盘,选我们       刚才操作的sdb那块硬盘

   15.启动此虚拟机linux,看看是不是成功了,我们不但自己制作了一个gurb,还制作了一个什么功能       都没有的小系统(除了我们添加的ls命令)。此系统无法登陆,退出后没有在登录的选项,我们       只能关机重启了,这些都不是重点,重点是我们的grub成功了!!!!

wKioL1UyE7OhVv31AALvQpd_R50200.jpg


   注意:因为启动主机进入系统之前可以先进入grub,grub支持选择系统等级(系统分为0-6级,0关机,1单用户模式,2关闭网络接入的多用户模式,3正常模式,4预留模式,5启用桌面系统模式,6重启),如果在grub下选择了第一等级,那么允许用户不使用密码就可以用root身份登陆系统中。

例如:进入grub图形界面,e选择系统名,光标移到kernel按e进入设置界面,敲一个空格后面补上数字1就表示设定1单用户模式登录,这样不用密码就可以登录系统了

wKiom1UyFTPD9n7uAADV-NAJeDg312.jpg

    为了避免这个安全漏洞,grub支持加密

    使用grub-md5-crypt PASSWD 命令可以创建一个grub密码,将复制到grub.conf文件中的title上面     一行表示给grub加密,复制到下面一行,表示给kernel加密

   wKiom1UyFlSRsirEAABvlVc90ac094.jpg配置文件中设置为:password --md5 密码

wKioL1UyGMjBAYtKAAGhoTnpH-E545.jpg给grub设置了密码,当我们启动主机进入grub界面的时候需要按p键,输入密码后才能操作。


    三月的烟雨飘摇的南方,你坐在你空空的米店

    你一手拿着苹果一手拿着命运,在寻找你自己的香

               我还是喜欢大胖子宋东野翻唱的这首《米店》