ファイルシステムの構造

記事を書き直したので以下からどうぞ

https://bit.ly/3ypjKlE

下記の記事で概念的な内容は大体事足ります。実データで理解した人は続きをどうぞ

ファイルシステムは基本的に下記の構成をしています。

ファイルシステム = スーパーブロック + inodeテーブル + データブロック

スーパーブロック

ファイルシステムの管理する情報を持つデータ構造のことです。バックアップを除くと1つのファイルシステムに1種類(1つのスーパブロックと複数のバックアップの意)だけ存在します。

実際のスーパーブロックの内容は下記の通りです。省略しているので全部見たい人は自分でコマンドを叩いてみてください。

$ sudo dumpe2fs -h /dev/xvdf1
Filesystem UUID: ????????-????-????-*** ##ファイルシステムのUUID
Filesystem magic number: 0xEF53
Inode count: 524288 ##inodeの数
Block count: 2096635 ##ブロックの数
Block size: 4096 ##ブロックのサイズ(Byte)
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1023
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Filesystem created: Sat Oct 5 09:13:12 2019 ##ファイルシステム作成日
Last mount time: Sat Oct 5 09:14:29 2019 ##マウントした日
Last write time: Sat Oct 5 09:14:29 2019 ##最終書き込みを行った日
Inode size: 256

inode テーブル

inodeはファイルシステム上のオブジェクト(ファイル、ディレクトリ)に関する基本情報が格納されるデータ構造のことです。そのため、ファイルやディレクトリごとにinodeが存在します。では実際inodeを見てみましょう。

inode一覧(改行いれてます)

$ stat -c %F,%u,%g,%A,%x,%y,%z,%h,%B,%d,%i /mnt/test

ファイル所有者のユーザーID 0はrootユーザ: 0
ファイルのグループID 0はrootグループ: 0
ファイルモード(ファイルパーミッション):-rw-r--r--
最終 アクセス時間:2019-10-05 10:26:20.527294601 +0000
最終ファイル更新時(mtime): 2019-10-05 10:20:12.141786414 +0000
最終パーミッション変更時間: 2019-10-05 10:26:54.742320599 +0000
当該inode を指すハードリンクの数: 1
ファイルのサイズ(バイト数): 512
デバイスID(ファイルを格納しているデバイスを識別):12345
ファイルシステム内でファイルを識別する inode 番号: 14

wikipediaによると上記がPOSIX標準という規格で定められた、UNIXのファイルシステムが最低限持つ情報らしい。他にもファイルシステムによって追加の情報を持っている。

https://ja.wikipedia.org/wiki/Inod

ファイルシステムで使用されるinodeには次のBlockへのポインタを持っており、これにより高速にデータブロック(ファイル)にアクセスできる。なんで早いのかは2分木とか計算量オーダーとかでググってもらえれば。直感的には上から順番に検索するより、ポインタの矢印辿ったほうが見るデータが少なくなるよねってこと。

画像1

データブロック

データが保存されているブロックです。データブロック+ inode = ファイルと理解しています。実際のデータは馴染み深いですね

$ cat /mnt/test
testファイルに記載された実際のデータ: aaaa

この記事が気に入ったらサポートをしてみませんか?