Loading... <p><span style="font-size: 20px"><strong><span style="font-family: 宋体">一</span> Linux <span style="font-family: 宋体">系统启动流程</span></strong></span></p> <p> </p> <p>POST –> BIOS(Boot Sequence) –> MBR(bootloader) –> kernel + initramfs(<span style="font-family:宋体">或</span>initrd) –> rootfs (ro) –> /sbin/init –> (/etc/inittab, /etc/init/*.conf) –><span style="font-family:宋体">设定默认运行级别</span>–><span style="font-family:宋体">使用</span>/etc/rc.d/rc.sysinit<span style="font-family:宋体">初始化系统</span> –> <span style="font-family:宋体">分别启动并关闭指定服务</span> –> <span style="font-family:宋体">启动终端</span></p> <p><strong> 1. post<span style="font-family:宋体">:</span></strong><span style="font-family: 宋体">当我们按下开机的电源后,主板上的芯片组会首先向</span>CPU<span style="font-family: 宋体">发出一个</span>reset<span style="font-family: 宋体">指令,之后待芯片组检测到电源供电稳定后便撤去</span>reset<span style="font-family: 宋体">指令,</span>CPU<span style="font-family: 宋体">就会跳转到</span>BIOS<span style="font-family: 宋体">中的启动代码位置</span>; BIOS<span style="font-family: 宋体">首先要检测关键设备是否正常,这个过程就称为</span>POST<span style="font-family: 宋体">(加电后自检)。</span></p> <p><strong> </strong></p> <p><strong> 2<span style="font-family:宋体">.</span>MBR<span style="font-family:宋体">:</span></strong>CPU<span style="font-family: 宋体">读取可引导设备的第一个扇区即</span>MBR<span style="font-family: 宋体">(</span>Master boot record<span style="font-family: 宋体">),也称“主引导记录”,大小为</span>512<span style="font-family: 宋体">字节,其中存放着:</span></p> <p> <span style="font-family:宋体">引导加载程序(</span>boot loader)<span style="font-family:宋体">:</span>446bytes<span style="font-family:宋体">,常用的</span>boot loader<span style="font-family:宋体">有</span>LILO<span style="font-family:宋体">和</span>GRUB<span style="font-family:宋体">,现以</span>GRUB<span style="font-family:宋体">为主;</span></p> <p> <span style="font-family:宋体">分区表:</span>64bytes</p> <p> <span style="font-family:宋体">有效性标记:</span>2bytes</p> <p> CPU<span style="font-family:宋体">执行</span>boot loader<span style="font-family:宋体">,</span>boot loader<span style="font-family:宋体">选择要启动的内核(在当前磁盘的某或某些分区上)并加载到内存中</span></p> <p> <strong><br /></strong></p> <p><strong> 3.kernel + initramfs<span style="font-family:宋体">:</span></strong><span style="font-family: 宋体">内核被加载后,它要做的工作主要有:探测硬件、装载驱动程序、以只读方式装载根文件系统(</span>rootfs<span style="font-family: 宋体">)、启动第一个进程</span>/sbin/init<span style="font-family: 宋体">。</span></p> <p class="MsoListParagraph" style="margin-left:56px;text-indent:0"><span style="font-family:宋体;color:red">备注</span><span style="font-family:宋体">:内核要装载根文件系统就需要先能驱动磁盘,即需要先装载驱动程序,而驱动程序又在磁盘上。为解决此问题,</span>boot loader<span style="font-family:宋体">在加载内核的同时也把</span>initramfs<span style="font-family:宋体">(或</span>initrd<span style="font-family:宋体">)加载到内存中,它是一个临时的根文件系统,里面包含了启动所必须的驱动模块。内核挂载这个临时根,装载驱动程序,然后释放临时根,挂载实际的根文件系统,并启动第一个进程</span>/sbin/init<span style="font-family:宋体">。</span></p> <p class="MsoListParagraph" style="margin-left:56px;text-indent:0"><strong style="text-indent: 0em"><br /></strong></p> <p><strong> 4.init</strong>:内核初始化的最后一步就是启动pid为1的/sbin/init进程。这个进程是系统的第一个进程,它负责产生其他所有进程。init进程上来首先做的事是去读取/etc/inittab和/etc/init/*.conf</p> <p> </p> <p>init程序类型:</p> <p style="text-indent:28px"> SysV: init, CentOS 5</p> <p style="text-indent:28px"> <span style="font-family:宋体">配置文件:</span>/etc/inittab</p> <p style="text-indent:28px"> Upstart: init, CentOS 6</p> <p style="text-indent:28px"> <span style="font-family:宋体">配置文件:</span>/etc/inittab, /etc/init/*.conf</p> <p style="margin-left:28px;text-indent:28px"> Systemd<span style="font-family:宋体">:</span>systemd, CentOS 7</p> <p style="text-indent:28px"> <span style="font-family:宋体">配置文件:</span>/usr/lib/systemd/system, /etc/systemd/system</p> <p style="text-indent:28px"> </p> <p>在/etc/inittab和/etc/init/*.conf中,大致规定了以下动作: </p> <p style="text-indent:28px"> <span style="font-family:宋体">取得</span>runlevel<span style="font-family:宋体">即运行级别</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">使用</span>/etc/rc.d/rc.sysinit<span style="font-family:宋体">进行系统初始化</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">根据</span>runlevel<span style="font-family:宋体">启动相应的服务并关闭需要停止的服务</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">确定</span>Ctrl+Alt+Delete<span style="font-family:宋体">组合键功能</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">启动字符终端</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">启动图形终端</span></p> <p>系统运行级别:</p> <p style="text-indent:28px"> 0<span style="font-family:宋体">:关机</span></p> <p style="text-indent:28px"> 1<span style="font-family:宋体">:</span>single user mode<span style="font-family:宋体">,单用户模式;直接以</span>root<span style="font-family:宋体">身份登录,无需身份认证,且不会开启网络服务</span></p> <p style="text-indent:28px"> 2<span style="font-family:宋体">:</span>multi user mode<span style="font-family:宋体">,不支持</span>NFS<span style="font-family:宋体">功能</span></p> <p style="text-indent:28px"> 3<span style="font-family:宋体">:完全多用户模式,文本接口</span></p> <p style="text-indent:28px"> 4<span style="font-family:宋体">:未使用,预留级别</span></p> <p style="text-indent:28px"> 5<span style="font-family:宋体">:完全多用户模式,图形接口</span></p> <p style="text-indent:28px"> 6<span style="font-family:宋体">:重启</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">可在命令行切换级别:</span>init #</p> <p style="text-indent:28px"> </p> <p> <img src="//cto.wang/usr/uploads/2016/07/20160703180746-85.png" title="1455757880312001.png" alt="blob.png" /> </p> <p></p> <p>配置文件:/etc/inittab</p> <p style="text-indent:28px"> id:runlevels:action:process</p> <p style="text-indent:28px"><span style="font-family: 宋体">各字段的含义:</span></p> <p style="margin-left:28px;text-indent:28px"> id<span style="font-family: 宋体">:登记项的标识符,必须是唯一的</span></p> <p style="margin-left:28px;text-indent:28px"> runlevels<span style="font-family:宋体">:系统的运行级别,表示</span>process<span style="font-family:宋体">的</span>action<span style="font-family:宋体">要在哪个级别下运行,可定义多个级别,各级别间不用</span></p> <p style="margin-left:28px;text-indent:28px"><span style="font-family:宋体"> 分隔符;如果为空,表示在所有的运行级别下运行</span></p> <p style="margin-left:28px;text-indent:28px"> <span style="font-family:宋体">具体的</span>action<span style="font-family:宋体">有:</span></p> <p style="margin-left:28px;text-indent:28px"> respawn<span style="font-family:宋体">:当</span>process<span style="font-family:宋体">终止后马上启动一个新的</span></p> <p style="margin-left:28px;text-indent:28px"> wait<span style="font-family:宋体">:当进入指定的</span>runlevels<span style="font-family:宋体">后</span>process<span style="font-family:宋体">才会启动一次,并且到离开</span>runlevels<span style="font-family:宋体">为止</span></p> <p style="margin-left:28px;text-indent:28px"> initfault<span style="font-family:宋体">:设定默认的运行级别</span></p> <p style="margin-left:28px;text-indent:28px"> sysinit<span style="font-family:宋体">:系统初始化,只有系统开机或重启时</span>process<span style="font-family:宋体">才会被执行一次</span></p> <p><strong> 5.sysinit: </strong><span style="font-family: 宋体">在设定了运行等级后,</span>Linux<span style="font-family:宋体">系统执行的第一个用户层文件就是</span>/etc/rc.d/rc.sysinit<span style="font-family:宋体">脚本</span></p> <p><span style="text-indent: 28px"> (1) </span><span style="text-indent: 28px;font-family: 宋体">设置主机名;</span></p> <p> (2) <span style="font-family:宋体">设置欢迎信息;</span></p> <p> (3) <span style="font-family:宋体">激活</span>udev<span style="font-family:宋体">和</span>selinux;</p> <p> (4) <span style="font-family:宋体">挂载</span>/etc/fstab<span style="font-family:宋体">文件中定义的文件系统;</span></p> <p> (5) <span style="font-family:宋体">检测根文件系统,并以读写方式重新挂载根文件系统;</span></p> <p> (6) <span style="font-family:宋体">设置系统时钟;</span></p> <p> (7) <span style="font-family:宋体">激活</span>swap<span style="font-family:宋体">设备;</span></p> <p> (8) <span style="font-family:宋体">根据</span>/etc/sysctl.conf<span style="font-family:宋体">文件设置内核参数;</span></p> <p> (9) <span style="font-family:宋体">激活</span>lvm<span style="font-family:宋体">及</span>software raid<span style="font-family:宋体">设备;</span></p> <p> (10) <span style="font-family:宋体">加载额外设备的驱动程序;</span></p> <p> (11) <span style="font-family:宋体">清理操作;</span></p> <p><strong> 6.<span style="font-family:宋体">启动指定的默认级别的默认为启动的服务,停止指定的级别下默认为关闭的服务</span></strong></p> <p> /etc/rc.d/rc#.d (#<span style="font-family:宋体">表示运行级别),该目录下都是符号链接文件,其指向的实际服务脚本位于</span>/etc/rc.d/init.d<span style="font-family:宋体">目录中(该目录有个软链接</span>/etc/init.d<span style="font-family:宋体">)。这些链接文件均以</span>S<span style="font-family:宋体">或</span>K<span style="font-family:宋体">开头:</span></p> <p> S##<span style="font-family:宋体">:启动的服务</span></p> <p> <span style="text-indent: 28px"> K##</span><span style="text-indent: 28px;font-family: 宋体">:停止的服务</span></p> <p style="text-indent:28px"> ##<span style="font-family:宋体">:</span>01-99<span style="font-family:宋体">,数字越小,越优先启动或关闭</span></p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-43.png" title="1455758041721167.png" alt="blob.png" /></p> <p><span style="font-size: 18px"><strong>注意</strong></span>:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中;</p> <p style="text-indent:28px"> </p> <p>chkconfig:查看或修改服务随系统启动的启动选项,它并不是直接激活或停止一个服务,而只是修改了其符号链接。用法如下:</p> <p class="MsoListParagraph" style="margin-left:70px">a) <span style="font-family:宋体">让指定的服务接受</span>chkconfig<span style="font-family:宋体">命令管理:</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">第一步:在位于</span>/etc/rc.d/init.d<span style="font-family:宋体">目录下的服务脚本中添加如下一行或多行注释:</span></p> <p style="text-indent:28px"> # chkconfig: LEVEL SPRI KPRI <span style="font-family:宋体">,例如</span># chkconfig: – 85 15</p> <p style="text-indent:28px"> chkconfig<span style="font-family:宋体">后面有三个字段,它们的含义分别为:</span></p> <p style="text-indent:28px"> LEVEL<span style="font-family: 宋体">:当此服务由</span>chkconfig<span style="font-family:宋体">控制时,默认在哪些运行级是启动的。若默认不在任何运行级启动,以“</span>–<span style="font-family:宋体">”号表示</span></p> <p style="text-indent:28px"> SPRI<span style="font-family: 宋体">:启动优先级</span></p> <p style="text-indent:28px"> KPRI<span style="font-family: 宋体">:关闭优先级</span></p> <p style="text-indent:28px"> <span style="font-family:宋体">第二步:</span>chkconfig –add SERVICE<span style="font-family:宋体">,该命令会自动在</span>/etc/rc.d/rc#.d<span style="font-family:宋体">目录中创建链接文件</span></p> <p class="MsoListParagraph" style="margin-left:70px">b) chkconfig del SERVICE<span style="font-family:宋体">:让指定服务不再接受</span>chkconfig<span style="font-family:宋体">管理,会删除链接文件</span></p> <p class="MsoListParagraph" style="margin-left:70px">c) chkconfig –list [SERVICE]<span style="font-family:宋体">:显示所有服务或指定服务的开机启动设置</span></p> <p class="MsoListParagraph" style="margin-left:70px">d) chkconfig [–level ###] SERVICE on/off/reset<span style="font-family:宋体">:若不指定</span>–level<span style="font-family:宋体">选项,</span>on<span style="font-family:宋体">和</span>off<span style="font-family:宋体">操作默认只对运行级</span>2<span style="font-family:宋体">、</span>3<span style="font-family:宋体">、</span>4<span style="font-family:宋体">、</span>5<span style="font-family:宋体">有效,而</span>reset<span style="font-family:宋体">默认对所有运行级有效,</span>reset<span style="font-family:宋体">意为重置,即恢复成服务脚本中的初始设置</span></p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-79.png" title="1455758145420249.png" alt="blob.png" /></p> <p style="text-indent:28px"></p> <p style="text-align: left;text-indent: 0em"><strong style="text-align: center;font-size: 20px"><span style="font-family: 宋体">二</span> grub<span style="font-family: 宋体">应用</span></strong></p> <p style="text-align: left;text-indent: 0em"><strong style="text-align: center;font-size: 20px"><span style="font-family: 宋体"><br /></span></strong></p> <p style="text-indent:28px">GRUB:grand uniform bootloader:<span style="font-family:宋体">统一引导加载器,找到操作系统所在的磁盘,并把内核加载到内存,将控制器转交给内核的程序。</span></p> <p style="text-indent:28px">GRUB<span style="font-family:宋体">(</span>Grand Unified Bootloader<span style="font-family:宋体">)是由</span>GNU<span style="font-family:宋体">下的</span>FSF<span style="font-family:宋体">组织所推行的;</span></p> <p style="text-indent:28px">CentOS 5<span style="font-family:宋体">和</span>CentOS 6<span style="font-family:宋体">上使用的版本为</span>Grub 0.97<span style="font-family:宋体">,</span></p> <p style="text-indent:28px">CentOS 7<span style="font-family:宋体">上使用的版本为</span>Grub2 1.96<span style="font-family:宋体">。</span></p> <p style="text-indent:28px"> </p> <p style="text-indent:28px"><span style="font-family:宋体">功能:</span>MBR<span style="font-family:宋体">中的前</span> 446 <span style="font-family:宋体">个字节,是</span>BooTLoader<span style="font-family:宋体">的一种,提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压展开,把系统控制权移交给内核,主要是由</span>device.map<span style="font-family:宋体">,</span>menulst<span style="font-family:宋体">,</span>stage1,stage2,<span style="font-family:宋体">以及一系列的</span>stage1_5<span style="font-family:宋体">组成。</span></p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-89.png" title="1455758163380542.png" alt="blob.png" /></p> <p style="text-indent:28px">grub legacy:</p> <p style="text-indent:28px"> stage1: mbr (0<span style="font-family:宋体">柱面</span> 0<span style="font-family:宋体">磁道</span> 1<span style="font-family:宋体">扇区</span>)</p> <p style="text-indent:28px"> stage1_5: mbr<span style="font-family:宋体">之后的扇区,让</span>stage1<span style="font-family:宋体">中的</span>bootloader<span style="font-family:宋体">能识别</span>stage2<span style="font-family:宋体">所在的分区上的文件系统;</span></p> <p style="text-indent:28px"> stage2<span style="font-family:宋体">:磁盘分区</span>(/boot/grub/)<span style="font-family:宋体">,读取</span>grub.conf<span style="font-family:宋体">配置文件,并实现引导功能的扩展</span></p> <p> </p> <p><span style="font-family:宋体">配置文件:</span>/boot/grub/grub.conf <– /etc/grub.conf</p> <p style="margin-left:28px;text-indent:28px"><span style="font-family:宋体">配置项:</span></p> <p> 1.default=#: <span style="font-family:宋体">设定默认启动的菜单项;落单项</span>(title)<span style="font-family:宋体">编号从</span>0<span style="font-family:宋体">开始;</span></p> <p> 2.timeout=#<span style="font-family:宋体">:指定菜单项等待选项选择的时长;</span></p> <p> 3.splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE<span style="font-family:宋体">:指明菜单背景图片文件路径;</span></p> <p> 4.hiddenmenu<span style="font-family:宋体">:隐藏菜单;</span></p> <p> 5.password [–md5] STRING: <span style="font-family:宋体">设置密码,菜单编辑认证;</span></p> <p> 6.title TITLE<span style="font-family:宋体">:定义菜单项“标题”</span>, <span style="font-family:宋体">可出现多次;</span></p> <p class="MsoListParagraph" style="margin-left:168px">a) root (hd#,#)<span style="font-family:宋体">:</span>grub<span style="font-family:宋体">查找</span>stage2<span style="font-family:宋体">及</span>kernel<span style="font-family:宋体">文件所在设备分区;为</span>grub<span style="font-family:宋体">的“根”</span>;</p> <p class="MsoListParagraph" style="margin-left:168px">b) kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]<span style="font-family:宋体">:启动的内核,指定</span> kernel <span style="font-family:宋体">文件的位置,还要 指出</span>root<span style="font-family:宋体">(系统启动后)的位置,挂载方式</span> ro<span style="font-family:宋体">,这项很关键</span></p> <p class="MsoListParagraph" style="margin-left:168px">c) initrd /PATH/TO/INITRAMFS_FILE: <span style="font-family:宋体">内核匹配的</span>ramfs<span style="font-family:宋体">文件;</span></p> <p class="MsoListParagraph" style="margin-left:168px">d) password [–md5] STRING: <span style="font-family:宋体">启动选定的内核或操作系统时进行认证;</span></p> <p style="text-align: center"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-22.png" title="1455758774936193.png" alt="blob.png" /></p> <p> </p> <p>initramfs<span style="font-family: 宋体">文件说明:</span>initramfs-2.6.32-573.el6.x86_64.img</p> <p style="margin-left:14px"> nitramfs <span style="font-family:宋体">是以</span> gzip <span style="font-family:宋体">压缩的</span> cpio <span style="font-family:宋体">格式的文件。内核启动时将他作为一个临时的根文件系统。</span> </p> <p style="margin-left:14px"> grub <span style="font-family:宋体">的</span> stage2 <span style="font-family:宋体">将</span>initrd<span style="font-family:宋体">加载到内存里,然后将其中的内容释放到内存中,</span> </p> <p style="margin-left:14px"> <span style="font-family:宋体">内核便去执行</span>init<span style="font-family:宋体">脚本,这时内核将控制权交给了</span>init<span style="font-family:宋体">文件处理。</span> </p> <p style="margin-left:14px"> init <span style="font-family:宋体">它也主要是加载各种存储介质相关的设备驱动程序。当所需的驱动程序加载完后,</span> </p> <p style="margin-left:14px"> <span style="font-family:宋体">会创建一个根设备,然后将根文件系统</span>rootfs<span style="font-family:宋体">以只读的方式挂载。</span> </p> <p style="margin-left:14px"> <span style="font-family:宋体">这一步结束后,释放未使用的内存,转换到真正的根文件系统上面去,同时运行</span>/sbin/init<span style="font-family:宋体">程序,</span> </p> <p style="margin-left:14px"> <span style="font-family:宋体">执行系统的</span>1<span style="font-family:宋体">号进程。此后系统的控制权就全权交给</span>/sbin/init<span style="font-family:宋体">进程了。</span></p> <p style="margin-left: 14px;text-align: left"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-51.png" title="1455758817439617.png" alt="blob.png" /></p> <p style="margin-left:14px"> </p> <p style="margin-left:14px">grub<span style="font-family:宋体">的功能:</span></p> <p style="margin-left:14px"> (1) <span style="font-family:宋体">提供菜单、并提供交互式接口</span></p> <p style="margin-left:14px"> e: <span style="font-family:宋体">编辑模式,用于编辑菜单;</span></p> <p style="margin-left:14px"> c: <span style="font-family:宋体">命令模式,交互式接口;</span></p> <p style="margin-left: 14px;text-align: left"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-27.png" title="1455758860407780.png" alt="blob.png" /></p> <p style="margin-left:14px"> (2) <span style="font-family:宋体">加载用户选择的内核或操作系统</span></p> <p style="margin-left:14px"> <span style="font-family:宋体">允许传递参数给内核</span></p> <p style="margin-left:14px"> <span style="font-family:宋体">可隐藏此菜单</span></p> <p style="margin-left:14px"> (3) <span style="font-family:宋体">为菜单提供了保护机制</span></p> <p style="margin-left:14px"> <span style="font-family:宋体">为编辑菜单进行认证</span></p> <p style="margin-left:14px"> <span style="font-family:宋体">为启用内核或操作系统进行认证</span></p> <p><span style="font-family:宋体">如何识别设备:</span></p> <p style="margin-left:14px"> (hd#,#)</p> <p style="margin-left:14px"> hd#: <span style="font-family:宋体">磁盘编号,用数字表示;从</span>0<span style="font-family:宋体">开始编号</span></p> <p style="margin-left:14px"> #: <span style="font-family:宋体">分区编号,用数字表示</span>; <span style="font-family:宋体">从</span>0<span style="font-family:宋体">开始编号</span></p> <p style="margin-left:14px"> </p> <p style="margin-left:14px"> (hd0,0)</p> <p>grub<span style="font-family:宋体">的命令行接口:</span></p> <p style="margin-left:14px"> help: <span style="font-family:宋体">获取帮助列表</span></p> <p style="margin-left:14px"> help KEYWORD: <span style="font-family:宋体">详细帮助信息</span></p> <p style="margin-left:14px"> find (hd#,#)/PATH/TO/SOMEFILE<span style="font-family:宋体">:</span></p> <p style="margin-left:14px"> root (hd#,#) <span style="font-family:宋体">指定哪个分区为接下来要启动的系统或内核文件所在的分区</span></p> <p style="margin-left:14px"> kernel /PATH/TO/KERNEL_FILE: <span style="font-family:宋体">设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用</span></p> <p> cmdline参数;</p> <p style="margin-left:14px"> <span style="font-family:宋体">例如:</span>init=/path/to/init, selinux=0</p> <p style="margin-left:14px"> initrd /PATH/TO/INITRAMFS_FILE: <span style="font-family:宋体">设定为选定的内核提供额外文件的</span>ramdisk<span style="font-family:宋体">;</span></p> <p style="margin-left:14px"> boot: <span style="font-family:宋体">引导启动选定的内核;</span></p> <p style="margin-left:14px"> </p> <p style="margin-left:14px"> <span style="font-family:宋体">手动在</span>grub<span style="font-family:宋体">命令行接口启动系统:</span></p> <p style="margin-left:14px"> grub> root (hd#,#)</p> <p style="margin-left:14px"> grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE</p> <p style="margin-left:14px"> grub> initrd /initramfs-VERSION-RELEASE.img</p> <p style="margin-left:14px"> grub> boot</p> <p style="margin-left:14px"> </p> <p style="margin-left:14px"><span style="font-family:宋体">示例</span>1 grub<span style="font-family:宋体">保护机制,为</span>grub<span style="font-family:宋体">设置密码,开机进入也需要输入密码</span></p> <p class="MsoListParagraph" style="margin-left:56px">a) grub-md5-crypt<span style="font-family:宋体">生成密码</span> </p> <p class="MsoListParagraph" style="margin-left:56px;text-indent:0"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-81.png" title="1455758901706362.png" alt="blob.png" /></p> <p class="MsoListParagraph" style="margin-left:56px">b) <span style="font-family:宋体">保护编辑功能,则需要</span>title<span style="font-family:宋体">之外的添加</span></p> <p class="MsoListParagraph" style="margin-left:56px;text-indent:0">vi /boot/grub/grub.conf</p> <p class="MsoListParagraph" style="margin-left:56px;text-indent:0">password –md5 $1$.Co8f$ytb48fDRNEzwZBzE36GUv.</p> <p class="MsoListParagraph" style="margin-left:56px;text-indent:0"><img src="//cto.wang/usr/uploads/2016/07/20160703180746-38.png" title="1455758917884007.png" alt="blob.png" /></p> <p> </p> <p><span style="font-family:宋体"> 现在添加好密码到文件后</span> <span style="font-family:宋体">重启系统在开选择</span>grub <span style="font-family:宋体">就需要密码才能进入</span></p> <p style="text-align: left"> <img src="//cto.wang/usr/uploads/2016/07/20160703180746-14.png" title="1455758941731565.png" alt="blob.png" /></p> <p><span style="font-family:宋体">示例</span>2 <span style="font-family:宋体">如果忘记根密码就进入单用户模式修改密码</span></p> <p class="MsoListParagraph" style="margin-left:52px">a) <span style="font-family:宋体">启动计算机,在显示</span>GRUB<span style="font-family:宋体">菜单时</span>—<span style="font-family:宋体">按</span>e<span style="font-family:宋体">键</span>, <span style="font-family:宋体">进入编辑</span>—<span style="font-family:宋体">选</span>kernel<span style="font-family:宋体">项</span>—<span style="font-family:宋体">按</span>e<span style="font-family:宋体">键</span></p> <p class="MsoListParagraph" style="margin-left:52px;text-indent:0"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-58.png" title="1455759110675378.png" alt="blob.png" /></p> <p class="MsoListParagraph" style="margin-left:52px;text-indent:0"> </p> <p style="text-indent:28px">b) <span style="font-family:宋体">输入空格</span>+single <span style="font-family:宋体">回车</span>—<span style="font-family:宋体">按</span>b<span style="font-family:宋体">键</span>,<span style="font-family:宋体">重启系统进入单用户模式,输入以下命令更改口令:</span> </p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-31.png" title="1455759133379572.png" alt="blob.png" /></p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-62.png" title="1455759160295350.png" alt="blob.png" /></p> <p style="text-indent:28px"> </p> <p>安装grub:</p> <p style="text-indent:28px"> (1) grub-install</p> <p style="text-indent:28px"> grub-install –root-directory=ROOT /dev/DISK</p> <p style="text-indent:28px"> </p> <p style="text-indent:28px"> (2) grub</p> <p style="text-indent:28px"> grub> root (hd#,#)</p> <p style="text-indent:28px"> grub> setup (hd#)</p> <p style="text-indent:28px"> </p> <p style="text-indent:28px"><span style="font-family:宋体">示例</span>3 <span style="font-family:宋体">重新安装</span>grub, <span style="font-family:宋体">用</span>grub-install<span style="font-family:宋体">安装</span></p> <p style="text-indent:28px"> dd if=/dev/zero of=/dev/sda bs=200 count=1 <span style="font-family:宋体">模拟破坏掉原来的</span>grub</p> <p style="margin-left:28px;text-indent:28px">grub-install –root-directory=/ /dev/sda <span style="font-family:宋体">重新安装</span>grub</p> <p style="margin-left:28px;text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-73.png" title="1455759178369753.png" alt="blob.png" /></p> <p style="text-indent:28px"><span style="font-family:宋体">示例</span>4 <span style="font-family:宋体">在</span>grub<span style="font-family:宋体">命令提示符下修复</span>grub</p> <p style="text-indent:28px"> dd if=/dev/zero of=/dev/sda bs=200 count=1 <span style="font-family:宋体">模拟破坏掉原来的</span>grub</p> <p style="text-indent:28px"> grub</p> <p style="text-indent:28px"> root (hd0,0)</p> <p style="text-indent:28px"> setup (hd0)</p> <p style="text-indent:28px"> </p> <p style="text-indent:28px"><span style="font-family:宋体">示例</span>5 <span style="font-family:宋体">在紧急救援模式下修复</span></p> <p style="margin-left:28px;text-indent:28px">d if=/dev/zero of=/dev/sda bs=200 count=1</p> <p style="margin-left:28px;text-indent:28px"><span style="font-family:宋体">放入光碟重启,进入救援模式,或者按住</span>ESC <span style="font-family:宋体">进入命令行提示符输入</span>linux rescus</p> <p style="margin-left:28px;text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-7.png" title="1455759216157412.png" alt="blob.png" /></p> <p style="text-indent:28px"></p> <p style="text-indent:28px"> <img src="//cto.wang/usr/uploads/2016/07/20160703180747-50.png" title="1455759230166214.png" alt="blob.png" /> </p> <p style="text-indent:28px"> <img src="//cto.wang/usr/uploads/2016/07/20160703180747-82.png" title="1455759308729032.png" alt="blob.png" /></p> <p style="text-indent:28px"><span style="font-family:宋体">打开一好</span>shell <span style="font-family:宋体">命令提示符输入</span></p> <p style="text-indent:28px">chroot /mnt/sysimage</p> <p style="text-indent:28px">grub-install –root-directory=/ /dev/sda</p> <p style="text-indent:28px">reboot</p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-70.png" title="1455759330230884.png" alt="blob.png" /></p> <p style="text-indent:28px"> </p> <p style="text-indent:28px"><span style="font-family:宋体">示例</span>6 Vmware <span style="font-family:宋体">虚拟机下制作</span>grub</p> <p> </p> <p style="text-indent:28px"><span style="font-family:宋体">第一步:准备好块新磁盘,分</span>3<span style="font-family:宋体">个区</span></p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-97.png" title="1455759356262972.png" alt="blob.png" /></p> <p style="text-indent:28px"> </p> <p style="text-indent:28px"><span style="font-family:宋体">第二步:模拟启动时的</span>boot<span style="font-family:宋体">目录,和根目录,并挂载。</span></p> <p style="text-indent:28px">mkdir /mnt/boot</p> <p style="text-indent:28px"><strong>mount /dev/sdb1 /mnt/boot/</strong></p> <p style="text-indent:28px"><img src="//cto.wang/usr/uploads/2016/07/20160703180747-16.png" title="1455759370670372.png" alt="blob.png" /></p> <p style="text-indent:28px"><span style="font-family:宋体">第三步:制作</span> grub<span style="font-family:宋体">,并生成</span> grub <span style="font-family:宋体">的配置文件</span></p> <p style="text-indent:28px">grub-install –root-directory=/mnt /dev/sdb</p> <p style="text-indent:28px"><img src="/upload/lr0pak3p1vs.png" title="1455759400230563.png" alt="blob.png" /></p> <p style="text-indent:28px"><span style="font-family:宋体">拷贝内核文件和</span>initramfs <span style="font-family:宋体">文件到</span> /mnt/boot <span style="font-family:宋体">目录下,并生成</span> grub.conf <span style="font-family:宋体">文件</span></p> <p style="text-indent:28px">cp /boot/vmlinuz-2.6.32-573.el6.x86_64 /mnt/boot/vmlinuz</p> <p style="text-indent:28px">cp /boot/initramfs-2.6.32-573.el6.x86_64.img /mnt/boot/initramfs.img</p> <p style="text-indent:28px">vi /mnt/boot/grub/grub.conf</p> <p style="text-indent:28px"><img src="/upload/qqimpu0refr.png" title="1455759424469776.png" alt="blob.png" /></p> <p style="text-indent:28px"></p> <p style="text-indent:28px"><span style="font-family:宋体">第四步</span>: <span style="font-family:宋体">生成根文件系统</span></p> <p style="text-indent:28px">mkdir /mnt/sysroot</p> <p style="text-indent:28px">mount /dev/sdb3 /mnt/sysroot/</p> <p style="text-indent:28px">cd /mnt/sysroot/</p> <p style="text-indent:28px">mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media</p> <p style="text-indent:28px"> <img src="/upload/gzc0rw12u3i.png" title="1455759499779011.png" alt="blob.png" /></p> <p style="text-indent:28px"><span style="font-family:宋体"><br /></span></p> <p style="text-indent:28px"><span style="font-family:宋体">第五步:拷贝使用命令和库到对应根目录下</span></p> <p style="text-indent:28px">cp /bin/bash /mnt/sysroot/bin/</p> <p style="text-indent:28px">ldd /bin/bash</p> <p style="text-indent:28px">cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/</p> <p style="text-indent:28px">cp /lib64/libdl.so.2 /mnt/sysroot/lib64/</p> <p style="text-indent:28px">cp /lib64/libc.so.6 /mnt/sysroot/lib64/</p> <p style="text-indent:28px">cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/</p> <p style="text-indent:28px">sync</p> <p style="text-indent:28px">vi /mnt/boot/grub/grub.conf</p> <p style="text-indent:28px"><img src="/upload/caeybucnryh.png" title="1455759537438896.png" alt="blob.png" /></p> <p style="text-indent:28px"> </p> <p style="text-indent:28px"><span style="font-family:宋体">将刚才的磁盘镜像作为另一个虚拟机的启动盘。</span></p> <p style="text-indent:28px"><img src="/upload/a4rureditun.png" title="1455759555948924.png" alt="blob.png" /></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信