Linux とストレージ・エコシステム

柔軟なストレージのための開かれたプラットフォーム

Linux はスイス・アーミー・ナイフのように万能なファイルシステムというだけでなく、デスクトップ向けおよびサーバー向けの多種多様なストレージ技術を備えています。ファイルシステムに限らず、Linux には世界最高レベルの NAS および SAN 技術、データ保護、ストレージ管理、クラウドのサポート、SSD ストレージのサポートが統合されています。Linux ストレージ・エコシステムの概要、そしてサーバー市場で Linux が最も大きなシェアを占めている理由を学んでください。

M. Tim Jones (mtj@mtjones.com), Platform Architect, Intel

author photo - M. Tim JonesM. Tim Jones は組み込みソフトウェアのエンジニアであり、『Artificial Intelligence: A Systems Approach』、『GNU/Linux Application Programming』(現在、第 2 版です) や『AI Application Programming』(こちらも現在、第 2 版です)、それに『BSD Sockets Programming from a Multilanguage Perspective』などの著者でもあります。技術的な経歴は静止軌道衛星用のカーネル開発から、組み込みシステム・アーキテクチャーやネットワーク・プロトコル開発まで、広範にわたっています。彼は Intel に勤務していて、コロラド州ロングモン在住です。



2011年 3月 29日

Linux には、さまざまな顔があります。そして Linux が持つ強力さは、極めて多岐にわたる使用モデルを柔軟にサポートできるところにあります。けれども、そのなかでもとりわけ重要な Linux の強みは、ストレージ分野の中心的な役割を果たしているところです。Linux とストレージと言えば、DAS (Direct Attached Storage) や最新のファイルシステムを思い浮かべるのが通常ですが、Linux とストレージには、見た目よりも遥かに大きい価値があります。Linux は、安定しているだけでなく最先端を行く要素で構成されています。

この記事では、Linux をストレージ分野の中心に位置付けている多彩なストレージ技術について探ります。まずはその基礎、すなわちストレージ・アーキテクチャーから始め、それからスタック、機能、ファイルシステム、そしてその将来へと目を向けて行きます (図 1 を参照)。

図 1. この記事で詳しく探るストレージ・スタック
この記事で詳しく探るストレージ・スタック

ストレージ・アーキテクチャー

ストレージ・アーキテクチャー全体の鍵となるのは、ストレージをプラットフォームに接続する方法です。ほとんどのモデルは、以下の 3 つの一般的なアーキテクチャーに分けられます。

  • DAS (Direct Attached Storage: ダイレクト・アタッチト・ストレージ)
  • SAN (Storage Area Network: ストレージ・エリア・ネットワーク)
  • NAS (Network Attached Storage: ネットワーク・アタッチト・ストレージ)

当然、Linux はこの 3 つをすべてサポートし、これらのモデルの変化とともに進化してきました。

その他のストレージ・メディア

この記事では主にディスク・ストレージに焦点を当てますが、Linux がサポートする他の広範なデバイスも無視し難いものがあります。急速に姿を消しつつあるフロッピー・ディスク・ドライブから、CD-ROM と DVD の読み取り/書き込み装置、さらにはエンタープライズ・テープ・システムに至るまで、大容量ストレージ・デバイスのサポートに関しては、Linux を超えるものはありません。

図 2 に、ファイルシステムとストレージの場所を基に分類したモデルを示します。DAS はストレージをプラットフォームに直接接続するモデルです。大多数のストレージでは、このモデルを使用しています。SAN はストレージをプラットフォームから分離し、多数のブロック・ストレージ・プロトコルのいずれかによってアクセスできるようにします。NAS は、SAN と同様のアーキテクチャーですが、ファイル・レベルで動作する点が異なります。

図 2. 主要なストレージ・アーキテクチャー
主要なストレージ・アーキテクチャーを示す図

DAS (Direct Attached Storage: ダイレクト・アタッチト・ストレージ)

Linux は多種多様な DAS インターフェースをサポートします。これには、パラレル ATA、IDE (Integrated Drive Electronics)/ATA (Advanced Technology Attachment)、パラレル SCSI、ファイバー・チャネル (Fiber Channel) などの旧規格から、SAS (Serial Attached SCSI)、SATA (Serial ATA)、eSATA (external SATA) などの新しいストレージ・インターフェースも含まれます。さらに、USB3 (xHCI (Extensible Host Controller Interface)) や Firewire (IEEE 1394) などの高度なストレージ技術もサポートします。

SAN (Storage Area Network: ストレージ・エリア・ネットワーク)

SAN はブロック・レベルでストレージを連結し、複数のサーバーでストレージを共有できるようにします。共有されるストレージは、サーバーにはローカル・ストレージとして映ります。そのため、エンドポイントのストレージ・デバイスが、ストレージにクライアント・デバイス用の追加サービス (バックアップや複製など) を実装することができます。

SAN がサポートするプロトコルおよびインターフェースは多種多様です。Linux でサポートされる標準 SAN プロトコル (ファイバー・チャネルや、ファイバー・チャネルを IP プロトコル上で使えるように拡張した iFCP (internet Fiber Channel Protocol) など) はもちろんのこと、SAS、FCoE (Fibre Channel over Ethernet)、iSCSI (Internet SCSI) などの比較的新しいプロトコルや、iSER (iSCSI Extensions for RDMA (Remote Direct Memory Access))、InfiniBand 用に SCSI を拡張して RDMA 上で使えるようにした SRP (SCSI RDMA Protocol) といったドメイン固有のプロトコルまでサポートします。

Linux では Ethernet がストレージ・プロトコルとして完全に実用に供されており、この事実が Ethernet をストレージ・プロトコルとして使用する手法の威力と柔軟性を示しています。さらに、Linux では 10GbE (10-Gigabit Ethernet) も完全にサポートし、ハイパフォーマンス SAN を構築できるようにしています。また、ATA プロトコルをおなじみの Ethernet プロトコル上で使えるように拡張した ATAoE (ATA over Ethernet) などのプロトコルもサポートされています。

NAS (Network Attached Storage: ネットワーク・アタッチト・ストレージ)

最後になりましたが、NAS も同じく重要なアーキテクチャーです。NAS はネットワークを介してストレージを連結し、異種混合のクライアントがファイル・レベルでストレージにアクセスできるようにします。最もよく使用されているプロトコル、NFS (Network File System) と SMB/CIFS (Server Message Block/Common Internet File System) は、Linux で完全にサポートされています。

最初の SMB 実装は独自仕様でしたが、リバース・エンジニアリングにより Linux でサポートされるようになりました。その後の SMB の改訂は公に文書化され、Linux での開発が容易になっています。

Linux は、NFS に対してなされたさまざまな強化および拡張とともに進化を続けています。NFS は現在、ステートフルなプロトコルとなっており、データとメタデータの分離、およびデータ・アクセスの並列処理に対する最適化が盛り込まれています。「参考文献」には、NFS の進化について詳しく説明している記事へのリンクを記載してあります。Ethernet ベースの SAN と同じく、Linux での 10GbE サポートにより、ハイパフォーマンス NAS リポジトリーを実現できるようになっています。

その他のストレージ・アーキテクチャー

あらゆるストレージ・アーキテクチャーが DAS、SAN、NAS のいずれかに分類されるわけではありません。オープンな Linux では、簡単に新しい技術を開発することができます。Linux で最新のアルファ版技術を見つけることができるのは、この理由からです。

新しいものではありませんが、オブジェクト・ストレージ・アーキテクチャーも、言及しておく価値のある興味深いストレージ・アーキテクチャーです。オブジェクト・ストレージ・アーキテクチャーは、ファイルをそのメタデータから切り離し、ファイルのデータとメタデータをそれぞれ (データ・サーバー、メタデータ・サーバーに) 単独で保管します。こうして分離することには明らかなメリットがあります。その 1 つは、メタデータのボトルネックを最小化できることです (メタデータ・サーバーとのやりとりは、ファイルを見つけて開くときにしか必要になりません)。また、データを複数のデータにストライピングして並列アクセスを行うことにより、パフォーマンスも向上します。オブジェクト・ストレージは、Linux ではさまざまな形で実装されています。例えば、OSD (Object Storage Device) 仕様のサポートという形、あるいは Lustre (Linux clUSTER) および exofs (Extended Object File System) 内に実装されるという形もあります。

これと同様の CAS (Content-Addressable Storage) という技術では、データのハッシュを使用して、その名前とアドレスを識別します。FCS (Fixed-Content Storage) としても知られるこの技術には、重複するデータを見つけやすくなるというメリットがあります。ハッシュは (十分に強力であれば) キーとして入力されるデータが同じ場合にのみ同じ値が得られるはずなので、簡単に重複を排除 (デデュプリケーション) できるからです。この手法をサポートする Venti アーキテクチャーも、Linux に (Bell Labs の Plan 9 ディストリビューションと併せて) 含まれます。


ストレージ・サービス: 論理ボリュームの管理

ストレージの仮想化は、かつてはハイエンドのストレージ・システムならではの機能でしたが、今では Linux の標準機能となっています。Linux で使用できる最も重要なサービスの 1 つは、LVM (Logical Volume Manager) です。LVM は、ストレージ・アーキテクチャーの中で物理ストレージの上に位置する (ユーザー空間のツールを伴う) 薄い層であり、物理ストレージを管理しやすい 1 つ以上の論理ボリュームに抽象化します。例えば、物理ディスクのサイズを変更することはできませんが、論理ボリュームであれば、サイズを変更してスペースを追加したり、削除したりすることができます。

物理デバイスを論理デバイスに抽象化することが可能な LVM は、その能力を生かして、他のさまざまなストレージ機能を実現しています。例えば、ボリュームの読み取り専用スナップショットや読み取り/書き込み用スナップショット、パフォーマンスを目的とした複数ボリュームでのデータ・ストライピング (RAID (Redundant Arrays of Inexpensive Disks)-0)、複数ボリュームでのデータ・ミラーリング (RAID-1)、物理デバイス間でのボリュームのマイグレーション (オンライン状態でも可) などです。

ミラーリングを超えるデータ保護のために、Linux は md (multiple disks (複数のディスク) の略) を組み込み、豊富な RAID 機能を提供しています。md はソフトウェア RAID 機能を実装し、RAID-4 (パリティ・ブロックによるデータ・ストライピング)、RAID-5 (分散パリティ・ブロックによるデータ・ストライピング)、RAID-6 (分散および 2 重パリティ・ブロックによるデータ・ストライピング)、および RAID-10 (データのストライピングとミラーリング) をサポートします。

LVM はデバイス・マッパーというストレージ・コンポーネントを利用します。デバイス・マッパーは (特に注目すべき機能として) マルチパス機能を提供します。例えば、SAN 環境には一般に、SAN ファブリックに対するストレージ・インターフェースが複数あります。マルチパス機能によって特定のパスでの障害から保護されるため、エンドポイントと通信するパスが存在する限り、ストレージを使用可能な状態に保つことができます。


ストレージの機能

この数年間に、以下の比較的単純な機能がストレージ・スタックに追加されました。この 2 つは、ストレージ・エコシステムの進化に対応するための機能です。

  • データ保全性
  • SSD (Solid State Drive) のサポート

データ保全性

最初に紹介する変更は、エンタープライズ・ストレージ設定で一般商品化されたドライブの使用に対処するためのものです。エンタープライズ・クラスのドライブ (SAS ドライブ) は信頼性の点で優れている一方で、SATA ドライブはさまざまな要件で作成されており、特にコストに重点が置かれています。このことから SATA ドライブでは、エラーが検出されていないのに、いつのまにかデータが破損している「サイレント・データ・コラプション」と呼ばれる問題が起こる可能性があります。この問題を解決し、エンタープライズ設定で SATA ドライブをサポートするために、ディスク上のブロックに追加されるのがデータ保全性コードです (ディスクでは従来の 512 バイトのブロックの代わりに 520 バイトのセクターが使用されます)。さらに、ドライブ自体が書き込まれるデータを検証できることから、その保全性コードがデータと突き合わせられます。この方法は、ディスクへの書き込み時にエラーを検出できることから、すでに手遅れになってからエラーが見つかるという事態を回避することができます。

このメカニズムは、DIF (Data Integrity Field: データ・インテグリティー・フィールド) と呼ばれます。図 3 に示されているように、DIF は、データ・ブロックの CRC (Cyclic Redundancy Check: 巡回冗長検査)、参照タグ (通常は、LBA (Logical Block Addressing: 論理ブロック・アドレス) の一部)、そしてアプリケーションが定義するアプリケーション・タグが含まれる 8 バイトのトレーラーです。参照タグは、誤ったブロックへのデータ書き込みミスを検出するのに役立ちます。これ以外のエラーをソフトウェア・スタックで検出するには、アプリケーション・タグを使用することができます。例えば PDF 文書を書き込む場合、アプリケーション・タグを特殊な PDF タグを示す値に設定します。こうすれば、PDF の読み取り時に各ブロックのアプリケーション・タグを検査して、すべてのブロックが PDF タグを指定していることを保証することができます。DIF は、カーネルのバージョン 2.6.27 から Linux でサポートされています。

図 3. 512 バイトのセクターでの DIF 構造
512 バイトのセクターでの DIF 構造

SSD のサポート拡大

SSD の導入によって、ストレージ・エコシステムはさまざまな点で変化しています。これらのディスクは、回転式ディスクで見られるような大きなレイテンシーをある程度取り除くことから、CPU とのデータ・フローを維持する手段となります。けれども、SSD は消耗品であるという点で、HDD (Hard Disk Drive: ハード・ディスク・ドライブ) とは異なります。SSD 内のストレージには、限られた回数しか書き込むことができません (この回数は、テクノロジーによって決まってきます)。したがって、できるだけ効率的にデータを書き込むことが重要となります。さらに厄介なことに、SSD は内部でデータをシフトしなければなりません。それは、ガーベッジ・コレクションまたはウェアレベリングと呼ばれるプロセスで発生するエラーをできる限り抑えるためです。しかも、このプロセスは消耗品であるストレージへの書き込みという結果になるため、最小限にしなければなりません。

SSD にはもう 1 つ問題があります。従来のストレージでは、HDD はディスク上のデータが有効であるかどうかに関与しませんでした。ファイルシステムがデータを無効にしたとしても、悪影響を及ぼすことなく、そのデータをディスク上に残しておくことができました。けれども SSD では、そういうわけにはいきません。その理由は、ウェアレベリング要件です。そのため Linux では現在、破棄されたブロックを SSD に伝えるための機能をファイルシステムがサポートしています (カーネルのバージョン 2.6.29 の時点)。この機能により、SSD は破棄されたブロックをウェアレベリング・プロセスから除外できるため、ドライブの使用寿命が延びることになります。


ファイルシステム

Linux を他のオペレーティング・システムとはまさに一線を画したオペレーティング・システムとしているのは、その非常に豊富なファイルシステムの数々です。Linux には ext3 (third extended file system) や ext4 (fourth extended file system) などといった従来のクライアント・ファイルシステムも揃っていますが、最高水準の分散ファイルシステム、クラスター・ファイルシステム、および並列ファイルシステムの数々、さらには新しい概念でストレージ分野での新しい問題に対処する、これまでになかった最先端のファイルシステムもあります。

現時点での最先端のファイルシステムという点では、Linux は ZFS と BTRFS (Butter FS) の両方をサポートしています。この 2 つのファイルシステムはライバル関係にあり、「コピー・オン・ライト」セマンティクス (ブロックの直接書き込みを決して行わない方式) という共通の特徴を持ちます。さらに、どちらも同じく、データ・デデュプリケーション、内部データ保護 (RAID のような保護)、データおよびメタデータ・チェックサム、そしてその他のストレージ機能 (スナップショット) などをサポートします。

Linux では、分散ファイルシステムも数多く生まれています。その一例は、Lustre です。この超並列分散ファイルシステムは、何万ものノードをサポートし、ペタバイト規模のストレージ容量まで対応することができます。この 1 年の間に、これと同様の機能を提供する Ceph も Linux カーネルに導入されました。Linux での分散ファイルシステムには、他にも GlusterFS、GPFS (General Parallel File System) などがあります。

Linux には特化されたファイルシステムもあります。その例としては、NiLFS(2) (New Implementation Log Structure File System) などのログ構造化ファイルシステムや、exofs のようなオブジェクト・ベースのファイルシステムが挙げられます。Linux は多くの使用モデルをサポートすることから、リソースが限られている場合 (組み込みシステムなど) に使用するファイルシステムや、HPC (High-Performance Computing: ハイパフォーマンス・コンピューティング) などの低レイテンシー・アプリケーション向けファイルシステムも揃っています。組み込み分野でのファイルシステムには、YAFFS2 (Yet Another Flash File System version 2)、JFFS2 (Journaling Flash File System version 2)、UBIFS (Unsorted Block Image File System) などがあります。一方、HPC 分野でのファイルシステムには、pNFS (Parallel NFS)、Lustre、GPFS などがあります。


Linux ストレージの今後

オープンであること、そして大規模な開発者のコミュニティーから、Linux はこれまで通り、今後もファイルシステムおよび全般的なストレージ研究の対象であり続けるはずです。

ストレージにおける最新の変化の 1 つは、アーカイブ・データのストレージとしてコスト効果の高い、リモート・サービスを使用するようになってきていることです。多数のベンダーが、現在クラウド・ストレージとして知られる集中型リモート・ストレージへの効率的かつ透過的アクセスを (保護および帯域幅などの機能を対象とした) さまざまなサービス・レベル・アグリーメントで提供しています。Ubuntu One と Dropbox は、このようなクラウド・ストレージの例です。また、ローカル・ユーザー・ディレクトリーをわずかな料金でクラウドにバックアップできる、SpiderOak というサービスもあります。

Linux に近い将来登場すると考えられる他の機能には、大型セクター (512 バイトを超えるセクター) のサポート、予約されているものの、使用されていない容量がないようにするシン・プロビジョニング (この場合、公示されるストレージは物理容量を上回ります)、ストレージ・デデュプリケーション (ストレージの可用性を最大限にするため) があります。また、SSD のような速度と効率性に優れた新たなドライブを活用するために、さらに効率的なストレージ・スタックが出現する可能性もあります。ストレージ・エコシステムの進化の先に何が待ち構えていようとも、そこに最初に辿りつくのは Linux でしょう。

参考文献

学ぶために

製品や技術を入手するために

  • ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。

議論するために

  • My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=650377
ArticleTitle=Linux とストレージ・エコシステム
publish-date=03292011