doc/zh_TW.Big5/books/handbook/geom/chapter.xml
Gabor Kovesdan a6684b4306 - Reduce the misuse of role attribute; role="directory" should actually be
class="directory"
- Add constraint to enforce this
2013-04-04 11:40:58 +00:00

369 lines
12 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="big5"?>
<!--
The FreeBSD Documentation Project
$FreeBSD$
Original revision: 1.21
-->
<chapter id="GEOM">
<chapterinfo>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Written by </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>GEOM: Modular Disk Transformation Framework</title>
<sect1 id="GEOM-synopsis">
<title>概述</title>
<indexterm>
<primary>GEOM</primary>
</indexterm>
<indexterm>
<primary>GEOM Disk Framework</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 來完成鏡射(mirror)、分散連結(stripe)、加密(encrypt)
、遠端連接磁碟等。</para>
</listitem>
<listitem>
<para>當 GEOM 架構下的磁碟發生問題,如何排除。</para>
</listitem>
</itemizedlist>
<para>在開始閱讀這章之前,您需要︰</para>
<itemizedlist>
<listitem>
<para>了解 &os; 如何看待磁碟(<xref linkend="disks"/>) 。</para>
</listitem>
<listitem>
<para>知道如何設定、安裝新的 &os; 核心
(<xref linkend="kernelconfig"/>) 。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="GEOM-intro">
<title>GEOM 導論</title>
<para>GEOM 透過 privoder(即 <filename class="directory">/dev/</filename>
下的特殊裝置檔案) 來操控 classes(如 Master Boot Records、
<acronym>BSD</acronym> labels 等) 。GEOM 支援多種軟體
<acronym>RAID</acronym> 配置,透過 GEOM 存取時,
作業系統和應用程式不會意識到 GEOM 存在。</para>
</sect1>
<sect1 id="GEOM-striping">
<sect1info>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Written by </contrib>
</author>
<author>
<firstname>Murray</firstname>
<surname>Stokely</surname>
</author>
</authorgroup>
</sect1info>
<title>RAID0 - 分散連結(striping)</title>
<indexterm>
<primary>GEOM</primary>
</indexterm>
<indexterm>
<primary>分散連結(Striping)</primary>
</indexterm>
<para>分散連結(striping) 可用來連結多個磁碟成為一大塊空間。
很多時候硬體控制器可以完成這件事,不過 GEOM 也提供了軟體版本的
<acronym>RAID</acronym>0也就是分散連結(striping)。</para>
<para><acronym>RAID</acronym>0 裡,資料會被切分成很多塊,
再分散寫入全部的磁碟。例如要寫入 256k 的資料到單一磁碟,在
四個磁碟的 <acronym>RAID</acronym>0 中可同時寫入 64k 到四個磁碟裡,
因此可大幅提升 I/O 效能。如果使用更多的磁碟控制器,
I/O 效能可再提升。</para>
<para>由於讀或寫時會同步交錯對許多磁碟進行 I/O 處理,因此
<acronym>RAID</acronym>0 的每個磁碟必須大小一樣。</para>
<mediaobject>
<imageobject>
<imagedata fileref="geom/striping" align="center"/>
</imageobject>
<textobject>
<phrase>Disk Striping Illustration</phrase>
</textobject>
</mediaobject>
<procedure>
<title>用未格式化的 ATA 磁碟來建立分散連結(striping)</title>
<step><para>載入 <filename>geom_stripe</filename>
kernel module</para>
<screen>&prompt.root; <userinput>kldload geom_stripe.ko</userinput></screen>
</step>
<step><para>確定掛載點(mount point)存在。
如果想用分散連結(striping)的空間做為根目錄(root partition<filename class="directory">/</filename> )
則先用個暫時的掛載點,如
<filename class="directory">/mnt</filename></para>
<screen>&prompt.root; <userinput>mkdir /mnt</userinput></screen>
</step>
<step><para>確認要用來分散連結(striping)的裝置名稱,接著建立新的分散連結(striping)。
例如下面的指令會分散連結(striping)兩個未使用、尚未分割區的 <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>
<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>用下面的指令來建立分割區表(partition table)</para>
<screen>&prompt.root; <userinput>bsdlabel -wB /dev/stripe/st0</userinput></screen>
</step>
<step><para>除了先前建立的 <devicename>st0</devicename> ,這個步驟還會在
<filename class="directory">/dev/stripe</filename> 下新增兩個裝置:
<devicename>st0a</devicename><devicename>st0c</devicename>
利用 <command>newfs</command> 指令可以在
<devicename>st0a</devicename> 建立檔案系統:</para>
<screen>&prompt.root; <userinput>newfs -U /dev/stripe/st0a</userinput></screen>
<para>螢幕上會有一堆數字傾瀉而過,幾秒鐘後就會完成。此時空間已建立,
可用來掛載使用了。</para>
</step>
</procedure>
<para>下面指令可用來手動掛載分散連結(striping)空間:</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><filename>geom</filename> kernel module 必須在系統初始化時自動載入,
因此在 <filename>/boot/lodaer.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 - 鏡射(Mirroring)</title>
<indexterm>
<primary>GEOM</primary>
</indexterm>
<indexterm>
<primary>磁碟鏡射(Disk Mirroring)</primary>
</indexterm>
<para>許多企業或個人用戶用鏡射(mirroring) 來不中斷系統進行備份。
鏡射簡單來說就是在 B 磁碟上重覆一份 A 磁碟的資料,
或者 C+D 磁碟重覆 A+B 磁碟的資料。不論設定如何,
最重要的是所有磁碟或分割區(partition) 上的資料都會被複製,
之後可在不中斷服務的情況下復原、備份資料,使儲存的資料更安全。</para>
<para>開始之前,請先確定系統上有兩個容量相同的磁碟,
後面的範例假設這兩顆磁碟是 direct access(&man.da.4;)
<acronym>SCSI</acronym> 磁碟。</para>
<para>首先我們假設 &os; 安裝在第一個磁碟上,且只有兩個分割區(partition)。
其中一個是交換分割區(swap partition大小為 <acronym>RAM</acronym>
的兩倍),而剩下的全用於根目錄(即 <filename class="directory">/</filename>
root file system)。當然要在不同掛載點(mount point) 切出更多分割區
(partition) 也可以,不過難度會大幅提升,因為必須手動操作 &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>初始化 GEOM這動作會自動載入
<filename>/boot/kernel/geom_mirror.ko</filename> kernel module</para>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<note>
<para>這動作應該會在 <filename class="directory">/dev/mirror</filename>
下建立 <devicename>gm0</devicename> 裝置結點(device node)。</para>
</note>
<para>在這個新建的 <devicename>gm0</devicename> 裝置上安置一般的
<command>fdisk</command> label 和開機磁區:</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)
記得修改上兩指令的參數,且另一個磁碟上的 slice 和分割區(partition)
大小必須相同。</para>
</note>
<para>&man.newfs.8; 工具在 <devicename>gm0s1a</devicename>
裝置結點建立預設的檔案系統:</para>
<screen>&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1a</userinput></screen>
<para>系統會印出許多資訊和一大堆數字,這是正常的。
確認是否有認何錯誤,接著就可以將這個裝置掛載到
<filename class="directory">/mnt</filename> 掛載點(mount mount)</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen>
<para>接著將原本開機磁碟的資料搬移到新的檔案系統
(<filename class="directory">/mnt</filename>)。範例是用
&man.dump.8;&man.restore.8; ,不過用 &man.dd.1; 也可以。</para>
<screen>&prompt.root; <userinput>dump -L -0 -f- / |(cd /mnt &amp;&amp; restore -r -v -f-)</userinput></screen>
<para>執行上述指令時,只要將恰當的檔案系統掛在正確的位置,應該就能成功。
</para>
<para>接著編輯 <filename>/mnt/etc/fstab</filename>
檔將 swap file 那行移除或註解起來。
<footnote>
<para>請注意,將 <filename>fstab</filename> 的 swap file
那行註解起來,通常表示:您得用別的方法來重建 swap。詳情請參考
<xref linkend="adding-swap-space"/></para>
</footnote>請參考下面範例,並根據新磁碟修改其它的檔案系統資訊:</para>
<programlisting># Device Mountpoint FStype Options Dump Pass#
#/dev/da0s2b none swap sw 0 0
/dev/mirror/gm0s1a / ufs rw 1 1</programlisting>
<para>在目前的根目錄及新的根目錄建立 <filename>boot.conf</filename> 檔案,
這個檔案可以『幫助』系統 <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; /mnt/boot/loader.conf</userinput></screen>
<para>這會指示 &man.loader.8; 在開機時載入
<filename>geom_mirror.ko</filename> kernel module。</para>
<para>重開機:</para>
<screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
<para>如果一切順利,系統應該會從 <devicename>gm0s1a</devicename> 裝置開機,
接下來出現 <command>login</command> 提示畫面。如果出錯了,
請參閱下面 Troubleshooting 那一節。 現在可以將
<devicename>da0</devicename> 磁碟加入 <devicename>gm0</devicename>
裝置:</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;
使用「自動同步(automatic synchronization)」,例如自動同步寫入磁碟的動作。
manual 說明了如何重建、取代磁碟等,不過 manual 裡的範例是用
<devicename>data</devicename> 而不是 <devicename>gm0</devicename></para>
<sect2>
<title>Troubleshooting</title>
<sect3>
<title>系統無法開機</title>
<para>如果開機提示類似這樣:</para>
<programlisting>ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot></programlisting>
<para>請用機器面板上的 Power 按鈕或 reset 按鈕來重開機,並在開機選單選 (6)
這樣子,系統就會進入 &man.loader.8;
交談模式。這時候,請照下面指令來手動載入所需的 kernel module
,也就是 <filename>geom_mirror.ko</filename></para>
<screen>OK? <userinput>load geom_mirror.ko</userinput>
OK? <userinput>boot</userinput></screen>
<para>如果這樣成功了的話,表示因為某些原因無法自動載入 kernel module。
請將:</para>
<programlisting>options GEOM_MIRROR</programlisting>
<para>加入到核心設定檔(kernel configuration file),重編並安裝核心。
這應該能解決這個問題。</para>
</sect3>
</sect2>
</sect1>
</chapter>