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

麦克斯猫

我正在对一些块级操作进行编码,并且我想确保不要对其他文件进行重击。在ext2 / 3/4文件系统上,可以在同一块中存储多个文件吗?我的第一个直觉是拒绝,但我想向社区询问。

米基拉

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

ext2 / ext3

说到ext2和ext3,超级块和inode结构被设计为允许块被分段。(请参阅: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之前)中从未实现过块碎片化,从而迫使碎片大小等于块大小。(见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,wohle的故事就不再那么麻烦了,因为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 */

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

您可以在同一块中的互斥锁lock_guard之前添加代码吗

markdown表达式和结果可以在同一块中插入吗?

在SpecFlow中,您可以在同一步骤文件中存储多个钩子吗?

同一块的2个事务可以更新相同的状态键吗?

种子的最后一块对应于文件的最后一块吗?

在分配变量的同一块中返回新变量

AWK:if和条件语句在同一块中

可以将来自多个 .csv 文件(存储在同一文件夹中)的一列数据编译为一列吗?

如何在一块内存中连接多个结构?

在一块中包含多个图的图形标题

将“块前缀”添加到属于文件同一块的所有行

同一块硬盘上有多个独立的读/写头?

我可以将同一个Controller放入Angular的多个文件中吗?

可以让多个进程从同一个文本文件中读取吗?

我可以有一个仅用于文件的闪存驱动器,而另一块是可引导文件系统吗?

如何从 terraform 中同一块中的前一行引用变量?

在RMarkdown / Bookdown中给同一块中的两个图提供不同的标题

我可以为C ++ 11 std :: tuple预先分配一块内存吗?

将两个捕获子句合并在同一块中

如何在同一块中显示两个部分?

如何在 Javascript 的帮助下在同一块中拖放图像?

如何使用内联在同一块中的元素显示 Bootstrap 网格视图?

我可以运行包含SQL Server中的临时表的同一存储过程的多个实例吗?

如何更新一块中的字段

我们可以在文件中存储多个对象吗?

一次从一块内存中创建多个 Eigen::VectorXd

通过在PIG中的同一块内计算出的条件值在FOREACH块内进行过滤

RMarkdown:在同一块使用环多ggplots

在Jekyll中,我们可以将多个集合分组在同一个文件夹中吗?