大きなディレクトリはどのように保存されますか(1つのinodeまたは複数のinode?)

大きなディレクトリはどのように保存されますか(1つのinodeまたは複数のinode?)

私はext2ファイルシステムとinodeを調べてきましたが、いくつかはよく理解していません。

アイノードはどれくらい大きいですか?私のシステムでは、une2fsの出力は256で示されていますが、これは256ですか?

大きなディレクトリを保存する方法は?私が理解したところ、ディレクトリはファイルシステム内のinodeとして表示され、その内容はディレクトリの内容を表すファイル名とinode番号のリストです。内容はinode自体に保存されていますか?それとも、この場合、ファイルデータが保存されるのと同じ方法で「データ」として保存されますか?

ベストアンサー1

アイノードはどれくらい大きいですか?

Inodeは、ファイル/ディレクトリなどに関する情報を含むメタデータです。変更されていない標準カーネルでは、inode構造のサイズはinodeごとに128バイトです。

インデックスノード構造

私のシステムでは、une2fsの出力は256で示されていますが、これは256ですか?

ファイルシステムを作成するときにinodeのサイズを変更できます。一部のLinuxディストリビューションではこの値を変更できますが、一部のext2生成ツールはデフォルトで異なるinodeサイズに設定されています。たとえば、mke2fs のデフォルト値は 256 です。

以下を手動で実行できます。

mke2fs -I 128

128バイト値を取得します。これより少なくありません。この値を変更できます。-O resize_inodeの使用

全体的に:少なくとも128バイト。

大きなディレクトリを保存する方法は?私が理解したところ、ディレクトリはファイルシステム内のinodeとして表示され、その内容はディレクトリの内容を表すファイル名とinode番号のリストです。内容はinode自体に保存されていますか?それとも、この場合、ファイルデータが保存されるのと同じ方法で「データ」として保存されますか?

そのディレクトリは、ext2 inode構造の最初の値「i_mode」にあるディレクトリとして表示されます。カーネルから:

struct ext2_inode {
    __le16  i_mode;     /* File mode */

[カーネルのfs/ext2/ext2.hがすべてを説明します。]

変数は次の値を使用できます。

/* inode: i_mode */
#define EXT2_S_IFMT 0xF000  /* format mask  */
#define EXT2_S_IFSOCK   0xC000  /* socket */
#define EXT2_S_IFLNK    0xA000  /* symbolic link */
#define EXT2_S_IFREG    0x8000  /* regular file */
#define EXT2_S_IFBLK    0x6000  /* block device */
#define EXT2_S_IFDIR    0x4000  /* directory */
#define EXT2_S_IFCHR    0x2000  /* character device */
#define EXT2_S_IFIFO    0x1000  /* fifo */

ディレクトリinodeは、ディレクトリエントリ構造のリストを含むデータセクションのリストを指します。各構造には5つの変数が含まれています。

  • inode ->この項目のinode番号。
  • Rec_len -> ソートに使用されます。
  • file_type - >ファイルタイプ、以前に貼り付けたタイプとほぼ同じです:D。
  • name_len ->名前の長さ(バイト単位)。
  • 名前 - >最大長は255バイトです。

この構造は、ディレクトリ内のファイル数だけ繰り返されます。

文法エラーがある場合は申し訳ありません:D

おすすめ記事