恐竜本12章です。ディスクの構造やヘッドの動かし方の戦略、RAIDなどに関して述べられています。
磁気ディスクの構成要素
磁気ディスクは以下の構成要素を持つ。
- プラッター
- ディスクアーム
- トラック
- セクター
- シリンダー
プラッターはデータを記録する面のことで、CDのように薄い円盤状になっている。プラッターは動径方向にトラックと呼ばれる領域に区切られ、トラックを角度方向に区切ったものをセクターと呼ぶ。複数枚のプラッターのトラックをまとめてシリンダーと呼ぶ。ディスクの速度には転送レートとポジショニング時間の二種類がある。転送レートはドライブとコンピュータの間でデータが流れる速度のことである。ポジショニング時間はヘッドを読み取りたいシリンダーの位置まで動かすシーク時間と、読み取りたいセクターがヘッドの位置に来るまでかかる時間である回転レイテンシーからなる。
ヘッドとプラッターの隙間はミクロン単位であり、ヘッドがプラッターに触れるアクシデントが起きることがある。これをhead crashと呼び、これが起きた事によるダメージは修復不可能である。
ディスクとコンピュータは配線でつながっており、I/Oバスと呼ばれる。EIDE,ATA,SATA,USB,FC,SCSI等がある。バスでのデータ転送はコントローラーと呼ばれるプロセッサで行われる。ホストコントローラーはコンピュータ側のコントローラであり、ディスクコントローラーはディスクドライブに組み込まれている。
ディスクの構造
論理的にはディスクドライブは大きな一次元配列としてアドレスが割り振られる。多くの場合論理ブロックのサイズは512バイトであるが一部のディスクでは別のブロックサイズを持つよう低レベルフォーマットされている。また、ディスクの記録密度はconstant linear velocity (CLV)とconstant angular velocity (CAV)の二種類がある。CLVはトラックあたりのビット密度が一定である。この場合データの読み出し速度を一定にするためには、内側のトラックを読む時にディスクの回転速度を増加させなければならない。CAVでは外側の記録密度を減らし、回転速度が一定なら読み出し速度が一定になるようにしている。
ディスクスケジューリング
読み出したいデータのシリンダー番号のリストがわかっている時、どのような順番でデータを読むかを考える。シーク時間と回転レイテンシーを考慮して、ディスクからのデータ読み取り帯域を最大化したい。
FCFS (first come first served)スケジューリングではリストに入っている順番にデータを読む。リストにはヘッド位置を考慮しない読み取り要求が並ぶため、当然帯域は上がらない。
SSTF (shortest seek time first)アルゴリズムでは現在のヘッド位置に最も近いシリンダー番号を読取る。
SCANアルゴリズムでは、常時ヘッドが端から端まで動き続け、ヘッドが必要なデータの場所を通りかかったときにデータを読み込む。亜種として、Circular SCANスケジュールでは、ある端に到達したら反対側の端にすぐヘッドを動かしてスキャンを再開する。これは、ある端に到達した場合、直近ですでにデータを読み込んだ領域を通るので、読み込みたいデータの密度としては反対側の端に行くに連れて高くなるはずである、という推論に基づく。
LOOKやC-LOOKスケジューリングでは、SCANに似ているが端までわざわざスキャンせず、読みたいデータがそれ以降存在しない場合ヘッドをそれ以上動かさない。
ディスク管理
ディスクは出荷前に低レベルフォーマッティングという、ディスクをセクタに分けてディスクコントローラーがデータを読み取れるようにする作業が行われる。低レベルフォーマッティングではセクタそれぞれに特殊なデータ構造を書き込む。セクタはヘッダ、データ、トレイラーからなり、ヘッダとトレイラーはエラー訂正コード(ECC)を含んでいる。ディスクは使用前にパーティションに分け、論理フォーマッティングが行われる。論理フォーマッティングではファイルシステムのために必要なFATやinodeなどの情報を書き込む。また、効率を上げるため、ファイルシステムはブロックをまとめてクラスターを作成する。
コンピュータが動くためには最初に動かすプログラム(ブートストラップローダー)が必要である。このプログラムはread-only memory (ROM)に入っている。ブートストラップローダーはディスクからブートストラッププログラムを読み出して実行する。ブートストラッププログラムはディスク上のブートブロックと呼ばれる領域に入っている。ブートパーティションが存在するディスクをブートディスクという。Windows2000ではブートコードをハードディスクの最初のセクタに置いており、master boot record (MBR)と呼んでいる。
ディスクのブロックに欠陥が出た時、そのブロックをbad blockと呼ぶ。SCSIディスクなどでは、bad blockのリストを保持しており、bad blockへの参照が発生すると別のスペアにリダイレクトする。この方法をsector sparingやforwardingという。bad blockへの別の対処法として、sector flippingがある。これは、badとなったセクタを飛ばすようにセクタ番号をシフトする方法である。
RAID
RAIDは複数のディスクを使って故障に対する信頼性を得る手法である。100台のディスクを並べたとき、製品のMTBFが100000時間なら、41.66日に1個故障する計算となる。故障したディスクのデータは失われる。データを冗長化すると故障に対する耐性を得ることができる。データを2台のディスクにミラーリングしておき、それぞれのディスクが独立に故障するとする。故障したほうを交換し、交換時間内に他方が故障しなければ元通りになる。交換時間を10時間とすれば、両方が故障してデータをなくすまでの時間は57000年となる。
また、複数のディスクを使い、データを分散して書き込むと(データストライピング)、並列でディスクにアクセスして読み込めるので、全データを読み取るまでにかかる時間が短縮できる。ストライピングにはビットレベルストライピングとブロックレベルストライピングがあるが、後者がよく使われる。
RAIDには6種類ある。RAID0はたんにブロックレベルストライピングを行い、ビットの冗長化を行わない。当然障害耐性は無い。RAID1はミラーリング用のディスクを用意し、実効的に全容量の半分だけを使う。RAID2はECCを用いてビット冗長化を行う。RAID3ではビットレベルストライピングを行い、ECCではなくパリティビットを用いる。通常パリティビットはエラー検出しかできないが、ディスクコントローラーがどのセクタでエラーが出たかの情報を持っており、それと組み合わせてエラー訂正を行う。RAID4はブロックレベルストライピングを行う。エラー訂正にはパリティビットを使う。ディスクではビットレベルでデータを読むことはできず、ブロック単位でしか読めない。ブロックレベルストライピングを用いるほうがそれぞれのディスクを並列で動作させることができる点で速度的に有利である。RAID5はブロックレベルストライピングとパリティビットを使うが、パリティビットを保存する専用のディスクを用意せず、分散してパリティビットを保持する。RAID6ではP+Q冗長化スキームを使い、Reed-SolomonコードというECCを使う。
RAIDは物理的なエラーへの信頼性を与えるが、ソフトウェア的なエラーには対処できない。ZFSではチェックサムを使ってこの問題に対処している。
Tertiary storageの構造
ディスク以外のストレージとしてはDVDやCDがある。種類としては磁気光学ディスク、光学ディスク、phase change diskなどがある。また、書き込み回数もread-write disk、write-once, read-many-times (WORM) disk, read-only diskなどの区別がある。
また、テープ、SSD、ホログラフィックストレージ、MEMSなども存在する。
ディスクに対してはOSはread, write, seekを提供するが、テープに対してはseekではなくlocateを提供する。また、テープはデータが存在する領域の中間に書き込めない性質上、アペンドオンリーで扱われる。
robotic jukeboxは人手を介さずテープやディスクを交換する。ロボットアームで何千ものカートリッジを交換できる。これを用いて、古くアクセス頻度が低いデータをtertiary storageに移したりする。
これらtertiary storageは様々なアクセスレイテンシーを持っている。テープよりディスクのほうが速い。また、ジュークボックスが入る場合は格段に遅くなる。ディスクをジュークボックスで管理した場合、ランダムアクセス時間は10秒オーダー、テープをジュークボックス管理した場合は100秒オーダーとなる。また、信頼性も千差万別となる。tertiary storageは取り外しが効く分、破損もし易い。固定のディスクドライブのほうがtertiary storageより信頼性が高く、tertiary storageの中でも光学ディスクが磁気ディスクやテープドライブより信頼性が高い。一方で固定ディスクドライブはヘッドクラッシュが起きるとデータも失われるが、光学ディスクドライブの読み取り部が故障してもデータ自体は破損しない。
また、金額も千差万別である。DRAMの価格が下がっているように、磁気ディスクやテープドライブの価格も年々下がっている。容量あたりの価格で比較すると2008年時点では磁気ディスクの価格がテープカートリッジの価格に迫っている。
コメント