19.4 RAID1 - 镜像

  镜像是一种许多公司和家庭用户使用的不需中断的备份技术。 当存在镜像时, 它的意思是说 磁盘B 简单地复制 磁盘A。 或者, 也可能是 磁盘C+D 复制 磁盘A+B。 无论磁盘如何配置, 共同的特征, 都是磁盘或卷的信息会被复制。 随后,在无需中断服务或访问的情况下, 可以很容易地复原和备份这些信息, 甚至把它们存储到其他更安全的地方。

  要开始做这件事, 首先要确保系统中有两个同样大的磁盘驱动器, 下面的例子假定使用直接访问方式 (Direct Access, da(4)) SCSI 的磁盘。

  首先需要把 FreeBSD 安装到第一块磁盘上, 并建立两个分区。 第一个分区将成为交换区, 其尺寸应该是两倍的 RAM 尺寸, 而余下的空间, 则作为根 (/) 文件系统来使用。 当然, 也可以为其他挂接点划分不同的分区; 但是, 这将使难度提高一个量级, 因为您将不得不手工修改 bsdlabel(8)fdisk(8) 的设置。

  重新启动系统, 并等待其完全初始化完。 当这个过程完成之后, 以 root 用户的身份登录。

  创建 /dev/mirror/gm 设备, 并将其连接到 /dev/da1

# gmirror label -vnb round-robin gm0 /dev/da1

  系统应会给出下列回应:

Metadata value stored on /dev/da1.
Done.

  初始化 GEOM, 这将加载 /boot/kernel/geom_mirror.ko 内核模块:

# gmirror load

注意: 这个命令应该会在 /dev/mirror 目录中创建 gm0 设备节点。

  在刚创建的 gm0 设备上安装通用的 fdisk 标签以及引导区代码:

# fdisk -vBI /dev/mirror/gm0

  接下来安装通用的 bsdlabel 信息:

# bsdlabel -wB /dev/mirror/gm0s1

注意: 如果存在多个区段 (slice) 或分区 (partition), 则需要修改一部分上面命令的参数。 它们必须与另一个盘上对应的区段和分区匹配。

  使用 newfs(8) 工具来在 gm0s1a 设备上建立默认的 UFS 文件系统:

# newfs -U /dev/mirror/gm0s1a

  这将让系统输出很多信息和一系列数字。 不必为此担心, 只需看看是否有错误提示就可以了, 如果没问题, 接下来把它挂到 /mnt 挂接点上面:

# mount /dev/mirror/gm0s1a /mnt

  现在需要把所有引导盘上的数据迁移到新的文件系统上了。 下面的例子使用了 dump(8)restore(8) 这两个命令; 不过, 用 dd(1) 在这里也可以达到完全一样的目的。

# dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)

  这个操作必须在所有文件系统上都作一遍。 您可以将前述命令中的文件系统, 改为所希望的文件系统的位置。

  接下来应该编辑复制出来的 /mnt/etc/fstab 文件, 并删去或注释掉交换文件 [1]。 修改其他文件系统对应的信息, 以便让它们使用新盘。 参考下面的例子:

# Device                Mountpoint      FStype  Options         Dump    Pass#
#/dev/da0s2b             none            swap    sw              0       0
/dev/mirror/gm0s1a       /               ufs     rw              1       1

  用下面的命令来确保系统引导时会加载 geom_mirror.ko

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

  最后重新启动系统:

# shutdown -r now

  在启动时选择第 4 个选项进入单用户模式。 在控制台, 可以通过 df(1) 的输出来确认系统是从 gm0s1a 启动的。

  如果一切顺利,系统将从 gm0s1a 设备启动。 现在可以使用以下命令清除主磁盘并插入镜像中:

# dd if=/dev/zero of=/dev/da0 bs=512 count=79
# gmirror configure -a gm0
# gmirror insert gm0 /dev/da0

  此处 -a 告诉 gmirror(8) 采用自动同步, 或换言之: 自动地将磁盘的写操作做镜像处理。 联机手册中详细解释了如何重建, 以及替换磁盘, 只不过它用 data 表示这里的 gm0

  在镜像建立后,可以用如下命令检查镜像的状态:

# gmirror status

19.4.1 故障排除

19.4.1.1 系统拒绝引导

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

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

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

OK? load geom_mirror
OK? boot

  如果这样做能解决问题, 则说明由于某种原因模块没有被正确加载。 可以通过在内核配置文件中加入:

options    GEOM_MIRROR

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

备注

[1]

需要注意的是, 在 fstab 注释掉交换文件, 通常会需要您以其他方式重建交换空间。 请参见 第 11.14 节 以了解进一步的细节。

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

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