我一直在研究 ext2 文件系统和 inode,但我不太了解一些事情。
一个inode有多大?tune2fs 的输出表明我的系统是 256,那是 256 字节吗?
大目录如何存储?据我了解,目录在文件系统上表示为一个 inode,其内容是表示目录内容的文件名和 inode 编号列表。内容是否存储在 inode 本身中,或者在这种情况下,它们是否以与文件数据相同的方式存储为“数据”?
一个inode有多大?
inode 是包含有关文件/目录等信息的元数据。inode 结构的大小在未修改的标准内核中是每个 inode 128 字节。
tune2fs 的输出表明我的系统是 256,那是 256 字节吗?
创建文件系统时,您可以更改 inode 大小。某些 Linux 发行版可能会更改该值,并且某些 ext2 创建工具默认具有其他 inode 大小。例如,mke2fs 的默认值为 256。
您可以手动执行以下操作:
mke2fs -I 128
Run Code Online (Sandbox Code Playgroud)
获取 128 个字节的值。永远不会少于那个。您可以使用 -O resize_inode更改该值
总而言之:最少 128 个字节。
大目录如何存储?据我了解,目录在文件系统上表示为一个 inode,其内容是表示目录内容的文件名和 inode 编号列表。内容是否存储在 inode 本身中,或者在这种情况下,它们是否以与文件数据相同的方式存储为“数据”?
目录被标记为 ext2 inode 结构的第一个值中的目录,即“i_mode”。在内核中:
struct ext2_inode {
__le16 i_mode; /* File mode */
?
Run Code Online (Sandbox Code Playgroud)
【内核中的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 */
Run Code Online (Sandbox Code Playgroud)
目录 inode 指向一个列表,该列表位于数据部分,其中包含目录条目结构的列表。每个结构体都包含 5 个变量:
该结构重复的次数与目录中的文件数相同。
抱歉,如果有任何语法错误:D