私の理解は、ディレクトリinodeが通常のファイルinodeと根本的に異なっていないことです。Ext4ディスクレイアウトそれだけです:
ディレクトリエントリ:したがって、ディレクトリは一連のデータブロックであり、各ブロックはディレクトリエントリの線形配列を含むと言う方が正確です。
ディレクトリエントリは、ファイル名とそのインデックスノードへのポインタを格納します。それでは、ドキュメントに各ブロックにディレクトリエントリが含まれていることがわかりますが、debugfs
ディレクトリinodeに保存されているファイル名とは異なる内容を報告するのはなぜですか?これは ext4 形式のフラッシュドライブのデバッグセッションです。
debugfs: cat /sub
�
.
..�
spam�spam2�spam3��spam4
これらのファイル名を保存することは不可能だと思い、inode_i_block
60バイトを超える非常に長いファイル名でファイルを作成しました。cat
inodeで実行するとdebugfs
ファイル名も表示されるため、長いファイル名がinodeに再び表示されます。
inode.i_block
60バイトのストレージスペースは、inodeで説明されているファイルタイプに応じてさまざまな方法で使用できます。通常、通常のファイルやディレクトリではファイルブロックインデックス情報として使用し、特殊ファイルでは特別な目的に使用します。
また、ファイル名が格納されているinodeへの参照はありません。 ハッシュツリーディレクトリ これは最新の実装部分です。そのファイルに何か欠けているような気がします。
主な質問は、ディレクトリ内のinodeにファイル名が含まれている場合は、そのデータブロックに何を格納するかです。
答え1
inode.i_block
ディレクトリエントリはデータブロックに保存されます。リンクしたドキュメントの「インラインデータ」と「インライン目次」を参照してください。
答え2
cat
結果ファイルコンテンツつまり、データブロックです。のように/bin/cat
。
cat
このコマンドは、inode 構造のバイトを端末に書き込む場合には役に立ちません。比較inode_dump
してstat
。
一部の文書では、歴史的にUNIXがこのデータを読み取ることを許可していることを伝えています/bin/cat
。これは、ユーザー空間でディレクトリエントリを一覧表示する元の方法でした。目次と項目ls
が開き、説明さread()
れます。使用法とは異なり、readdir()
カーネルはデフォルトのファイルシステム形式に関係なく、標準形式でエントリを提供します。
答え3
答え4
私はマンページの言語が混乱していると思いますが、debugfs catコマンドはinode自体の内容を表示しないと思います。多くの場合、マニュアルページに「inode filespec」が言及されていますが、これは読者がファイルの仕様がパス名またはinode番号になる可能性があることを思い出させる重複方法だと思います。マニュアルページから抜粋した次の内容を比較してみてください。
猫 文書仕様- inodeの内容をダンプします。文書仕様標準出力として。
統計資料 文書仕様- inode 構造の内容を表示します。文書仕様。
catがinode filespecの内容を表示するのではなく、「inode filespec」の内容を表示すると思います。ファイル名は inode ではなくデータ・ブロックに確実にリストされています。