在维护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的软驱(下同), 所以当出现:Do 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文件, 若找不到则自动进入到单用户模式。解 决这一问题的方法如下:
1.在系统自动进入单用户模式后, 用命令①把应急引导盘的Root盘安装到硬盘上;
2.把/etc/passwd文件从软盘上拷贝到所安装的硬盘上:cp /mnt/etc/passwd /etc/ passwd
3.用命令②把软盘从硬盘上卸下来;
4.将Root盘取出,用命令reboot重新启动系统,此时系统已可以正常引导;
5.在系统正常引导后进入超级用户下,将文件/etc/passwd的属主与组分别改为系统原 来所定义的bin和auth即可(这里很有意思的是, 我们倘若再用命令ls-l进行文件的长列表 显示时, 上述的现象已不见了,长列表中文件属主原为bin的已全部自动改回为bin)。
故障之六
如果计算机中没有387浮点协处理器, 且在引导时出现警告信息:
WARNING: cannot load floating point emulator
然后引导失败, 这表明系统文件/etc/emulator丢失。 因为文件/etc/emulator用于仿 真计算机中的387浮点协处理器, 我们可用如下方法恢复:
1.将Boot盘插入驱动器并对机器重新加电, 此时由Boot盘开始引导, 在系统引导提示 符下按回车键,在提示插入Root盘时取出Boot盘并将Root盘插入,这样系统全部由应急引导 盘引导, 直到出现提示符#;
2.用命令③把硬盘安装到软盘上;
3.把/etc/emulator文件从软盘上拷贝到所安装的硬盘上: cp /etc/emulator /mnt/ etc/emulator
4.用命令④把硬盘从软盘上卸下来;
5.用命令haltsys关闭系统, 然后把Root盘取出,此时系统已可正常引导;
6.在系统正常引导后进入超级用户, 将/etc/emula-tor文件的属主与组均改为系统原 来所定义的bin即可。
故障之七
系统可以引导, 亦能正常处理日常事务, 但每当关机时总会在主控台屏幕上出现错误 信息:
/etc/initscript: /etc/uadmin: not found
然后系统死机,从而导致系统不能正常关机,这样每次系统在启动时都需要清理文件系 统, 不仅浪废时间还可能严重破坏文件系统导致系统瘫痪。
造成上面的故障是由于系统文件/etc/uadmin丢失或损坏所致, 可用如下方法排除:
1.在系统引导并清理文件系统完成后, 以超级用户root注册(进入单用户模式亦可);
2.在超级用户提示符#下, 用命令①把Root盘安装到硬盘上;
3.把/etc/uadmin文件从软盘上拷贝到所安装的硬盘上:cp/mnt/etc/uadmin /etc/uad min
3.用命令②把软盘从硬盘上卸下来, 然后把Root盘取出;
4.将文件/etc/uadmin的属主与组分别改为系统原来所定义的bin, 至此,故障排除, 系 统可正常关机。
故障之八
当系统管理员遗忘了超级用户口令时也是一件非常令人棘手的事。我们知道, UNIX超 级用户拥有对系统至高无上的控制权, 很多命令, 特别是对系统的管理与维护只有超级用 户才能执行。 我们可用如下方法解决这一问题:
1.在UNIX系统的超级用户口令为回车键(或自己确认不会忘记的口令) 时按上面介绍的 方法制作应急引导盘, 制作完后再将Root盘插入软驱, 用命令①把Root盘安装到硬盘上, 然后用命令: cp/tcb/files/auth/r/root/mnt/root将包含有超级用户口令变形码的文件/ tcb/files/auth/r/root拷贝到Root盘上,然后用命令②将Root盘卸下来并把它们保存在安 全的地方;
2.当超级用户口令遗忘时, 将Boot盘插入驱动器并对机器重新加电,此时由Boot盘开始 引导, 在系统引导提示符下按回车键, 在提示插入Root盘时取出Boot盘并将Root盘插入, 这样系统全部由应急引导盘引导, 直到出现提示符#;
3.用命令③把硬盘安装到Root盘上;
4.把root文件从Root盘上拷贝到硬盘的/tcb/files/auth/r目录下:cp/root/mnt/tcb/ files/auth/r/root
5.把/etc/passwd文件从Root盘上拷贝到硬盘的/etc/passwd目录下: cp/etc/passwd/ mnt/etc/passwd
6.用命令④把硬盘从软盘上卸下来;
7.用命令haltsys关闭系统, 然后把Root盘取出;
8.在系统正常引导后以超级用户root注册, 在要求输入口令处直接按回车键(或输入在 制作应急引导盘时自己专门设置的超级用户口令)即可进入超级用户, 然后将文件/etc/pa sswd的属主与组分别改为系统原来所定义的bin和auth, 将文件/tcb/files/auth/r/root的 属主与组分别改为系统原来所定义的root和auth, 最后用passwd重新设置超级用户口令即 可。
上面介绍的方法,经在SCO UNIX Release 3.2 V4.2、Compaq系列服务器及微机、 AST系列服务器及微机、DECpc和金山系列微机上调试通过。
注意的问题
1.上述的操作中, 如果出现文件系统安装不上(硬盘不能安装到软盘上或软盘不能安 装到硬盘上), 表明硬盘的根文件系统或软盘的文件系统受到了损坏, 我们可以依情况选用 ⑤提供的三条命令之一进行修复后再行安装;
2.当把硬盘安装到软盘上或把软盘安装到硬盘上后, 在把它们卸下来之前, 请不要取 出软盘或关闭系统, 否则, 硬盘的根文件系统或软盘的文件系统将受到损坏, 甚至可能导 致不能修复。