在FreeBSD上使用软RAID-1( 二 )


创建镜像/双工很简单 , 只要键入:
# gmirror label -v -b round-robin gm0 /dev/ad0
其中 , gmirror label 创建镜像;-v 开启冗长模式;-b round-robin 选用平衡算法(目前 round-robin 算法性能最佳);gm0 即镜像/双工的名称(该名称代表第一个 GEOM 镜像);/dev/ad0 代表用以镜射的源盘 。
然而 , 若现在便键入命令会使你失望 。
# gmirror label -v -b round-robin gm0 /dev/ad0
Can't store metadata on /dev/ad0: Operation not permitted
(无法将元数据保存于 /dev/ad0 上:禁止操作)
这是一种安全特性 , 表示磁盘已被加载以便写入;因此不可用 。不过 , 你可通过 sysctl MIB , 暂时让 gmirror 绕过这个特性 , 从而创建镜像/双工 。
# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
不用担心 , 系统重启后(数分钟后的事) , 该 MIB 将复位为 0 。再来一次:
# gmirror label -v -b round-robin gm0 /dev/ad0
Metadata value stored on /dev/ad0
就这样 , RAID 1 配置告成 。
我们有必要让操作系统每次重启时自动装载 RAID 。这需要修改两个文件 。第一个文件当前是空的 , 用 echo 创建即可:
# echo geom_mirror_load="YES" >/boot/loader.conf
第二个文件 /etc/fstab 不是空的 , 所以我建议在修改前做个备份:
# cp /etc/fstab /etc/fstab.orig
# vi /etc/fstab
将所有 ad 改为 gm , 在 /dev 后插入 mirror 。比如将 /dev/ad0s1a 改为 /dev/mirror/gm0s1a 。如果没有创建别的分区 , 你会看到以 a, b, d, e 和 f 结尾的五个 ad0s1 分区;你需要逐一修改 。
修改完毕后 , 再仔细检查对 /etc/fstab 及 /boot/loader.conf 作出的更改 。虽说事后可以修正 , 但是因敲错一个字而不能启动新的系统是很烦的事 。
注:有些教程说过需要在 /etc/rc.conf 中加入 swapoff 选项 。现已没必要 。同样地 , 没必要将 shutdown -r now 当成 reboot 来用 。
确定没有错误之后 , 取出安装盘后 , 按下 Alt F1 退出安装菜单 。
启用镜像/双工
若你注意看启动信息 , 在系统读出磁盘信息后 , 你应看到以白色粗体字显示的信息:
GEOM_MIRROR: Device gm0 created (id=2125638583).
GEOM_MIRROR: Device gm0: provider ad0 detected.
GEOM_MIRROR: Device gm0: provider ad0 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
GEOM_MIRROR: Device gm0 already configured.
Mounting root from ufs:/dev/mirror/gm0s1a
系统启动还在继续 。不过 , 若在 /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:
: Mount using filesystem
e.g. ufs:da0s1a
List valid disk boot devices
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

推荐阅读