系统启动还在继续。不过,若在 /etc/fstab 敲错了一个字,启动过程将就此停止并等待你输入正确的信息。在下面例子中,我在修改 /etc/fstab 时忘了插入 mirror 一词,即将本应为 /dev/mirror/gm0s1a 的误作 /dev/gm0s1a,这样,FreeBSD 便不能找到我的根文件系统。
Mounting root from ufs:/dev/gm0s1a
setrootbyname failed
ffs_mountroot: can't find rootvp
Root mount failed: 6
Manual root filesystem specification:
<fstype>:<device> Mount <device> using filesystem <fstype>
e.g. ufs:da0s1a
? List valid disk boot devices
<empty line> Abort manual input
mountroot>
所幸的是,它并不是看起来那么可怕。可以从列出有效的启动分区入手处理故障:
mountroot> ?
List of GEOM managed disk devices:
mirror/gm0s1f mirror/gm0s1e mirror/gm0s1d mirror/gm0s1c mirror/gm0s1b
mirror/gm0s1a mirror/gm0s1 ad2s1 mirror/gm0 ad0s1 ad2 acd0 ad0 fd0
若你正确输入 / 文件系统的位置,它将继续启动(boot,原文误作 reboot)下去。
mountroot> ufs:/dev/mirror/gm0s1a
Mounting root from /dev/mirror/gm0s1a
登入之后,先更正 /etc/fstab 的误处并重新启动。正常启动且成功登入后,键入以下命令确定镜像的每个分区已被成功加载。
% df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/mirror/gm0s1a 248M 35M 193M 15% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/mirror/gm0s1e 248M 12K 228M 0% /tmp
/dev/mirror/gm0s1f 7.3G 99M 6.7G 1% /usr
/dev/mirror/gm0s1d 248M 196K 228M 0% /var
df 不显示交换分区的信息,可以用以下命令核实:
% swapinfo
Device 1K-blocks Used Avail Capacity
/dev/mirror/gm0s1b 629544 0 629544 0%
同步镜像/双工
剩下的事就是同步两块硬盘的数据了。只要键入向镜像插入第二块硬盘的命令,数据同步将自动进行。
# gmirror insert gm0 /dev/ad2
GEOM_MIRROR: Device gm0: provider ad2 detected.
GEOM_MIRROR: Device gm0: rebuilding provider ad2.
看看进展如何:
# gmirror list | more
Geom name: gm0
State: DEGRADED
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 2125638583
Providers:
1. Name: mirror/gm0
Mediasize: 10262568448 (9.6G)
Sectorsize: 512
Mode: r6w5e2
Consumers:
1. Name: ad0
Mediasize: 10262568448 (9.6G)
Sectorsize: 512
Mode: r1w1e1
State: ACTIVE
Priority: 0
Flags: DIRTY
GenID: 0
SyncID: 1
ID: 3986018406
2. Name: ad2
Mediasize: 10262568448 (9.6G)
Sectorsize: 512
Mode: r1w1e1
State: SYNCHRONIZING
Priority: 0
Flags: DIRTY, SYNCHRONIZING
GenID: 0
SyncID: 1
Synchronized: 1%
ID: 1946262342
注意看 Flags 行上的 SYNCHRONIZING 字眼。这两块硬盘的数据要同步需要一些时间,如当前所示才一个百分点。据我所知,10GB 的硬盘大约需时 30 分钟,75GB 的约需两个半小时。若你觉得好奇,查查进度:
# gmirror status
Name Status Components
mirror/gm0 DEGRADED ad0
ad2 (2%)
数据同步完毕后,你将看到以白色粗体字显示的系统信息:
GEOM_MIRROR: Device gm0: rebuilding provider ad2 finished.
GEOM_MIRROR: Device gm0: provider ad2 activated.
若再次输入 gmirror list,你会看到 State (状态) 已从 DEGRADED (已降级) 变成 COMPLETE (完毕),Synchronized (已同步) 一行已不见了。若在 Flags 行上看到 DIRTY (不干净) 字眼,不用担心;那仅表示系统已写入新的数据但尚未完成镜射。若你在磁盘平静下来后等数秒钟,则你将会看到 Flags 行变成了 NONE (无)。
重启系统,最后检查一下。
这回启动信息应包含以下这些:
GEOM_MIRROR: Device gm0 created (id=2125638583).
GEOM_MIRROR: Device gm0: provider ad0 detected.
GEOM_MIRROR: Device gm0: provider ad2 detected.
GEOM_MIRROR: Device gm0: provider ad0 activated.
GEOM_MIRROR: Device gm0: provider ad2 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
Mounting root from ufs:/dev/mirror/gm0s1a
结语
GEOM 实用程序在日益进步,它的开发者不断地将新特性及更新上传到网页去。利用 cvsup 更新你手上的 FreeBSD 版本或在决定安装 FreeBSD 时选用最新的版本是很重要的。
若你想取得镜像/双工的性能数据,用 gstat(8)。通读 gmirror(8) 的说明文字也是值得倡议的,特别是在你想了解如何更换一块坏硬盘的情况下。
![nixsky[www.nixsky.com]](/templets/images/toplogo.gif)

