Linuxのカーネルの開発に関する世界観(ext2)です。
Linuxにおいて、ファイルツリーをマウントするためには、ファイルシステムを作成してストレージをフォーマットしておく必要がある。
この際に使われるファイルシステムには種類があり、Linuxではext2/3/4が一般的。WindowsではNTFS、LinuxとWindowsの両用ならexFATを使うのが一般的。
Linuxにおいて、ext4でフォーマットしたストレージにはさまざまなファイルを保存することができる。
ext4のベースになっているのはext2というブロック型ファイルシステムで、とても信頼できる。ext2は長い間使われてきた「試練を乗り越えてきたファイルシステム」と呼ばれ、旧来のブロック型の特徴を持つ。B-Tree型ファイルシステムに比べれば速度が落ちることもあるが、信頼性の上では抜群である。
ext2をベースにしたext3は、ext2に対してジャーナリング機構を追加したファイルシステムであり、パソコンの使用中に途中で電源を切ってもジャーナリングから復旧するため、ファイルシステムが矛盾を起こすことがない。そしてext4はさらに新しくなった最新のext2系列のファイルシステムである。
2024.09.19
(以下はブロックアルゴリズムとB-Treeアルゴリズム (2/3):Linuxファイルシステム技術解説(2) - @ITを参考に執筆しました。)
ext2はLinuxで標準的に使われるブロック型ファイルシステム。データをデータブロック(実際のデータが入る)やスーパーブロック(ブロックに関する関連情報)などを持ったブロックグループに分けて管理する。
ext2はBSD FFS(Fast File System)を元に開発された。古くからあるブロック型アルゴリズムを採用した伝統的なモデルによるファイルシステムで、ディスク上のデータをブロックに分けて記録する。
まず、ファイルシステムを作成する際、平均的なファイルサイズから予測してブロックを作成する(デフォルトでは4096バイト。1024バイトや2048バイトにすることもできる)。
ブロックグループは、複数のブロックがグループになったもの。
ブロックグループの構造は、まず最初に「ブートブロック」が記録され、その後は連続して「ブロックグループ」がひとつひとつ並んで(ブロックグループ0, ブロックグループ1, ブロックグループ2, ...のように)記録される。
ブロックグループには実際のデータが記録されるデータブロックのほか、「スーパーブロック」が含まれる。これは、ブロックやファイルシステムのサイズ・空き容量やi-node数などが含まれる、ブロックグループの関連情報のこと。
ext2では、ブロックグループ0のスーパーブロックに、パーティションのすべてのブロックグループに関するメタ情報が記録される。
また、ジャーナリングに対応したext3/4のようなファイルシステムでは、システムを途中で強制停止した場合でもファイルの整合性を保ち、壊れることが無い。
後日注記:ジャーナリングはとても便利。途中で強制終了した場合でも、ジャーナルから自動的に元のファイルシステムを復旧して問題なく起動してくれる。特にDebianでYouTubeを見ながらツイッターをやっていると、よく途中で画面が停止して何もできなくなることがある。こういう時は電源ボタンで強制終了。ジャーナリングのあるファイルシステムは、このような時でも問題がない。
(以下は「詳解 Linuxカーネル 第2版」を参考に執筆しました。)
Linux 2.6では、ext2/ext3のためにアクセス制御リスト(ACL)が実装された。従来のパーミッションによるアクセス制御だけではなく、事細かく権限とセキュリティを決められるようになった。
後日注記:ACLとよく似たものに、アクセス制御行列というものがある。これはアクセスを可能とするポリシーを行列(表)でまとめたもの。行を「ドメイン」(主体)と呼び、列を「オブジェクト」(対象)と呼び、ドメインのオブジェクトに対する「アクセス権」をそれぞれの項目の該当箇所とする。ただし、効率の問題から、アクセス制御行列がそのまま用いられることは少ない。ケーパビリティ・リストやACLが多くの場合用いられる。ACLはアクセス制御行列をそれぞれのオブジェクトに対するリストにしたものである。(詳しくは放送大学「コンピュータの動作と管理 ('17)」が参考になります。)
UNIXシステム管理(ユーザーとパーミッション)も参照のこと。
2024.03.17
2024.03.19-20編集
fsckはファイルシステムの整合性をチェックして修復するツール。正常にシャットダウンしなかった場合、ジャーナリングに対応していないとこれが実行される。
ハードディスクも参照のこと。
mkfsはファイルシステムを作成するコマンド。
たとえば、
# mkfs.ext2 /dev/sda1 # mkfs.ext4 /dev/sda3
とする。mkfs.ext2に-jをつけるとジャーナリングが有効になる(ext3)。
ファイルシステムをマウントする時は、ファイルシステムのタイプを-tで指定する。
# mount -t ext4 /dev/sdb1 /media/usb
詳しくは以下が参考になる。
UNIXシステム管理(ファイルシステム)も参照のこと。
ext2/3/4のファイル属性を表示・変更する。追記専用、変更不可、安全な削除、復旧可能など、さまざまな機能が使える。
(「[改訂第3版]Linuxコマンドポケットリファレンス」を参考に執筆しました。)
以下が参考になる。