FreeBSD 使用手册
上一页 | 第19章 　GEOM： 模块化磁盘变换框架 | 下一页

# 19.4 RAID1 - 镜像

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

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

## 19.4.1 对主磁盘进行镜像

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

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

    # sysctl kern.geom.debugflags=17

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

> 警告: 如果有数据被存放在磁盘最后的扇区， 并在启动设备上创建镜像的话可能导致数据丢失。 在新安装 FreeBSD 之后立即创建镜像可以减低此风险。

    # 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` 文件应该是下面的样子。 磁盘驱动器是 SCSI 或 ATA 甚至 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`。

## 19.4.2 故障排除

### 19.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

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

## 19.4.3 从磁盘故障中恢复

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

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

    # gmirror forget gm0

    # gmirror insert gm0 /dev/da1

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

上一页 | 起始页 | 下一页
RAID0 - 条带 | 上一级 | GEOM Gate 网络设备

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

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.