今回はこちらの書籍「[試して理解]Linuxのしくみ〜実験と図解で学ぶOSとハードウェアの基礎知識」 の7章 ファイルシステムについて、自己理解のために内容をかいつまんで要約します。素晴らしい書籍で理解が進むと思いますのでぜひご購入を検討ください。
ファイルシステムとは?
ファイルシステムはユーザ(アプリ、プロセス)がディスクにデータを書き込む時に使われる面倒なことを引き受けてくれる仕組みです。
本来であればディスク(物理ストレージ)に書き込む時には「どのブロック(位置)に何Byte書き込むのか」を規定しなければなりませんが、利用する時にいちいち宣言するのは面倒なのでファイルシステムを介することでその負担を排除しています。
ファイルシステムはユーザにとって意味のある塊のデータを名前や位置、サイズなどのメタデータをくっつけてファイルとして管理しています。
ファイルシステムをもう少し細かく分けると共通ファイルシステム(VFS)と個別ファイルシステム(xfs/ext4など)に分類できます。
これが別れているのは、各ファイルシステムの実装が異なっていてもアプリからは同じインターフェース(システムコール)でアクセスできるようにVFSが吸収することを期待しているためです。
ファイルシステムの不整合
ファイルシステムは予期せぬシャットダウンなどを通じて不整合になることがあります。これを回避するためにファイルシステムにはジャーナリングやコピーオンライトという仕組みが実装されています。
詳細は書籍をご覧ください。
ファイルの種類
Linuxのファイルの種類は以下の通りです。
- 通常ファイル
- スペシャルファイル
- デバイスファイル…Linuxの概念。各種デバイスを扱うためのファイル
- キャラクタデバイス…端末やキーボード、マウスなど
- ブロックデバイス…ストレージデバイス
- デバイスファイル…Linuxの概念。各種デバイスを扱うためのファイル
※Linuxではあらゆるものをファイルとして管理できますがNICは対象外です
さまざまなファイルシステム
メモリベースのファイルシステム
ストレージデバイスの代わりにメモリ上にデータを作成する「tmpfs」が該当します。このように他のファイルシステムと同じように管理されていますが、最終的にアクセスする先がメモリになっています。
メモリは揮発性であることが多いためこの用途で使われる場合は再起動後にデータが全て削除されます。
ネットワークファイルシステム
ネットワークを介して繋がっているリモートサーバのファイルにアクセスするのがネットワークファイルシステムです。LinuxではNFSが有名です。
仮想ファイルシステム
カーネルの情報を得たり、カーネルの挙動を変更するためのファイルシステムです。
名前 | パス | 用途 |
---|---|---|
procfs | /proc |
システム上のプロセス情報やハードウェア情報を格納 |
sysfs | /sys |
/proc で保管されている情報に似た情報を格納し、ホットプラグデバイス固有のデバイス情報(ディスクやファイルシステム)を格納 |
cgroups | /sys/fs/cgroups |
cgroupの情報を格納、管理 |
まとめ
この章では少しややこしいファイルシステムを整理しました。書籍にはより詳しい情報や、基礎的なため今回は端折った内容も豊富に掲載されていますので勉強の際はぜひお買い求めください。