电脑技术学习

FreeBSD紧急救援状况的应变措施

dn001
玩 FreeBSD 的各位,有没有常常『重灌』系统呢?

如果只是因为某些设定上的疏忽,比如说设错 root 或是某个 user 的 shell
路径,或是安装某些程式结果开机以後不能使用,或是 make new kernel 以後
变得无法开机,这些问题难道就都只有『重灌』一途可以解决吗?

当然不!请记住你现在不是在用 M$ "飞窗"系统,重灌只是属於鸵鸟的那种人
才会使用的解决方法。以下提供一点小 hint 告诉你怎麽在系统出问题的时候,
做出紧急应变措施,大部分的情形下我假设你已经进入(或是该说,只能进入)
单机模式(single user mode)。
==========================================================================
Q0: Ok, 什麽是单机模式?(Single user mode) 我该怎麽进入单机模式?
Hint:
1.请记住 Unix 系统(当然包含 FreeBSD)先天的设计上是多使用工作环境,
别人可以藉由 telnet 或是 rsh 或其他的远端签入程式连线过来使用你的
机器,单机模式简单的说,系统处於最原始的状态,所有有关网路方面的
service 都还没有跑起来,file system 也还没有 mount, 只有最原始的
系统组态被读入,然後由 kernel 开机进入 command line 这样而已。这
种类似浑沌初开的原始状态,就是单机模式。
2.进入单机模式,在 FreeBSD 的方法就是当你开机看到 boot: 提示号
时,马上打 boot -s 就可以了。如果你有装 boot loader, 在 loader
里面打 boot -s 也是一样的效果。

Q1: root(or other user)shell 设错,怎麽办?
(类似这样的问题还有,密码忘记了等等)
Hint:
1.开机进入单机模式。
2.用 vipw 改密码或 shell 路径吧!
3.或系统提示号 # 出现以後马上用 passwd 命令更改密码,这次请把密码抄
在女朋友的背上,刻在自己的额头上,或是用任何不会再忘记或找不到的
方法强迫自己记忆。

Q2: 开机到一半结果好像硬碟有问题,没有办法 mount 某个 partition 结果
就整个停住了,怎麽办?
(类似这样的问题还有,把硬碟从 master 换到 slave, 或是相反的动作,或是
/etc/fstab 档里面写错一个 slice name 等等)
Hint:
1.开机进入单机模式。
2.在系统提示号 # 出现後,打 /sbin/mount / 先把 root partition mount
起来。
3.然後改 /etc/fstab.
4.如果不确定有这个 device name, 或许你该去 /dev 下利用 MAKEDEV 这个
指令做出 dev 再说。比如说你把原本放在 primary master 的硬碟搬到
slave 去,device name 应该从 wd0->wd1, 但是你看 /dev 下没有任何叫
rwd1 的 device name, 你就应该这样做:

# cd /dev
# ./MAKEDEV wd1

Q3: 单机模式下,键盘按键变得好奇怪,还有方向键(上下)不能拿来 repeat 以
前的命令,怎麽办?
Hint:
1.在系统提示号 # 後面打 set -E
2.可以更换 shell, 因为单机模式是使用 /bin/sh 这个 shell, 你还是可以
使用自己习惯的 shell. 直接找到 shell 所在的目录,一般来说常用的就
是 /bin/csh, /usr/local/bin/tcsh; /usr/local/bin/bash 等这几种。

Q4: 单机模式下,我要使用 /stand/sysinstall 或是 ee 等程式的时候,系统告
告诉我 Unknown terminal type, 怎麽办?
(同样的问题还有,vi 不能使用,说 terminal 不对等等...)
Hint:
1.set TERM=cons25
2.done.

Q5. 我的硬碟里面好像有坏轨,结果不能正常开机进入单机模式了,怎麽办?
Hint:
1.进入单机模式以後,
2.用 fsck -y 命令先检查看看,如果有坏轨就用 bad144 或其他 repair
程式去扫描修复。

Q6. 我的 kernel 不能开机了,怎麽办?
Hint:
1.在 boot: 提示号出现的时候,直接打 kernel.GENERIC 或是 kernel.old
用旧的 kernel 来开机。再怎麽样,kernel.GENERIC 都一定要可以用。
2.有装 boot loader 的人,可以在 loader 里面先下 load kernel.GENERIC
的命令读取这个 kernel, 然後用 boot 命令启动系统。

标签: