FreeBSD で atacontrol を使いこなしてみる?

FreeBSD には atacontrol という ATA デバイスをコントロールするプログラムがあります.
接続されている ATA デバイスの一覧を表示する事はもちろん,ATA チャネルのアタッチ,デタッチが出来たり,ATA のモードを表示,変更出来たりと様々なオペレーションが可能です.
また,atacontrol を使用した SoftwareRAID も作成可能で,作成可能な RAID Level には,RAID0(stripe),RAID1(mirror),RAID0+1,RAID5,SPAN,JBOD と多岐に渡ります.通常であれば,ATA デバイスの管理はこのプログラム1つで間に合うでしょう.

ここでは,atacontrol の簡単な使用方法から RAID の作成,RAID のリビルドまでを扱ってみたいと思います.
ここで実験する環境は VMware Workstation 上の FreeBSD 6.1-RELEASE ですが,通常のコンピュータと同様の構成となっています.ただ,VMware の制限で,ATA チャネルが2つしか持てない為,ATA デバイスが最大で4台の構成までとなっています.

まずは atacontrol をさらりと触ってみる

まずは簡単にで構いませんので,man atacontrol してみて下さい.様々な利用方法がある事がわかるかと思います.
ここでは,ATA デバイスの一覧の表示,ATA チャネルのアタッチ,デタッチ,転送モードについて触れたいと思います.

atacontrol list

atacontrol list とコマンドを発行すると,利用可能なコントローラ上の ATA デバイスの一覧が表示されます.

geom# atacontrol list
ATA channel 0:
    Master:  ad0 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad1 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
ATA channel 1:
    Master:  ad2 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad3 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4

今回の環境の場合,ATA チャネルは 0,1 の 2つがあり,それぞれの Master, Slave に HDD が接続されている事がわかるかと思います.増設の ATA カード等があれば,チャネル数が増えて表示されます.
基本的に,ここで見えていないと FreeBSD 上でマウントしたりする事が出来ません.トラブルシューティング時には dmesg と共に,atacontrol list でのデバイスの確認をお勧めします.

atacontrol attach, atacontrol detach

atacontrol attach 及び atacontrol detach は,ATA チャネルを切り離したり,接続したりする場合に利用します.リムーバブルケースに入れた HDD を後から認識させたい場合等に利用します.
注意しなければならない点として,デバイス毎のアタッチ,デタッチでは無く,チャネル毎である点に気をつけて下さい.
例えば,ad0 に OS がインストールされ,起動している際に,ad1 を接続して認識させたいといった場合,atacontrol detach を行うと,OS が panic します.
通常,OS が利用しているチャネルのアタッチ,デタッチは行わないようにしましょう.

geom# atacontrol detach ata1

上記コマンドの場合,ATA チャネル 1 を切り離す事になります.エラーが表示されていなければ成功しています.
確認には,前項で説明した atacontrol list を使用します.

geom# atacontrol list
ATA channel 0:
    Master:  ad0 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad1 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
ATA channel 1:
    Master:      no device present
    Slave:       no device present

前項の状態と違い,ATA チャネル 1 のデバイスが表示されていませんので,切り離された事がわかるかと思います.また,dmesg でも切り離された事を確認出来ます.
切り離し後,デバイスを差し替えて認識させます.この際に使用するコマンドが atacontrol attach です.

geom# atacontrol attach ata1
Master:  ad2 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
Slave:   ad3 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4

atacontrol detach と違い,成功すると認識したデバイスが表示されます.上記の場合,ad2 と ad3 が認識に成功しました.ここでも atacontrol list で確認を行いましょう.

geom# atacontrol list
ATA channel 0:
    Master:  ad0 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad1 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
ATA channel 1:
    Master:  ad2 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad3 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4

これで初期の状態まで認識出来ている事が確認出来たかと思います.

atacontrol mode

atacontrol mode コマンドは,転送モードの表示及び変更を行います.
atacontrol mode にデバイス名以外の引数を与えない場合,現在の転送方式,速度を表示します.
ATA の転送モードについては,google さんに聞いて頂く事として,指定可能なモードは PIO0PIO1PIO2PIO3PIO4WDMA2UDMA2(UDMA33)UDMA4(UDMA66)UDMA5(UDMA100)UDMA6(UDMA133) です.

geom# atacontrol mode ad0
current mode = UDMA33

上記の場合,ad0 のモードは UDMA33 を利用する状態を表しています.転送モードを変更する場合,デバイス名以降に転送モードを追加したコマンドを発行します.

geom# atacontrol mode ad0 pio4
current mode = PIO4

上記の場合,デバイス ad0 に転送モード PIO4 を指定し,結果が反映されている事がわかるかと思います.
通常,ATA チップセット及びデバイスが対応する最大速度を利用するべきですが,ケーブルの不良や相性問題等が原因で最大速度での動作が不安定になる場合があります.このような場合に,atacontrol mode コマンドで一時的に速度を落としてやるとエラーが収まったりしますのでディスクの交換等の前に試してみる事をお勧めします.

atacontrol cap

atacontrol cap は,接続されているデバイスの詳細情報を表示します.cap 引数に続いて,デバイス名を引数として渡す事で,指定されたデバイスの詳細が表示されます.

geom# atacontrol cap ad0

Protocol              ATA/ATAPI revision 4
device model          VMware Virtual IDE Hard Drive
serial number         00000000000000000001
firmware revision     00000001
cylinders             8322
heads                 16
sectors/track         63
lba supported         8388608 sectors
lba48 not supported
dma supported
overlap not supported

Feature                      Support  Enable    Value           Vendor
write cache                    no       no
read ahead                     no       no
Tagged Command Queuing (TCQ)   no       no      0/0x00
SMART                          no       no
microcode download             no       no
security                       no       no
power management               yes      yes
advanced power management      yes      no      16384/0x4000
automatic acoustic management  no       no      0/0x00  0/0x00

上記の場合,ad0 デバイスの詳細を表示しています.VMware の HDD だからか,シリアル,ファームはあまり意味の無い数字になってしまっていまが,通常であれば有意義な情報が表示されるでしょう.

ここでのマトメ

atacontrol list は接続されている ATA チャネル,デバイスの一覧を表示する.
atacontrol detach は指定した ATA チャネルを切り離す.
atacontrol attach は指定した ATA チャネルを接続する.
atacontrol mode は指定したデバイスの転送モードの表示,変更を行う.
atacontrol cap は指定したデバイスの詳細情報を表示する.

atacontrol で Software RAID

前述の通り,atacontrol では ATA デバイスの情報表示,管理が出来る事を理解したかと思います.
ここでは,atacontrol のキモである,Software RAID の作成,削除,管理について触れたいと思います.

atacontrol での RAID の説明の前に,ブートドライブとしてこれら RAID を使いたい場合,Promise FastTrak のような ATA RAID カードを利用するか,RAID レベルが RAID1 又は SPAN である必要があります.ブートドライブとして利用しない場合は特に注意は必要ありません.

atacontrol で RAID0

まずは,RAID レベルの少ない順からと言う事で,RAID0 ディスクの作成を行いたいと思います.RAID0 についての詳しい事は 用語集:RAID 又は,やっぱり google 先生に聞いてもらうとして,以下に簡単に説明します.
RAID0 は複数の HDD を合計して大きな1つの HDD に見せる技術です.ただ 1つに見せるだけでは無く,書込みの際にデータを分散して書き込みますので,1本の HDD 速度を上回るパフォーマンスを得る事が出来ます.ただし,欠点として,どれか 1でも HDD が故障した場合に,データは全て失われる事になります.
利用する箇所としては,一時的なスプール領域や,マルチメディアデータを加工する際の領域として良く利用されています.
注意する点として,RAID0 ディスクを作成する場合,同容量のディスクを用意する必要がある点です.サイズが違うディスクを利用する場合,一番容量小さいサイズのディスクと同じ容量しか使われない点も注意が必要です.

実際に RAID0 ディスクを作成してみましょう.RAID0 ディスクの作成には atacontrol create を利用します.

geom# atacontrol create RAID0 512 ad1 ad3
ar0 created

上記のように atacontrol createRAID0 を付け,インタリーブ間隔 512 を付けてから,RAID0 とするデバイス名を順に並べていきます.インタリーブ間隔とは,複数のディスクを同時に利用するセクタ数です.512 に指定した場合,512 / N でストライプサイズが決定されるようですが,試した限りではストライプサイズは最高で 256 までとなるようでした.
エラーが無ければ ar0 created と表示され,以降 ar0 を RAID0 ディスクとして利用して行きます.複数の RAID ディスクを作成した場合,arN と N が増えていきますので注意して下さい.
作成出来た RAID0 ディスクを利用するには,FreeBSD ハンドブック を参考にして下さい.
また,作成した RAID0 ディスクのステータスを表示するには,前項のとおり atacontrol status を利用します.

geom# atacontrol status ar0
ar0: ATA RAID0 stripesize=256 subdisks: ad1 ad3 status: READY

ATA RAID0 ディスクである事がわかり,ストライプサイズが 256byte で ad1,ad3 が RAID0 ディスクのサブディスクとして利用されている事がわかります.

RAID0 ディスクのサブディスクが故障する等利用が出来ない状態になった場合に atacontrol status を実行すると次の通りに表示されるでしょう.

geom# atacontrol status ar0
ar0: ATA RAID0 stripesize=256 subdisks: ad1 DOWN status: BROKEN

先にも述べましたが,このような状態になった場合,RAID0 ディスク上のデータは完全に失われます.その際は,作成された arN を削除し,新たに RAID ディスクを作成する必要があります.

geom# atacontrol delete ar0

atacontrol delete は atacontrol で作成した RAID ディスクを無効化し,arN を削除するコマンドです.引数には,存在する arN を指定する必要があります.

atacontrol で RAID1

atacontrol による RAID ディスクでは一番利用される形態の RAID レベルかと思われます.詳しい説明はやはり google さんに聞いてもらうとして,簡単に以下に説明します.
RAID1 は通常 mirror ディスクと呼ばれ,複数のディスクにまったく同一の内容を記録する方式です.その為,物理的に 1台の HDD が故障したとしても,同じ RAID グループにあるディスクが無事ならば,そのままオペレーションが可能です.
欠点としては,速度が通常のディスクと同一の速度(又は多少下回る)点と,300GB の HDD 2台 で RAID1 とした場合,利用可能領域は 300GB と,搭載量に比べ 1/N の容量になってしまう点です.
ただし,1U ラックマウントサーバのような,OS 及び少しの作業領域だけを用意する場合にはメインで使われている形態かつ,片方のディスクが故障しても,故障したディスクを正常なディスクと交換し,RAID のリビルドを行う事で稼働時間を長く出来る点は見逃せないでしょう.

実際に atacontrol で RAID1 ディスクを作る場合,次のようにします.

geom# atacontrol create RAID1 ad0 ad2
ar0 created

成功した場合,arN created が返る点は RAID0 ディスク作成時と同様です.こちらも atacontrol status で RAID ステータスの確認が出来ます.

geom# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad0 ad2 status: READY

デバイス ar0 が RAID1 ディスクとして利用可能で,サブディスクとして ad0,ad2 が利用されています.ステータスは READY ですので,正常な状態だという事がわかるかと思います.
あとは,通常のディスクと同じようにファイルシステムを作成し,マウントして下さい.
ディスクの不良等で,RAID1 ディスク内の障害が発生した場合,こちらも atacontrol status で確認する事が出来ます.

geom# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad0 DOWN status: DEGRADED

上記の場合,ad2 になんらかの不良があり,mirror をとる事が出来ずに DEGRADED 状態である事がわかります.通常はこのままでもオペレーションは可能ですが,片肺運転ですので ad0 が故障したら大事なデータが失われる事になります.
そうなる前に,RAID1 ディスクの再構成が必要になります.RAID1 の再構成には,atacontrol detachatacontrol attachatacontrol addspareatacontrol rebuild が必要になります.コンピュータを停止しても問題ない場合は停止してしまい,故障したディスクを交換してからブートする事で,detachattach の手順の省略が可能です.また,既に予備の HDD を別の場所に接続している場合も detach 及び attach は不要です.

今回の構成では,ATA チャネルは 2つあり,それぞれの Master,Slave に HDD が接続されていましたが,ad2 が壊れてしまっています.

geom# atacontrol list
ATA channel 0:
    Master:  ad0 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad1 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
ATA channel 1:
    Master:      no device present
    Slave:   ad3 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4

この様な状態の場合,まずは壊れた ad2 を切り離す必要があります.ad2 は ata1 に接続されていますので,まずは ata1 を切り離します.

geom# atacontrol detach ata1

こうする事で,ata1 ごと ad2 の切り離しが行われます.この状態で,故障したディスクを交換します.リムーバブルケースの場合は簡単に出来るかと思いますが,ケースを開けなければならない場合,一旦シャットダウンを行うほうが安全でしょう.
交換後,再度 ATA チャネルを接続し,新しい HDD が認識するかを確認します.

geom# atacontrol attach ata1
Master:  ad2 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
Slave:   ad3 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4

上記のように,ad2 が復活すると,RAID の再構築が可能になります.RAID の再構築は次の手順で行います.

geom# atacontrol addspare ar0 ad2

ar0 に ad2 というスペアを追加するコマンドが上記のコマンドになります.atacontrol で確認すると,ディスクが追加されている事がわかるかと思います.

geom# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad0 ad2 status: DEGRADED

サブディスクとして,ad0,ad2 がありますが,ステータスは DEGRADED の状態です.この後,リビルドコマンドを発行する事によって,RAID の再構築が始まります.

geom# atacontrol rebuild ar0

エラーが表示されず,コマンドプロンプトに戻ってきた場合,リビルド処理の要求は成功し,バックエンドでリビルド処理が行われています.リビルドステータスも atacontrol status で確認が可能です.

geom# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad0 ad2 status: REBUILDING 19% completed

上記の場合,リビルド中で 19% リビルド処理が完了している事がわかるかと思います.

atacontrol で RAID0+1

RAID には,RAID0 と RAID1 を組み合わせた RAID0+1 (RAID10) というレベルがあります.実現方法は様々あるようですが,FreeBSD の atacontrol での RAID0+1 は,RAID0 ディスクを2つ作成し,その RAID0 ディスク 2つを RAID1 でミラーリングする方式を採用しているようです.
利点は RAID1(mirror) の冗長性と,RAID0(stripe) の速度を両立出来る事です.RAID0 ではディスク不良があった場合,データは全て失われますが,RAID1 のミラーリングも行っている為,1つのディスクが不調でもオペレーションの続行が可能になります.
欠点として,使えるディスク容量が,搭載量の 1/2 になってしまう点です.この点から,後述する RAID5 が好まれる結果となっていますが,ディスクへの読み書き速度は RAID5 とは段違いに速い点もあり,高速性と安定性が要求される箇所で利用されています.

実際に atacontrol で RAID0+1 を作成する場合,以下のように実行します.

geom# atacontrol create RAID0+1 512 ad0 ad1 ad2 ad3
ar0 created

上記コマンドを実行する事で,RAID0+1 が作成出来ます.512 はインタリーブサイズで,RAID0 の時と同様です.また,どのディスクが組みになるかは dmesg 又はコンソール画面に次のように表示される事で把握出来るでしょう.

ar0: 8191MB <Intel MatrixRAID RAID0+1 (stripe 128 KB)> status: READY
ar0: disk0 READY (master) using ad0 at ata0-master
ar0: disk1 READY (master) using ad1 at ata0-slave
ar0: disk2 READY (mirror) using ad2 at ata1-master
ar0: disk3 READY (mirror) using ad3 at ata1-slave

上記の場合,ad0,ad1 が1ペアで,ad2,ad3 が1ペアになります.atacontrol detach を行う予定がある場合,組み合わせに注意する必要があります.
ディスク不良等で,RAID0+1 が壊れた場合,RAID1 と同様に RAID の再構築が可能です.

geom# atacontrol status ar0
ar0: ATA RAID0+1 stripesize=256 subdisks: ad0 ad1 ad2 DOWN status: DEGRADED

上記のように,ad3 デバイスが不調で DEGRADED 状態の場合,RAID1 の再構築と同様にスペアドライブを追加します.その後,atacontrol rebuild で再構築を行います.

geom# atacontrol addspare ar0 ad3
geom# atacontrol status ar0
ar0: ATA RAID0+1 stripesize=256 subdisks: ad0 ad1 ad2 ad3 status: DEGRADED
geom# atacontrol rebuild ar0
geom# atacontrol status ar0
ar0: ATA RAID0+1 stripesize=256 subdisks: ad0 ad1 ad2 ad3 status: REBUILDING 2% completed

と,再構築の方法は RAID1 の場合とまったく同様に行える事がわかると思います.

atacontrol で RAID5

atacontrol では先の RAID レベル以外にも,RAID5 が利用できます.RAID5 は,分散パリティ書込み方式の RAID で,最小で 3つの HDD が必要となります.データ,パリティ共に全てのディスクに分散されて書き込まれ,1つのディスクが不調になっても,残りのディスクにあるデータ,パリティから失われたデータを復元する事が可能です.
利点としては,利用効率の良さが挙げられます.使用可能容量が,搭載容量の 2/3 になり,ディスクの耐障害性もある為,ストレージ製品では RAID5 が一番多く利用されています.
欠点としては,パリティを算出する為の XOR 演算の負荷が高い為,書込み時の速度が遅くなってしまう点が上げられます.通常時の読み出し時は分散されて読み出されますので,まだ高速ですが,ディスク不良がある際の読み出しは,失われたデータを復元しながらの読み出しになる為,非常に遅くなってしまいます.ただし,ストレージ製品の場合は,演算チップを搭載した RAID チップセットですので,そこまでの低下はありません.
atacontrol の場合,基本的に CPU が全ての処理を行うため,ある程度余裕のある環境で使用した方が良いかもしれません.

実際に RAID5 ディスクを作成するには,以下のように行います.

geom# atacontrol create RAID5 256 ad0 ad1 ad2
ar0 created

こちらも今までと変わらず,RAID0+1 と同じように作成出来ます.ディスク不良時の RAID の再構築も同様の手順で行います.

geom# atacontrol status ar0
ar0: ATA RAID5 stripesize=256 subdisks: ad0 ad1 DOWN status: DEGRADED
geom# atacontrol addspare ar0 ad2
geom# atacontrol status ar0
ar0: ATA RAID5 stripesize=256 subdisks: ad0 ad1 ad2 status: DEGRADED
geom# atacontrol rebuild ar0
geom# atacontrol status ar0
ar0: ATA RAID5 stripesize=256 subdisks: ad0 ad1 ad2 status: REBUILDING 0% ompleted

RAID ディスクの削除

RAID0 で使用していて,片方が壊れた場合や,ただ RAID 環境をやめたい場合,RAID ディスクを削除する必要があります.削除しなくてもそのまま使えるのですが,ディスクの先頭に RAID ディスクであるというマークがついており,他の FreeBSD へディスクを移動した際に混乱が生じる可能性がある為です.
RAID ディスクの削除には,atacontrol delete を使用します.

geom# atacontrol delete ar0

これで,今まで ar0 として利用していた RAID ディスクは削除されました.RAID1 で利用していた場合,データはそのまま adN ドライブから利用が可能です.

ここでのマトメ

atacontrol create で RAID を作成する.
atacontrol rebuild で RAID の再構築を行う.
atacontrol delete で RAID ディスクを削除する.

最後に

atacontrol による ATA デバイスの確認,設定や RAID ディスクの作成を一通り説明しました.間違い等を発見した方は blog 等で指摘して頂けると助かります.

atacontrol は便利ですが,現在の FreeBSD には GEOM というフレームワークがあります.GEOM は,ATA HDD 以外に SCSI HDD でも使える,VFS 層とファイルシステム層の中間に位置する汎用的なフレームワークで,RAID ディスクの作成や,暗号化ファイルシステム,圧縮ファイルシステム等が作成,利用できます.
またこなれていない為,どこまで利用できるかは未知数ですが,今後は GEOM がメインになっていく物と考えられます.もちろん,atacontrol は,ATA デバイスの確認等で今後も残っていくでしょう.
現在,GEOM については試行錯誤しながら触っている段階ですが,ある程度理解できたら wiki に載せようかと考えていますので,応援をお願いします.



Hiroyuki Seino http://www.seichan.org/ http://www.seichan.org/blog/
Today:4 Yesterday:1 All:19657