九、制作 GRUB 引导软盘
GRUB 不仅可以安装在硬盘上,也可以安装在软盘。有两种方式可用于创建 GRUB 引导软盘,区别在于后者带有文件系统,而前者只有
boot loader 本身。如果你误删除那些 stage 文件,后一种方式就大大有用了。
第一种 :用 dd 命令创建 GRUB 软盘
[Copy to clipboard]CODE:
a)按照 ./configure , make ,make install 的步骤安装 GRUB
b)dd if=/usr/local/share/grub/i386-pc/stage1 of=/dev/fd0
c)dd if=/usr/local/share/grub/i386-pc/stage2 of=/dev/fd0 seek=1
d)这样就创建好一张 GRUB 引导软盘了。
第二种 :用 grub-install 创建带文件系统的 GRUB 引导软盘
[Copy to clipboard]CODE:
a)同样是先安装 GRUB
b)mke2fs /dev/fd0
c)mount /dev/fd0 /mnt/floppy
d)grub-install –-root-directory=/mnt/floppy ‘(fd0)’
e)这样软盘上就会有一个 /boot/grub/ 目录,下面就是那些 stage 文件了。
f)上面的两种方法做出来的软盘都只能进入 GRUB 命令模式,你可能会觉得不爽,是否可以直接进入菜单呢?答案是可以的,只需要多一个步骤 :
g)把 /boot/grub/ 目录下的 device.map ,grub.conf ,menu.lst 统统拷贝到 /mnt/floppy/boot/grub 目录下,这样就可以了。因为之前 GRUB
在软盘上找不到配置文件,所以自动进入命令模式,现在用它启动机器就可以直接进入菜单模式了。
十、使用 GRUB 通过网络引导操作系统
GRUB 不仅可以从本地硬盘引导操作系统,还可以通过网络引导操作系统内核。
假使你由于某种原因,无法启动操作系统。这时你需要在别的空闲的机器上先 build 一份GRUB ,并安装到一张软盘上。
不过由于要支持网络功能,所以 ./configure 时有所不同了 :你必须指定启用网络功能,和网卡芯片的型号 :(具体参考 netboot/README.netboot 文件)。
由于测试机器的网卡芯片是 RTL-8139 ,所以加上 –-enable-rtl8139 ,整个过程就是(在别的空闲的机器上进行的) :
[Copy to clipboard]CODE:
# rpm –e grub (删除原来的 GRUB rpm,如果没有装就不用了)
# ./configure –-enable-diskless –-enable-rtl8139 (这是故障主机的网卡型号)
# make
# make install
# cp –fa /usr/local/share/grub/i386-pc/* /boot/grub/
# grub-install /dev/hda
# mke2fs /dev/fd0 (格式化软盘,建立 ext2 文件系统)
# mount /dev/fd0 /mnt/floppy
# grub-install –-root-directory=/mnt/floppy ‘(fd0)’
检查 /mnt/floppy 下是否有 nbgrub 和 pxegrub 两个文件,这两个文件就是用于网路启动的。如果
没有,就从 /boot/grub/ 目录拷贝到 /mnt/floppy/boot/grub/ 目录下。切记切记!!
这样你就制作好了一张带有 stage 文件,支持网络引导,且带有网卡驱动的 GRUB 引导盘了。
接下来就是 TFTP 服务器方面的工作了 :
-)1、启动 TFTP 服务器(编辑 /etc/xinetd.d/tftp 文件,把 disalbe改为 no)。
-)2、检查防火墙配置,确保故障主机可以顺利访问该 TFTP 服务器
-)3、找出一台和故障机器具有相同内核的主机,把 /boot/vmlinuz-2.xx 和 /boot/initrd-2.xx.img 拷贝到 TFTP 服务器的 /tftpboot/boot 目录下
-)4、把这张软盘插入故障机器的软驱并用它启动机器,就会自动进入 GRUB 命令模式。
-)5、执行 ifconfig 命令将会显示下面的画面
-)6、下面开始设置 ip 信息了 :(ifconfig 命令可以分成多次执行)
-)7、现在网卡 ip 和 TFTP 服务器的地址都已经设置了。
-)8、下面设置 root device、kernel、initrd 。注意 root 括号中是 nd ,切记切记!!!
当你执行 boot 时,内核将被解压并执行,一切就和往常一样。
补充 :如果你的网络有 dhcp 服务器,则可以直接执行 dhcp 命令来代替 ifconfig 命令获取 ip 信息
十一、把配置文件嵌入到 GRUB 中
这里介绍一种比较少见的情况。有时我们会遇到主机不带显示器/键盘,但由于某些原因需要重启主机并访问 GRUB,
这时怎么办?你可能会说用串口连接。不错,通过串口的确可以控制 GRUB ,但有一个问题,即使你把笔记本连接到该主机上,
但启动时 GRUB 并不会自动使用笔记本的键盘,又如何通过笔记本控制GRUB 呢?
GRUB 支持一个功能叫做 preset menu(预设菜单),工作原理 :
a)GRUB 检查是否启用了 preset menu 功能,如果是的话,加载 preset menu 文件(不是 grub.conf)
b)GRUB 加载 grub.conf ,这个过程是一定会执行的,不管有没有 preset menu 存在。
c)在 grub.conf 被加载后,不管 grub.conf 有没有引导项目,只要 preset menu 含有任何引导条目,都会被清掉。只有 grub.conf
文件不可用时,preset menu 的内容才会被保留。
看到这里,我想你应该明白 preset menu 怎么用了。我们可以定义一个文件 pre-menu.conf ,内容是把显示切换到 COM1 上 ,grub.conf 则是正常的内容。
然后把笔记本接到故障主机的 COM1,启动超级终端。再启动故障主机,GRUB 会先把显示切换到 COM1 ,然后加载 grub.conf ,后面的过程就和普通情况没
有什么不同。
[Copy to clipboard]CODE:
要使用 preset-menu ,你必须在执行 configure 脚本时指定 –-preset-menu ,例如
#./configure –-preset-menu=pre-menu.conf
# make
# make install
pre-menu.conf 文件的内容就是下面两句 :
serial –-unit=0 –-speed=9600
terminal –-timeout=0 serial
注意,当内核开始执行时,显示也就交回给原来的主机,而不再是你的笔记本了。要解决该问题,
可以在显示菜单是进入命令模式,在 kernel 行后面加上 console=ttyS0,这样 boot 时就可以在超级终端上看到启动的信息了。
不过在 login 提示符出现时,显示输出又会回到原来的故障主机上了。这时你可以用 secureCRT 来登录了,不需要再用到超级终端了。
整体效果如下图 :(通过串口看的)
选择引导 Red Hat 9 项目 :
一旦你不想使用preset-menu了,是否直接删除 pre-menu.conf 就可以呢?
不可以。因为 pre-menu.conf 已经被嵌入到 grub 中了,这时留在硬盘上的 pre-menu.conf 文件其实已经没有用了。要象取消 preset-menu 功能,
必须重新 congfiure ,并去掉 –-enable-preset-menu 选项,再重新安装 GRUB 。
十二、总结
写了这么多,现在总结一下大概的内容
a)GRUB 是一种 boot loader ,它分成两个阶段 :stage1 和 stage2(中间可能有 stage 1.5)
b)stage1 嵌入到 MBR 或者 PBR 中,stage2 留在文件系统中。
c)build GRUB三部曲 :configure 、make、make install、
d)grub-install 和 grub shell 都可以用于安装 stage1 ,但 grub-install 功能更加强大
e)GRUB 支持菜单模式、命令模式。命令模式下的快捷键 :c、o、O、e、d、ESC
f)使用 GRUB 口令保护 GRUB 设置
g)GRUB 支持从网络引导操作系统,不过在编译时事先指定 –-enable-diskless 和网卡驱动。可惜的是,GRUB 支持的网卡驱动不多。
h)GRUB 支持通过串口来访问 GRUB 的命令和菜单模式
i)GRUB 可以把配置文件事先嵌入到 GRUB ,但删除时也需要重装 GRUB 。
十三、个人建议
当安装好操作系统后,应该做好下面几项工作
a)安装光盘(建议刻成 ISO 文件便于保存)
b)制作一张 bootdisk 用于引导操作系统
c)制作一张带文件系统的 GRUB 引导盘用于引导 GRUB,也可以自带配置文件。
d)将 MBR 或者 PBR 备份成文件