aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook/geom
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2005-08-28 17:07:51 +0000
committerXin LI <delphij@FreeBSD.org>2005-08-28 17:07:51 +0000
commitcd18914b7172b8665fcd818269a10e300a96e955 (patch)
treeb969a4bcd9d727c88e7299e4caf1be45844a7439 /zh_CN.GB2312/books/handbook/geom
parent57897a56815e039635cd76cc87d1da9a550286ea (diff)
Notes
Diffstat (limited to 'zh_CN.GB2312/books/handbook/geom')
-rw-r--r--zh_CN.GB2312/books/handbook/geom/Makefile16
-rw-r--r--zh_CN.GB2312/books/handbook/geom/chapter.sgml393
2 files changed, 409 insertions, 0 deletions
diff --git a/zh_CN.GB2312/books/handbook/geom/Makefile b/zh_CN.GB2312/books/handbook/geom/Makefile
new file mode 100644
index 0000000000..05079dcc5b
--- /dev/null
+++ b/zh_CN.GB2312/books/handbook/geom/Makefile
@@ -0,0 +1,16 @@
+#
+# Build the Handbook with just the content from this chapter.
+#
+# Original Revision: 1.1
+# $FreeBSD$
+#
+
+CHAPTERS= geom/chapter.sgml
+
+VPATH= ..
+
+MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX}
+
+DOC_PREFIX?= ${.CURDIR}/../../../..
+
+.include "../Makefile"
diff --git a/zh_CN.GB2312/books/handbook/geom/chapter.sgml b/zh_CN.GB2312/books/handbook/geom/chapter.sgml
new file mode 100644
index 0000000000..89974b51ef
--- /dev/null
+++ b/zh_CN.GB2312/books/handbook/geom/chapter.sgml
@@ -0,0 +1,393 @@
+<!--
+ The FreeBSD Documentation Project
+ The FreeBSD Simplified Chinese Project
+
+ Original Revision: 1.7
+ $FreeBSD$
+
+-->
+
+<chapter id="GEOM">
+ <chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>原作 </contrib>
+ </author>
+ </authorgroup>
+ </chapterinfo>
+
+ <title>GEOM: 模块化磁盘变换框架</title>
+
+ <sect1 id="GEOM-synopsis">
+ <title>概述</title>
+
+ <indexterm>
+ <primary>GEOM</primary>
+ </indexterm>
+ <indexterm>
+ <primary>GEOM 磁盘框架</primary>
+ <see>GEOM</see>
+ </indexterm>
+
+ <para>本章将介绍以 &os; 新的 GEOM 框架来使用磁盘。
+ 这包括了使用这一框架来配置的主要的 <acronym
+ role="Redundant Array of Inexpensive Disks">RAID</acronym>
+ 控制工具。 这一仗不会深入讨论 GEOM
+ 如何处理或控制 I/O、 其下层的子系统或代码。
+ 您可以从 &man.geom.4; 联机手册及其众多 SEE ALSO 参考文献中得到这些信息。
+ 这一章也不是对 <acronym>RAID</acronym> 配置的权威介绍,
+ 它只介绍由 GEOM 支持的 <acronym>RAID</acronym>
+ 级别。</para>
+
+ <para>读完这章, 您将了解:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>通过 GEOM 支持的 <acronym>RAID</acronym> 类型。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何使用基本工具来配置和管理不同的 <acronym>RAID</acronym>
+ 级别。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何通过 GEOM 使用镜像、 条带、 加密和挂接在远程的磁盘设备。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何排除挂接在 GEOM 框架上的磁盘设备的问题。</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>阅读这章之前, 您应:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>理解 &os; 如何处理磁盘设备
+ (<xref linkend="disks">)。</para>
+ <listitem>
+ <para>了解如何配置和安装新的 &os; 内核
+ (<xref linkend="kernelconfig">)。</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="GEOM-intro">
+ <title>GEOM 介绍</title>
+
+ <para>GEOM 允许访问和控制类 (classes) &mdash; 主引导记录、
+ <acronym>BSD</acronym> 标签 (label), 等等 &mdash; 通过使用
+ provider, 或在
+ <filename role="directory">/dev</filename> 中的特殊文件。
+ 它支持许多软件 <acronym>RAID</acronym> 配置, GEOM 能够向操作系统,
+ 以及在其上运行的工具提供透明的访问方式。</para>
+ </sect1>
+
+ <sect1 id="GEOM-striping">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>原作 </contrib>
+ </author>
+ <author>
+ <firstname>Murray</firstname>
+ <surname>Stokely</surname>
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title>RAID0 - 条带</title>
+
+ <indexterm>
+ <primary>GEOM</primary>
+ </indexterm>
+ <indexterm>
+ <primary>条带</primary>
+ </indexterm>
+
+ <para>条带是一种将多个磁盘驱动器合并为一个卷的方法。
+ 许多情况下, 这是通过硬件控制器来完成的。 GEOM
+ 磁盘子系统提供了 <acronym>RAID</acronym>0 的软件支持,
+ 它也成为磁盘条带。</para>
+
+ <para>在 <acronym>RAID</acronym>0 系统中, 数据被分为多个块,
+ 这些块将分别写入阵列的所有磁盘。 与先前需要等待系统将 256k
+ 数据写到一块磁盘上不同, <acronym>RAID</acronym>0 系统,
+ 能够同时分别将打碎的 64k 写到四块磁盘上, 从而提供更好的 I/O
+ 性能。 这一性能提升还能够通过使用多个磁盘控制器来进一步改进。</para>
+
+ <para>在 <acronym>RAID</acronym>0 条带中的每一个盘的尺寸必须一样,
+ 因为 I/O 请求是分散到多个盘上的, 以便让这些盘上的读写并行完成。</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="geom/striping" align="center">
+ </imageobject>
+
+ <textobject>
+ <phrase>磁盘条带图</phrase>
+ </textobject>
+ </mediaobject>
+
+ <procedure>
+ <title>在未格式化的 ATA 磁盘上建立条带</title>
+
+ <step><para>加载 <filename>geom_stripe</filename>
+ 模块:</para>
+
+ <screen>&prompt.root; <userinput>kldload geom_stripe.ko</userinput></screen>
+ </step>
+
+ <step><para>确信存在合适的挂接点 (mount point)。 如果这个卷将成为根分区,
+ 那么暂时把它挂接到其他位置i, 如 <filename
+ role="directory">/mnt</filename>。</para>
+
+ <screen>&prompt.root; <userinput>mkdir /mnt</userinput></screen>
+ </step>
+
+ <step><para>确定将被做成条带卷的磁盘的设备名,
+ 并创建新的条带设备。 举例而言,
+ 下面的命令可以把两个未用的、 尚未分区的 <acronym>ATA</acronym> 磁盘:
+ <filename>/dev/ad2</filename> 和
+ <filename>/dev/ad3</filename> 标记为条带卷成员。</para>
+
+ <screen>&prompt.root; <userinput>gstripe label -v st0 /dev/ad2 /dev/ad3</userinput></screen>
+
+<!--
+ <para>A message should be returned explaining that meta data has
+ been stored on the devices.
+XXX: What message? Put it inside the screen output above.
+-->
+ </step>
+
+ <step><para>如果卷将被用于作为根设备来启动系统,
+ 还必须在创建文件系统之前执行下面的命令:</para>
+
+ <screen>&prompt.root; <userinput>fdisk -vBI /dev/stripe/st0</userinput></screen>
+ </step>
+
+ <step><para>此外还需要用下面的命令在新卷上创建分区表:</para>
+
+ <screen>&prompt.root; <userinput>bsdlabel -wB /dev/stripe/st0</userinput></screen>
+
+ </step>
+
+ <step><para>上述过程将在
+ <filename role="directory">/dev/stripe</filename>
+ 目录中的 <filename>st0</filename> 设备基础上建立两个新设备。
+ 这包括 <filename>st0a</filename> 和
+ <filename>st0c</filename>。 现在需要在
+ <filename>st0a</filename> 设备上用下述
+ <command>newfs</command> 命令建立文件系统:</para>
+
+ <screen>&prompt.root; <userinput>newfs -U /dev/stripe/st0a</userinput></screen>
+
+ <para>在屏幕上将滚过一些数字, 整个操作应该能在数秒内完成。
+ 现在可以挂接刚刚做好的卷了:</para>
+ </step>
+ </procedure>
+
+ <para>下列命令可以用来手工挂接新创建的条带盘。</para>
+
+ <screen>&prompt.root; <userinput>mount /dev/stripe/st0a /mnt</userinput></screen>
+
+ <para>要在启动过程中自动挂接这个条带上的文件系统,
+ 需要把关于卷的信息放到
+ <filename>/etc/fstab</filename> 文件中:</para>
+
+ <screen>&prompt.root; <userinput>echo "/dev/stripe/st0a /mnt ufs rw 2 2" \</userinput>
+ <userinput>&gt;&gt; /etc/fstab</userinput></screen>
+
+ <para>此外, geom 模块也必须在系统初始化过程中自动加载,
+ 这可以通过在
+ <filename>/boot/loader.conf</filename> 中进行适当的设置来达到。</para>
+
+ <screen>&prompt.root; <userinput>echo 'geom_stripe_load="YES"' &gt;&gt; /boot/loader.conf</userinput></screen>
+
+ </sect1>
+
+ <sect1 id="GEOM-mirror">
+ <title>RAID1 - 镜像</title>
+
+ <indexterm>
+ <primary>GEOM</primary>
+ </indexterm>
+ <indexterm>
+ <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 role="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>
+
+ <note>
+ <para>这个命令将在
+ <filename role="directory">/dev/mirror</filename>
+ 目录中创建 <filename>gm0</filename>、 <filename>gm0s1</filename>、
+ <filename>gm0s1a</filename>, 以及 <filename>gm0s1c</filename>
+ 设备节点。</para>
+ </note>
+
+ <para>初始化 GEOM, 这将加载
+ <filename>/boot/kernel/geom_mirror.ko</filename> 内核模块:</para>
+
+ <screen>&prompt.root; <userinput>geom load</userinput></screen>
+
+ <para>安装通用的 <command>fdisk</command> 标签和引导区代码到刚刚创建的
+ <filename>gm0</filename> 设备上:</para>
+
+ <screen>&prompt.root; <userinput>fdisk -vBI /dev/mirror/gm0</userinput></screen>
+
+ <para>接下来安装通用的 <command>bsdlabel</command>
+ 信息:</para>
+
+ <screen>&prompt.root; <userinput>bsdlabel -wB /dev/mirror/gm0s1</userinput></screen>
+
+ <note>
+ <para>如果存在多个区段 (slice) 或分区 (partition),
+ 则需要修改一部分上面命令的参数。
+ 它们必须与另一个盘上对应的区段和分区匹配。</para>
+ </note>
+
+ <para>使用 &man.newfs.8; 工具来创建默认的文件系统到
+ <filename>gm0s1a</filename> 设备节点上:</para>
+
+ <screen>&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1a</userinput></screen>
+
+ <para>这将让系统输出很多信息和一系列数字。 不必为此担心,
+ 只需看看是否有错误提示就可以了, 如果没问题, 接下来把它挂到
+ <filename role="directory">/mnt</filename> 挂接点上面:</para>
+
+ <screen>&prompt.root <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen>
+
+ <para>现在需要把酥藕有引导盘上的数据迁移到新的文件系统上了。
+ 下面的例子使用了 &man.dump.8; 和 &man.restore.8;
+ 这两个命令; 不过, 用 &man.dd.1; 在这里也可以达到完全一样的目的。
+ 我们并不使用 &man.tar.1; 因为它并不覆盖引导区的代码,
+ 而那样一定会造成出错的。</para>
+
+ <screen>&prompt.root; <userinput>dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)</userinput></screen>
+
+ <para>这个操作必须在所有文件系统上都作一遍。 您可以将前述命令中的文件系统,
+ 改为所希望的文件系统的位置。</para>
+
+ <para>接下来应该编辑复制出来的 <filename>/mnt/etc/fstab</filename>
+ 文件, 并删去或注释掉交换分区。 此外应该修改文件系统信息,
+ 以便让它们使用新盘。 参考下面的例子:</para>
+
+ <programlisting># Device Mountpoint FStype Options Dump Pass#
+#/dev/da0s2b none swap sw 0 0
+/dev/mirror/gm0sa1 / ufs rw 1 1</programlisting>
+
+ <para>接下来需要建一个 <filename>boot.conf</filename> 文件,
+ 在当前和新盘的根分区上各放一份。 这个文件将
+ <quote>帮助</quote> 系统的 <acronym>BIOS</acronym>
+ 从正确的驱动器上引导:</para>
+
+ <screen>&prompt.root; <userinput>echo "1:da(1,a)/boot/loader" &gt; /boot.config</userinput></screen>
+
+ <screen>&prompt.root; <userinput>echo "1:da(1,a)/boot/loader" &gt; /mnt/boot.config</userinput></screen>
+
+ <note>
+ <para>在所有的分区上都放这些是为了保证系统能够正确引导。
+ 如果由于某种原因系统无法从新的根分区读数据,
+ 则还有一根救命稻草。</para>
+ </note>
+
+ <para>然后再到
+ <filename>/boot/loader.conf:</filename> 中加入一些设置:</para>
+
+ <screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' &gt;&gt; /boot/loader.conf</userinput></screen>
+
+ <para>这将让 &man.loader.8; 在系统初始化过程中自动加载
+ <filename>geom_mirror.ko</filename>。</para>
+
+ <para>最后重新启动系统:</para>
+
+ <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
+
+ <para>如果一切顺利, 系统将从
+ <filename>gm0s1a</filename> 设备启动, 并给出 <command>login</command>
+ 提示等待用户登录。 如果发生错误, 请查阅接下来的故障排除环节。 我们继续将
+ <filename>da0</filename> 磁盘加入 <filename>gm0</filename>
+ 设备:</para>
+
+ <screen>&prompt.root; <userinput>gmirror configure -a gm0</userinput>
+&prompt.root; <userinput>gmirror insert gm0 /dev/da0</userinput></screen>
+
+ <para>此处 <option>-a</option> 告诉 &man.gmirror.8; 采用自动同步,
+ 或换言之: 自动地将磁盘的写操作做镜像处理。 联机手册中详细解释了如何重建,
+ 以及替换磁盘, 只不过它用 <filename>data</filename>
+ 表示这里的 <filename>gm0</filename>。</para>
+
+ <sect2>
+ <title>故障排除</title>
+
+ <sect3>
+ <title>系统拒绝引导</title>
+
+ <para>如果系统引导时出现类似下面的提示:</para>
+
+ <programlisting>ffs_mountroot: can't find rootvp
+Root mount failed: 6
+mountroot></programlisting>
+
+ <para>这种情况应使用电源或复位按钮重启机器。
+ 在引导菜单中, 选择第六 (6) 个选项。
+ 这将让系统进入 &man.loader.8; 提示符。
+ 在此处手工加载内核模块:</para>
+
+ <screen>OK? <userinput>load geom_mirror.ko</userinput>
+OK? <userinput>boot</userinput></screen>
+
+ <para>如果这样做能解决问题, 则说明由于某种原因模块没有被正确加载。
+ 可以通过在内核配置文件中加入:</para>
+
+ <programlisting>options GEOM_MIRROR</programlisting>
+
+ <para>然后重新编译和安装内核来解决这个问题。</para>
+ </sect3>
+ </sect2>
+ </sect1>
+</chapter>
+
+<!--
+ Local Variables:
+ mode: sgml
+ sgml-declaration: "../chapter.decl"
+ sgml-indent-data: t
+ sgml-omittag: nil
+ sgml-always-quote-attributes: t
+ sgml-parent-document: ("../book.sgml" "part" "chapter")
+ End:
+-->