私は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