  Boot + Root + Raid + Lilo : Software Raid HOWTO
  Michael Robinton, Michael@BizSystems.com
  <mailto:michael@bizsystems.com>
  v1.04, July 20, 2000
  The Linux Japanese FAQ Project (JF@linux.or.jp)
  v1.04j, February 19, 2001

  この文書では raidtools 0.90 を使いルートファイルシステムを RAID に設定
  し、標準的なブートローダである LILO を利用して、それを起動時にルートに
  マウントすることで、ブート可能な RAID のシステムを構築する方法を述べま
  す。元のディスク上のデータを損なうことなく、それまでのディスクを RAID1
  もしくは RAID5 のミラーセットに変換することも取り上げます。
  ______________________________________________________________________

  目次

  1. はじめに
     1.1 謝辞
     1.2 バグ
     1.3 著作権表示

  2. 作業を始める前に必要な事項
     2.1 必要なパッケージ
     2.2 本文書の最新版の入手
     2.3 ぜひ読んでおきたい文書
     2.4 RAID 関連の情報

  3. ブート可能な RAID
     3.1 標準的な LILO で RAID 1 からブートする
     3.2 RAID ブートのための lilo.conf の詳細な説明

  4. RAID でないシステムを RAID1/4/5 に改善する
     4.1 手順１：新しいカーネルの準備
     4.2 手順２：新しい RAID のための raidtab 設定
     4.3 RAID を作成しフォーマットし、そして設定する
     4.4 新しい RAID デバイスに現在の OS をコピーする
     4.5 新しい RAID をテストする
     4.6 RAID アレイに古いディスクを統合する

  5. 付録Ａ：raidtab の例
  6. 付録Ｂ：SCSI RAID5 の参考実装
  7. 付録Ｃ：initrd を使用した ide RAID10
  8. 付録Ｄ：initrd  を使用した ide RAID1-10
  9. 日本語訳について

  ______________________________________________________________________

  1.  はじめに

  1.1.  謝辞

  この文書は、Harald Nordgaad-Hansen <hnh@bukharin.hiof.no
  <mailto:hnh@bukharin.hiof.no>> が提供してくれた情報と、RAID メーリング
  リストに Martin Bene <mb@sime.com <mailto:mb@sime.com>> がポストしたコ
  メント付き lilo.conf ファイルの内容に基づいて作成されています。両氏の
  貢献にたいへん感謝しています。この文書において、私は、両氏の情報
  と、RAID メーリングリストや Linux RAID Project で活躍する大勢の方々の
  成果を、分かり易い手引書のかたちにまとめるよう努力しました。そして、ブ
  ート可能なルート RAID の構築と理解を容易にするため、実際の運用例を数多
  く取り入れました。本文書では、まず単一ドライブのシステムを RAID システ
  ムに変換する方法について、ひとつのセクションを割いています。思うに、こ
  の変換がうまくいくかどうかは、ブート可能なルート RAID の理解にかかって
  います。
  1.2.  バグ

  この文書にもバグはあるはずです。もしご報告いただけたら、修正いたしま
  す。

  1.3.  著作権表示

  This document is GNU copyleft by Michael Robinton
  Michael@BizSystems.com <mailto:michael@bizsystems.com>.

  Permission to use, copy, distribute this document for any purpose is
  hereby granted, provided that the author's / editor's name and this
  notice appear in all copies and/or supporting documents; and that an
  unmodified version of this document is made freely available.  This
  document is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY, either expressed or implied.  While every effort
  has been taken to ensure the accuracy of the information documented
  herein, the author / editor / maintainer assumes NO RESPONSIBILITY for
  any errors, or for any damages, direct or consequential, as a result
  of the use of the information documented herein.

     参考訳
        この著作物は、著者及び編集者の氏名とこの配布条件とがすべての複製
        及び補助的著作物に記載され、修正が加えられていない原著作物が自由
        に入手できるよう配慮されている場合に限り、利用の目的を問わず、使
        用・複製・頒布することができる。この著作物は、読者の役に立つこと
        を意図して作成されたものであるが、この文書には、明示的・黙示的な
        如何なる保証もともなわない。正確な情報を記述するよう最大限の努力
        を払ってはいるものの、この著作物に記載された情報の利用に起因する
        過誤や損失について、著者・編集者・文書管理者は一切責任を負わな
        い。

  2.  作業を始める前に必要な事項

  必要なパッケージと、 RAID の構築と運用に関するよくある質問に答えてくれ
  る文書とを以下に示します。簡単にでも良いですからこれらの資料には目を通
  してください。

  2.1.  必要なパッケージ

  まずは以下のパッケージの最新バージョンを入手する必要があります。

  o  RAID, initrd をサポートしている Linux カーネル

       筆者は linux-2.2.14 <ftp://ftp.kernel.org/pub/linux/ker-
       nel/v2.2/> を kernel.org から入手しました。

       訳注：訳者は linux-2.2.17 <ftp://ftp.ker-
       nel.org/pub/linux/kernel/v2.2/> を kernel.org から入手しまし
       た。

  o  ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/
     <ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/> 最新版のツール
     とパッチで、現代の RAID1/4/5 のサポートを追加します。

       筆者は http://people.redhat.com/mingo/raid-patches/
       <http://people.redhat.com/mingo/raid-patches/raid-2.2.14-B1>
       を使っています。
       訳注：訳者は http://people.redhat.com/mingo/raid-patches/
       <http://people.redhat.com/mingo/raid-patches/raid-2.2.17-A0>
       を使っています。

  訳注：ブートに関して訳者は最終的にこの文書で述べられている方法を使用し
  ませんでした。それは、採用したディストリビューションが Red Hat Linux
  6.2J だったからです。 Red Hat Linux 6.1 からの GUI インストーラを用い
  ると RAID1 へのインストールと、Red Hat により拡張された LILO が使用で
  きるため、 RAID1 からのブートも標準で可能となります (新しいカーネルを
  使用する場合は、 RAID パッチが必要になります)。この詳細については The
  Software-RAID HOWTO
  <http://www.linuxdoc.org/HOWTO/Software-RAID-HOWTO.html>(日本語訳
  <http://www.linux.or.jp/JF/JFdocs/The-Software-RAID-HOWTO.html>) を参
  照ください。

  2.2.  本文書の最新版の入手

  この文書の最新バージョンがリンク先
  <ftp://ftp.bizsystems.net/pub/raid/Boot+Root+Raid+LILO.html>にありま
  す。訂正と提案は大歓迎です。

  Boot Root Raid + LILO HOWTO

  LaTeX (DVI や PostScript を作れます)，テキスト，HTML の各フォーマット
  で入手できます．

       http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html
       <http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html>

  SGML と HTML 形式で入手できます．

       ftp.bizsystems.net/pub/raid/ <ftp://ftp.bizsys-
       tems.net/pub/raid/>

  2.3.  ぜひ読んでおきたい文書

  RAID0 を使いながら、RAID1/5 を使用するつもりなら、まず

       /usr/src/linux/Documentation/initrd.txt

  は読んでください。

  それから raidtools パッケージに付属の文書やマニュアルも読んでくださ
  い。

  そして Software-RAID-HOWTO.html
  <http://metalab.unc.edu/mdw/HOWTO/Software-RAID-HOWTO.html> も・・・

  2.4.  RAID 関連の情報

  関係があるメーリングリストを以下に列挙します――

  o  ここはひっそりしてるようです――majordomo@nuclecu.unam.mx
     <mailto:majordomo@nuclecu.unam.mx> へ subscribe raiddev の内容のメ
     ールを送れば参加できます。

     投稿は raiddev@nuclecu.unam.mx <mailto:raiddev@nuclecu.unam.mx> へ
     メールを送ります。

  o  RAID 開発――majordomo@vger.rutgers.edu
     <mailto:majordomo@vger.rutgers.edu> へ subscribe linux-raid の内容
     のメールを送れば参加できます。

     投稿は send mail to: linux-raid@vger.rutgers.edu <mailto:linux-
     raid@vger.rutgers.edu> へメールを送ります (これが最も活発なメーリン
     グリストのようです)。

  3.  ブート可能な RAID

  Linux 上での RAID0/1/5 の基本的な設定は、他の文書で詳細にそれを取り上
  げているので、この文書では取り上げません。ルートの RAID 設定と、標準的
  な LILO でそれをブート可能なものとする問題に取り組みます。 LILO の
  (man ページではない) ソースと raidtools-0.90 と一緒のそれぞれ文書は、
  ブート動作の詳細とシステムのブート時のパラメータを、汎用的な RAID 設定
  についても取り上げています。

  ここでは２つのシナリオを取り上げます。そのシナリオは、RAID のブート可
  能なルートの設定と、既存の RAID でないシステムを RAID のブート可能なル
  ートへデータ損失無く変換することです。

  3.1.  標準的な LILO で RAID 1 からブートする

  ブート情報を冗長にし保守を簡単にするには、小さい RAID1 を設定しそれを
  システムディスクの /boot にマウントします。LILO はデバイス 0x9?? を認
  識せず、ブート時そのデバイスの情報を見つけられません。それはその時に
  RAID サブシステムが使える状態になっていないからです。単純な対処とし
  て、ドライブ (群) の構成 (geometry) 情報を LILO に渡すことができます。
  その情報から、LILO は、カーネルが RAID1 パーティション上にあっても、カ
  ーネルをロードするために必要な情報である"位置"を決定できます。これ
  は、RAID1 パーティションが標準的なパーティションと同じことによります
  が、RAID1 パーティションの最後には RAID スーパブロックが書かれていま
  す。ブート可能な RAID セットは、ディスクドライブの最初の 1024 メガバイ
  ト内に位置しなければなりません。理論的に、RAID パーティションの始点は
  1024 メガバイト内のどこにでも位置できますが、実際には、ブートのための
  RAID の全体を最初のブロックに位置させるまで、動作させることができませ
  んでした。これは、たぶん、私がまぬけな何かをしたからですが、当時は間
  違った結果の検討をしませんでした。それ以来、単純に、ブート可能な RAID
  を最初のパーティションに位置させ、全ての私のシステムを設定しています。
  私はルートが RAID であるシステムの構成を持っており、それは、/boot にブ
  ート可能な RAID1 をマウントするもので、ルートの RAID セットは次に示す
  ものです――RAID1, RAID5, RAID10 そして RAID1-10 (１つのミラーと１つ
  のRAID0 のセット)。最後のはたいへん特異な LILO ファイルのペアを持ちま
  す。それは、ディスク構成が同じでないからですが、しかしながら、主要なこ
  とは初期のブートプロセスにとって同じです。 RAID10 と RAID1-10 のルート
  のマウントは initrd を使うことが必要で、ブートプロセスが initrd の環境
  に移行した後ルートをマウントします。例として取り上げたシステムの設定
  ファイルを付録としますので、参照してください。

  従来の LILO の設定ファイルは、素でこのようになっているでしょう――

  # lilo.conf - assumes drive less than 1024
          boot = /dev/hda
          delay = 40               # extra, but nice
          vga = normal             # not normally needed
          image = /bzImage
          root = /dev/hda1
          read-only
          label = Linux

  RAID の LILO の設定ファイルのペアはこのようになります――

  # lilo.conf.hda - primary ide master
          disk=/dev/md0
          bios=0x80
          sectors=63
          heads=16
          cylinders=39770
          partition=/dev/md1
          start=63
          boot=/dev/hda
          map=/boot/map
          install=/boot/boot.b
          image=/boot/bzImage
          root=/dev/md0
          read-only
          label=LinuxRaid

  # ---------------------

  # lilo.conf.hdc - secondary ide master
          disk=/dev/md0
          bios=0x80                # see note below
          sectors=63
          heads=16
          cylinders=39770
          partition=/dev/md1
          start=63
          boot=/dev/hdc            # this is the other disk
          map=/boot/map
          install=/boot/boot.b
          image=/boot/bzImage
          root=/dev/md0
          read-only
          label=LinuxRaid

     BIOS=lineについて
        bios がプライマリディスクが無いか、検出に失敗した場合、賢い（大
        抵、賢くないのですが）bios ならば、セカンダリディスクから、自動
        的にブートしてくれます (訳注；上記に示したとおり、bios=0x80）。
        しかし、賢くない bios の場合は、lilo.conf.hdc の BIOS=line に
        bios=0x81 と書きます。これは IDE bios よりも SCSI bios にありが
        ちです。筆者においては、最初のブートドライブが異常終了した場合、
        死んでいるドライブ C: を置き換えるために、単にプライマリドライブ
        とセカンダリドライブと交換するつもりで、bios=0x80 のままです。

     訳注；賢い？
        筆者のいう大抵の bios を A-BIOS, 賢い bios を B-BIOS とし、
        ちょっとだけ考察します。
        A-BIOS では IDE の primary master は 1番目 、secondary slave は
        4番目とハードウェア的に番号付けを行います。ハードディスクの有無
        に関知しません。従って、ユーザは 必ず、primary の ケーブルに
        master に設定したハードディスクを取り付けなければなりません。

        B-BIOS ではIDE の primary master から順に secondary slave まで、
        調べて、ハードディスクが見つかった順に、番号付けをします。ハード
        ディスクが無い場合や、CDROMの場合、番号は割り当てられません。ユ
        ーザは特にケーブルや、 master/slave の設定に気を付ける必要はあり
        ません。

        さて、エラーが発生した場合を考えてみます。両 BIOS とも 1番目のハ
        ードディスクから、起動するように、ユーザは設定しました。 primary
        master にあったハードディスクが故障し、primary slave にハード
        ディスクがあった場合、primary master のハードディスクが認識され
        ず、 primary slave が最初のハードディスクと認識されます。
        尚、primary master のハードディスクは boot 直前までは、正常に動
        作していたもので、primary slave のハードディスクには boot loader
        は入っていません。

        A-BIOS では 1番目の故障してる primary master のハードディスクの
        認識に失敗し、エラーになります。

        B-BIOS では 現在 1番目の primary slave の boot loader の無いハー
        ドディスクから、boot しようとして、エラーになります。

        A-BIOS では、すぐに primary master の問題に気が付くでしょう。

        B-BIOS では、primary master の問題に気が付くでしょうか？ boot
        loader の問題（そのとおりなのですが）と勘違いして OS の再インス
        トール等をして、 primary slave の内容を破壊してしまうかもしれま
        せん。

        しかしながら筆者は、B-BIOS を賢いと表現しています。

  ドライブの構成情報は、fdisk コマンドで得られます――

  fdisk -ul (L の小文字)
  fdisk -ul /dev/hda

  Disk /dev/hda: 16 heads, 63 sectors, 39770 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hda1            63     33263     16600+  fd  Linux raid autodetect
  /dev/hda2         33264    443519    205128   82  Linux swap
  /dev/hda3        443520  40088159  19822320   fd  Linux raid autodetect

  * note the listing of the START of each partition

  3.2.  RAID ブートのための lilo.conf の詳細な説明

  RAID の lilo.conf ファイルを以下に示し、各エントリの詳細をコメントとし
  ます。

  # lilo.conf.hda - primary ide master
  #       the location of the /boot directory that will be
  #       designated below as containing the kernel, map, etc...
  #       note that this is NOT the actual partition containing
  #       the boot image and info, but rather the device
  #       that logically contains this directory.
  #       in this example, /dev/md1 is mounted on /dev/md0/boot
       disk=/dev/md0

  #       tell LILO which bios device to use for boot, i.e. C: drive
       bios=0x80

  #       tell LILO the geometry of the device
  #       this is usually but not always the "logical"
  #       geometry. Check the /proc file system or watch
  #       the boot messages when the kernel probes for the drive
  #
       sectors=63
       heads=16
       cylinders=39770

  #       this is a dummy entry to make LILO happy so it
  #       will recognize the raid set 0x9?? and then find
  #       the START of the boot sector. To really see
  #       what this was for, read the documentation
  #       that comes with the LILO source distribution.
  #       This parameter "must" be different than the
  #       disk=  entry above. It can be any other mdx
  #       device, used or unused and need not be the one
  #       that contains the /boot information
  #
       partition=/dev/md1

  #       the first sector of the partition containing /boot information
       start=63

  #       the real device that LILO will write the boot information to
       boot=/dev/hda

  #       logically where LILO will put the boot information
       map=/boot/map
       install=/boot/boot.b

  #       logically where lilo will find the kernel image
       image=/boot/bzImage

  #       standard stuff after this
  #       root may be a raid1/4/5 device
       root=/dev/md0
       read-only
       label=LinuxRaid

  4.  RAID でないシステムを RAID1/4/5 に改善する

  RAID でないシステムの RAID への改善はかなり簡単で、いくつかの分離した
  手順からなり、それを後述します。その記述は、ブートパーティションとルー
  トパーティション、そしてスワップパーティションをともなうシステムのため
  のものです。

  既存システムの古いディスク構成――

      /dev/hda1     boot, dos+lodlin か lilo かも
      /dev/hda2     root
      /dev/hda3     swap

  別のディスクを追加し、全体のシステムを RAID1 に変換します。たくさんの
  ディスクの追加が容易なら、同じ手順で RAID1 の代わりに RAID5 セットを作
  ることもできます。

  4.1.  手順１：新しいカーネルの準備

  きれいなカーネルと raidtools-0.90 (もしくは最新バージョン)、そして
  0.90 RAID へとカーネルを改善するカーネルパッチを、ダウンロードしてくだ
  さい。

  raidtools をコンパイルしインストールします。そして、付属のドキュメント
  を読んでください。

  使用予定の RAID の種類 (0/1/4/5 ?) をすべてサポートする設定で、カーネ
  ルをコンパイルしインストールしてください。カーネルコンフィグレーション
  において RAID デバイスの autostart を指定したことを確認します。カーネ
  ルが適切にブートするかをテストし、そして、あなたが使おうとしている
  RAID の種類が新しいカーネルでサポートされているかを確認するため
  /proc/mdstat を調べてください。

  4.2.  手順２：新しい RAID のための raidtab 設定

  新しいディスクを別の IDE コントローラのマスターデバイスとしたなら、そ
  れは /dev/hdc になります。

      /dev/hdc1     16MB――もしくはそれ以上でいくつかのカーネルイメージに
                    十分な領域
      /dev/hdc2     ディスクの大部分の領域
      /dev/hdc3     必要ならもう少しのスワップ領域。いらなければ hdc2 に加
                    える。(訳注：このシナリオは swap を RAID にしない)

  /dev/hdc1 と /dev/hdc2 のパーティションタイプを raid-autostart の "fd"
  に変更してください。

  failed-disk パラメータを使用して、希望する RAID1 設定のための raidtab
  を作成します。failed-disk は表の最後に置くべきです。

  # example raidtab
  # md0 is the root array
  raiddev                 /dev/md0
  raid-level              1
  nr-raid-disks           2
  chunk-size              32
  # Spare disks for hot reconstruction
  nr-spare-disks          0
  persistent-superblock   1
  device                  /dev/hdc2
  raid-disk               0
  # this is our old disk, mark as failed for now
  device                  /dev/hda2
  failed-disk             1

  # md1 is the /boot array
  raiddev                 /dev/md1
  raid-level              1
  nr-raid-disks           2
  chunk-size              32
  # Spare disks for hot reconstruction
  nr-spare-disks          0
  persistent-superblock   1
  device                  /dev/hdc1
  raid-disk               0
  # boot is marked failed as well
  device                  /dev/hda1
  failed-disk               1

  4.3.  RAID を作成しフォーマットし、そして設定する

  次のコマンドで md デバイスを作成します――

      mkraid /dev/md0
      mkraid /dev/md1

  RAID デバイスは作成され、動作を始めます。/proc/mdstat の調査で、カーネ
  ルにおける RAID の個々の状態と、RAID デバイスの動作を見ることができま
  す。

  ブートデバイスとルートデバイスをフォーマットします――

      mke2fs /dev/md0
      mke2fs /dev/md1

  新しいルートデバイスをどこか扱いやすい場所にマウントし、その中に /boot
  のためのディレクトリを作成し、そのディレクトリにブートパーティションを
  マウントします。

      mount /dev/md0 /mnt
      mkdir /mnt/boot
      mount /dev/md1 /mnt/boot

  4.4.  新しい RAID デバイスに現在の OS をコピーする

  これは非常に簡単です。

      cd /
      # これを行うバッチファイルを設定しましょう。
      cp -a /bin /mnt
      cp -a /dev /mnt
      cp -a /etc /mnt
      cp -a (/mnt と /proc そして nsf マウントを除くすべてのディレクトリ) /mnt

  ルートファイルシステムに他のディスクをマウントしたりリンクしていると、
  この操作は用心しなければなりません。上記の例はたいへん単純なシステムを
  想定しているので、複雑な場合、手順を若干修正する必要があるかもしれませ
  ん。

  4.5.  新しい RAID をテストする

  ブートフロッピーを作り、カーネルを rdev します。

      dd if=kernal.image of=/dev/fd0 bs=2k
      rdev /dev/fd0 /dev/md0
      rdev -r /dev/fd0 0
      rdev -R /dev/fd0 1

  RAID デバイス上の fstab を次に示すように修正し、新しいマウントポイント
  を反映させます――

    /dev/md0        /       ext2    defaults        1 1
    /dev/md1        /boot   ext2    defaults        1 1

  RAID デバイスのマウントをはずし、新しいファイルシステムをブートし、す
  べて正しく動作しているか確認します。

      umount /mnt/boot
      umount /mnt
      raidstop /dev/md0
      raidstop /dev/md1
      shutdown -r now

  フロッピーブートディスクで、RAID システムはすぐに作動し、縮退モードで
  動くはずです。すべてのものが新しい RAID システムに転送されているか注意
  深くチェックしてください。バックアップのない状態で、ここで失敗したなら
  ば、あなたは死んでしまいます。

  何かが動作しなければ、古いシステムを reboot し、立ち返って修正を行いま
  す。完全に成功するまでこれを繰り返してください。

  4.6.  RAID アレイに古いディスクを統合する

  前の手順での成功は RAID アレイが現在使用できることを意味しますが、まだ
  冗長にはなっていません。すぐに新しい RAID アレイに合うように古いディス
  ク (群) を切り直すべきです。ドライブの構成情報が同じでないなら、古いド
  ライブのパーティションサイズを RAID パーティションと等しくするかそれよ
  り大きくしなければ、RAID セットに追加することができない、ということを
  記憶しておいてください。

  必要に応じて、古いドライブを切り直します。例として――

      /dev/hda1     /dev/hdc1 と等しいかそれ以上
      /dev/hda2     /dev/hdc2 と等しいかそれ以上
      /dev/hda3     使い残し分、swap にでも何にでも・・・

  raidtab 内の failed-disk パラメータを raid-disk に書き換え、 RAID アレ
  イに新しい (古い) ディスクパーティションを hot add します。

      raidhotadd /dev/md1 /dev/hda1
      raidhotadd /dev/md0 /dev/hda2

  /proc/mdstat を調べると、１つ以上の RAID デバイスで新しいパーティショ
  ンのために再構築を行っていることが見えます。１分後、いや２分、いやもっ
  と経過すると、RAID アレイは完全に同期します (パーティションが大きいほ
  ど時間がかかります)。

  この文書の始めの方のセクションで述べた手順を使い、新しい RAID ペア上
  で、ブート可能な RAID の設定をします。この最後の手順の設定とテストが終
  了するまで、あのブートフロッピーは手放してはなりません。

  5.  付録Ａ：raidtab の例

  この文書の始めの方のセクションで述べられた RAID1 の例

   df
  Filesystem           1k-blocks      Used Available Use% Mounted on
  /dev/md0              19510780   1763188  16756484  10% /
  /dev/md1                 15860       984     14051   7% /boot

  # --------------------------

   fdisk -ul /dev/hda

  Disk /dev/hda: 16 heads, 63 sectors, 39770 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hda1            63     33263     16600+  fd  Linux raid autodetect
  /dev/hda2         33264    443519    205128   83  Linux native
  /dev/hda3        443520  40088159  19822320   fd  Linux raid autodetect

  # --------------------------

   fdisk -ul /dev/hdc

  Disk /dev/hdc: 16 heads, 63 sectors, 39770 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hdc1            63     33263     16600+  fd  Linux raid autodetect
  /dev/hdc2         33264    443519    205128   82  Linux swap
  /dev/hdc3        443520  40088159  19822320   fd  Linux raid autodetect

  # --------------------------

  # md0 is the root array, about 20 gigs
  raiddev                 /dev/md0
  raid-level              1
  nr-raid-disks           2
  chunk-size              32
  # Spare disks for hot reconstruction
  nr-spare-disks          0
  persistent-superblock   1
  device                  /dev/hda3
  raid-disk               0
  device                  /dev/hdc3
  raid-disk               1

  # md1 is the /boot array, about 16 megs
  raiddev                 /dev/md1
  raid-level              1
  nr-raid-disks           2
  chunk-size              32
  # Spare disks for hot reconstruction
  nr-spare-disks          0
  persistent-superblock   1
  device                  /dev/hda1
  raid-disk               0
  device                  /dev/hdc1
  raid-disk               1

  # --------------------------

  # GLOBAL SECTION
  # device containing /boot directory
  disk=/dev/md0
  # geometry
    bios=0x80
    sectors=63
    heads=16
    cylinders=39770
  # dummy
    partition=/dev/md1
  # start of device "disk" above
    start=63

  boot=/dev/hda
  map=/boot/map
  install=/boot/boot.b

  image=/boot/bzImage
  root=/dev/md0
  label=LinuxRaid
  read-only

  # -------------------------

  # GLOBAL SECTION
  # device containing /boot directory
  disk=/dev/md0
  # geometry
    bios=0x80
    sectors=63
    heads=16
    cylinders=39770
  # dummy
    partition=/dev/md1
  # start of device "disk" above
    start=63

  boot=/dev/hdc
  map=/boot/map
  install=/boot/boot.b

  image=/boot/bzImage
  root=/dev/md0
  label=LinuxRaid
  read-only

  6.  付録Ｂ：SCSI RAID5 の参考実装

  ４つのディスクを使った SCSI RAID5

   df
  Filesystem           1k-blocks      Used Available Use% Mounted on
  /dev/md0              11753770   2146076   9000678  19% /
  /dev/md1                 15739       885     14042   6% /boot

  # --------------------------

   fdisk -ul /dev/sda

  Disk /dev/sda: 64 heads, 32 sectors, 4095 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/sda1            32     32767     16368   fd  Linux raid autodetect
  /dev/sda2         32768    292863    130048    5  Extended
  /dev/sda3        292864   8386559   4046848   fd  Linux raid autodetect
  /dev/sda5         32800    260095    113648   82  Linux swap
  /dev/sda6        260128    292863     16368   83  Linux native - test

  # ------------------------

   fdisk -ul /dev/sdb

  Disk /dev/sdb: 64 heads, 32 sectors, 4095 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/sdb1            32     32767     16368   fd  Linux raid autodetect
  /dev/sdb2         32768    292863    130048    5  Extended
  /dev/sdb3        292864   8386559   4046848   fd  Linux raid autodetect
  /dev/sdb5         32800    260095    113648   82  Linux swap
  /dev/sdb6        260128    292863     16368   83  Linux native - test

  # ------------------------

  # fdisk -ul /dev/sdc

  Disk /dev/sdc: 64 heads, 32 sectors, 4095 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/sdc2            32    292863    146416    5  Extended
  /dev/sdc3        292864   8386559   4046848   fd  Linux raid autodetect
  /dev/sdc5            64    260095    130016   83  Linux native - development
  /dev/sdc6        260128    292863     16368   83  Linux native - test

  # ------------------------

   fdisk -ul /dev/sdd

  Disk /dev/sdd: 64 heads, 32 sectors, 4095 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/sdd2            32    292863    146416    5  Extended
  /dev/sdd3        292864   8386559   4046848   fd  Linux raid autodetect
  /dev/sdd5            64    260095    130016   83  Linux native - development
  /dev/sdd6        260128    292863     16368   83  Linux native - test

  # --------------------------

  # raidtab
  #
  raiddev /dev/md0
          raid-level      5
          nr-raid-disks   4
          persistent-superblock 1
          chunk-size      32

  # Spare disks for hot reconstruction
          nr-spare-disks  0
          device          /dev/sda3
          raid-disk       0
          device          /dev/sdb3
          raid-disk       1
          device          /dev/sdc3
          raid-disk       2
          device          /dev/sdd3
          raid-disk       3

  # boot partition
  #
  raiddev /dev/md1
          raid-level      1
          nr-raid-disks   2
          persistent-superblock 1
          chunk-size      32

  # Spare disks for hot reconstruction
          nr-spare-disks  0
          device          /dev/sda1
          raid-disk       0
          device          /dev/sdb1
          raid-disk       1

  # --------------------------

  # cat lilo.conf.sda
  # GLOBAL SECTION
  # device containing /boot directory
  disk=/dev/md0
  # geometry
    bios=0x80
    sectors=32
    heads=64
    cylinders=4095
  # dummy
    partition=/dev/md1
  # start of device "disk" above
    start=32

  boot=/dev/sda
  map=/boot/map
  install=/boot/boot.b

  image=/boot/bzImage
  root=/dev/md0
  label=LinuxRaid
  read-only

  # ------------------------
  # cat lilo.conf.sdb
  # GLOBAL SECTION
  # device containing /boot directory
  disk=/dev/md0
  # geometry
    bios=0x80
    sectors=32
    heads=64
    cylinders=4095
  # dummy
    partition=/dev/md1
  # start of device "disk" above
    start=32

  boot=/dev/sdb
  map=/boot/map
  install=/boot/boot.b

  image=/boot/bzImage
  root=/dev/md0
  label=LinuxRaid
  read-only

  7.  付録Ｃ：initrd を使用した ide RAID10

  ストライプされた RAID0 ペアを用いた RAID1 では、RAID0 セット内のディス
  ク容量は完全に同じではありませんが、十分に近い容量です。

  /dev/md0 は /boot パーティションで、カーネルにより autostart する
  /dev/md1 と /dev/md3 は２つの RAID0 セットで、カーネルにより autostart する
  /dev/md2 はルートパーティションで initrd により start する

  df
  Filesystem           1k-blocks      Used Available Use% Mounted on
  /dev/md2                118531     76485     35925  68% /
  /dev/md0                  1917      1361       457  75% /boot

  # ----------------------------

   fdisk -ul /dev/hda

  Disk /dev/hda: 4 heads, 46 sectors, 903 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hda1            46      4231      2093   fd  Linux raid autodetect
  /dev/hda2          4232    166151     80960   fd  Linux raid autodetect

  # ----------------------------

   fdisk -ul /dev/hdb

  Disk /dev/hdb: 5 heads, 17 sectors, 981 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hdb1            17     83384     41684   fd  Linux raid autodetect

  # ----------------------------

   fdisk -ul /dev/hdc

  Disk /dev/hdc: 7 heads, 17 sectors, 1024 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hdc1            17     84013     41998+  fd  Linux raid autodetect
  /dev/hdc2         84014    121855     18921   82  Linux swap

  # ----------------------------

   fdisk -ul /dev/hdd

  Disk /dev/hdd: 4 heads, 46 sectors, 903 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hdd1            46      4231      2093   fd  Linux raid autodetect
  /dev/hdd2          4232    166151     80960   fd  Linux raid autodetect

  # ----------------------------

  # raidtab
  #
  raiddev /dev/md0
          raid-level      1
          nr-raid-disks   2
          persistent-superblock   1
          chunk-size      8
          device          /dev/hda1
          raid-disk       0
          device          /dev/hdd1
          raid-disk       1

  raiddev /dev/md1
          raid-level      0
          nr-raid-disks   2
          persistent-superblock   1
          chunk-size      8
          device          /dev/hdd2
          raid-disk       0
          device          /dev/hdb1
          raid-disk       1

  raiddev /dev/md2
          raid-level      1
          nr-raid-disks   2
          persistent-superblock   1
          chunk-size      8
          device          /dev/md1
          raid-disk       0
          device          /dev/md3
          raid-disk       1

  raiddev /dev/md3
          raid-level      0
          nr-raid-disks   2
          persistent-superblock   1
          chunk-size      8
          device          /dev/hda2
          raid-disk       0
          device          /dev/hdc1
          raid-disk       1

  # ----------------------------

  contents of linuxrc

   cat linuxrc
  #!/bin/sh
  # ver 1.02 2-22-00
  #
  ############# really BEGIN 'linuxrc' ###############
  #
  # mount the proc file system
  /bin/mount /proc

  # start raid 1 made of raid 0's
  /bin/raidstart /dev/md2

  # tell the console what's happening
  /bin/cat /proc/mdstat

  # Everything is fine, let the kernel mount /dev/md2
  # tell the kernel to switch to /dev/md2 as the /root device
  # The 0x900 value is the device number calculated by:
  #  256*major_device_number + minor_device number
  echo "/dev/md2 mounted on root"
  echo 0x902>/proc/sys/kernel/real-root-dev

  # umount /proc to deallocate initrd device ram space
  /bin/umount /proc
  exit

  # ----------------------------

  contents of initrd

  ./bin/ash
  ./bin/echo
  ./bin/raidstart
  ./bin/mount
  ./bin/umount
  ./bin/cat
  ./bin/sh
  ./dev/tty1
  ./dev/md0
  ./dev/md1
  ./dev/md2
  ./dev/md3
  ./dev/md4
  ./dev/console
  ./dev/hda
  ./dev/hda1
  ./dev/hda2
  ./dev/hda3
  ./dev/hdb
  ./dev/hdb1
  ./dev/hdb2
  ./dev/hdb3
  ./dev/hdc
  ./dev/hdc1
  ./dev/hdc2
  ./dev/hdc3
  ./dev/hdd
  ./dev/hdd1
  ./dev/hdd2
  ./dev/hdd3
  ./dev/initrd
  ./dev/ram0
  ./dev/ram1
  ./dev/ram2
  ./dev/ram3
  ./dev/ram4
  ./dev/ram5
  ./dev/ram6
  ./dev/ram7
  ./etc/raidtab
  ./etc/fstab
  ./lib/ld-2.1.2.so
  ./lib/ld-linux.so.1
  ./lib/ld-linux.so.1.9.9
  ./lib/ld-linux.so.2
  ./lib/ld.so
  ./lib/libc-2.1.2.so
  ./lib/libc.so.6
  ./linuxrc
  ./proc

  8.  付録Ｄ：initrd  を使用した ide RAID1-10

  これは半端物の組合せでシステムを作り上げたものです。ルートとしてマウン
  トされる RAID デバイスは、半端なサイズのディスクで作り上げた１つの
  RAID0 アレイと大きさが普通のディスクパーティションから構成される RAID1
  です。 lilo.conf ファイルを調べることで、各種パラメータがなぜそのよう
  に設定されているのかという理由 (根拠) に対する見識が深まるかもしれませ
  ん。

  /dev/md0 は /boot パーティションで、カーネルにより autostart する
  /dev/md1 は md2 のミラーセットの片方で、カーネルにより autostart する
  /dev/hda3 は md2 のミラーセットのもう片方です
  /dev/md2 は /dev/md1 と /dev/hda3 で構成される RAID1 で、initrd で start する

  df
  Filesystem           1k-blocks      Used Available Use% Mounted on
  /dev/md2                138381     74421     56815  57% /
  /dev/md0                  2011      1360       549  71% /boot

  # ----------------------------

   fdisk -ul /dev/hda

  Disk /dev/hda: 8 heads, 46 sectors, 903 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hda1            46      4415      2185   fd  Linux raid autodetect
  /dev/hda2          4416     43423     19504   82  Linux swap
  /dev/hda3         43424    332303    144440   83  Linux native

  # ----------------------------

   fdisk -ul /dev/hdc

  Disk /dev/hdc: 8 heads, 39 sectors, 762 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hdc1            39      4367      2164+  fd  Linux raid autodetect
  /dev/hdc2          4368     70199     32916   82  Linux swap
  /dev/hdc3         70200    237743     83772   fd  Linux raid autodetect

  # ----------------------------

   fdisk -ul /dev/hdd

  Disk /dev/hdd: 4 heads, 39 sectors, 762 cylinders
  Units = sectors of 1 * 512 bytes

     Device Boot    Start       End    Blocks   Id  System
  /dev/hdd1            39    118871     59416+  fd  Linux raid autodetect

  # ----------------------------

  # raidtab
  #
  raiddev /dev/md0
          raid-level      1
          nr-raid-disks   2
          persistent-superblock   1
          chunk-size      8
          device          /dev/hdc1
          raid-disk       1
          device          /dev/hda1
          raid-disk       0

  raiddev /dev/md1
          raid-level      0
          nr-raid-disks   2
          persistent-superblock   1
          chunk-size      8
          device          /dev/hdc3
          raid-disk       0
          device          /dev/hdd1
          raid-disk       1

  raiddev /dev/md2
          raid-level      1
          nr-raid-disks   2
          persistent-superblock   1
          chunk-size      8
          device          /dev/md1
          raid-disk       1
          device          /dev/hda3
          raid-disk       0

  # ----------------------------

   cat linuxrc
  #!/bin/sh
  # ver 1.02 2-22-00
  #
  ############# really BEGIN 'linuxrc' ###############
  #
  # mount the proc file system
  /bin/mount /proc

  # autostart /boot partition and raid0
  /bin/raidstart /dev/md2

  # tell the console what's happening
  /bin/cat /proc/mdstat

  # Everything is fine, let the kernel mount /dev/md2
  # tell the kernel to switch to /dev/md2 as the /root device
  # The 0x900 value is the device number calculated by:
  #  256*major_device_number + minor_device number
  echo "/dev/md2 mounted on root"
  echo 0x902>/proc/sys/kernel/real-root-dev

  # umount /proc to deallocate initrd device ram space
  /bin/umount /proc
  exit

  # ----------------------------

  contents of initrd.gz

  ./bin
  ./bin/ash
  ./bin/echo
  ./bin/raidstart
  ./bin/mount
  ./bin/umount
  ./bin/cat
  ./bin/sh
  ./dev/tty1
  ./dev/md0
  ./dev/md1
  ./dev/md2
  ./dev/md3
  ./dev/console
  ./dev/hda
  ./dev/hda1
  ./dev/hda2
  ./dev/hda3
  ./dev/hdc
  ./dev/hdc1
  ./dev/hdc2
  ./dev/hdc3
  ./dev/hdd
  ./dev/hdd1
  ./dev/hdd2
  ./dev/hdd3
  ./dev/initrd
  ./dev/ram0
  ./dev/ram1
  ./dev/ram2
  ./dev/ram3
  ./dev/ram4
  ./dev/ram5
  ./dev/ram6
  ./dev/ram7
  ./etc/raidtab
  ./etc/fstab
  ./lib/ld-2.1.2.so
  ./lib/ld-linux.so.1
  ./lib/ld-linux.so.1.9.9
  ./lib/ld-linux.so.2
  ./lib/ld.so
  ./lib/libc-2.1.2.so
  ./lib/libc.so.6
  ./linuxrc
  ./proc

  # ----------------------------

   cat lilo.conf.hda
  # GLOBAL SECTION
  # device containing /boot directory
  disk=/dev/md2
  # geometry
    bios=0x80
    cylinders=903
    heads=8
    sectors=46
  # geometry for 2nd disk
  # bios will be the same because it will have to be moved to hda
  #  cylinders=762
  #  heads=8
  #  sectors=39

  # dummy
    partition=/dev/md0
  # start of device "disk" above
    start=46
  # second device
  #  start=39

  # seem to have some trouble with 2.2.14 recognizing the right IRQ
    append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"

  boot=/dev/hda
  map=/boot/map
  install=/boot/boot.b

  initrd=/boot/initrd.gz

  image=/boot/zImage
  root=/dev/md2
  label=LinuxRaid
  read-only

  # ----------------------------

   cat lilo.conf.hdc
  # GLOBAL SECTION
  # device containing /boot directory
  disk=/dev/md2
  # geometry
    bios=0x80
  #  cylinders=903
  #  heads=8
  #  sectors=46
  # geometry for 2nd disk
  # bios will be the same because it will have to be moved to hda
    cylinders=762
    heads=8
    sectors=39

  # dummy
    partition=/dev/md0
  # start of device "disk" above
  #  start=46
  # second device
    start=39

  # seem to have some trouble with 2.2.14 recognizing the right IRQ
    append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"

  boot=/dev/hdc
  map=/boot/map
  install=/boot/boot.b

  initrd=/boot/initrd.gz

  image=/boot/zImage
  root=/dev/md2
  label=LinuxRaid
  read-only

  9.  日本語訳について

  日本語訳は Linux Japanese FAQ Project が行いました。翻訳に関するご意見
  は JF プロジェクト <JF@linux.or.jp> 宛に連絡してください。

     v1.04j
        翻訳: 野本浩一 <hng@ps.ksky.ne.jp>

        「賢い？」の訳注原案:
        川嶋 勤 さん <kawawa@mail.interq.or.jp>

        校正:
        川嶋 勤 さん <kawawa@mail.interq.or.jp>、
        中野 武雄 さん <nakano@apm.seikei.ac.jp>、
        Takahiko KAWASAKI さん <KawasakiT@soj.sega.co.jp>、
        千旦 裕司さん <ysenda@pop01.odn.ne.jp>、
        武井 伸光さん <takei@webmasters.gr.jp>

