18.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 设备节点。

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

# fdisk -vBI /dev/mirror/gm0

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

# bsdlabel -wB /dev/mirror/gm0s1

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

  使用 newfs(8) 工具来, 在 gm0s1a 设备节点上创建默认的文件系统:

# 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

  接下来需要建一个 boot.conf 文件, 在当前和新盘的根分区上各放一份。 这个文件将 “帮助” 系统的 BIOS 从正确的驱动器上引导:

# echo "1:da(1,a)/boot/loader" > /boot.config
# echo "1:da(1,a)/boot/loader" > /mnt/boot.config

注意: 在所有的分区上都放这些是为了保证系统能够正确引导。 如果由于某种原因系统无法从新的根分区读数据, 则还有一根救命稻草。

  接下来, 在 /boot/loader.conf 中加入一些新的设置:

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

  这将让 loader(8) 在系统初始化过程中自动加载 geom_mirror.ko 模块。

  最后重新启动系统:

# shutdown -r now

  如果一切顺利, 系统将从 gm0s1a 设备启动, 并给出 login 提示等待用户登录。 如果发生错误, 请查阅接下来的故障排除环节。 我们接着将 da0 磁盘也加入 gm0 设备:

# gmirror configure -a gm0
# gmirror insert gm0 /dev/da0

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

18.4.1 故障排除

18.4.1.1 系统拒绝引导

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

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

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

OK? load geom_mirror.ko
OK? boot

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

options    GEOM_MIRROR

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

备注

[1]

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

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

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<[email protected]>.
关于本文档的问题请发信联系 <[email protected]>.