Linux 技巧之 Grub 超有用技巧

1. 简介

什么是 GRUB?GRUB 全名Grand Unified Boot Loader,它是一个引导装入器 -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 、DOS以及 Windows。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,
那么就可能锁住系统,而无法引导计算机。另外,好的引导装入器可以给您灵活性,让您可以在计算机上安装多个
操作系统,而不必处理不必要的麻烦。

废话不多说,看着也没多大意思,赶紧进入正文,想看介绍的可以去《GRUB入门教程》学习。


2. grub 技巧之基础应用

如今,较新电脑上装的都是grub2,而grub2 使用的配置文件是  /boot/grub/grub.cfg。打开后我们可以找到这样一句:

set default="0"   这一选项是用来选择默认系统的,0 即第一个,如果你有5个选项,他们分别对应 /boot/grub/grub.cfg 文件中的:

menuentry ‘Debian GNU/Linux, with Linux 3.2.51-trace‘ --class debian --class gnu-linux --class gnu --class os {                     --- 0
...
}
menuentry ‘Debian GNU/Linux, with Linux 3.2.51-trace (recovery mode)‘ --class debian --class gnu-linux --class gnu --class os {     --- 1
...
}
menuentry ‘Debian GNU/Linux, with Linux 3.2.0-4-amd64‘ --class debian --class gnu-linux --class gnu --class os {                    --- 2
...
}
menuentry ‘Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)‘ --class debian --class gnu-linux --class gnu --class os {    --- 3
... 
}
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {  --- 4
...
}

所以,你只需要根据自己选择第几个内核就可以! 比如我想要我的win 7 作为默认系统,我可以将menuentry "Windows 7  ... 这一段 移到menuentry ‘Debian GNU/Linux, with Linux 3.2.5 ... 之前,也可以直接将set default="0" 中的0 改为4! 


set timeout=5  这一选项用来设置grub 选项等待时间,如果是5 就是5秒内不选择,就加载光标所在选项!


3. grub 技巧之折叠选项

一台电脑装的系统多了或者变异的内核多了,可能你的GRUB 选项会变成这样:


选择一个你想进入的内核都得上下翻页翻半天,那么怎么处理这个问题?有效的管理这些个选项呢?关于这个,Ubuntu上的grub 或者可以给我们一个很好的提示,对,如果你使用过 Ubuntu ,在你编译内核以后,一个系统上的内核会被折叠,比如说我的另一台笔记本上的grub 会是这样:

*   Ubuntu, with Linux 3.2.0-61-generic-pae
*   Ubuntu, with Linux 3.2.0-61-generic-pae
*   Previous Linux versions
*   Windows 8 (loader)

光标移动到“Previous Linux versions” 选项上,进入后,grub才会展示出其他一些内核选项:

*   Ubuntu, with Linux 3.12.13-rt4
*   Ubuntu, with Linux 3.12.13-rt4 (recovery mode)
*   Ubuntu, with Linux 3.12.13-ftrace
*   Ubuntu, with Linux 3.12.13-ftrace (recovery mode)
*   Ubuntu, with Linux 3.4.24-test
*   Ubuntu, with Linux 3.4.24-test (recovery mode)
*   Ubuntu, with Linux 3.2.0-51-generic-pae
*   Ubuntu, with Linux 3.2.0-51-generic-pae (recovery mode)

那么我们怎么自己完成这个动作,打开ubuntu 的/boot/grub/grub.cfg 后我明白了,原来这只是grub的一个二级菜单功能 “ submenu "Previous Linux versions" { ... } ”,所以我的笔记本可以这么玩:

$ sudo vim /boot/grub/grub.cfg

menuentry ‘Debian GNU/Linux, with Linux 3.12.9-gcov-rt13‘ --class debian --class gnu-linux --class gnu --class os 
submenu "Previous Debian versions" {
menuentry ‘Debian GNU/Linux, with Linux 3.12.9-gcov-rt13 (recovery mode)‘ --class debian --class gnu-linux --class gnu --class os 
menuentry ‘Debian GNU/Linux, with Linux 3.12.9-testing-rt13‘ --class debian --class gnu-linux --class gnu --class os 
menuentry ‘Debian GNU/Linux, with Linux 3.12.9-testing-rt13 (recovery mode)‘ --class debian --class gnu-linux --class gnu --class os 
menuentry ‘Debian GNU/Linux, with Linux 3.10.17-trace-rt12‘ --class debian --class gnu-linux --class gnu --class os 
menuentry ‘Debian GNU/Linux, with Linux 3.10.17-trace-rt12 (recovery mode)‘ --class debian --class gnu-linux --class gnu --class os 
menuentry ‘Debian GNU/Linux, with Linux 3.9.11-trace‘ --class debian --class gnu-linux --class gnu --class os
... 
}
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os 
menuentry "elementary OS, with Linux 3.2.0-51-generic (on /dev/sda10)" --class gnu-linux --class gnu --class os 
submenu "Previous elementary OS versions" {
menuentry "elementary OS, with Linux 3.2.0-51-generic (recovery mode) (on /dev/sda10)" --class gnu-linux --class gnu --class os 
}
menuentry "Ubuntu (on /dev/sda8)" --class gnu-linux --class gnu --class os 
submenu "Previous Ubuntu versions" {
menuentry "Ubuntu,Linux 3.11.0-18-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os 
menuentry "Ubuntu,Linux 3.11.0-18-generic (恢复模式) (on /dev/sda8)" --class gnu-linux --class gnu --class os 
menuentry "Ubuntu,Linux 3.11.0-13-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os 
menuentry "Ubuntu,Linux 3.11.0-13-generic (恢复模式) (on /dev/sda8)" --class gnu-linux --class gnu --class os 
...

于是忽,我的机器现在启动是这样的:


是不是清新许多?


4. grub 技巧之修改密码

你觉得你使用 Linux 系统安全么? 你有了密码就安全了么?来试试GRUB 的强大吧!!!

(1). 系统启动,进入grub 选择界面!如上面的图片所示

(2). 在一个选项之上按 e 键进入grub 编辑界面!(没事,大胆尝试,不会永久保存的,就算保存了不正确的东西,不是还有recovery mode 嘛!!!

(3). 比如我当前的编辑界面显示的内容是这样的:

recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root=‘(hd0,msdos8)‘
    search --no-floppy --fs-uuid --set=root c81eebc3-ed49-4661-be49-eadeb0de4696
    linux   /boot/vmlinuz-3.2.0-61-generic-pae root=UUID=c81eebc3-ed49-4661-be49-eadeb0de4696 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-61-generic-pae

我们需要修改的是上面我使用颜色标记的行,我们将 ro 改为rw ,后面的内容全删除!添加上 init=/bin/bash

也就是说,改完之后是这样的:

 linux   /boot/vmlinuz-3.2.0-61-generic-pae root=UUID=c81eebc3-ed49-4661-be49-eadeb0de4696 rw init=/bin/bash

这时候,我们按Ctrx+X 或者F10 保存并进入,我们会发现经过一段时间加载后,我们没有任何密码确获得了root 权限!!!那么这时候系统还安全么???我们可以加载任何分区,然后获取任何你想保密的内容!啦啦啦~~~


但是,我在这介绍这方法不是让你去整人的!!!它可以用在很有用的方面: 丢失密码可以用此方法修改密码!系统崩溃可以使用此方法将重要文件拷贝走!等等~~


5. grub 技巧之找回系统

有时候,我们会安装多个系统,比如上面照片中,我的一个笔记本上安装了4个系统,其中会将一个系统下的grub 作为电脑的加载程序!比如说我的电脑上Debian 的GRUB 被我用做电脑的默认加载程序了!但是某天我在 Ubuntu 上编译了一个内核,并使用 update-grub2 更新了grub, 但是系统启动,你会发现你的 update 并没有生效,你还需要到 Debian 下再使用 update-grub2 后,这个在 Ubuntu 下编译的内核才会在系统启动菜单中出现!

还有种情况,比如我的电脑上只有Debian 和 win8 两个系统,但是某一天我的 win 8 崩溃了于是我重装了系统,启动后发现,我只能进入windows 了,再也引导不了Debian 了,因为Windows 的引导程序还不能引导 Linux!


遇到这两种情况怎么办? 使用 grub-install !方法可以参见《那些年解决的 Ubuntu 系统故障



Linux 技巧之 Grub 超有用技巧,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。