镜像是一种许多公司和家庭用户使用的不需中断的备份技术。 当存在镜像时, 它的意思是说 磁盘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
如果系统引导时出现类似下面的提示:
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>.