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

前端之家收集整理的这篇文章主要介绍了多个文件可以存储在同一个块中吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一些块级操作,我想确保我不会破坏其他文件.在ext2 / 3/4文件系统中,多个文件可以存储在同一个块中吗?我的第一直觉是没有办法,但我想与社区核实.

解决方法

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

ext2 / ext3

说到ext2和ext3,超级块和inode结构被设计为允许块被分段. (参见:fs / ext2 / ext2.h和fs / 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)中准备了块碎片,但从未实现,因此强制碎片大小等于块大小. (见: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文件系统的块碎片.最有可能没有操作系统,实现它.

尽管如此,在开始块级操作之前检查超级块中的s_log_frag_size可能不是一个坏主意,因为您将是安全的.

EXT4

随着ext4,故事变得不那么麻烦,因为ext4不再允许块碎片化.用于存储片段大小的超级块字段已被赋予新作业,并且用于存储片段地址(重命名为i_obso_faddr)的iode字段已在源中标记为已过时.

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

猜你在找的C&C++相关文章