20.4. RAID1 - 镜像

镜像是许多公司和家庭用户使用的一种无须中断的备份技术。 简单地说, 镜像的概念就是 磁盘B 是同步复制 (replicate) 的 磁盘A 的副本, 或者 磁盘C+D 是 diskA+B 的同步复制副本, 等等。 无论磁盘配置如何, 这种技术的共同特点都是一块磁盘或分区的内容会同步复制到另外的地方。 这样, 除了能够很容易地恢复信息之外, 还能够在无须中断服务或访问的情况下进行备份, 甚至直接将副本送到数据保安公司异地储存。

在开始做这件事之前, 首先请准备两个容量相同的磁盘驱动器, 下面的例子假定它们都是使用直接访问方式 (Direct Access, da(4)) 的 SCSI 磁盘。

20.4.1. 对主磁盘进行镜像

假定您现有系统中的 FreeBSD 安装到了第一个, 也就是 da0 盘上, 则应告诉 gmirror(8) 将主要数据保存在这里。

在开始构建镜像卷之前, 可以启用更多的调试信息, 并应开放对设备的完全访问。 这可以通过将 sysctl(8) 变量 kern.geom.debugflags 设置为下面的值来实现:

# sysctl kern.geom.debugflags=17

接下来需要创建镜像。 这个过程的第一步是在主磁盘上保存元数据信息, 也就是用下面的命令来创建 /dev/mirror/gm 设备:

警告:

在引导用的设备基础上新建镜像时, 有可能会导致保存在磁盘上最后一个扇区的数据丢失。 在新安装 FreeBSD 之后立即创建镜像可以减低此风险。 下面的操作与默认的 FreeBSD 9.X 安装过程不兼容, 因为它采用了新的 GPT 分区格式。 GEOM 会覆盖 GPT 元数据, 这会导致数据丢失, 并有可能导致系统无法引导。

# gmirror label -vb round-robin gm0 /dev/da0

系统应给出下面的回应:

Metadata value stored on /dev/da0.
Done.

初始化 GEOM, 这步操作会加载内核模块 /boot/kernel/geom_mirror.ko

# gmirror load

注意:

当这个命令运行完之后, 系统会在 /dev/mirror 目录中创建设备节点 gm0

配置在系统初始化过程中自动加载 geom_mirror.ko

# echo 'geom_mirror_load="YES"' >> /boot/loader.conf

编辑 /etc/fstab 文件, 将其中先前的 da0 改为新的镜像设备 gm0

注意:

如果 vi(1) 是你喜欢的编辑器, 以下则是完成此项任务的一个简便方法:

# vi /etc/fstab

vi(1) 中备份现有的 fstab 内容, 具体操作是 :w /etc/fstab.bak。 接着, 把所有旧的 da0 替换成 gm0, 也就是输入命令 :%s/da/mirror\/gm/g

修改完后的 fstab 文件应该是下面的样子。 磁盘驱动器是 SCSIATA 甚至 RAID 都没有关系, 最终的结果都是 gm

# Device		Mountpoint	FStype	Options		Dump	Pass#
/dev/mirror/gm0s1b	none		swap	sw		0	0
/dev/mirror/gm0s1a	/		ufs	rw		1	1
/dev/mirror/gm0s1d	/usr		ufs	rw		0	0
/dev/mirror/gm0s1f	/home		ufs	rw		2	2
#/dev/mirror/gm0s2d	/store		ufs	rw		2	2
/dev/mirror/gm0s1e	/var		ufs	rw		2       2
/dev/acd0		/cdrom		cd9660	ro,noauto	0	0

重启系统:

# shutdown -r now

在系统初始化过程中, 新建的 gm0 会代替 da0 设备工作。 系统完成初始化之后, 可以通过检查 mount 命令的输出来查看效果:

# mount
Filesystem         1K-blocks    Used    Avail Capacity  Mounted on
/dev/mirror/gm0s1a   1012974  224604   707334    24%    /
devfs                      1       1        0   100%    /dev
/dev/mirror/gm0s1f  45970182   28596 42263972     0%    /home
/dev/mirror/gm0s1d   6090094 1348356  4254532    24%    /usr
/dev/mirror/gm0s1e   3045006 2241420   559986    80%    /var
devfs                      1       1        0   100%    /var/named/dev

这个输出是正常的。 最后, 使用下面的命令将 da1 磁盘加到镜像卷中, 以开始同步过程:

# gmirror insert gm0 /dev/da1

在构建镜像卷的过程中, 可以用下面的命令查看状态:

# gmirror status

一旦镜像卷的构建操作完成, 这个命令的输出就会变成这样:

      Name    Status  Components
mirror/gm0  COMPLETE  da0
                      da1

如果有问题或者构建仍在进行, 输出中的 COMPLETE 就会是 DEGRADED

20.4.2. 故障排除

20.4.2.1. 系统拒绝引导

如果系统引导时出现类似下面的提示:

ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot>

这种情况应使用电源或复位按钮重启机器。 在引导菜单中, 选择第六 (6) 个选项。 这将让系统进入 loader(8) 提示符。 在此处手工加载内核模块:

OK? load geom_mirror
OK? boot

如果这样做能解决问题, 则说明由于某种原因模块没有被正确加载。 检查 /boot/loader.conf 中相关条目是否正确。 如果问题仍然存在,可以在内核配置文件中加入:

options	GEOM_MIRROR

然后重新编译和安装内核来解决这个问题。

20.4.3. 从磁盘故障中恢复

磁盘镜像的一大好处是在当其中一个磁盘出现故障时, 可以很容易地将其替换掉, 并且通常不会丢失数据。

考虑前面的 RAID1 配置, 假设 da1 出现了故障并需要替换, 要替换它, 首先确定哪个磁盘出现了故障, 并关闭系统。 此时, 可以用换上新的磁盘, 并重新启动系统。 这之后可以用下面的命令来完成磁盘的替换操作:

# gmirror forget gm0
# gmirror insert gm0 /dev/da1

在重建过程中可以用 gmirror status 命令来监看进度。 就是这样简单。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.