diff options
Diffstat (limited to 'zh_CN.GB2312/books/handbook/geom/chapter.sgml')
-rw-r--r-- | zh_CN.GB2312/books/handbook/geom/chapter.sgml | 209 |
1 files changed, 110 insertions, 99 deletions
diff --git a/zh_CN.GB2312/books/handbook/geom/chapter.sgml b/zh_CN.GB2312/books/handbook/geom/chapter.sgml index dc6126e49d..798098198c 100644 --- a/zh_CN.GB2312/books/handbook/geom/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/geom/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.42 + Original Revision: 1.43 $FreeBSD$ --> @@ -217,132 +217,122 @@ XXX: What message? Put it inside the screen output above. <primary>磁盘镜像</primary> </indexterm> - <para>镜像是一种许多公司和家庭用户使用的不需中断的备份技术。 - 当存在镜像时, 它的意思是说 磁盘B 简单地复制 磁盘A。 - 或者, 也可能是 磁盘C+D - 复制 磁盘A+B。 无论磁盘如何配置, 共同的特征, - 都是磁盘或卷的信息会被复制。 随后,在无需中断服务或访问的情况下, - 可以很容易地复原和备份这些信息, 甚至把它们存储到其他更安全的地方。</para> - - <para>要开始做这件事, 首先要确保系统中有两个同样大的磁盘驱动器, - 下面的例子假定使用直接访问方式 (Direct Access, &man.da.4;) - <acronym>SCSI</acronym> 的磁盘。</para> - - <para>首先需要把 &os; 安装到第一块磁盘上, 并建立两个分区。 - 第一个分区将成为交换区, 其尺寸应该是两倍的 - <acronym>RAM</acronym> 尺寸, 而余下的空间, - 则作为根 (<filename class="directory">/</filename>) 文件系统来使用。 - 当然, 也可以为其他挂接点划分不同的分区; - 但是, 这将使难度提高一个量级, - 因为您将不得不手工修改 &man.bsdlabel.8; 和 &man.fdisk.8; - 的设置。</para> - - <para>重新启动系统, 并等待其完全初始化完。 - 当这个过程完成之后, 以 <username>root</username> - 用户的身份登录。</para> - - <para>创建 <filename>/dev/mirror/gm</filename> 设备, - 并将其连接到 <filename>/dev/da1</filename>:</para> - - <screen>&prompt.root; <userinput>gmirror label -vnb round-robin gm0 /dev/da1</userinput></screen> - - <para>系统应会给出下列回应:</para> - <screen> -Metadata value stored on /dev/da1. -Done.</screen> + <para>镜像是许多公司和家庭用户使用的一种无须中断的备份技术。 + 简单地说, 镜像的概念就是 磁盘B 是同步复制 (replicate) 的 磁盘A 的副本, 或者 磁盘C+D + 是 diskA+B 的同步复制副本, 等等。 无论磁盘配置如何, + 这种技术的共同特点都是一块磁盘或分区的内容会同步复制到另外的地方。 + 这样, 除了能够很容易地恢复信息之外, + 还能够在无须中断服务或访问的情况下进行备份, + 甚至直接将副本送到数据保安公司异地储存。</para> - <para>初始化 GEOM, 这将加载 - <filename>/boot/kernel/geom_mirror.ko</filename> 内核模块:</para> + <para>在开始做这件事之前, 首先请准备两个容量相同的磁盘驱动器, + 下面的例子假定它们都是使用直接访问方式 (Direct Access, &man.da.4;) 的 + <acronym>SCSI</acronym> 磁盘。</para> - <screen>&prompt.root; <userinput>gmirror load</userinput></screen> + <sect2> + <title>对主磁盘进行镜像</title> - <note> - <para>这个命令应该会在 - <filename class="directory">/dev/mirror</filename> - 目录中创建 - <devicename>gm0</devicename> 设备节点。</para> - </note> + <para>假定您现有系统中的 &os; 安装到了第一个, 也就是 + <devicename>da0</devicename> 盘上, 则应告诉 &man.gmirror.8; + 将主要数据保存在这里。</para> - <para>在刚创建的 <devicename>gm0</devicename> - 设备上安装通用的 <command>fdisk</command> 标签以及引导区代码:</para> + <para>在开始构建镜像卷之前, 可以启用更多的调试信息, + 并应开放对设备的完全访问。 这可以通过将 &man.sysctl.8; 变量 + <varname>kern.geom.debugflags</varname> + 设置为下面的值来实现:</para> - <screen>&prompt.root; <userinput>fdisk -vBI /dev/mirror/gm0</userinput></screen> + <screen>&prompt.root; <userinput>sysctl kern.geom.debugflags=17</userinput></screen> - <para>接下来安装通用的 <command>bsdlabel</command> - 信息:</para> + <para>接下来需要创建镜像。 这个过程的第一步是在主磁盘上保存元数据信息, + 也就是用下面的命令来创建 + <filename class="devicefile">/dev/mirror/gm</filename> 设备:</para> - <screen>&prompt.root; <userinput>bsdlabel -wB /dev/mirror/gm0s1</userinput></screen> + <screen>&prompt.root; <userinput>gmirror label -vb round-robin gm0 /dev/da0</userinput></screen> - <note> - <para>如果存在多个区段 (slice) 或分区 (partition), - 则需要修改一部分上面命令的参数。 - 它们必须与另一个盘上对应的区段和分区匹配。</para> - </note> + <para>系统应给出下面的回应:</para> + + <screen>Metadata value stored on /dev/da0. +Done.</screen> - <para>使用 &man.newfs.8; 工具来在 <devicename>gm0s1a</devicename> - 设备上建立默认的 <acronym>UFS</acronym> - 文件系统:</para> + <para>初始化 GEOM, 这步操作会加载内核模块 + <filename>/boot/kernel/geom_mirror.ko</filename>:</para> - <screen>&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1a</userinput></screen> + <screen>&prompt.root; <userinput>gmirror load</userinput></screen> + + <note> + <para>当这个命令运行完之后, 系统会在 + <filename class="directory">/dev/mirror</filename> + 目录中创建设备节点 + <devicename>gm0</devicename>。</para> + </note> - <para>这将让系统输出很多信息和一系列数字。 不必为此担心, - 只需看看是否有错误提示就可以了, 如果没问题, 接下来把它挂到 - <filename class="directory">/mnt</filename> 挂接点上面:</para> + <para>配置在系统初始化过程中自动加载 <filename>geom_mirror.ko</filename>:</para> - <screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen> + <screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' >> /boot/loader.conf</userinput></screen> - <para>现在需要把所有引导盘上的数据迁移到新的文件系统上了。 - 下面的例子使用了 &man.dump.8; 和 &man.restore.8; - 这两个命令; 不过, 用 &man.dd.1; 在这里也可以达到完全一样的目的。</para> + <para>编辑 <filename>/etc/fstab</filename> 文件, + 将其中先前的 <devicename>da0</devicename> 改为新的镜像设备 + <devicename>gm0</devicename>。 以 <username>root</username> 用户身份编辑 + <filename>/etc/fstab</filename>:</para> - <screen>&prompt.root; <userinput>dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)</userinput></screen> + <screen>&prompt.root; <userinput>vi /etc/fstab</userinput></screen> - <para>这个操作必须在所有文件系统上都作一遍。 您可以将前述命令中的文件系统, - 改为所希望的文件系统的位置。</para> + <para>在 &man.vi.1; 中备份现有的 + <filename>fstab</filename> 内容, 具体操作是 + <userinput>:w /etc/fstab.bak</userinput>。 接着, + 把所有旧的 <devicename>da0</devicename> 替换成 <devicename>gm0</devicename>, + 也就是输入命令 + <userinput>:%s/da/mirror\/gm/g</userinput>。<para> - <para>接下来应该编辑复制出来的 <filename>/mnt/etc/fstab</filename> - 文件, 并删去或注释掉交换文件 - <footnote> - <para>需要注意的是, - 在 <filename>fstab</filename> 注释掉交换文件, - 通常会需要您以其他方式重建交换空间。 - 请参见 <xref linkend="adding-swap-space"> 以了解进一步的细节。</para> - </footnote>。 修改其他文件系统对应的信息, - 以便让它们使用新盘。 参考下面的例子:</para> + <para>修改完后的 <filename>fstab</filename> 文件应该是下面的样子。 + 磁盘驱动器是 <acronym>SCSI</acronym> 或 <acronym>ATA</acronym> + 甚至 <acronym>RAID</acronym> 都没有关系, 最终的结果都是 + <devicename>gm</devicename>。</para> - <programlisting># Device Mountpoint FStype Options Dump Pass# -#/dev/da0s2b none swap sw 0 0 -/dev/mirror/gm0s1a / ufs rw 1 1</programlisting> + <programlisting># Device Mountpoint FStype Options Dump Pass# +/dev/mirror/gm0s2b none swap sw 0 0 +/dev/mirror/gm0s2a / ufs rw 1 1 +#/dev/mirror/gm0s2d /store ufs rw 2 2 +/dev/mirror/gm0s2e /usr ufs rw 2 2 +/dev/acd0 /cdrom cd9660 ro,noauto 0 0</programlisting> - <para>用下面的命令来确保系统引导时会加载 <filename>geom_mirror.ko</filename>:</para> + <para>重启系统:</para> - <screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf</userinput></screen> - <screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' >> /boot/loader.conf</userinput></screen> + <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> - <para>最后重新启动系统:</para> + <para>在系统初始化过程中, 新建的 + <devicename>gm0</devicename> 会代替 + <devicename>da0</devicename> 设备工作。 系统完成初始化之后, + 可以通过检查 <command>mount</command> 命令的输出来查看效果:</para> - <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> + <screen>&prompt.root; <userinput>mount</userinput> +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</screen> - <para>在启动时选择第 4 个选项进入单用户模式。 在控制台, - 可以通过 &man.df.1; 的输出来确认系统是从 - <devicename>gm0s1a</devicename> 启动的。</para> + <para>这个输出是正常的。 最后, 使用下面的命令将 <devicename>da1</devicename> + 磁盘加到镜像卷中, 以开始同步过程:</para> - <para>如果一切顺利,系统将从 <devicename>gm0s1a</devicename> - 设备启动。 现在可以使用以下命令清除主磁盘并插入镜像中:</para> + <screen>&prompt.root; <userinput>gmirror insert gm0 /dev/da1</userinput></screen> - <screen>&prompt.root; <userinput>dd if=/dev/zero of=/dev/da0 bs=512 count=79</userinput></screen> + <para>在构建镜像卷的过程中, 可以用下面的命令查看状态:</para> - <screen>&prompt.root; <userinput>gmirror configure -a gm0</userinput> -&prompt.root; <userinput>gmirror insert gm0 /dev/da0</userinput></screen> + <screen>&prompt.root; <userinput>gmirror status</userinput></screen> - <para>此处 <option>-a</option> 告诉 &man.gmirror.8; 采用自动同步, - 或换言之: 自动地将磁盘的写操作做镜像处理。 联机手册中详细解释了如何重建, - 以及替换磁盘, 只不过它用 <devicename>data</devicename> - 表示这里的 <devicename>gm0</devicename>。</para> + <para>一旦镜像卷的构建操作完成, 这个命令的输出就会变成这样:</para> - <para>在镜像建立后,可以用如下命令检查镜像的状态:</para> + <screen> Name Status Components +mirror/gm0 COMPLETE da0 + da1</screen> - <screen>&prompt.root; <userinput>gmirror status</userinput></screen> + <para>如果有问题或者构建仍在进行, 输出中的 + <literal>COMPLETE</literal> 就会是 + <literal>DEGRADED</literal>。</para> + </sect2> <sect2> <title>故障排除</title> @@ -371,6 +361,27 @@ OK? <userinput>boot</userinput></screen> <para>然后重新编译和安装内核来解决这个问题。</para> </sect3> </sect2> + + <sect2> + <title>从磁盘故障中恢复</title> + + <para>磁盘镜像的一大好处是在当其中一个磁盘出现故障时, + 可以很容易地将其替换掉, 并且通常不会丢失数据。</para> + + <para>考虑前面的 <acronym>RAID</acronym>1 + 配置, 假设 <devicename>da1</devicename> + 出现了故障并需要替换, 要替换它, + 首先确定哪个磁盘出现了故障, 并关闭系统。 + 此时, 可以用换上新的磁盘, 并重新启动系统。 + 这之后可以用下面的命令来完成磁盘的替换操作:</para> + + <screen>&prompt.root; <userinput>gmirror forget gm0</userinput></screen> + + <screen>&prompt.root; <userinput>gmirror insert gm0 /dev/da1</userinput></screen> + + <para>在重建过程中可以用 <command>gmirror</command> <option>status</option> + 命令来监看进度。 就是这样简单。</para> + </sect2> </sect1> <sect1 id="geom-ggate"> |