Loading... <p></p> <p><title>Linux GRUB</title><br /> <h1 id="linux-grub">Linux GRUB</h1> <ul class=" list-paddingleft-2"> <li> <p>Linux GRUB</p> </li> <ul class=" list-paddingleft-2"> <li> <p>单用户模式(密码破解)</p> </li> <li> <p>救援模式</p> </li> <li> <p>实例</p> </li> <li> <p>GRUB菜单</p> </li> <li> <p>GRUB命令行接口</p> </li> <li> <p>GRUB简介</p> </li> <li> <p>GRUB 菜单组成</p> </li> <li> <p>GRUB配置文件</p> </li> <li> <p>GRUB安装及修复</p> </li> <li> <p>GRUB单用户及救援模式</p> </li> </ul> </ul> <h2 id="grub简介">GRUB简介</h2> <p>了解grub之前,需要理解linux的启动流程,如果之前有对linux启动流程不了解的可以看:http://xinzong.blog.51cto.com/10018904/1757337</p> <blockquote><p>GRUB(GRand Unified Bootloader)统一引导加载器,即启动加载器。centos上的grub分为两个版本,分别是: <br /> centos 7默认采用grub2</p> <blockquote><p>GRUB legacy(GRUB 0.1一般称为grub1) <br /> GRUB 2(grub1.0一般称为grub2) <br /> 本文主要以grub legacy展开介绍</p> </blockquote> </blockquote> <h2 id="grub-菜单组成">GRUB 菜单组成</h2> <h3 id="grub菜单">GRUB菜单</h3> <p>介绍菜单之前,先带大家了解一下grub legacy <br />grub legacy分为三个阶段:</p> <blockquote><p>stage 1:mbr <br /> stage1_5:mbr之后的扇区,作用是让stage1中的bootloader能识别stage2所在分区上的文件系统 <br /> stage2:磁盘分区()/boot/grub/)</p> <p>stage2及内核等通常放置于一个基本磁盘分区。 <br /> stage2的功用:</p> <blockquote><p>1、提供菜单、并提供交互式接口 <br /> e:编辑模式,用于编辑菜单 <br /> c:命令模式,交互式接口 <br /> 2、加载用户选择的内核或操作系统 <br /> 允许传递参数给内核 <br /> 可隐藏此菜单 <br /> 3、为菜单提供了保护机制 <br /> 为编辑菜单进行认证 <br /> 未启用内核或操作系统进行认证</p> </blockquote> </blockquote> <h3 id="grub命令行接口">GRUB命令行接口</h3> <p><img src="//cto.wang/usr/uploads/2016/07/20160703181001-61.png" title="1461330653351973.png" alt="grub1.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703181001-23.png" title="1461330682829401.png" alt="grub2.png" /></p> <p>grub的命令行接口:</p> <blockquote><p><strong>help</strong>: 获取帮助列表 <br /> <strong>help KEYWORD</strong>: 详细帮助信息 <br /> <strong>find (hd#,#)/PATH/TO/SOMEFILE</strong>:查找文件 <br /> <strong>root (hd#,#)</strong> <br /> <strong>kernel /PATH/TO/KERNEL_FILE</strong>:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数; <br /> 例如:init=/path/to/init, selinux=0 <br /> <strong>initrd /PATH/TO/INITRAMFS_FILE</strong>: 设定为选定内核提供额外文件的ramdisk; <br /> <strong>boot:</strong> 引导启动选定的内核;</p> </blockquote> <p><strong>手动在grub命令行接口启动系统:</strong> <br />grub> root (hd#,#) <br />grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE <br />grub> initrd /initramfs-VERSION-RELEASE.img <br />grub> boot</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703181001-22.gif" title="1461330745210954.gif" alt="grub3.gif" /></p> <h2 id="grub配置文件">GRUB配置文件</h2> <p>配置文件:/boot/grub/grub.conf <br />配置项:</p> <blockquote><p><strong>default=#</strong>: 设定默认启动的菜单项;菜单项(title)编号从0开始; <br /> <strong>timeout=#</strong>:指定菜单项等待选项选择的时长; <br /> <strong>splashimage=</strong>指明菜单背景图片路径(hd#,#)/PATH/TO/XPM_PIC_FILE) <br /> <strong>hiddenmenu:</strong>隐藏菜单; <br /> <strong>password [–md5] STRING:</strong> 菜单编辑认证; <br /> <strong>title TITLE:</strong>定义菜单项“标题”, 可出现多次;</p> <blockquote><p><strong>root (hd#,#):</strong>grub查找stage2及kernel文件所在设备分区;为grub的“根”; <br /> <strong>kernel</strong>:启动的内核 <br /> <strong>initrd</strong> 内核匹配的ramfs文件; <br /> <strong>password [–md5] STRING:</strong> 启动选定的内核或操作系统时进行认证; <br /> 加密密码可以使用: <br /> grub-md5-crypt命令</p> </blockquote> </blockquote> <h2 id="grub安装及修复">GRUB安装及修复</h2> <ul class=" list-paddingleft-2"> <li> <p><strong>安装修复:grub-install</strong></p> </li> </ul> <h3 id="实例">实例</h3> <p>注意:–root-directory必须指定boot所在的上一级目录</p> <pre class="prettyprint hljs-dark"><code class="language-bash hljs"><span class="hljs-comment">#mount /dev/sdb1 /mnt/boot</span><br /><span class="hljs-comment">#grub-install --root-directory=/mnt /dev/sdb2</span><br />Probing devices to guess BIOS drives. This may take a long time.<br />/dev/mapper/vg_centos6-lv_root does not have any corresponding BIOS drive.<br /><span class="hljs-comment"># ls /mnt/boot/</span><br />grub<br /><span class="hljs-comment"># ls /mnt/boot/grub/</span><br />device.map ffs_stage1_5 minix_stage1_5 stage2 xfs_stage1_5<br />e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5<br />fat_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5<br /></code></pre> <ul class=" list-paddingleft-2"> <li> <p><strong>安装修复</strong>:grub命令</p> </li> </ul> <pre class="prettyprint hljs-dark"><code class="language-bash hljs"><span class="hljs-comment"># grub</span><br />Probing devices to guess BIOS drives. This may take a long time.<br /><br /><br /> GNU GRUB version <span class="hljs-number">0.97</span> (<span class="hljs-number">640</span>K lower / <span class="hljs-number">3072</span>K upper memory)<br /><br /> [ Minimal BASH-like line editing is supported. For the first word, TAB<br /> lists possible <span class="hljs-built_in">command</span> completions. Anywhere <span class="hljs-keyword">else</span> TAB lists the possible<br /> completions of a device/filename.]<br />grub> root (hd1,<span class="hljs-number">0</span>)<br />root (hd1,<span class="hljs-number">0</span>)<br /> Filesystem <span class="hljs-built_in">type</span> is ext2fs, partition <span class="hljs-built_in">type</span> <span class="hljs-number">0</span>x83<br />grub> setup (hd1)<br />setup (hd1)<br /> Checking <span class="hljs-keyword">if</span> <span class="hljs-string">"/boot/grub/stage1"</span> exists... no<br /> Checking <span class="hljs-keyword">if</span> <span class="hljs-string">"/grub/stage1"</span> exists... yes<br /> Checking <span class="hljs-keyword">if</span> <span class="hljs-string">"/grub/stage2"</span> exists... yes<br /> Checking <span class="hljs-keyword">if</span> <span class="hljs-string">"/grub/e2fs_stage1_5"</span> exists... yes<br /> Running <span class="hljs-string">"embed /grub/e2fs_stage1_5 (hd1)"</span>... <span class="hljs-number">27</span> sectors are embedded.<br />succeeded<br /> Running <span class="hljs-string">"install /grub/stage1 (hd1) (hd1)1+27 p (hd1,0)/grub/stage2 /grub/grub.conf"</span>... succeeded<br />Done.<br /></code></pre> <h2 id="grub单用户及救援模式">GRUB单用户及救援模式</h2> <p></p> <h3 id="单用户模式密码破解">单用户模式(密码破解)</h3> <p>进入单用户模式: <br /><strong>(1) 编辑grub菜单(选定要编辑的title,而后使用e命令);</strong> <br /><strong>(2) 在选定的kernel后附加</strong> <br />1, s, S或single都可以; <br /><strong>(3) 在kernel所在行,键入“b”命令;</strong></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703181001-76.gif" title="1461330780145381.gif" alt="grub4.gif" /></p> <h3 id="救援模式">救援模式</h3> <p>grub修复 <br />1、模拟破坏:(破坏前先备份)</p> <pre class="prettyprint hljs-dark"><code class="language-bash hljs">dd <span class="hljs-keyword">if</span>=/dev/sda of=/root/mbr.bak count=<span class="hljs-number">1</span> bs=<span class="hljs-number">512</span><br />dd <span class="hljs-keyword">if</span>=/dev/zero of=/dev/sda count=<span class="hljs-number">1</span> bs=<span class="hljs-number">200</span><br /></code></pre> <p>2、进入救援模式</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703181001-11.png" title="1461330815959347.png" alt="grub5.png" /></p> <p><strong>1、插入光盘进入救援模式</strong> <br />-方式1:点击Rescue installed system <br />方式2:按esc进入命令行 <br />输入 linux rescue <br /><strong>2、选择语言,键盘类型</strong> <br /><strong>3、选择是否使用语言</strong> <br /><strong>4、是否将当前系统的跟挂载至/mnt/sysimage下</strong> <br />Continue:继续 <br /><strong>5、选择OK # 可以使用chroot /mnt/sysimage</strong> <br /><strong>6、选择shell start shell</strong> <br /><strong>7、切换跟,修复grub</strong></p> <pre class="prettyprint hljs-dark"><code class="language-bash hljs"><span class="hljs-comment"># chroot /mnt/sysimage</span><br /><span class="hljs-comment"># grub-install --root-directory=/ /dev/sda</span><br /><span class="hljs-comment"># exit </span><br /><span class="hljs-comment"># reboot</span><br /></code></pre> <p><strong>8、重启前拆除光盘</strong> <br />图解</p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703181002-64.gif" title="1461330858374789.gif" alt="grub6.gif" /></p> <p></p> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.45">对于grub就写到这里了,感觉写的不错可以给点个赞。 <br /> 作者:<code>Ace</code> <code>QQ1257465991</code> <code>Linux运维攻城狮一只</code> <br /> Q/A:如有问题请慷慨提出</p> </blockquote> <p><!--!doctype--></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信