在维护SCO UNIX系统时应规范操作,以确保系统的正常运行,如果系统受损,比如误删某个系统文件 致使系统无法启动,这时如果采取重新安装系统的方法,势必造成用户数据的丢失,而且,重 新安装UNIX操作系统和应用软件及调试运行往往要花上好几个小时的时间。能否有办法呢 ?笔者通过反复探索和实践,找到了既能以较快的速度修复损坏的系统又能保证数据完好无 损的方法,即事先制作应急引导软盘,当系统损坏(比如系统无法正常引导、 超级用户口令 遗忘等)时,用该软盘进行修复(已经有同行介绍过通过制作应急引导软盘修复SCO XENIX系 统的方法,但在UNIX与SCO XENIX下应急引导软盘的制作及使用有很大的区别),现将该方法 介绍出来,供大家参考。
我们首先来制作UNIX应急引导软盘, 方法如下:
在超级用户提示符#下敲入:mkdev fd并回车,屏幕上将出现菜单选项如下:
1.48tpi, double sided, 9 sectors per track
2.96tpi, double sided, 15 sectors per track
3.135tpi, double sided, 9 sectors per track
4.135tpi, double sided, 18 sectors per track
因为我们是用1.44MB软盘制作应急引导盘, 故选择4,又因为我们的启动驱动器为1.44 MB的软驱(下同), 所以当出现o you want to use floppy drive0 or floppy disk 1?时 选择0, 这时屏幕上出现菜单选项:
1.Filesystem
2.Bootable only (96ds15 and 135ds18 only)
3.Root filesystem only (96ds15 and 135ds18 only)
我们先选择2制作应急引导盘的可启动软盘(以下简称Boot盘),当把软盘插入驱动器后 将提示是否需要格式化软盘,这里可按需要进行选择,然后系统将自动在软盘上建立文件系 统,并将一些文件拷贝到软盘上,文件拷贝完后将自动对软盘上的文件系统进行检查,无误后 又将出现上面的菜单选项,我们再选择3制作应急引导盘的根文件系统软盘(以下简称Root盘 ),同样我们可按需要选择是否首先对软盘进行格式化,然后系统亦首先在软盘上建立文件系 统,并将一些文件及特别文件拷贝到软盘上,文件拷贝完后也将自动对软盘上的文件系统进 行检查,无误后仍将又回到上面的菜单选项,至此,UNIX应急引导盘的Boot盘及Root盘制作完 成,我们选择q退出到超级用户提示符#下。
由于应急引导盘的Boot盘及Root盘均是通过建立文件系统形成的, 所以我们要查看或 修改上面的内容必须先用命令mount将其安装到硬盘的某个空目录(如/mnt)上,待所做的工 作完成后再用命令umount卸下来即可。
在这里,我们先将后面要用到的命令及意义说明如下:
①安装已建立文件系统的软盘到硬盘的空目录/mnt下
mount /dev/fd0135ds18 /mnt
②卸下已安装到硬盘的软盘
cd /
umount /dev/fd0135ds18
③安装硬盘到已建立文件系统的软盘的空目录/mnt下
mount /dev/hd0root /mnt
④卸下已安装到软盘的硬盘
cd /
umount /dev/hd0root
⑤检查与收复可能受到损坏的文件系统
对硬盘的根文件系统, 若是用应急引导盘启动则为:
fsck /dev/hd0root
对硬盘的根文件系统, 若是由硬盘自身启动后则为:
fsck /dev/root
对软盘的文件系统为:
fsck /dev/fd0135ds18
要注意的是, 以上命令中mount及umount 只有在超级用户提示符下才能执行。下面分 析几种系统不能正常引导故障及解决办法。
故障之一
当打开计算机电源后,主控台屏幕上出现如下信息:
boot not found
cannot open
Stage 1 boot failure: error loading hd(40)/boot然后死机, 这表明系统根目录下 的boot文件丢失。boot是用于装载并执行UNIX程序的交互式程序, 主要用于装载和执行UN IX操作系统的核心, 在引导过程中boot将读/etc/default/boot, 显示引导过程信息, 装入 并执行/unix, 所以当boot文件受损时将导致系统引导失败。我们可通过如下步骤用应急引 导盘恢复系统:
1.将Boot盘插入驱动器并重新对机器加电, 此时由Boot盘开始引导;
2.在系统引导提示下敲入hd(40)/unix, 这个命令用于从硬盘把UNIX核心装入, 然后输 入root口令进入单用户模式, 此时出现超级用户提示符#;
3.用命令①把Boot盘安装到硬盘上, 然后用命令: cp /mnt/boot/恢复硬盘根目录下的 boot文件;
4.用命令②把Boot盘从硬盘上卸下来;
5.敲入haltsys关闭系统, 然后再取出Boot盘, 则故障排除, 系统可正常引导;
6.在系统正常引导后进入超级用户, 将/boot文件的属主和组均改为系统原来所定义的 bin即可。
故障之二
机器加电后, 主控台屏幕出现如下信息:
unix not found
然后死机, 这表明UNIX核心丢失, 因为/unix包含核心, unix文件受损将导致系统无 法装入并执行内核, 从而出现死机。我们可用如下方法来恢复:
1.将Boot盘插入驱动器并重新对机器加电, 此时由Boot盘开始引导;
2.在系统引导提示下敲入:fd(64) unix root=hd(40) swap=hd(41) pipe=hd(40)或仅 敲入fd(64)/unix亦可, 这个命令用于从Boot盘把UNIX核心装入,然后输入root口令进入单 用户模式, 此时出现超级用户提示符#;
3.用命令①把Boot盘安装到硬盘上, 然后用命令: cp /mnt/unix/恢复硬盘根目录下的 unix文件;
4.用命令②把Boot盘从硬盘上卸下来;
5.敲入haltsys关闭系统, 取出Boot盘, 则故障排除,系统可以正常引导;
6.在系统正常引导后进入超级用户, 将/unix文件的属主和组改为系统原来所定义的bin和mem即可。
故障之三
机器加电后在系统引导提示符下敲入回车键, 当第一屏被刷新后在第二屏的最后一行 出现如下信息:
Kernel: i/o bufs=600k 然后系统挂起, 这表明系统上/etc/init文件丢失。 因为i nit程序在核心初始化的最后阶段开始执行, 其进程号(pid)为1。 该进程按一定规则启动 /etc/inittab文件中所列的进程, 引导系统进入所规定的运行级别。 它首先读/etc/init tab中的initdefault项,当所有的进程都创建成功后, init进入循环等待, 它主要用于打开 主控台/etc/console, 检查文件系统的一致性, 执行/etc/rc 进行必要的设置。 init在单 用户模式下启动shell,而在多用户模式下运行/etc/brc, /etc/bchk等外壳程序并启动/et c/rc, 它调用/etc/getty为每个终端生成一个getty进程, 以便在读入用户注册名后完成用 户的注册过程。如果/etc/init文件受损,新的进程就无法创建, 从而导致系统挂起, 我们 可用如下方法恢复系统:
1.将Boot盘插入驱动器并重新对机器加电, 此时由Boot盘开始引导, 在系统引导提示 符下按回车键, 然后在提示插入Root盘时取出Boot盘并将Root盘插入, 这样系统全部由应 急引导盘引导, 直至出现提示符#;
2.用命令③把硬盘安装到软盘上;
3.把/etc/init文件从软盘上拷贝到所安装的硬盘上:cp /etc/init /mnt/etc/init
4.用命令④把硬盘从软盘上卸下来;
5.用命令haltsys关闭系统后把Root盘取出, 此时系统已可正常引导;
6.在系统正常引导后进入超级用户, 将/etc/init文件的属主与组均改为系统原来所定 义的bin即可。
故障之四
机器加电后在系统引导提示符下敲入回车键, 当第一屏被刷新后到第二屏时即出现许 多错误信息, 如:
INIT: command
exec /etc/brc 1>/dev/console 2>&1
failed to execute, errno=9 (exec of shell failed)
...
等等, 并不断翻屏显示出错信息, 这表明系统/bin/sh文件受损或丢失。因为sh是SH ELL标准、作业控制和限制性命令解释程序。 所以, 该文件受损或丢失将导致系统启动失 败。我们可用如下步骤解决:
1.将Boot盘插入驱动器并重新开启电源,在系统引导提示符下敲入按回车键, 当提示插 入Root盘时把Boot取出并将Root盘插入, 这样系统全部由应急引导盘引导, 直到出现提示 符#;
2.用命令③把硬盘安装到软盘上;
3.把/bin/sh文件从软盘上拷贝到所安装的硬盘上: cp /bin/sh /mnt/bin/sh
4.用命令④把硬盘从软盘上卸下来;
5.用命令haltsys关闭系统后将Root盘取出, 此时系统已可以正常引导;
6.在系统正常引导后进入超级用户下, 将文件/bin/sh的属主与组均改为系统原来所定 义的bin即恢复了系统。
故障之五
系统可以引导, 但在引导时会出现如下错误信息:
su: Unknow id: root
...
INIT: SINGLE USER MODE
**** PASSWORD FILE MISSING!****
Entering System Maintenance Mode
然后系统自动进入系统维护模式即单用户模式并出现提示符#, 这样系统就无法进入 多用户模式工作。当在系统自动进入单用户模式后, 我们若用命令ls -l进行文件的长列表 显示时会首先出现一行: /etc/passwd cannot be opened for reading, 然后再给出文件 的长列表, 但长列表中文件属主原为bin的已全部自动改为0,1,2,3...等等。这表明文件/ etc/passwd受损或丢失, 因为系统加载时要进行工作方式(单用户或多用户方式)的选择, 此时系统会自动在/etc子目录下寻找passwd