訳註: これは作業してる最中のもので、本来、訳作業者以外は見えぬべきものです。 訳作業者以外は見ないでください。意味が反対になったりとか当然にあるから、 内容は利用しないでください。この言語への変換作業(翻訳作業)物に関しては、現在、オープンなライセンス条件ではありません。 十進240のコードのキャラクターを<240>に置換してる場合あり
Chapter16.NetBSD RAIDframe

Table of Contents

16.1. RAIDframe Introduction
16.1.1. About RAIDframe
16.1.2. A warning about Data Integrity, Backups, and High Availability
16.1.3. Getting Help
16.2. Setup RAIDframe Support
16.2.1. Kernel Support
16.2.2. Power Redundancy and Disk Caching
16.3. Example: RAID-1 Root Disk
16.3.1. Pseudo-Process Outline
16.3.2. Hardware Review
16.3.3. Initial Install on Disk0/wd0
16.3.4. Preparing Disk1/wd1
16.3.5. Initializing the RAID Device
16.3.6. Setting up Filesystems
16.3.7. Setting up kernel dumps
16.3.8. Migrating System to RAID
16.3.9. The first boot with RAID
16.3.10. Adding Disk0/wd0 to RAID
16.3.11. Testing Boot Blocks
16.4. Testing kernel dumps

16.1.RAIDframe Introduction

16.1.1.About RAIDframe

NetBSD は RAID サブシステムに CMU RAIDframe ソフトウェアーを使っています。 NetBSD は RAIDframe 開発の主要の(primary)プラットホームです。 RAIDframe は OpenBSD および古い versions の FreeBSD にもまた見つけることができます。 NetBSD はまた、他のカーネル RAID level 0 システム が ccd(4) サブシステム ( Chapter15, Concatenated Disk Device (CCD) configuration を御覧ください) にあります。続ける前に、 RAID 概念および用語について いくつかの basic knowledge を possess すべきです。 少なくとも RAID レベルの違いについて熟知しているべきで - Adaptec は excellent reference を提供していて、 raid(4) manpage にも short overview が入っています。

16.1.2.A warning about Data Integrity, Backups, and High Availability

RAIDframe はハードウェア RAIDとは対照的に、ソフトウェアー RAID 実装です。 そのように、 NetBSD がサポートする特殊なディスクコントローラは必要ありません。 システム管理者は、 their Mission Critical applications によって ソフトウェア RAID または ハードウェア RAID のどちらがより適しているか、相当量の熟慮をするべきです。 いくつかのプロジェクトには、沢山のハードウェア RAID デバイス supported by NetBSD を利用するか良く考えるかもしれません。どの type の RAID を使うかは本当にあなたの慎重な判断ですが、 しかし、要因: 管理しやすさ、商用 vendor サポート、 load-balancing and failover 、 等、のようなものを良く考えることは推奨します。

利用する RAID レベルによって、 RAIDframe は ハードウェア故障の発生時に冗長性を提供します。しかしながら、 それは、信頼できるバックアップの代わりでは ありません! ソフトウェアやユーザーのエラーがまだ、データの滅失の原因になります。 RAIDframe は バックアップハードウェアーの無いシステムで、バックアップを容易にする仕組みとして 使われるかもしれませんが、しかし、これは理想的な 設定ではありません。最後に、 "high availability" に関しては、 RAID はデータの利用可能性を保証するには 非常に小さな部品にすぎません。

良い秤をもう一度: データのバックアップを!

16.1.3.Getting Help

もし RAIDframe を利用していて問題に遭遇したら、助けを得るいくつかの選択があります。

  1. RAIDframe man pages: raid(4) および raidctl(8) を徹底的に読む。

  2. メーリングリストのアーカイブを検索してください。不幸にも、 RAIDframe サポート専用の NetBSD リストはありません。 問題の種類によって、さまざまなリストに投函しがちですが、 最低限、 netbsd-helpnetbsd-users@NetBSD.orgcurrent-users@NetBSD.org の検索をしてください。 また、あなたが RAIDframe を使っている NetBSD プラットホームのリストを 検索してください: port-${ARCH}@NetBSD.org です。

    Caution

    RAIDframe は、しきりに開発中なので、 メーリングリストのアーカイブのいくつかの情報は 時代遅れで不正確になってるかもしれません。

  3. Problem Report database を検索する。

  4. もし、問題が生き残っているなら: 一番ふさわしいメーリングリストに投函してください(judgment call)。 投稿前に、可能な限りの多くのくどい詳細な情報を集めてください: 含まれるのは /var/run/dmesg.boot から dmesg(8) の出力、 カーネル config(8)/etc/raid[0-9].conf/dev/console 上の関連したエラー、 /var/log/messages 、または、 raidctl(8)stdout(標準出力)/stderr(標準エラー出力) です。 raidctl -s の出力(もし取れれば) も有益です。また、 問題が始まってからあなたがここまでした トラブルシューティングのステップの正確な詳細、 および、開発のために序言された問題の最近の変更の文案、も含みます。 返答を待っているときは気長でいることを忘れないでください。

16.2.Setup RAIDframe Support

RAID の利用はソフトウェアおよびハードウェアの設定の変更が要求します。

16.2.1.Kernel Support

GENERIC カーネルは既に RAIDframe をサポートしています。 あなたの環境向けのカスタムカーネルを構築したなら、 設定は次のオプションを持っている必要があり:

pseudo-device   raid            8       # RAIDframe disk driver
options         RAID_AUTOCONFIG         # auto-configuration of RAID components

RAID サポートは NetBSD カーネルによって検出されている必要があり、 これは dmesg(8) コマンドの出力を見てチェックすることができます。.

# dmesg|grep -i raid
Kernelized RAIDframe activated

歴史的には、カーネルにはまた、 バスのアドレスと /dev 中のデバイスノード間に 静的な mappings を載せている必要がありました。これは リブート後のデバイス故障の際、 RAID セットの中で、 デバイスの一貫性を確実にするのに使われました。 NetBSD 1.6 からは、しかしながら、デバイスの静的な mapping に優先して RAIDframe の 自動設定機能の利用が推奨されています。 自動設定機能は、ドライブがシステムの周りを移動することを許し、 RAIDframe はどのディスクがどの RAID セットに属するか自動的に決定します。

16.2.2.Power Redundancy and Disk Caching

システムに Uninterruptible Power Supply (UPS) 、 および/または、 もしシステムに冗長電源装置があるなら、 あなたのドライブで、 read および write キャッシュの enabling を考慮すべきです。 冗長電源のシステムでは、これはドライブのパフォーマンスを向上させます。 冗長電源のないシステムでは、ライトキャッシュは電気が切れた時に、 RAID データ の完全性を危うくします。

操作をサポートする全ての種類のディスク (SCSI 、 EIDE 、 SATA 、 ...) で dkctl(8) ユーティリティーがこれに使えます:

# dkctl wd0 getcache
/dev/rwd0d: read cache enabled
/dev/rwd0d: read cache enable is not changeable
/dev/rwd0d: write cache enable is changeable
/dev/rwd0d: cache parameters are not savable
# dkctl wd0 setcache rw
# dkctl wd0 getcache
/dev/rwd0d: read cache enabled
/dev/rwd0d: write-back cache enabled
/dev/rwd0d: read cache enable is not changeable
/dev/rwd0d: write cache enable is changeable
/dev/rwd0d: cache parameters are not savable

16.3.Example: RAID-1 Root Disk

この例では RAID-1 root disk の設定法を説明します。 RAID-1 ではディスクはミラーされ、 ゆえにサーバーは 1つの部品故障の際も 完全に機能できます。目標は 冗長性の水準を提供することで、 システムに RAID のどちらかの部品のディスクの故障に対決することを許し、および:

  • 予定されたメンテナンス機会まで通常の運用を続けること。

  • または、ディスク不良がシステムリブートを起こす好ましくない場合、 残りのディスクからシステムを迅速に再構成できること (platform 依存)。

Figure16.1.RAID-1 Disk Logical Layout

RAID-1 Disk Logical Layout

RAID-1 は冗長性とパフォーマンスの向上の両方を提供するので、 書きこみwrite 操作よりread 操作のほうが頻繁な //usr/varswap 、 等.のような critical(非常時に不可欠)な "system" パーティションに適用するのが最も実用的です。 /home/var/{application} のようなほかのファイルシステムには、 他の RAID レベルもよく考えてみてください (上の参考文献をみてください)。 単純な non-root ファイルシステムの一般的な RAID-1 ボリュームの作成なら、 man page からの型にはまった例に従うことができますが、 しかし、 root ボリュームは bootable でならなけばならないため、 初期設定中に一定の特別なステップを取る必要があります。

この例は工程の概説をし、それは、 i386 および sparc64 platforms の間で 違いはわずかなだけです。内容の過度の重複を減らそうと試みていて、 存在する相違点は、自然な見かけになるように、このように節を用いて指摘します。 もし、工程が抜本的に異なるなら、工程は分岐分散して プラットホーム依存ステップに分けます。

16.3.1.Pseudo-Process Outline

より洗練された手順で、カスタム版の NetBSD で作られた リムーバブルメディアを作ることができるかもしれません。 ですが、現在 NetBSD インストールメディアは RAIDframe ツールおよびサポートが欠落していて、 それで、次の pseudo 手順が RAID-1 Root 設定の事実上の標準(de facto standard)になります。 .

  1. システムの Disk0 にストックする NetBSD をインストールします。

    Figure16.2.Perform generic install onto Disk0/wd0

    Perform generic install onto Disk0/wd0

  2. Disk0/wd0 にインストールされたシステムを使って、 Disk1/wd1 だけに RAID セット を構成します。

    Figure16.3.Setup RAID Set

    Setup RAID Set

  3. Disk1/wd1 から新しく作られた RAID ボリュームでシステムをリブートします。

    Figure16.4.Reboot using Disk1/wd1 of RAID

    Reboot using Disk1/wd1 of RAID

  4. RAID セットに Disk0/wd0 を 追加 / 再同期 し戻します。

    Figure16.5.Mirror Disk1/wd1 back to Disk0/wd0

    Mirror Disk1/wd1 back to Disk0/wd0

16.3.2.Hardware Review

現在、 alpha 、 amd64 、 i386 、 pmax 、 sparc 、 sparc64 、 および vax の NetBSD platforms が RAID-1 からの booting をサポートしています。 他の RAID レベルからの Booting はサポートされていません。 RAID セットからの Booting は、 1st stage ブートローダーに 4.2BSD/FFS および RAID パーティションの両方を理解できるように教えることで 成し遂げられます。 1st boot block code は 2nd stage boot blocks を読むことができるように ディスクパーティションおよびファイルシステムについて知っているだけで十分です。 それゆえ、いかなるときも システムの BIOS / ファームウェアは、 1st stage boot blocks がインストールされた ディスクを読めなければなりません。 i386 platform では、これの設定はディスクが接続されている コントローラーカード / ホストバスアダプターのメーカー(vendor)に完全に依存します。 sparc64 ではこれは IEEE 1275 Sun OpenBoot Firmware によってコントロールされています。

この記事は 2つの同一の IDE ディスク (/dev/wd{0,1}) で、ミラー (RAID-1) をしようと仮定します。これらのディスクの正体は:

# grep ^wd /var/run/dmesg.boot
wd0 at atabus0 drive 0: <WDC WD100BB-75CLB0>
wd0: drive supports 16-sector PIO transfers, LBA addressing
wd0: 9541 MB, 19386 cyl, 16 head, 63 sec, 512 bytes/sect x 19541088 sectors
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
wd0(piixide0:0:0): using PIO mode 4, Ultra-DMA mode 2 (Ultra/33) (using DMA data transfers)

wd1 at atabus1 drive 0: <WDC WD100BB-75CLB0>
wd1: drive supports 16-sector PIO transfers, LBA addressing
wd1: 9541 MB, 19386 cyl, 16 head, 63 sec, 512 bytes/sect x 19541088 sectors
wd1: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
wd1(piixide0:1:0): using PIO mode 4, Ultra-DMA mode 2 (Ultra/33) (using DMA data transfers)

もし、 SCSI を使っているならば、 /dev/{,r}wd{0,1} /dev/{,r}sd{0,1} に置き換えて

この例では、両ディスクは、 同一コントローラーの別々のチャンネルにマスターとして jumperedつながれています。 同一コントローラーの同一バスに両方のディスクを決してつなぎたくは無いでしょう; これは一点不良を作ります。理想的には、 別々のコントローラーで別々のチャンネルにディスクをつけることです。 いくつかの SCSI コントローラーには複数のチャンネルが同一コントローラーにあります, しかしながら、ひとチャンネルで SCSI バスリセットすると、 ASIC/IC に過負荷が掛かっていたら、 他のチャンネルに不都合に影響することがあります。 コントローラーを2つにするトレードオフとして、 システムバスの利用帯域幅が2倍になります。簡単化のため、この例では 同一コントローラーの異なるチャンネルに2つのディスクをつなぎます。

RAIDframe は全てのディスクが同じサイズであることを要求します。 実際に、異なるサイズのディスクの中で最小公分母を用います。 実例の目的のために、この例はジオメトリーが同一の 2 つのディスクを使います。 また、もしディスクが重大なハードウェア故障にあったら、 交換ディスクの利用可能性も良く考えてください。

Tip

ドライブが "grown defects(欠陥増大)"を持っていると、 メーカー型番の同一の二つのディスクが異なるジオメトリーであることがあります。 ディスクの grown defects table (欠陥増大表)を検査するのに low-level プログラムを使ってください。 これらのディスクは RAID での利用には明らかに 最適状態に及ばない 候補で 避けるべきです。

16.3.3.Initial Install on Disk0/wd0

Disk0/wd0 上に、非常に一般的なインストールをします。 あなたのプラットホームの INSTALL 説明書に従ってください。 全セットのインストールですが、上書きされるので、 カーネル以外のカスタマイズはしないでください。

Tip

i386 では、 sysinst インストール中 prompted が出たとき、 もし "use the entire disk for NetBSD" したいなら、 "yes" と答えます。

一回インストールが完了すると、システムの disklabel(8) および fdisk(8) / sunlabel(8) 出力を検査すべきです:

# df
Filesystem   1K-blocks        Used       Avail %Cap Mounted on
/dev/wd0a       9487886      502132     8511360   5% /

i386 では:

# disklabel -r wd0
type: unknown
disk: Disk00
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 19386
total sectors: 19541088
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  19276992        63     4.2BSD   1024  8192 46568  # (Cyl.      0* - 19124*)
 b:    264033  19277055       swap                     # (Cyl.  19124* - 19385)
 c:  19541025        63     unused      0     0        # (Cyl.      0* - 19385)
 d:  19541088         0     unused      0     0        # (Cyl.      0 - 19385)

# fdisk /dev/rwd0d
Disk: /dev/rwd0d
NetBSD disklabel disk geometry:
cylinders: 19386, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
total sectors: 19541088

BIOS disk geometry:
cylinders: 1023, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
total sectors: 19541088

Partition table:
0: NetBSD (sysid 169)
    start 63, size 19541025 (9542 MB, Cyls 0-1216/96/1), Active
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
First active partition: 0

Sparc64 では コマンド / 出力 はわずかに異なり:

# disklabel -r wd0
type: unknown
disk: Disk0
[...snip...]
8 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  19278000         0     4.2BSD   1024  8192 46568  # (Cyl.      0 -  19124)
 b:    263088  19278000       swap                     # (Cyl.  19125 -  19385)
 c:  19541088         0     unused      0     0        # (Cyl.      0 -  19385)

# sunlabel /dev/rwd0c
sunlabel> P
a: start cyl =      0, size = 19278000 (19125/0/0 - 9413.09Mb)
b: start cyl =  19125, size =   263088 (261/0/0 - 128.461Mb)
c: start cyl =      0, size = 19541088 (19386/0/0 - 9541.55Mb)

16.3.4.Preparing Disk1/wd1

一度 Disk0/wd0 に NetBSD のインストールの蓄えがあれば、始める準備ができています。 Disk1/wd1 はシステムから見え、そして無使用です。 Disk1/wd1 のセットアップには、 RAID-1 セットに 2 番目の ディスク全体を割り当てるために、 disklabel(8) を使います。

Tip

Disk1/wd1 を完全に空にすることを確実に行う最も良い方法は、 dd(1) で、ディスクの最初のほんの少数のセクターを 'zero' out することです。 これで、 NetBSD ディスクラベル同様、 MBR (i386) または Sun disk label (sparc64) を消します。もし RAID setup 過程のどこででも ミスをしたら、いつでもこの工程を頼って、ディスクを空の state に 回復させることができます。

sparc64 では、 /dev/rwd1d の代わりに、 /dev/rwd1c を使ってください!

# dd if=/dev/zero of=/dev/rwd1d bs=8k count=1
1+0 records in
1+0 records out
8192 bytes transferred in 0.003 secs (2730666 bytes/sec)

一度これが完了すると、i386 では、 MBR および NetBSD ディスクラベルの両方が無くなったか確認し、 sparc64 では、 Sun Disk label が無くなったか確認します。

i386 では:

# fdisk /dev/rwd1d

fdisk: primary partition table invalid, no magic in sector 0
Disk: /dev/rwd1d
NetBSD disklabel disk geometry:
cylinders: 19386, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
total sectors: 19541088

BIOS disk geometry:
cylinders: 1023, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
total sectors: 19541088

Partition table:
0: <UNUSED>
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.

# disklabel -r wd1

[...snip...]
16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c:  19541025        63     unused      0     0        # (Cyl.      0* - 19385)
 d:  19541088         0     unused      0     0        # (Cyl.      0 - 19385)

sparc64 では:

# sunlabel /dev/rwd1c

sunlabel: bogus label on `/dev/wd1c' (bad magic number)

# disklabel -r wd1

[...snip...]
3 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c:  19541088         0     unused      0     0        # (Cyl.      0 -  19385)
disklabel: boot block size 0
disklabel: super block size 0

さて、2番目のディスクが空だと確信しています。 i386 では、上の Disk0/wd0 から 得られる値を用いて 2番目のディスクに MBR を設置しなければなりません。 NetBSD パーティションを active にマークしないと、 システムはブートしないことを思い出してください。 Disk1/wd1 に RAID ボリュームを enable にする NetBSD ディスクラベルを作る必要があります。 sparc64 では、2番目のディスクに単純に disklabel(8) をすれば、正しい Sun Disk Label が書かれます。

Tip

disklabel(8) は、ディスクラベルの編集にシェルの 環境変数 $EDITOR 変数を使います。 default は vi(1) です。

i386 では:

# fdisk -0ua /dev/rwd1d
fdisk: primary partition table invalid, no magic in sector 0
Disk: /dev/rwd1d
NetBSD disklabel disk geometry:
cylinders: 19386, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
total sectors: 19541088

BIOS disk geometry:
cylinders: 1023, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
total sectors: 19541088

Do you want to change our idea of what BIOS thinks? [n]

Partition 0:
<UNUSED>
The data for partition 0 is:
<UNUSED>
sysid: [0..255 default: 169]
start: [0..1216cyl default: 63, 0cyl, 0MB]
size: [0..1216cyl default: 19541025, 1216cyl, 9542MB]
bootmenu: []
Do you want to change the active partition? [n] y
Choosing 4 will make no partition active.
active partition: [0..4 default: 0] 0
Are you happy with this choice? [n] y

We haven't written the MBR back to disk yet.  This is your last chance.
Partition table:
0: NetBSD (sysid 169)
    start 63, size 19541025 (9542 MB, Cyls 0-1216/96/1), Active
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
Should we write new partition table? [n] y

# disklabel -r -e -I wd1
type: unknown
disk: Disk1
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 19386
total sectors: 19541088
[...snip...]
16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  19541025        63       RAID                     # (Cyl.      0*-19385)
 c:  19541025        63     unused      0     0        # (Cyl.      0*-19385)
 d:  19541088         0     unused      0     0        # (Cyl.      0 -19385)

sparc64 では:

# disklabel -r -e -I wd1
type: unknown
disk: Disk1
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 19386
total sectors: 19541088
[...snip...]
3 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  19541088         0       RAID                     # (Cyl.      0 -  19385)
 c:  19541088         0     unused      0     0        # (Cyl.      0 -  19385)

# sunlabel /dev/rwd1c 
sunlabel> P
a: start cyl =      0, size = 19541088 (19386/0/0 - 9541.55Mb)
c: start cyl =      0, size = 19541088 (19386/0/0 - 9541.55Mb)

i386 では、 c: および d: スライスが予約されています。 c: はディスクの NetBSD 部分を表し、. d: はディスク全体を表します。 NetBSD MBR パーティション全体を RAID に割り当てたいので、 a:c: の区域内に属するので、 a: および c: スライスは同一のサイズと オフセット値になります。 オフセットはトラック境界から始まらなければなりません (セクターの増分は matching ディスクラベルの sectors/track 値)。 sparc64 ではしかしながら、 c: は Sun disk label の NetBSD パーティション全体を表し、そして、 d: は予約されていません。また註として、 sparc64 の c: および a: はディスクの始めからの オフセットは要求しません。 しかしながら、もし必要なら、オフセットはシリンダー境界から 始まっていなければなりません。 (セクターの増分は matching the sectors/cylinder 値)。

16.3.5.Initializing the RAID Device

次に RAID セット / ボリュームの設定ファイルを作ります。伝統的には、 RAIDframe 設定ファイルは /etc の中にあり、起動時に読まれて初期化されます。 しかしながら、 bootable RAID ボリュームを作るので、設定データは実際には"auto-configure(自動設定)" 機能を使った RAID ボリュームの中に書かれます。 ゆえに、ファイルは initial setup 中だけ必要で、 /etc の中に住まわせるべきではありません。

# vi /var/tmp/raid0.conf
START array
1 2 0

START disks
absent
/dev/wd1a

START layout
128 1 1 1

START queue
fifo 100

註として absent は存在しないディスクです。 これは、機能しないディスクで RAID ボリュームの設置を可能にし、 あとで、 Disk0/wd0 を取り替えます。

次に、 デバイスを設定し、シリアル番号を何か unique に初期化します。 この例では "YYYYMMDDRevision" 体系を使います。 format の選択は完全にあなたの自由裁量ですが、しかしながら、 あなたが選択した体系で、 2つの RAID セットが 同一シリアル番号を同時に使わないように確実にするべきです。

その後、初回の RAID セットの初期化で、機能しないディスクについての エラーは安全に無視します。

# raidctl -v -C /var/tmp/raid0.conf raid0
Ignoring missing component at column 0
raid0: Component absent being configured at col: 0
         Column: 0 Num Columns: 0
         Version: 0 Serial Number: 0 Mod Counter: 0
         Clean: No Status: 0
Number of columns do not match for: absent
absent is not clean!
raid0: Component /dev/wd1a being configured at col: 1
         Column: 0 Num Columns: 0
         Version: 0 Serial Number: 0 Mod Counter: 0
         Clean: No Status: 0
Column out of alignment for: /dev/wd1a
Number of columns do not match for: /dev/wd1a
/dev/wd1a is not clean!
raid0: There were fatal errors
raid0: Fatal errors being ignored.
raid0: RAID Level 1
raid0: Components: component0[**FAILED**] /dev/wd1a
raid0: Total Sectors: 19540864 (9541 MB)
# raidctl -v -I 2009122601 raid0
# raidctl -v -i raid0
Initiating re-write of parity
raid0: Error re-writing parity!
Parity Re-write status:

# tail -1 /var/log/messages
Dec 26 00:00:30  /netbsd: raid0: Error re-writing parity!
# raidctl -v -s raid0
Components:
          component0: failed
           /dev/wd1a: optimal
No spares.
component0 status is: failed.  Skipping label.
Component label for /dev/wd1a:
   Row: 0, Column: 1, Num Rows: 1, Num Columns: 2
   Version: 2, Serial Number: 2009122601, Mod Counter: 7
   Clean: No, Status: 0
   sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 19540864
   RAID Level: 1
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

16.3.6.Setting up Filesystems

Caution

ルートファイルシステムは RAID デバイスのセクター 0 から始まる必要があります。 さもないと、 primary ブートローダーは secondary ブートローダーを見つけることが不可能です。

RAID デバイスがこれで設定され、使えます。 RAID デバイスは pseudo disk-device です。 default ディスクラベルで作られます。ディスクラベルスライスのために、 生産環境に適切なサイズを決定しなければなりません。 この例は簡単にするため、システム は 8.5 gigabytes を /dev/raid0a として / に割り当て、 および残りを /dev/raid0b として swap に割り当てます。

Caution

これは、 production サーバーには非現実的なディスク layout で; NetBSD ガイドは、しかるべき partitioning テクニックで発展可能です。 Chapter2, Installing NetBSD: Preliminary considerations and preparations を見てください

註として 1 GB は 2*1024*1024=2097152 blocks (1 block は 512 bytes, あるいは 0.5 kilobytes)。 RAID セットを構成しているハードウェアに関わらず、 RAID pseudo ディスクは常に 512 bytes/sector です。

我等の例では、 RAID セットを構成する a: スライスに割り当てられているスペースは i386 と sparc64 では異なり、 ゆえに RAID ボリュームの total sectors は異なります:

i386 では:

 # disklabel -r -e -I raid0
type: RAID
disk: raid
label: fictitious
flags:
bytes/sector: 512
sectors/track: 128
tracks/cylinder: 8
sectors/cylinder: 1024
cylinders: 19082
total sectors: 19540864
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0

#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  19015680         0     4.2BSD      0     0     0  # (Cyl.      0 - 18569)
 b:    525184  19015680       swap                     # (Cyl.  18570 - 19082*)
 d:  19540864         0     unused      0     0        # (Cyl.      0 - 19082*)

sparc64 では:

# disklabel -r -e -I raid0
[...snip...]
total sectors: 19539968
[...snip...]
3 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  19251200         0     4.2BSD      0     0     0  # (Cyl.      0 -  18799)
 b:    288768  19251200       swap                     # (Cyl.  18800 -  19081)
 c:  19539968         0     unused      0     0        # (Cyl.      0 -  19081)

次に、新しく作られた / パーティションを 4.2BSD FFSv1 ファイルシステムでフォーマットします:

# newfs -O 1 /dev/rraid0a
/dev/rraid0a: 9285.0MB (19015680 sectors) block size 16384, fragment size 2048
        using 51 cylinder groups of 182.06MB, 11652 blks, 23040 inodes.
super-block backups (for fsck -b #) at:
32, 372896, 745760, 1118624, 1491488, 1864352, 2237216, 2610080, 2982944,
...............................................................................

# fsck -fy /dev/rraid0a
** /dev/rraid0a
** File system is already clean
** Last Mounted on
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
1 files, 1 used, 4679654 free (14 frags, 584955 blocks, 0.0% fragmentation)

16.3.7.Setting up kernel dumps

この場合の通常のスワップ領域は raid0b です。 NetBSD 5.0 以降では、 raid0 が RAID level 1 に設定されていれば raid0b は自動的にカーネルダンプ先になります。

5.0 より前の NetBSD versions では カーネルダンプは real ディスクデバイスにだけしか行えませんでした。 raid0b と重なるダンプエリアを定義することに対し、何も私達を止めないので、 うまいやり方は、クラッシュダンプエリアに正しい開始オフセットを計算することです。 これは危険で、 これらの計算を間違えると価値のあるデータを破壊することが可能です! カーネルがメモリーダンプを 通常のファイルシステムの上に書くとデータ破壊が起こります。 それで、ここにおいては格段特別な注意が必要です。 (原著者は、彼の 100+ GB /home をカーネルクラッシュダンプで破壊した!)

最初に、 swap (raid0b) と real 物理ディスク (wd1) のディスクラベルを見る必要があります。

i386 では:

  # disklabel raid0

  8 partitions:
  #        size    offset     fstype  [fsize bsize cpg/sgs]
   a:  19015680         0     4.2BSD   1024  8192    64
   b:    525184  19015680     swap
   d:  19540864         0     unused      0     0     0


  # disklabel wd1

  8 partitions:
  #        size    offset     fstype  [fsize bsize cpg/sgs]
   a:  19541025        63     RAID
   c:  19541025        63     unused      0     0
   d:  19541088         0     unused      0     0
   

RAID セットの各ディスクは、内部 RAID 構造を蓄えておくために ディスクの先頭から 64 block の予約エリア( <dev/raidframe/raidframevar.h> の RF_PROTECTED_SECTORS を見てください) を持っています。

  # dc
  63              # offset of wd1a
  64              # RF_PROTECTED_SECTORS
  +
  19015680        # offset of raid0b
  +p
  19015807        # offset of swap within wd1
  q
  

いま、まだ存在していない wd1b の real オフセットが 19015807 で、 size は 525184 とわかりました。次に wd1 のディスクラベルに wd1b を加える必要があります。

  # disklabel wd1 > disklabel.wd1
  # vi disklabel.wd1

  8 partitions:
  #        size    offset     fstype  [fsize bsize cpg/sgs]
   a:  19541025        63       RAID
   b:    525184  19015807       swap
   c:  19541025        63     unused      0     0
   d:  19541088         0     unused      0     0
  

次に新しいディスクラベルをインストールします。

  # disklabel -R -r wd1 disklabel.wd1
  

sparc64 では:

sparc64 (および sparc) では、全パーティションは シリンダー境界から始まる必要があります。このため、 dump パーティションの開始位置は次のシリンダー境界まで移動しなければならず、 開始位置が移動し変わったことによって、サイズは縮みます:

  # disklabel raid0

  3 partitions:
  #        size    offset     fstype [fsize bsize cpg/sgs]
   a:  19251200         0     4.2BSD      0     0     0  # (Cyl.      0 -  18799)
   b:    288768  19251200       swap                     # (Cyl.  18800 -  19081)
   c:  19539968         0     unused      0     0        # (Cyl.      0 -  19081)


  # disklabel wd1
  ...
  sectors/cylinder: 1008
  ...
  3 partitions:
  #        size    offset     fstype  [fsize bsize cpg/sgs]
   a:  19541088         0       RAID                     # (Cyl.      0 -  19385)
   c:  19541088         0     unused      0     0        # (Cyl.      0 -  19385)  
   

i386 でのように、 RAID セットの各ディスクは、内部 RAID 構造を蓄えておくために ディスクの先頭から 64 block の予約エリア( <dev/raidframe/raidframevar.h> の RF_PROTECTED_SECTORS を見てください) を持っています。これは skipped される必要があり、 そしてそれから上で概説の通り、次のシリンダー境界まで移動されます:

  # dc
  0               # offset of wd1a
  64              # RF_PROTECTED_SECTORS
  +
  19251200        # offset of raid0b
  +p
  19251264        # offset of swap within wd1
  sa la           # Remember the new offset
  1008 /          # determine cylinder offset
  1 +             # move to next full cylinder boundary
  1008 *p         # convert back to sectors
  19251792        # Our real, cylinder-aligned offset of wd1b
  sb lb la -p     # Determine how far the offset was moved
  528
  sc              # Remember how many sectors we moved the start
  288768          # Size of swap on raid0
  lc -p
  288240          # Our real, smaller swap/dump size of wd1b
  q
  

いま、いまだ存在していない wd1b の real オフセットが 19251792 で、 size は 288240 と判りました。次に wd1 のディスクラベルに wd1b を加える必要があります。

  # disklabel wd1 > disklabel.wd1
  # vi disklabel.wd1

  8 partitions:
  #        size    offset     fstype  [fsize bsize cpg/sgs]
   a:  19541088         0       RAID                     # (Cyl.      0 -  19385)
   b:      288240   19251792    swap
   c:  19541088         0     unused      0     0        # (Cyl.      0 -  19385)  
  

次に新しいディスクラベルをインストールします。

  # disklabel -R -r wd1 disklabel.wd1
  

なぜ sizeof(raid0d) == (sizeof(wd1a) - RF_PROTECTED_SECTORS) ではないの? raid0d のサイズは RAID セットで使われている stripe sizeストライプサイズ の 最大の倍数に基づいています。 例としては、ストライプ width が 128 の raid0d のサイズは:

  # dc
  19541025    # size of wd1a
  64          # RF_PROTECTED_SECTORS
  -
  128         # stripe width
  /p
  152663      # number of stripes
  128         # number of blocks per stripe
  *p
  19540864    # size of raid0d
  

16.3.8.Migrating System to RAID

新しい RAID ファイルシステムが今、使う準備ができました。 /mnt にマウントして、 旧システムから全ファイルのコピーをします。これは、 dump(8) または pax(1) を使って行えます。

# mount /dev/raid0a /mnt
# df -h /mnt
Filesystem        Size       Used      Avail %Cap Mounted on
/dev/raid0a       8.9G       2.0K       8.5G   0% /mnt
# cd /; pax -v -X -rw -pe . /mnt
[...snip...]

NetBSD install は今、 RAID ファイルシステム上に存在します。新しいコピーの /etc/fstab の マウントポイントを修正する必要があって、 または、システムは正しくあがってこないでしょう。 例の wd0raid0 で置き換えます。

註として、 NetBSD リリース の 5.0 より前では カーネルクラッシュダンプ RAID デバイス の上にはセーブされず、しかし、 real 物理ディスク (wd0b) にセーブされます。このダンプエリアは 前章で 2 番目のディスク (wd1b) に作りましたが、 あとで wd0 を wd1 の同一にコピーするので、wd0b と wd1b は同じサイズで 同じオフセットになります。もし wd0 が fails してサーバーから取り除かれると、 リブート後は wd1 が wd0 になり、クラッシュダンプは /etc/fstab の wd0b を用いて依然働きます。 この設定の唯一の欠点が、 original のときで、 failed wd0 は 新しいドライブ に取り替えられ、まだ、 fdisk および disklabel で初期化されていません。この短い期間は、カーネルパニックの際に クラッシュダンプが作れません。どうしてダンプデバイスの 4番目の欄のキーワードに dp があるかに 注意してください。

# vi /mnt/etc/fstab

/dev/raid0a  /  ffs  rw  1  1
/dev/raid0b  none  swap  sw  0  0
/dev/wd0b  none  swap  dp  0  0
kernfs    /kern  kernfs  rw
procfs    /proc  procfs  rw

swap は RAID デバイスのパリティーエラーを避けるために、 シャットダウンで unconfigured するべきです。 これは簡単にできて、 /etc/rc.conf に一行設定します。

# vi /mnt/etc/rc.conf
swapoff=YES

次に、ブートローダーが Disk1/wd1 にインストールされていなければなりません。 Disk1/wd1 にローダーのインストールを失敗すると、 Disk0/wd0 が pointless(要領を得ない/無意味な/..) RAID-1 の making をしなくなると、 システムを起動できなくなります。

Tip

多くの i386 based システムの BIOS/CMOS メニューは デバイス起動順序の点で誤解させるので、 i386 1st stage ブートローダーでサポートされている "-o timeout=X" オプションの 利用を大いに推奨します。 判断基準としてディスクごとに独特の値を設定することで、 どちらのディスクからシステムが起動したのか簡単に特定できます。

Caution

1st stage boot block を /dev/rwd1{c,d} にインストールするのが必然と思えるかもしれませんが (これは歴史上 NetBSD 1.6.x installboot(8) では正しい)、これはもはや実情ではありません。 このミスをすると、ブートセクターは取り返せないダメージを負い、 手順をもう一度最初からしなければならなくなるでしょう。

i386 では、 /dev/rwd1a にブートローダーをインストールします:

# /usr/sbin/installboot -o timeout=30 -v /dev/rwd1a /usr/mdec/bootxx_ffsv1
File system:         /dev/rwd1a
Primary bootstrap:   /usr/mdec/bootxx_ffsv1
Ignoring PBR with invalid magic in sector 0 of `/dev/rwd1a'
Boot options:        timeout 30, flags 0, speed 9600, ioaddr 0, console pc

sparc64 では、ブートローダーはなお /dev/rwd1a にインストールしますが、 しかしながら "-o" フラグは非対応です(および OpenBoot の余計なお世話で):

# /usr/sbin/installboot -v /dev/rwd1a /usr/mdec/bootblk
File system:         /dev/rwd1a
Primary bootstrap:   /usr/mdec/bootblk
Bootstrap start sector: 1
Bootstrap byte count:   5140
Writing bootstrap

最後に、 RAID セットは auto-configurable (自動設定)にしなければならず、そして システムを reboot されなければなりません。 reboot 後は全てが RAID デバイスからマウントされます。

# raidctl -v -A root raid0
raid0: Autoconfigure: Yes
raid0: Root: Yes
# tail -2 /var/log/messages
raid0: New autoconfig value is: 1
raid0: New rootpartition value is: 1
# raidctl -v -s raid0
[...snip...]
   Autoconfig: Yes
   Root partition: Yes
   Last configured as: raid0
[...snip...]
# shutdown -r now

Warning

シャットダウンのときは常に shutdown(8)   を使ってください。 決して単純にreboot(8) を使わないでください。 reboot(8)   は shutdown RC スクリプトを適切に run せず、安全に swap を disable しません。 これは reboot のたびに dirty parity の原因になります。

16.3.9.The first boot with RAID

この時点は、 your システムは Disk1/wd1 でboot する temporarily 設定です。 この工程の詳細は Section16.3.11, “Testing Boot Blocks” の註を 見てください。 いま、システムは boot し、 RAID デバイス上に全ファイルシステムがあるはずです。 RAID は single component(1つのドライブ)で機能するはずです。 しかしながら、 bogus drive (wd9) が failed なの でセットは、完全には機能しません。

# egrep -i "raid|root" /var/run/dmesg.boot
raid0: RAID Level 1
raid0: Components: component0[**FAILED**] /dev/wd1a
raid0: Total Sectors: 19540864 (9541 MB)
boot device: raid0
root on raid0a dumps on raid0b
root file system type: ffs

# df -h
Filesystem    Size     Used     Avail Capacity  Mounted on
/dev/raid0a   8.9G     196M      8.3G     2%    /
kernfs        1.0K     1.0K        0B   100%    /kern

# swapctl -l
Device      1K-blocks     Used    Avail Capacity  Priority
/dev/raid0b    262592        0   262592     0%    0
# raidctl -s raid0
Components:
          component0: failed
           /dev/wd1a: optimal
No spares.
component0 status is: failed.  Skipping label.
Component label for /dev/wd1a:
   Row: 0, Column: 1, Num Rows: 1, Num Columns: 2
   Version: 2, Serial Number: 2009122601, Mod Counter: 65
   Clean: No, Status: 0
   sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 19540864
   RAID Level: 1
   Autoconfig: Yes
   Root partition: Yes
   Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

16.3.10.Adding Disk0/wd0 to RAID

これから、 RAID の component として Disk0/wd0 を追加します。 これはオリジナルのファイルシステム構造を破壊します。 i386 では、 MBR ディスクラベルは影響を受けません(wd0 のラベルをとにかく wd1 にコピーしたことを思い出してください)。 ゆえに Disk0/wd0 を "zero" にする必要はありません。しかしながら、 Disk1/wd1 のと 同一の NetBSD ディスクラベル配置にするために、 Disk0/wd0 を relabel する必要があります。 それから、 "hot-spare" として Disk0/wd0 を RAID セットに追加して、 全 RAID デバイスのためにパリティー再構成を始め、 Disk0/wd0 を RAID-1 セットの中に効果的に連れて行き、両ディスクを "synching up"(同期させ)ます。

# disklabel -r wd1 > /tmp/disklabel.wd1
# disklabel -R -r wd0 /tmp/disklabel.wd1

土壇場の健康チェックとして、 Disk0/wd0 と Disk1/wd1 のディスクラベルを確実にそろえるのに diff(1) が使いたいかもしれません。 また、これらのファイルを非常時の参照としてバックアップしておくべきです。

# disklabel -r wd0 > /tmp/disklabel.wd0
# disklabel -r wd1 > /tmp/disklabel.wd1
# diff /tmp/disklabel.wd0 /tmp/disklabel.wd1
# fdisk /dev/rwd0 > /tmp/fdisk.wd0
# fdisk /dev/rwd1 > /tmp/fdisk.wd1
# diff /tmp/fdisk.wd0 /tmp/fdisk.wd1
# mkdir /root/RFbackup
# cp -p /tmp/{disklabel,fdisk}* /root/RFbackup

一度確信したなら、 Disk0/wd0 を spare component(予備部品)として追加し、再構築を開始します:

# raidctl -v -a /dev/wd0a raid0
/netbsd: Warning: truncating spare disk /dev/wd0a to 241254528 blocks
# raidctl -v -s raid0
Components:
          component0: failed
           /dev/wd1a: optimal
Spares:
           /dev/wd0a: spare
[...snip...]
# raidctl -F component0 raid0
RECON: initiating reconstruction on col 0 -> spare at col 2
 11% |****                                   | ETA:    04:26 \

ハードウェアのスピードによって、再構成時間はまちまちです。 他の端末からそれを見たいなら:

# raidctl -S raid0
Reconstruction is 0% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.
Reconstruction status:
  17% |******                                 | ETA: 03:08 -

再構築後、両ディスクは optimal であるべきです。

# tail -f /var/log/messages
raid0: Reconstruction of disk at col 0 completed
raid0: Recon time was 1290.625033 seconds, accumulated XOR time was 0 us (0.000000)
raid0:  (start time 1093407069 sec 145393 usec, end time 1093408359 sec 770426 usec)
raid0: Total head-sep stall count was 0
raid0: 305318 recon event waits, 1 recon delays
raid0: 1093407069060000 max exec ticks

# raidctl -v -s raid0
Components:
           component0: spared
           /dev/wd1a: optimal
Spares:
     /dev/wd0a: used_spare
     [...snip...]

再構成が終わったら、 Disk0/wd0 にブートローダーをインストールする必要があります。 i386 では、 /dev/rwd0a に boot loader をインストールし:

# /usr/sbin/installboot -o timeout=15 -v /dev/rwd0a /usr/mdec/bootxx_ffsv1
File system:         /dev/rwd0a
Primary bootstrap:   /usr/mdec/bootxx_ffsv1
Boot options:        timeout 15, flags 0, speed 9600, ioaddr 0, console pc

sparc64 では:

# /usr/sbin/installboot -v /dev/rwd0a /usr/mdec/bootblk
File system:         /dev/rwd0a
Primary bootstrap:   /usr/mdec/bootblk
Bootstrap start sector: 1
Bootstrap byte count:   5140
Writing bootstrap

そして最後に、続ける前に最後の reboot をします。 これは、 Disk0/wd0 を "Component0" としての身分 "used_spare" から、状態 "optimal" に移住するのに必要です。 各 reboot 後の clean parity の確認については、次の節の註を参照してください。

# shutdown -r now

16.3.11.Testing Boot Blocks

この点では、システムのハードウェアがどちらのディスクのブートブートロックを使っても 正確に boot できることを保証する必要があります。 i386 では、これはハードウェア-依存の方法で、 多分、マザーボード CMOS/BIOS メニューまたは、コントローラーカードの 設定メニュー経由でされます。

i386では、 boot device の 順序 / 優先権 を Disk0/wd0 の前に Disk1/wd1 にセットするために、 your machine のメニューシステムを使います。 ここの例では一般的な Award BIOS で描写します。

Figure16.6.Award BIOS i386 Boot Disk1/wd1

Award BIOS i386 Boot Disk1/wd1

変更をセーブし退出します。

>> NetBSD/i386 BIOS Boot, Revision 5.2 (from NetBSD 5.0.2)
>> (builds@b7, Sun Feb 7 00:30:50 UTC 2010)
>> Memory: 639/130048 k
Press return to boot now, any other key for boot menu
booting hd0a:netbsd - starting in 30

ブートローダーのタイムアウトが 15 秒でなくて 30 秒なので、 BIOS は Disk1/wd1 を読んだと決定できます。 reboot の後、 BIOS に再び入って、 設定するドライブ起動順序の設定を default にもどします:

Figure16.7.Award BIOS i386 Boot Disk0/wd0

Award BIOS i386 Boot Disk0/wd0

変更をセーブし退出します。

>> NetBSD/i386 BIOS Boot, Revision 5.2 (from NetBSD 5.0.2)
>> Memory: 639/130048 k
Press return to boot now, any other key for boot menu
booting hd0a:netbsd - starting in 15

注意、カスタムカーネル検出するコントローラー/バス/ドライブ 割り当てと、 BIOS が boot ディスクに割り当てたものは無関係です。 これは想定内の動きです。

sparc64 では、 両方のディスクが bootable か確認するのに Sun OpenBoot devalias を使い:

Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 400MHz), No Keyboard
OpenBoot 3.15, 128 MB memory installed, Serial #nnnnnnnn.
Ethernet address 8:0:20:a5:d1:3b, Host ID: nnnnnnnn.

ok devalias
[...snip...]
cdrom /pci@1f,0/pci@1,1/ide@3/cdrom@2,0:f
disk /pci@1f,0/pci@1,1/ide@3/disk@0,0
disk3 /pci@1f,0/pci@1,1/ide@3/disk@3,0
disk2 /pci@1f,0/pci@1,1/ide@3/disk@2,0
disk1 /pci@1f,0/pci@1,1/ide@3/disk@1,0
disk0 /pci@1f,0/pci@1,1/ide@3/disk@0,0
[...snip...]

ok boot disk0 netbsd
Initializing Memory [...]
Boot device /pci/pci/ide@3/disk@0,0 File and args: netbsd
NetBSD IEEE 1275 Bootblock
>> NetBSD/sparc64 OpenFirmware Boot, Revision 1.13
>> (builds@b7.netbsd.org, Wed Jul 29 23:43:42 UTC 2009)
loadfile: reading header
elf64_exec: Booting [...]
symbols @ [....]
 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
     2006, 2007, 2008, 2009
     The NetBSD Foundation, Inc.  All rights reserved.
 Copyright (c) 1982, 1986, 1989, 1991, 1993
     The Regents of the University of California.  All rights reserved.
[...snip...]

および second ディスク:

ok boot disk2 netbsd
Initializing Memory [...]
Boot device /pci/pci/ide@3/disk@2,0: File and args:netbsd
NetBSD IEEE 1275 Bootblock
>> NetBSD/sparc64 OpenFirmware Boot, Revision 1.13
>> (builds@b7.netbsd.org, Wed Jul 29 23:43:42 UTC 2009)
loadfile: reading header
elf64_exec: Booting [...]
symbols @ [....]
 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
     2006, 2007, 2008, 2009
     The NetBSD Foundation, Inc.  All rights reserved.
 Copyright (c) 1982, 1986, 1989, 1991, 1993
     The Regents of the University of California.  All rights reserved.
[...snip...]

boot起動 ごとに、以下が NetBSD カーネル dmesg(8) に現れるはずです:

Kernelized RAIDframe activated
raid0: RAID Level 1
raid0: Components: /dev/wd0a /dev/wd1a
raid0: Total Sectors: 19540864 (9541 MB)
boot device: raid0
root on raid0a dumps on raid0b
root file system type: ffs

一度、両ディスクが起動可能と確信したら、 reboot する毎に RAID パリティーがクリーンか 確かめます:

# raidctl -v -s raid0
Components:
          /dev/wd0a: optimal
          /dev/wd1a: optimal
No spares.
[...snip...]
Component label for /dev/wd0a:
   Row: 0, Column: 0, Num Rows: 1, Num Columns: 2
   Version: 2, Serial Number: 2009122601, Mod Counter: 67
   Clean: No, Status: 0
   sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 19540864
   RAID Level: 1
   Autoconfig: Yes
   Root partition: Yes
   Last configured as: raid0
Component label for /dev/wd1a:
   Row: 0, Column: 1, Num Rows: 1, Num Columns: 2
   Version: 2, Serial Number: 2009122601, Mod Counter: 67
   Clean: No, Status: 0
   sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 19540864
   RAID Level: 1
   Autoconfig: Yes
   Root partition: Yes
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

16.4.Testing kernel dumps

カーネルクラッシュダンプのテストもまた重要で、それで正しく働き、 いかなる重要な ファイルシステム (raid0e ファイルシステムのような)も上書きしません。

カーネルクラッシュダンプのテストのために Ctrl+Alt+Esc を押してください。 これは カーネルデバッガーを呼び出します。 sync または reboot 0x104 を打ち込んで Enter を押してください。これで 現在のカーネルメモリーが、詳細な解析のためにダンプエリア(NetBSD 5.0 および以降で raid0b 、他は wd0b) にセーブされます。 もし、リブート後、システムが正確に上がって来なければ ( /home がマウントできない、 super-blocks が汚染された、等)、 おそらく wd0b の offset および/または size が間違っています。 いま、貴重なファイル が /home に あまり入っていない時にこのテストが非常に重要です。例として、 原著者は、カーネルクラッシュダンプで彼の 100+ GB の /home パーティションを破壊しました! これが原因の実害がなかったのは、最新のバックアップのおかげです (バックアップは RAID-1 に変換する直前に作りました)。 もういちど: これらの教えについてくる前に全ファイルのバックアップを取ってください!