目次


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

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

Comments

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 つをすべてサポートし、これらのモデルの変化とともに進化してきました。

図 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 構造
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 Storage Networking による「Demystifying Storage Networking: DAS, SAN, NAS, NAS Gateway, Fibre Channel, and iSCSI」を読んで、ストレージ・アーキテクチャーの違いについて詳しく学んでください。
  • Linux で進化を続ける NFS は、現在、スケーラビリティーとパフォーマンスを向上させる pNFS と呼ばれる NFS の並列形態をサポートしています。Linux での NFS の進化についての詳細は、Tim の記事「ネットワーク・ファイルシステムと Linux」(developerWorks、2010年11月) を読んでください。
  • この記事では、プラットフォームでのストレージ仮想化手段として LVM を取り上げました。LVM2 (LVM の 2 番目のバージョン) についての詳細は、「LVM2 Resource Page」で説明しています。LVM2 が使用するデバイス・マッパーについての詳細は、「Device-mapper Resource Page」を参照してください。このページでは、マルチパス操作用のユーザー空間のツールについても紹介しています。
  • T10 DIF は、ストレージ・システム内でエンドツーエンドの保護を行います。DIF トレーラーとそれを使用するのが妥当な理由については、最初に T10 を提案した、T10/03-224r0 で詳しく説明しています。
  • この記事で取り上げたファイルシステムについては、Tim の他の記事で詳細を学ぶことができます。
  • 分散複製型ブロック・デバイス (DRBD) は、2 台のサーバー間でボリュームを保護する単純な手段となります。DRBD は単一の物理ボリュームで動作し、従来の TCP/IP ネットワークを介してそのボリュームを相手側ホストに複製します。DRBD について詳しく学ぶには、「分散複製型ブロック・デバイス、DRBD による高可用性」(developerWorks、2010年8月) を読んでください。
  • CAS システムは、単純なデデュプリケーションによってデータを効率的に保管する手段です。CAS の興味深いアプリケーションには、データが重複することが一般的な仮想環境での使用が挙げられます。詳細については、「Experiences with Content Addressable Storage and Virtual Disks」(Anthony Liguori、Eric Van Hensbergen 共著) を読んでください。
  • Linux は、EHCI (Enhanced Host Controller Interface) ならびに新しい xHCI (高速 USB 3.0 デバイス向け) をサポートします。
  • Linux がサポートするディスク接続標準には、SCSIIDE/EIDE (Enhanced IDE)/ATASASSATAファイバー・チャネルなど、さまざまな種類が揃っています。
  • この記事では、ハイパフォーマンス・クラスター・ファイルシステムの GPFS や超並列分散ファイルシステムの Lustre を含め、多数のファイルシステムを取り上げました。ファイルシステムにかけては、Linux は最適なオペレーティング・システムです。
  • SSD は、HDD の機械的内部構造を NAND フラッシュなどの半導体メモリーに置き換えます。SSD は従来の回転式ディスクよりも少ない電力要件で優れたパフォーマンスを実現します。現在、SSD は企業向けデバイスでも、消費者向けデバイスでも使用されています。
  • developerWorks Linux ゾーンで、Linux 開発者および管理者向けのハウツー記事とチュートリアル、そしてダウンロード、ディスカッション、フォーラムなど、豊富に揃った資料を探してください。
  • Twitter で developerWorks をフォローするか、developerWorks で Linux に関するツイートのフィードに登録してください。
  • ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。

コメント

コメントを登録するにはサインインあるいは登録してください。

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