问题标签 [ext2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
208 浏览

linux - 块大小的大小限制

根据 Ext2 的 wiki 条目,“在 Linux 中,块大小受架构页面大小的限制。”

我认为这个限制是由于在典型的文件系统(比如 ext2)中数据是根据页面处理的,因此它在使用架构页面大小时提供了更多的性能。

我的问题是:你能指出这个限制的具体实施位置吗?所以我将无法格式化小于页面大小(通常为 4k)?

谢谢

0 投票
1 回答
2495 浏览

c - 如何从 ext2 块组中读取 inode 表?

在为我的爱好操作系统编写 ext2 驱动程序时,我遇到了从块组描述符读取 inode 表的问题。

块组描述符的第三个字段是该组的 inode 表的块 ID。在我的文件系统根目录的情况下,它返回为 64。超级块位于块 1,即卷开头之后的 1024 个字节。块大小是 1024 字节,但我的磁盘扇区大小是 512。所以要访问超级块,我从 lba 2 读取。

问题是当我尝试读取 inode 表时。如果它的块 id 是 64,我的块大小是 1024,磁盘扇区大小是 512,我不会从磁盘扇区 130 读取 inode 表吗?我这样做了,但是什么都没有……

给定有效的块组描述符,读取 inode 表的正确方法是什么?

0 投票
1 回答
984 浏览

filesystems - ext2 目录条目名称是否保证在有效文件系统上以空结尾?

我认为这将是一个简单的问题,但我找不到答案。我主要一直在阅读这些规格:

http://www.nongnu.org/ext2-doc/ext2.html

它似乎没有提到目录条目的名称是否应该以空值结尾。我认为它是未定义的。有一个 name_len 字段,因此无论如何您都可以轻松打印名称。

ext2 目录名称是否保证以空字符结尾?

我问是因为在我的爱好操作系统上测试我的 ext2 驱动程序时,我注意到当我打印一些目录名称时,最后会出现一些垃圾字符。如果我只是打印 name_len 个字符,一切都很好,尽管如果它是空终止的会很好。

谢谢!

0 投票
4 回答
210 浏览

c - 使用 USB2 连接的 ext2 卷改善小文件读取时间

我是一个比 Linux 程序员更有经验的 Windows 程序员。抱歉,如果我遗漏了一些明显的东西。

我需要在运行 Linux 的 USB2 附加 ext2 卷上读取超过 10,000 个小文件(~2->10k)。该发行版是自定义的并运行busybox。

我希望得到改进这些写作的技巧。我正在做以下事情

因为我的阅读量很小,所以这一次 read() 往往会在一个电话中完成这项工作

我能做些什么来提高性能吗?因为它是在 USB2(可移动)磁盘上运行的 Linux 自定义发行版,是否有任何明显的内核设置或我可能缺少的挂载选项?

谢谢!

0 投票
2 回答
1066 浏览

c - 将内核内存写入 ext2 块

对于大学作业,如果文件小于 60 字节,我们必须修改 ext2 文件系统以将文件存储在 inode 的块指针中,并在文件增长到大于该值时移动到常规块存储。

我从 2.6 linux 内核源代码(按照说明)复制了 ext2 代码,然后从那里开始。

当文件大于 60 字节时,我需要将当前在 inode 的块指针数组中的所有数据复制到实际块中。所以,我需要将内核内存写入 ext2 块。一个简单的调用在do_sync_write这里不起作用,因为它需要用户空间内存。

我已经查看了的实现,do_sync_write但我不确定如何复制它的功能,而是使用内核内存。

这是我当前对此特定部分的实现(不起作用):

编辑:

我查看了符号链接。基本上,ext2 具有“快速符号链接”的概念;即链接名称的长度小于 60 字节。如果它是快速符号链接,则数据将存储在块指针中。这很容易做到,我已经为常规文件实现了这一点。如果链接不是快速符号链接,则数据的处理方式与常规文件相同。我想我又回到了原点。

0 投票
2 回答
613 浏览

c - 向 ext2 文件系统添加挂载选项

我正在修改 ext2 文件系统以进行分配。我需要添加一个挂载选项,该选项将一直有效,直到文件系统被卸载。我已经将选项添加到选项枚举中,并且正在处理指定它的情况。

该选项是一个键/值对,因此该值需要存储在某个地方,但我似乎无法弄清楚在哪里。其他 ext2 键/值对选项存储在struct ext2_sb_info.

我无法修改struct ext2_super_blockstruct ext2_sb_info或者struct super_block因为它们没有在/usr/src/linux-source/fs/ext2.

写信给struct ext2_super_block'ss_reserved成员安全吗?还有其他地方可以存储这个值吗?

0 投票
1 回答
55 浏览

c - 存储子目录的引用

在项目中,程序必须将目录的每个子目录的引用/标识符存储在其变量(例如堆栈)中。即,一旦读取了目录,程序就不能对每个孩子再次执行路径查找。

我不太确定该怎么做。因为如果存储了inode编号,那么inode就无法访问相应的文件/目录吧?

将不胜感激一些指示

谢谢

编辑:我“不能再次执行路径查找”的原因.....线程正在以深度优先的方式读取文件系统树,当它读取目录时......其子项的标识符被保存以跟随它再次以深度优先的方式。为什么我保存标识符是因为已经读取的目录可能会被并发线程移动到文件系统的另一部分,并且移动目录下的子树可能不会被读取,因为树的那部分已经被遍历。

0 投票
1 回答
1378 浏览

windows - 是否有适用于 Windows 的用户模式 ​​ext2 文件系统库?

我希望找到一个 C/C++ 库,它可以从 Windows 的应用程序中从 ext 格式的卷中读取许多文件。我不需要以传统方式安装此卷,我只需要对文件进行 API 访问即可。只读就好。我的一个应用程序是唯一需要访问该卷的应用程序。

简而言之,我更喜欢不需要安装驱动程序的库,而不是可安装的 Windows 文件系统。我能够检测到磁盘何时到达、卷位置等。

对我来说最重要的是能够可靠地从卷中读取文件,而无需安装文件系统。

我不需要写支持

0 投票
3 回答
157 浏览

c - Delay required between a file created via external program using system() and opening it via open()?

I'm trying to create a TAR archive from my program and then opening the archive for further processing. I have a 2 second delay between calling system() and open(). So far, it works fine, but I'm not sure why the 2 second delay is necessary or if it's the correct solution.

Without the delay, I get error code 2 (ENOENT "No such file or directory") from the open() call. My first thought was the filesystem wasn't updating itself fast enough and open() couldn't find the file. But what if the system is really busy? Do I need a longer delay? Should I loop until open() succeeds instead of the delay? Is the problem something completely different?

UPDATE
The root filesystem is EXT2. /tmp is mounted in RAM using TMPFS. I'm using tar to create an archive, not extract contents of one. Essentially, my program is supposed to create an archive of some log files and send them over the network (that's why I open the archive after creating it).

0 投票
1 回答
994 浏览

filesystems - USB 上的 Ext2 文件系统

我正在使用 osdev wiki 作为对操作系统进行编程的资源。到目前为止,我有一个 2 阶段引导加载程序,具有非常小的 32 位保护模式内核。

但是,对于引导加载程序,我一直在写入特定扇区并从特定扇区读取,并且我决定以“正确的方式”进行操作,并使用文件系统,所以我选择了 ext2 文件系统,因为 wiki 上有关于它的文档。所以我用 ext2 格式化了我的闪存驱动器,在 Ubuntu 11.10 上使用 gparted,并抓住了 lde(Linux 磁盘编辑器),然后用我的闪存驱动器运行它。

问题是,我没有看到 ext2 页面上描述的表格,我查看了字节 1024 (0x400) 以及其他地方,我似乎找不到表格。我回到 gparted,它仍然是格式化的。此外,即使我指定它是 ext2,lde 也会说“无法识别的文件系统”。闪存驱动器是否不使用标准的 ext2 文件系统,文件系统是否发生了如此大的变化以至于它与页面上描述的相似,或者我只是没有找对地方?

链接:

Ext2 - http://wiki.osdev.org/Ext2

OsDev 维基 - http://wiki.osdev.org/Main_Page