备份和修复 LILO 指南

2001年11月16日来源:天极网Jephe Wu 一. 本文目的 本文旨在如何给工作的系统做 LILO 和内核的软盘备份,因为大多数 Linux 服务器使用 LILO 进行引导,同时也给出紧急修复办法。 二. 测试环境 Redhat Linux ,IDE 和 SCSI 启动硬盘。 三. 备份措施 当我们设置完新的服务器后,除了常规的服务器重要配置文件和系统备份之外,最好也要做 LILO 和内核的软盘备份,万一由于某种原因导致 LILO 不能引导系统。 1. 第一种方法 适用范围: 自己编译的内核,所有的支持模块已经编译进内核,如果有 SCSI 硬盘,必须编译进 SCSI 支持进内 核,也就是说内核已经包含了所有引导需要的东西。 步骤: 格式化一张空白软盘,不要生成文件系统,直接写内核到软盘,然后改变内核文件中的根文件系统分区定义 fdformat /dev/fd0h1440   dd if=/boot/vmlinuz of=/dev/fd0 (用您自己的内核文件名替代 vmlinuz) rdev /dev/fd0 /dev/sda3 (用您的根分区设备名称替代 /dev/sda3)   rdev -R /dev/fd0 1 (安装根文件系统成只读模式) 作用: 这样当系统 LILO 失败时,可用该软盘引导系统且安装硬盘根文件系统。 2. 第二种方法 适用范围: 内核需要一系列模块帮助引导,如 SCSI 硬盘驱动程序,则需要用下面的方法生成带 LILO 的引导软盘 步骤: 放一张新的软盘,不要格式化和分区,直接用 mkbootdisk 创建引导盘 mkbootdisk --device /dev/fd0 2.2.12-20 (用您的内核版本代替 2.2.12-20,可用 uname -a 查看) 3. 第三种方法 适用范围: mkbootdisk 命令不可用,或者无论什么理由您想手动创建一张带 LILO 的引导软盘。 步骤: fdformat /dev/fd0h1440 (低级格式化软盘)   /sbin/mkfs.minix /dev/fd0 1440 (在软盘上创建 minix 文件系统)   /bin/mount /dev/fd0 /mnt/floppy (安装软盘到 /mnt/floppy 目录)   cd /mnt/floppy   mkdir boot etc dev   cp -a /boot/vmlinuz /boot/initrd.img /boot/boot.b boot/   注:用您的内核文件名代替 vmlinuz 用您的initrd 映像文件名代替 initrd.img   cp -a /dev/fd0 /dev/null /dev/zero /dev/hd[abcd]* /dev/sd[abcd]* dev/   注: 如果您没有 SCSI 设备,可不用拷贝 /dev/sd[abcd]*   创建 /mnt/floppy/etc/lilo.conf 如下:   boot=/dev/fd0   read-only   prompt   image = /boot/vmlinuz   initrd=/boot/initrd.img   root = /dev/sda1 # 把/dev/sda1 换成您的根文件系统设备名称   label = linux 最后运行 lilo -r /mnt/floppy 在软盘上安装 LILO (将自动生成 /boot/map 文件包括内核的物理映像位置) 。 4. 剖析 initrd.img 如果您是用 SCSI 硬盘启动,内核必须能装入 SCSI 驱动程序才能转入您的硬盘根文件系统引导系统。 如果您的内核没有编译进 SCSI 驱动程序,则需要用 mkinitrd 创建 RAM 驱动映像想知道您的 initrd.img 中包含了哪些驱动程序吗? cat initrd.img | gunzip > /tmp/myinitrdfs   mkdir /mnt/tmp   mount -o loop -t ext2 /tmp/myinitrdfs /mnt/tmp 然后查看 /mnt/tmp 中的文件 linuxrc 中的内容即可知道启动时会装入哪些驱动程序。您也可以更改其中的内容,假设我们想加另一种 SCSI 驱动 aic7xxx.o 进入您的 initrd.img cd /mnt/tmp   vi linuxrc 加上一行 insmod /lib/aic7xxx.o   cp /lib/modules/`uname -r`/scsi/aic7xxx.o lib/   cd /   umount /mnt/tmp   dd if=/tmp/myinitrdfs | gzip > /boot/initrd2.img 至此,新的 initrd 文件 initrd2.img 就包含了 aic7xxx 的驱动程序了。 四. 紧急修复 许多情况能导致 LILO 引导失败,象升级内核,忘记运行 lilo 更新 MBR,克隆硬盘,缺少 SCSI驱动程序引导根文件系统等等,当我们遇到这些情况而手边又没有备份的引导软盘时,您仍然有许多其它途径去修复。 1. 查看周围有没有类似的其它机器和系统在运行,如另一台服务器上有相同版本或同系列的内核在运行。则在另一台系统上生成引导软盘(带 LILO 或者不带 LILO),如果需要添加 initrd.img 中的 SCSI 驱动文件。 2. 用 CDROM 安装盘启动,CDROM 会载入 SCSI 驱动,到分区界面时用 ALT+F2 转入字符界面,可 mount 硬盘根分区,运行 lilo 和做相关的修复。 3. 下载包含 boot/root 文件系统在一张软盘上的文件,如 www.toms.net/rb/ 可完全从一张软盘启动系统,完全不需要硬盘,然后再安装硬盘,修复系统(例如万一您的 /etc/fstab 中的根文件分区指定错误 ,可用此方法修复)。 4. 最后如果都不可行,您可以下载与您的服务器相同版本或者同系列中最新版本的内核,在另一台机器上编 译需要的 SCSI 和网卡等相关驱动程序直接进入内核,不需要任何模块,然后用本文的方法拷贝至软盘,去引导系统。