Boot + Root + Raid + Lilo : Software Raid HOWTO Michael Robinton, 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 手順1:新しいカーネルの準備 4.2 手順2:新しい RAID のための raidtab 設定 4.3 RAID を作成しフォーマットし、そして設定する 4.4 新しい RAID デバイスに現在の OS をコピーする 4.5 新しい RAID をテストする 4.6 RAID アレイに古いディスクを統合する 5. 付録A:raidtab の例 6. 付録B:SCSI RAID5 の参考実装 7. 付録C:initrd を使用した ide RAID10 8. 付録D:initrd を使用した ide RAID1-10 9. 日本語訳について ______________________________________________________________________ 1. はじめに 1.1. 謝辞 この文書は、Harald Nordgaad-Hansen > が提供してくれた情報と、RAID メーリング リストに Martin Bene > がポストしたコ メント付き lilo.conf ファイルの内容に基づいて作成されています。両氏の 貢献にたいへん感謝しています。この文書において、私は、両氏の情報 と、RAID メーリングリストや Linux RAID Project で活躍する大勢の方々の 成果を、分かり易い手引書のかたちにまとめるよう努力しました。そして、ブ ート可能なルート RAID の構築と理解を容易にするため、実際の運用例を数多 く取り入れました。本文書では、まず単一ドライブのシステムを RAID システ ムに変換する方法について、ひとつのセクションを割いています。思うに、こ の変換がうまくいくかどうかは、ブート可能なルート RAID の理解にかかって います。 1.2. バグ この文書にもバグはあるはずです。もしご報告いただけたら、修正いたしま す。 1.3. 著作権表示 This document is GNU copyleft by Michael Robinton 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 を kernel.org から入手しました。 訳注:訳者は linux-2.2.17 を kernel.org から入手しまし た。 o 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/ を使っています。 訳注:ブートに関して訳者は最終的にこの文書で述べられている方法を使用し ませんでした。それは、採用したディストリビューションが Red Hat Linux 6.2J だったからです。 Red Hat Linux 6.1 からの GUI インストーラを用い ると RAID1 へのインストールと、Red Hat により拡張された LILO が使用で きるため、 RAID1 からのブートも標準で可能となります (新しいカーネルを 使用する場合は、 RAID パッチが必要になります)。この詳細については The Software-RAID HOWTO (日本語訳 ) を参 照ください。 2.2. 本文書の最新版の入手 この文書の最新バージョンがリンク先 にありま す。訂正と提案は大歓迎です。 Boot Root Raid + LILO HOWTO LaTeX (DVI や PostScript を作れます),テキスト,HTML の各フォーマット で入手できます. http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html SGML と HTML 形式で入手できます. ftp.bizsystems.net/pub/raid/ 2.3. ぜひ読んでおきたい文書 RAID0 を使いながら、RAID1/5 を使用するつもりなら、まず /usr/src/linux/Documentation/initrd.txt は読んでください。 それから raidtools パッケージに付属の文書やマニュアルも読んでくださ い。 そして Software-RAID-HOWTO.html も・・・ 2.4. RAID 関連の情報 関係があるメーリングリストを以下に列挙します―― o ここはひっそりしてるようです――majordomo@nuclecu.unam.mx へ subscribe raiddev の内容のメ ールを送れば参加できます。 投稿は raiddev@nuclecu.unam.mx へ メールを送ります。 o RAID 開発――majordomo@vger.rutgers.edu へ subscribe linux-raid の内容 のメールを送れば参加できます。 投稿は send mail to: linux-raid@vger.rutgers.edu へメールを送ります (これが最も活発なメーリン グリストのようです)。 3. ブート可能な RAID Linux 上での RAID0/1/5 の基本的な設定は、他の文書で詳細にそれを取り上 げているので、この文書では取り上げません。ルートの RAID 設定と、標準的 な LILO でそれをブート可能なものとする問題に取り組みます。 LILO の (man ページではない) ソースと raidtools-0.90 と一緒のそれぞれ文書は、 ブート動作の詳細とシステムのブート時のパラメータを、汎用的な RAID 設定 についても取り上げています。 ここでは2つのシナリオを取り上げます。そのシナリオは、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 (1つのミラーと1つ の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. 手順1:新しいカーネルの準備 きれいなカーネルと raidtools-0.90 (もしくは最新バージョン)、そして 0.90 RAID へとカーネルを改善するカーネルパッチを、ダウンロードしてくだ さい。 raidtools をコンパイルしインストールします。そして、付属のドキュメント を読んでください。 使用予定の RAID の種類 (0/1/4/5 ?) をすべてサポートする設定で、カーネ ルをコンパイルしインストールしてください。カーネルコンフィグレーション において RAID デバイスの autostart を指定したことを確認します。カーネ ルが適切にブートするかをテストし、そして、あなたが使おうとしている RAID の種類が新しいカーネルでサポートされているかを確認するため /proc/mdstat を調べてください。 4.2. 手順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 を調べると、1つ以上の RAID デバイスで新しいパーティショ ンのために再構築を行っていることが見えます。1分後、いや2分、いやもっ と経過すると、RAID アレイは完全に同期します (パーティションが大きいほ ど時間がかかります)。 この文書の始めの方のセクションで述べた手順を使い、新しい RAID ペア上 で、ブート可能な RAID の設定をします。この最後の手順の設定とテストが終 了するまで、あのブートフロッピーは手放してはなりません。 5. 付録A: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. 付録B:SCSI RAID5 の参考実装 4つのディスクを使った 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. 付録C:initrd を使用した ide RAID10 ストライプされた RAID0 ペアを用いた RAID1 では、RAID0 セット内のディス ク容量は完全に同じではありませんが、十分に近い容量です。 /dev/md0 は /boot パーティションで、カーネルにより autostart する /dev/md1 と /dev/md3 は2つの 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. 付録D:initrd を使用した ide RAID1-10 これは半端物の組合せでシステムを作り上げたものです。ルートとしてマウン トされる RAID デバイスは、半端なサイズのディスクで作り上げた1つの 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 プロジェクト 宛に連絡してください。 v1.04j 翻訳: 野本浩一 「賢い?」の訳注原案: 川嶋 勤 さん 校正: 川嶋 勤 さん 、 中野 武雄 さん 、 Takahiko KAWASAKI さん 、 千旦 裕司さん 、 武井 伸光さん