在测试 Linux ext4 文件系统期间,我注意到它为常规数据文件分配了一个 inode 和多个数据块。但是inode位于块组0并且数据块位于块组中
数据文件是通过以下命令创建的:
sudo dd if=/dev/zero of=output_file bs=1M count=10
ext4 文件系统的块大小为 4k,索引节点大小为 256B。
块组的变化如下:
Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
...
24285 free blocks, 8182 free inodes, 1 directories, 8177 unused inodes
Free blocks: 8482-8485, 8487-32767
Free inodes: 11-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT, ITABLE_ZEROED]
...
32511 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 33025-65535
Free inodes: 8193-16384
创建数据文件后,对块组进行更改,如下所示:
Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
...
24285 free blocks, 8181 free inodes, 1 directories, 8177 unused inodes
Free blocks: 8482-8485, 8487-32767
Free inodes: 12-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT, ITABLE_ZEROED]
...
29951 free blocks, 8192 free inodes, 0 directories, 8192 unused inodes
Free blocks: 33025-34815, 37376-65535
Free inodes: 8193-16384
答案1
你实际上并没有指定一个问题;我猜你想问“这正常吗?”之类的问题。
稍加思考,您应该很快就会发现数据块的分配必须独立于 inode 的位置。
首先,考虑一个新创建的文件系统,其中仅放置了几个大文件。即使第一个大文件也可能消耗第一个块组的所有空闲块,因此必须有一种方法让文件跨越多个块组。
其次,如果 inode 必须放置在文件(或者文件的第一个块)所在的同一块组上,则意味着任何大于 2 个块组的文件将有效地消耗至少一个块中的所有 inode一组,如果一切完美的话可能是两个。这看起来效率低得荒谬。
因此,即使没有有关 ext4 文件系统内部工作原理的更多信息,我也建议是的,这是正常的。