gpt4 book ai didi

多个文件可以存储在同一个 block 中吗?

转载 作者:太空狗 更新时间:2023-10-29 17:03:10 25 4
gpt4 key购买 nike

我正在编写一些 block 级操作,我想确保我不会破坏其他文件。在ext2/3/4文件系统上,多个文件可以存储在同一个 block 中吗?我的第一直觉是说不行,但我想与社区核实一下。

最佳答案

这个问题很难回答。也许正确的答案在理论上可能是肯定的,但在实践中不是。

ext2/ext3

就 ext2 和 ext3 而言, super block 和 inode 结构被设计为允许 block 被分割。 (参见:fs/ext2/ext2.hfs/ext3/ext3.h)

此处给出的 fs/ext3/ext3.h 的简短片段:

struct ext3_super_block {
/*00*/ __le32 s_inodes_count; /* Inodes count */
__le32 s_blocks_count; /* Blocks count */
__le32 s_r_blocks_count; /* Reserved blocks count */
__le32 s_free_blocks_count; /* Free blocks count */
/*10*/ __le32 s_free_inodes_count; /* Free inodes count */
__le32 s_first_data_block; /* First Data Block */
__le32 s_log_block_size; /* Block size */
__le32 s_log_frag_size; /* Fragment size */

// ...

struct ext3_inode {
__le16 i_mode; /* File mode */
__le16 i_uid; /* Low 16 bits of Owner Uid */

// ...
__le32 i_faddr; /* Fragment address */

虽然准备好了,但至少在 linux 内核(直到版本 3.13)中, block 碎片从未实现,强制碎片大小等于 block 大小。 (参见:fs/ext3/super.c)

if (blocksize != sbi->s_frag_size) {
ext3_msg(sb, KERN_ERR,
"error: fragsize %lu != blocksize %u (unsupported)",
sbi->s_frag_size, blocksize);
goto failed_mount;
}

Afaik GNU/Hurd 也没有实现 ext2/3 文件系统的 block 碎片。很可能不会有操作系统来实现它。

尽管如此,在开始 block 级操作之前检查 super block 中的 s_log_frag_size 可能不是一个坏主意,因为这样可以确保安全。

ext4

有了 ext4,整个故事就变得不那么麻烦了,因为 ext4 不再允许 block 碎片化。用于存储片段大小的 superblock 字段已被赋予新的工作,用于存储片段地址的 iode 字段(重命名为 i_obso_faddr)已在源代码中标记为已过时。

struct ext4_inode {
__le16 i_mode; /* File mode */
__le16 i_uid; /* Low 16 bits of Owner Uid */
// ...
__le32 i_obso_faddr; /* Obsoleted fragment address */

关于多个文件可以存储在同一个 block 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30133149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com