フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【Linuxのしくみ】7章 ファイルシステム を読んで自分なりにまとめ

今回はこちらの書籍「[試して理解]Linuxのしくみ〜実験と図解で学ぶOSとハードウェアの基礎知識」 の7章 ファイルシステムについて、自己理解のために内容をかいつまんで要約します。素晴らしい書籍で理解が進むと思いますのでぜひご購入を検討ください。

ファイルシステムとは?

ファイルシステムはユーザ(アプリ、プロセス)がディスクにデータを書き込む時に使われる面倒なことを引き受けてくれる仕組みです。

本来であればディスク(物理ストレージ)に書き込む時には「どのブロック(位置)に何Byte書き込むのか」を規定しなければなりませんが、利用する時にいちいち宣言するのは面倒なのでファイルシステムを介することでその負担を排除しています。

f:id:lirlia:20200421185730p:plain

ファイルシステムはユーザにとって意味のある塊のデータを名前や位置、サイズなどのメタデータをくっつけてファイルとして管理しています。


ファイルシステムをもう少し細かく分けると共通ファイルシステム(VFS)個別ファイルシステム(xfs/ext4など)に分類できます。

f:id:lirlia:20200421191348p:plain

これが別れているのは、各ファイルシステムの実装が異なっていてもアプリからは同じインターフェース(システムコール)でアクセスできるようにVFSが吸収することを期待しているためです。

ファイルシステムの不整合

ファイルシステムは予期せぬシャットダウンなどを通じて不整合になることがあります。これを回避するためにファイルシステムにはジャーナリングコピーオンライトという仕組みが実装されています。

詳細は書籍をご覧ください。

ファイルの種類

Linuxのファイルの種類は以下の通りです。

  • 通常ファイル
  • スペシャルファイル
    • デバイスファイル…Linuxの概念。各種デバイスを扱うためのファイル
      • キャラクタデバイス…端末やキーボード、マウスなど
      • ブロックデバイス…ストレージデバイス

※Linuxではあらゆるものをファイルとして管理できますがNICは対象外です

さまざまなファイルシステム

メモリベースのファイルシステム

ストレージデバイスの代わりにメモリ上にデータを作成する「tmpfs」が該当します。このように他のファイルシステムと同じように管理されていますが、最終的にアクセスする先がメモリになっています。

f:id:lirlia:20200421191341p:plain

メモリは揮発性であることが多いためこの用途で使われる場合は再起動後にデータが全て削除されます。

ネットワークファイルシステム

ネットワークを介して繋がっているリモートサーバのファイルにアクセスするのがネットワークファイルシステムです。LinuxではNFSが有名です。

f:id:lirlia:20200421191805p:plain

仮想ファイルシステム

カーネルの情報を得たり、カーネルの挙動を変更するためのファイルシステムです。

名前 パス 用途
procfs /proc システム上のプロセス情報やハードウェア情報を格納
sysfs /sys /proc で保管されている情報に似た情報を格納し、ホットプラグデバイス固有のデバイス情報(ディスクやファイルシステム)を格納
cgroups /sys/fs/cgroups cgroupの情報を格納、管理

まとめ

この章では少しややこしいファイルシステムを整理しました。書籍にはより詳しい情報や、基礎的なため今回は端折った内容も豊富に掲載されていますので勉強の際はぜひお買い求めください。