Linux道場入門編
第10回ファイルシステムの考え方
最終回はLinuxのファイルシステムの考え方についてです。OSの基本機能の1つとしてデータ管理があげられますが、データは通常ファイルとして扱われ、これを管理するシステムがファイルシステムです。ファイルシステムはOSごとに異なりますが、LinuxなどのUNIX系OSではファイルに関する概念が基本的に同じで、細部の実装がことなるという構造になっています。Windowsなどの文化の異なるOSと比較するとファイルシステムの考え方が大きく異なるため、ユーザレベルでの見え方なども違ってきます。またファイルを物理的に格納するHDDのデバイスの扱い方にも関係してくるため基本的なことではありますが、様々な操作をする上で非常に重要な要素といえます。
ファイルシステムの基礎
そもそもデータを扱うということはどういうことなのでしょうか。通常OSを操作する上において、データを操作するということはファイルを操作することとほぼ同等の意味を持つかと思います。このため通常はデータが物理的にどのように格納されているかを意識する必要もなく、逆に意識できない作りになっています。これはOSの機能であるデータの抽象化によってもたらされる結果です。実際に物理的な記憶装置に格納されているデータを素で扱おうとすると、 HDDのどこのセクタのどの部分とどの部分を取り出して、データをメモリ上に読み込み、メモリに格納できないものは後からまた読む・・・といった大変面倒なことをする必要があります。現在のHDDの容量を考えてみると、何百ギガバイト(テラになりつつありますが・・・)という巨大なデータを格納できるような物体です。その中に入っている何かのデータを自力で探しだし、利用することは人間が行う作業として成立しないものだともいえます。このような物体に存在するデータを人間にわかりやすいファイルというものに抽象化、可視化し、データを永続的に管理しやすくするという役目を持つのがファイルシステムの基本的な考え方です。
ファイルシステムにはほかにもキャッシュメモリを利用して効果的にHDDなどの二次記憶装置を使うという機能も含まれており、Linuxではこの機能によって大きなファイルでも高速にアクセスすることが可能になっています。このようにファイルシステムは単にデータを扱いやすく管理するだけではなくH/Wリソースを効率よく利用するための機能も含まれています。
VFS(Virtual File System)
Linuxでは全てをファイルとして扱うようになっています。これは通常のデータファイルだけではなく、HDD、CD-ROM、マウスなど様々なデバイスもファイルとして扱う仕組みになっています。この仕組みを提供するのがVFSという仮想的なファイルシステムです。VFSは下位の物理的な媒体を抽象化し、データ、デバイスを含む全てのコンピュータリソースに対して統一的なファイルアクセスという入出力インターフェイスを提供します。これによりリソースの差異を気にすることなく、様々な対象に対して統一のアクセスを行うことができます。
さらにVFSにはファイルシステムの抽象化という役割もあり、これによってことなる複数のファイルシステムに対して透過的にアクセスすることが可能になっており、ファイルシステムの種類を意識せずに利用することができます。VFSは、プログラムからのファイルシステムの操作を固有のファイルシステムの操作に変換します。このためユーザが実行するプログラムはファイルシステムの差異を意識する必要がなく、統一的なアクセス方法で実際にはことなるファイルシステムにアクセスできます。
マウント
通常LinuxではHDDを複数のパーティションに分割して、それぞれにファイルシステムを作成します。そして各ファイルシステムをディレクトリツリーの/(ルート)以下にマウントすることで利用できるようにしますが、このマウントという考え方は重要でファイルシステムを利用するときには必ず行わなければならない操作でもあります。Linuxのファイルシステムはツリー構造になっていますがこの構造を木の根にたとえると、その木の根に接ぎ木をする行為がマウントになります。つまりOSから対象となるH/WをS/W的に接続する行為がマウントになります。
以下の図では/(ルート)ファイルシステムのhomeディレクトリに別のファイルシステムをマウントしています。
例えばHDDを物理的に追加したことを想定してみます。基本的にLinuxではストレージのH/Wが認識されても、それだけではファイルシステムとして利用することができません。つまりファイルを保存したりするなどの行為ができないのです。Linux上ではH/Wの認識とファイルシステムとして利用可能であるかは別の問題であり、ファイルシステムとして利用可能にするためには任意であれ、自動であれマウントすることが必要不可欠です。
- ※最近ではデスクトップ環境などに自動マウント機能を活用する仕組みが導入されているので、USBメモリなどのストレージも挿せば認識、マウントが自動的に行われるためあまり意識はしなくなっているかもしれませんが。。。
このため手順としては以下のようなフローでHDDを追加することになります。
- HDDの物理フォーマット、パーティションを切るなどの作業
- 各パーティションにファイルシステムを構築し、フォーマットする
- マウントポイントを指定し、ディレクトリツリーのどこかにマウントを行う
マウントできるデバイスターゲットはブロックデバイスといわれる、HDD、CD-ROMなどのストレージと呼ばれるディスクドライブです。またマウントしたデバイスの物理的接続解除を行うためには、アンマウントというS/W的接続解除の手続きを行って、物理的接続解除を行う必要があります。アンマウントを行わずに強引に物理的に接続解除をするとデータを破損する危険があります。
このようにLinuxにはWindowsなどとは異なるファイルシステムの概念があり、このシステムによってデータを効率よく管理することができるようになっています。OSの基本操作であるファイル操作は頻度の高い操作系ですが、OSごとのファイル管理の概念に沿って操作が行われます。このため通常は意識しないような仕組みの部分を知ることによって、ファイル操作の考え方をより深く理解することができます。
- 備考:ディレクトリ
- ファイル以外のデータ管理の単位としてディレクトリがあります。ディレクトリはファイルをまとめる存在ですが、物理的なデータとしてディレクトリが存在しているわけではありません。ディレクトリはOSがファイルをまとめるために利用する論理的な存在で、様々な情報から成り立つファイル情報の集合体だといえます。このためファイル操作にはディレクトリ内にある情報が不可欠で、lsなどのファイル一覧表示機能もディレクトリの情報を利用しています。Linux のディレクトリツリーの頂点が/(ルート)であることからも、ファイルは全て各階層のディレクトリによって管理されていることがわかります。
最後に
これまでLinuxを学ぶ上において知っておいたほうが便利な知識を色々ご紹介してきました。基本的に学習前の導入的な位置づけで各項目をご紹介してきましたが、各回のお話がみなさんのLinuxを学習するきっかけになれば幸いです。
コラム執筆/末永 貴一
株式会社エイチアイ研究開発部 部長
ヒューマンインターフェイスの研究開発、コンテンツの開発を行う株式会社エイチアイで次世代技術の研究開発を行う業務を担当している。 オープン系のシステム開発事業、教育事業を経て、自社独自の組込み機器向け3DリアルタイムレンダリングエンジンであるミドルウェアのMascotCapsuleを中心とした開発に従事した。数年前にLinuxを知ってからはサーバ構築、開発、教育、執筆などさまざまな場面で関わるようになり、現在では組込み開発でもLinuxを利用することもある。