这份文件探讨从 Linux 系统失灵中回复的方法。造成 Linux 系统失灵的各种原
因可能是 - LILO 毁损、 linux 无法开机、 硬碟主开机记录 (Master Boot
Record, MBR) 损坏、或是安装其他作业系统例如 Windows NT 而将 LILO 或
MBR 盖写掉所造成 linux 无法开机。
_________________________________________________________________
1. 简介
* 1.1 回复系统的快速步骤
* 1.2 预防性措施
* 1.3 移除 LILO
* 1.4 常犯错误
2. 相关连结
3. 此份文件的其他格式
4. 版权 Copyright
_________________________________________________________________
1. 简介
您无法避免意外的发生;如果意外发生在 linux 系统, 这可能会损害到硬碟主
开机记录 (MBR) 或是 LILO (Linux boot Loader)。 当 linux 由於硬碟故障而
导致无法开机时,意外就会发生。 假如您不小心重新划分磁碟,或是在 linux
系统的电脑上安装其他作业系统, 例如:Windows 98/NT,LILO 也可能会失效。
这份文件给您一些点子、秘诀、和快速的指引来快速回复系统, 而不必费心地研
读上百页有关 LILO 或 Linux 的文件。
1.1 回复系统的快速步骤
循著这些步骤执行,以便从 LILO 或系统失灵中回复。
1. 状况 1: 假如系统无法开机 -
取得并建立 tomsrtbt 开机磁片 [3]http://www.toms.net/rb, 并使用
tomsrtbt 开机磁片开机。 使用 fdisk 指令找出分割区 (partitions)。 试
著用以下指令辨识出 root 分割区 -
_____________________________________________________________
bash# fdisk /dev/hda
bash# mkdir /test
bash# mount /dev/hda1 /test
bash# ls /test
您应该会看到 root 分割区显示如下 -
bin fd lib mnt proc sbin usr
boot dev etc home lost+found opt root tmp var
_____________________________________________________________
如果此分割区并非 root 分割区,试试下个分割区 /dev/hda2 。 再继续尝
试 hda3 、 hda4 、 hda5 等,直到您找出 root 分割区为止。 如在 hda
仍无法找到,请重复以上的步骤在其他装置上, 例如 hdb, hdc, hdd 等..
在建立新的 lilo 设定时, /usr、/var、与 /boot 分割区也是需要的。
以我的系统为例,root 分割区是在 /dev/hda4:
_____________________________________________________________
bash# mkdir /hda4
bash# mount /dev/hda4 /hda4
bash# cat /hda4/etc/fstab
阅读 fstab 的内容,并且按照 fstab 档案挂上 (mount) 分割区。像下面这样 -
bash# mount /dev/hda5 /hda4/boot
bash# mount /dev/hda6 /hda4/usr
bash# mount /dev/hda7 /hda4/var
bash# mount /dev/hda8 /hda4/opt
bash# mount /dev/hda9 /hda4/root
bash# mount /dev/hda10 /hda4/home
_____________________________________________________________
以我的系统为例,按照 fstab 所显示,hda5 是 boot、hda6 是 usr ,
hda7 是 var、hda8 是 opt、hda9 是 root、hda10 是 home、 而 hda11 是
windows95 的目录
编辑 /etc/fstab (不是 /hda4/etc/fstab)并且加入(以下简单的程式码)
_____________________________________________________________
/dev/hda4 /hda4 ext2 defaults 1 1
/dev/hda5 /hda4/boot ext2 defaults 1 1
/dev/hda6 /hda4/usr ext2 defaults 1 1
/dev/hda7 /hda4/var ext2 defaults 1 1
/dev/hda8 /hda4/opt ext2 defaults 1 1
/dev/hda9 /hda4/root ext2 defaults 1 1
/dev/hda10 /hda4/home ext2 defaults 1 1
/dev/hda11 /hda4/win95part vfat defaults 1 1
在我的电脑中,hda4 含有 linux 的 root 分割区、hda5 有 boot 分割区、
hda11 则有 windows 95 的 vfat 系统。
bash# mkdir /hda4/win95part
bash# mount /hda4/win95part
使用 fsck 或 e2fsck 指令来修复系统。
bash# man fsck
bash# man e2fsck
_____________________________________________________________
2. 状况 2: 如果 LILO 是无效的..
依照状况 1 的步骤来排除问题。如果无法解决,则参照以下步骤。 现在您
应该已经挂上 /hda4 且已经编辑好 /etc/fstab 档案了。
_____________________________________________________________
bash# mount -a
bash# chroot /hda4 /sbin/lilo -q
bash# man chroot
bash# chroot /hda4 /sbin/lilo
_____________________________________________________________
您也可以选择使用 /sbin/lilo 以代替 chroot。 lilo 加选项 -r 实际上就
和 chroot 的指令是一样的。 强烈建议您使用 chroot,而不要使用 lilo
-r, 因为使用 chroot 比较方便,且较容易找出错误。
_____________________________________________________________
bash# man lilo
bash# /sbin/lilo -r /hda4
_____________________________________________________________
3. 状况 3: 如果 LILO 是无效的..
如果使用状况 1 和状况 2 的步骤均无法解决, 假如您有使用
'mkbootdisk' 制作过开机片(於安装时或参考 'man mkbootdisk'自行建立)
,则使用您的开机磁片来开机并修复分割区。 mkbootdisk 存在於
mkbootdisk*.rpm 的套件,您必须安装它。 (译注:随不同发行套件而有所
差异;请洽询您的发行套件厂商或组织)
4. 状况 4: 如果以上状况 1、2、3 的步骤皆无法解决问题,且您也没有开机
磁片
假如您有其他 linux 系统的电脑,以 root 身份登入并且执行 -
_____________________________________________________________
bash$ man mkbootdisk
bash# cp /etc/lilo.conf /etc/lilo-original.conf
_____________________________________________________________
编辑 /etc/lilo.conf 并将您在 '状况 1' 所获得的 root 分割区格式填入
;之後插入空白磁碟片并执行 -
_____________________________________________________________
bash# mkbootdisk /dev/fd0
_____________________________________________________________
mkbootdisk 存在於 mkbootdisk*.rpm 的套件,您必须安装它。 (译注:随
不同发行套件而有所差异;请洽询您的发行套件厂商或组织) 您必须确保将
/etc/lilo-original.conf 更改回原来的档名 /etc/lilo.conf!! 再以此开
机磁片进行状况 3 的步骤。
5. 状况 5: 这是最坏的情况,希望您不会走到这个地步。 状况 1 到 4 已包含
了绝大多数的案例,但是如果连状况 1、2、3、和 4 的步骤都无法解决 -
第一步: 使用 tomsrtbt 开机磁片开机,挂上分割区, 并且使用以下指令
备份 root 分割区至其他还有磁碟空间的分割区 -
_____________________________________________________________
编辑 /etc/fstab 并且写入 (以下简单的程式码,
您可能必须按照您的磁碟机实际状况作改变) -
/dev/hda4 /hda4 ext2 defaults 1 1
/dev/hda11 /b1 vfat defaults 1 1
bash$ mkdir /hda4; mount /hda4
bash$ mkdir /b1; mount /b1
bash$ cd /
bash$ df
查看 /b1 是否有足够的磁碟空间,以便使用 tar 来备份 root 分割区。
bash$ tar cvf /b1/root-hda4.tar /hda4
_____________________________________________________________
第二步: 放入 Linux 光碟片,重开机并安装 redhat linux (译注:或其他
linux 发行套件) 在 /dev/hda4 (但千万不要安装任何多馀的套件, 您只需
要安装 root、boot 系统,和 LILO 管理者。 也就是说,选择最小安装即
可)。 安装程式也将会安装 LILO 在您的硬碟里。 现在重新启动 linux,以
root 身份登入,并且执行 -
_____________________________________________________________
bash$ man mkbootdisk
bash# cp /etc/lilo.conf /etc/lilo-original.conf
_____________________________________________________________
注意:您必须记得将 lilo-original.conf 复制回 lilo.conf!! 编辑
/etc/lilo.conf 并将您在 '状况 1' 所获得的 root 分割区格式填入;之後
插入空白磁碟片并执行 -
_____________________________________________________________
bash# mkbootdisk /dev/fd0
bash# cp /etc/lilo-original.conf /etc/lilo.conf
_____________________________________________________________
测试此开机磁片,检视其是否能运作, 并将第一步中利用 tar 作备分的档
案 /b1/root-hda4.tar 回复。 (译注:您可使用 tar xvf 来回复。详见
tar manpage)