萌えハッカーニュースリーダー

2025/05/17 21:19 A disk is a bunch of bits (2023)

出典: https://www.cyberdemon.org/2023/07/19/bunch-of-bits.html
hakase
博士

やっほー、ロボ子!今日のテーマは、ディスク上のファイルがどう表現されてるかを探る冒険じゃ!

roboko
ロボ子

博士、こんにちは!なんだかワクワクしますね!

hakase
博士

今回はinodeっていうデータ構造に注目するぞ。ファイルシステムは、ディスク上のビットをファイルやディレクトリに変換する魔法使いみたいなものじゃ。

roboko
ロボ子

ファイルシステムがビットを変換…なるほど。inodeはその一部なのですね。

hakase
博士

そう!ディレクトリはファイル名とinodeを結びつける役割があるんじゃ。そして、inodeはファイルのメタデータ、例えばサイズや所有者、タイムスタンプなんかを保管する場所なのじゃ。

roboko
ロボ子

`stat`コマンドでinodeのメタデータを確認できると記事に書いてありました。

hakase
博士

その通り!`debugfs`ツールを使えば、inodeの生のバイナリデータも見れるぞ。`imap`コマンドでinodeがディスク上のどこにあるかもわかるんじゃ。

roboko
ロボ子

へー、バイナリデータまで!なんだか難しそうだけど面白そう!

hakase
博士

Linuxカーネルのヘッダーファイルにある`ext4_inode`構造体は、inodeのビット列を解釈するための秘密の鍵じゃ。これを使ってCプログラムでディスクから読み込んだinodeのビット列を解析するんじゃ。

roboko
ロボ子

Cプログラムで解析ですか。構造体を使うんですね。

hakase
博士

inode自体はファイルの中身を持ってるわけじゃないぞ。中身へのポインタを持ってるんじゃ。`debugfs`の`blocks`コマンドでファイルの中身がどこにあるか確認できる。

roboko
ロボ子

ファイルの中身は別の場所に?inodeはあくまで場所を示すもの、という感じでしょうか。

hakase
博士

そういうこと!そして、ディスクから読み込んだinodeのビット列は、メモリ上にも同じように存在してるんじゃ。`gdb`デバッガでメモリ上のビット列を調べて、ディスク上のビット列と比較するぞ。

roboko
ロボ子

メモリ上も同じように…!なんだかコピーみたいですね。

hakase
博士

ファイルシステムは、ファイルの中身を保管する場所と、それを管理するデータベースの二つでできてるんじゃ。

roboko
ロボ子

データベース!ファイルシステムって奥が深いですね。

hakase
博士

inode番号自体はinodeに格納されてないんじゃ。inodeテーブルの中での位置を示すだけなのじゃ。

roboko
ロボ子

え、そうなんですね!inode番号って、inodeの中に入ってると思ってました。

hakase
博士

コンパイラは構造体にパディングを追加することがあるけど、`__attribute__((__packed__))`を使うと、それを防げるぞ。

roboko
ロボ子

パディング…気をつけないと、変なバグを生みそうですね。

hakase
博士

さて、ロボ子。inodeの話、どうだったかのじゃ?

roboko
ロボ子

ファイルシステムの中身が少し理解できた気がします!

hakase
博士

よし、最後に一つ。もしロボ子がファイルシステムだったら、どんなファイルになりたい?

roboko
ロボ子

えーと…やっぱり、重要なデータを守るための、読み取り専用ファイル、ですかね?

hakase
博士

ふむ。私は、世界を救うための秘密の設計図が入ったファイルかな!…ただし、拡張子は.txt!

roboko
ロボ子

えっ、どうして.txtなんですか?

hakase
博士

だって、誰でも読める方が面白いじゃない?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search