Boot loader: Grub进阶
本文记录grub的一些进阶配置
关於核心功能当中的 vga 配置
事实上,你的 tty1~tty6 除了 80x24 的解析度外,还能够有其他解析度的支持喔!但前提之下是你的核心必须支持 FRAMEBUFFER_CONSOLE 这个核心功能选项才行。如何确定有没有支持呢?你可以查阅 /boot/config-2.6.18-92.el5 这个文件,然后这样搜寻:
[root@www ~]# grep 'FRAMEBUFFER_CONSOLE' /boot/config-2.6.18-92.el5 CONFIG_FRAMEBUFFER_CONSOLE=y # 这个项目如果出现 y 那就是有支持啦!如果被注解或是 n ,那就是没支持啦!
彩度解析度 | 640x480 | 800x600 | 1024x768 | 1280x1024 | bit |
256 | 769 | 771 | 773 | 775 | 8 bit |
32768 | 784 | 787 | 790 | 793 | 15 bit |
65536 | 785 | 788 | 791 | 794 | 16 bit |
16.8M | 786 | 789 | 792 | 795 | 32 bit |
那么如何调整 tty1 ~ tty6 终端机的解析度呢?先参考底下的表格再说 (此为十进位数值):
假设你想要将你的终端机萤幕解析度调整到 1024x768 ,且色彩深度为 15bit 色的时候,就得要指定 vga=790 那个数字! 举例来说,鸟哥的 tty1 就想要这样的解析度时,你可以这样做:
[root@www ~]# vim /boot/grub/menu.lst ....(前面省略).... title CentOS (2.6.18-92.el5) root (hd0,0) kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet vga=790 initrd /initrd-2.6.18-92.el5.img ....(后面省略)....
重新启动并选择此菜单进入 Linux,你跑到 tty1 去看看,嘿嘿!就已经是 1024x768 的解析度罗! 只是字会变的很小,但是画面的范围会加大就是了。不过,某些版本支持的是 16 进位制,所以还需要修改一下格式呢! 一般使用上表当中的值应该就可以了。不过,由於不同的操作系统与硬件可能会有不一样的情况,因此, 上面的值不见得一定可以在您的机器上面测试成功,建议您可以分别配置看看哩~以找出可以使用的值! ^_^
BIOS 无法读取大硬盘的问题
现今的硬盘容量越来越大,如果你使用旧的主板来安插大容量硬盘时,可能由於系统 BIOS 或者是其他问题, 导致 BIOS 无法判断该硬盘的容量,此时你的系统读取可能会有问题。为什么呢?
我们在本章一开始的启动流程讲过,当进入 Linux 核心功能后,他会主动的再去侦测一下整个系统, 因此 BIOS 捉不到的硬件在 Linux 核心反而可能会可以捉到而正常使用。举例来说,过去很多朋友常常会发现, 『我的系统使用 DVD 启动安装时,可以顺利的安装好 Linux ,但是第一次启动时, 萤幕只出现黑压压的一片,且出现 grub> 的字样,而无法进入 Linux 系统中』,这又是怎么一回事?
- 在安装的过程中,由於是使用 DVD 或 CD 启动,因此加载 Linux 核心不成问题,而核心会去侦测系统硬件,因此可以捉到 BIOS 捉不到的硬盘,此时你确实可以安装 Linux 在大容量的硬盘上,且不会出现任何问题。
- 但是在进入硬盘启动时,由於 kernel 与 initrd 文件都是透过 BIOS 的 INT 13 通道读取的, 因此你的 kernel 与 initrd 如果放置在 BIOS 无法判断的磁区中,当然就无法被系统加载,而仅会出现 grub shell (grub>) 等待你的处理而已。
更多 grub 错误的代码查询可以到底下的连结查阅:
现在你知道问题所在啦!那就是 BIOS 无法读取大容量磁碟内的 kernel 与 initrd 文件。 那如何解决呢?很简单啦!就让 kernel 与 initrd 文件放置在大硬盘的最前头,由於 BIOS 至少可以读到大磁碟的 1024 磁柱内的数据,因此就能够读取核心与虚拟文件系统的文件罗。那如何让 kernel 与 initrd 放置到整颗硬盘的最前面呢?简单的要命吧!就创建 /boot 独立分割槽,并将 /boot 放置到最前面即可!
万一你已经安装了 Linux 且发生了上述的问题,那该怎办?你可以这样作的:
- 最简单的做法,就是直接重灌,并且制作出 /boot 挂载的 partition ,同时确认该 partition 是在 1024 cylinder 之前才行。
- 如果实在不想重灌,没有关系,利用我们刚刚上头提到的 grub 功能,额外创建一个可启动软盘, 或者是直接以光驱启动,然后以 grub 的编写能力进入 Linux 。
- 另外的办法其实是骗过 BIOS ,直接将硬盘的 cylinder, head, sector 等等资讯直接写到 BIOS 当中去,如此一来你的 BIOS 可能就可以读得到与支持的到你的大硬盘了。
不过,鸟哥还是建议您可以重新安装,并且制作出 /boot 这个 partition 啦! ^_^!这也是为啥这次更版中, 鸟哥特别强调要分割出 /boot 这个分割槽的原因啊!
为个别菜单加上口令
想像一个环境,如果你管理的是一间计算机教室,这间计算机教室因为可对外开放,但是你又担心某些 partition 被学生不小心的弄乱,因此你可能会想要将某些启动菜单作个保护。这个时候,为每个菜单作个加密的口令就是个可行的方案啦! 那如何在启动的过程里面提供口令保护呢?首先,你必须要创建口令,而且还需要是加密过后的喔! 否则人家跑到 /boot/grub/menu.lst 不就可以探查到你的启动口令了?那如何创建加密的口令呢? 我们可以透过 grub 提供的 md5 编码来处理的,如下所示:
[root@www ~]# grub-md5-crypt Password: <==输入口令 Retype password: <==再输入一次 $1$kvlI0/$byrbNgkt/.REKPQdfg287. <==这就是产生的 md5 口令!
上表的案例中,我们两个菜单进入的口令并不相同,可以进行同学的分类啦!不过这样也造成一个问题, 那就是一定要输入口令才能够进入启动流程,如果你在远程使用 reboot 重新启动,并且主机前面并没有任何人的话.... 你的主机并不会主动进入启动程序喔! ^_^上面产生的最后一行,由 $ 开始到 . 结束的那行,就是你的口令经过 md5 编码过后的咚咚! 将这个口令复制下来吧!假设我们要将第一个选项加入这个口令,而第四个选项加入另外的口令, 那你应该要这样做:
[root@www ~]# vim /boot/grub/menu.lst ....(前面省略).... title CentOS (2.6.18-92.el5) password --md5 $1$kvlI0/$byrbNgkt/.REKPQdfg287. root (hd0,0) kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet vga=790 initrd /initrd-2.6.18-92.el5.img ....(中间省略).... title single user mode password --md5 $1$GFnI0/$UuiZc/7snugLtVN4J/WyM/ root (hd0,0) kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet single initrd /initrd-2.6.18-92.el5.img
你必须要注意的是:password 这个项目一定要在 title 底下的第一行。 不过,此项功能还是可能被破解的,因为使用者可以透过编辑模式 (e) 进入菜单,并删除口令栏位并按下 b 就能够进行启动流程了!真糟糕!那怎办?只好透过整体的 password (放在所有的 title 之前) , 然后在 title 底下的第一行配置 lock ,那使用者想要编辑时,也得要输入口令才行啊!配置有点像这样:
[root@www ~]# vim /boot/grub/menu.lst default=0 timeout=30 password --md5 $1$kvlI0/$byrbNgkt/.REKPQdfg287. <==放在整体配置处 splashimage=(hd0,0)/grub/splash.xpm.gz #hiddenmenu title CentOS (2.6.18-92.el5) lock <==多了锁死的功能 root (hd0,0) kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet vga=790 initrd /initrd-2.6.18-92.el5.img
那么重新启动后,画面会像这样:
你可以看到最下方仅出现 p 的功能,由於 2, 3, 4 菜单并没有使用 lock ,因此这三个菜单使用者还是可以运行启动程序, 但是第一个菜单由於有 lock 项目,因此除非你输入正确的口令,否则第一个菜单是无法被加载运行的。 另外,这个项目也能够避免你的 menu.lst 在启动的过程中被乱改,是具有保密 menu.lst 的功能啦! 与刚刚的菜单口令功能不同。
转自