警告:这里显示的镜像步骤是非破坏性的,但与任何主要的磁盘操作一样,先做一个完整的备份。
警告:虽然dump(8)
在这些程序中被用来复制文件系统,但它对有软更新日志的文件系统不起作用。参见tunefs(8)
以获得关于检测和禁用软更新日志的信息。
gmirror(8)
可以将一个磁盘从活动镜像中移除,并在一个步骤中擦除元数据。这里,例子中的磁盘 ada8 被从活动镜像 gm4 中移除。gmirror clear
来移除它。gmirror(8)
在磁盘的末端存储一个元数据块。由于 GPT 分区方案也在磁盘的末端存储元数据,所以不推荐用 gmirror(8)
来镜像整个 GPT 磁盘。这里使用 MBR 分区,因为它只在磁盘的开始部分存储一个分区表,不会与镜像元数据冲突。gpart(8)
在镜像上创建 MBR 和 bsdlabel 分区表。这个例子使用了传统的文件系统布局,有 / 、 swap 、 /var 、 /tmp 和 /usr 分区。一个单一的/和一个交换分区也可以工作。dump(8)
和 restore(8)
将原始 ada0 磁盘上的文件系统复制到镜像上。gmirror
需要在每个磁盘的末尾放一个512字节的元数据块,而现有的 ada0 通常已经分配了所有的空间。diskinfo
检查原始磁盘的介质大小。gnop(8)
被用来创建一个大小完全相同的假驱动器。这个驱动器不存储任何数据,只是用来限制镜像的大小。当 gmirror(8)
创建镜像时,它将把容量限制在 gzero.nop 的大小,即使新的 ada1 驱动器有更多的空间。注意,第二行中的 1000204821504 等于上面 diskinfo 显示的 ada0 的介质大小。gpart backup
和 gpart restore
来复制主磁盘上的分区表:gpart show
检查分区表。这个例子中,gm0s1a 代表 / ,gm0s1d 代表 /var ,gm0s1e 代表 /usr ,gm0s1f 代表 /data1 ,而 gm0s1g 代表 /data2:dump(8)
和 restore(8)
将原始磁盘的文件系统复制到镜像上。用 dump -L
转储的每个文件系统都会先创建一个快照,这可能需要一些时间:重要提醒:当 ada0 被插入镜像时,它以前的内容会被镜像的数据覆盖。在将 ada0 加入镜像之前,请确定 mirror/gm0 的内容与 ada0 相同。如果之前通过dump(8)
和restore(8)
复制的内容与 ada0 上的内容不一致,请重新修改 /etc/fstab ,将文件系统挂载到 ada0 上,重新启动,然后重新开始整个过程。
gmirror status
来查看进度。Shell
。然后加载镜像模块并安装镜像设备。/mnt/boot/loader.conf
,添加一行来加载镜像模块:error 19
的问题需要更多的努力来解决。尽管系统应该从 ada0 启动,但如果 /etc/fstab 不正确,会出现另一个选择 shell 的提示。在 boot loader提示下输入 ufs:/dev/ada0s1a
,然后按回车键。撤销 /etc/fstab 中的编辑,然后从原始磁盘(ada0)而不是镜像中加载文件系统。重新启动系统并再次尝试该过程。diskinfo -v
所显示的扇区总数。一个容量大于镜像的驱动器可以工作,尽管新驱动器上的额外空间将不会被使用。gmirror status
监控进度,它显示正在同步的驱动器和完成的百分比。在重新同步的过程中,状态将是 DEGRADED
,当这个过程结束时将变为 COMPLETE
。