原型化文件系统

时间:2010-07-27 05:20:31

标签: python c filesystems fuse

对文件系统进行原型设计的最佳做法是什么?

我使用fusepy尝试使用Python,现在我很好奇:

  • 从长远来看,应该是什么 可敬的文件系统实现 在C?不会在C阻碍 可移植性,或最终导致 性能问题?
  • 还有其他类似的实现吗? FUSE?
  • 显然核心文件系统技术发展缓慢(fat32,ext3,ntfs,其他一切都是小鱼),采用了哪些调试技术?
  • 在主要操作系统中实现高度优化,完全支持的实现时,文件系统开发的一般过程是什么?

4 个答案:

答案 0 :(得分:4)

生活在用户空间(在FUSE或Mac版本中)的文件系统确实是一个非常方便的东西,但不会像生活在内核空间中的传统一样(因此必须在C中) )。你可以说这就是微内核系统(文件系统和其他东西存在于用户空间中)从来没有真正“留下单片内核”的原因,因为A. Tanenbaum如此肯定地说,当他在Minix邮件列表上的一个着名帖子中攻击Linux时二十年前(作为一名CS教授,他说他因为操作系统选择一个单片式架构而失败了Linus--当然Linus精神上回应了,整个交流现在非常有名,可以在网上很多地方找到; - 。)

可移植性并不是一个真正的问题,除非您的目标是“嵌入式”设备内存量非常有限 - 除了这些设备之外,您可以在运行C的地方运行C(如果有的话,可以使用限制你的FUSE,而不是Python运行时的FUSE。但性能绝对可以。

答案 1 :(得分:2)

  

从长远来看,应该是什么   可敬的文件系统实现   在C?不会在C阻碍   可移植性,或最终导致   性能问题?

不一定,有很多与C不同的表演语言(O'Caml,C ++是首先想到的。)实际上,我希望NTFS是用C ++编写的。你似乎是来自Linux背景,而且Linux内核是用C语言编写的,任何希望合并到内核中的文件系统都必须用C语言编写。

  

还有其他类似的实现吗?   FUSE?

Windows有一对,例如,http://code.google.com/p/winflux/http://dokan-dev.net/en/处于各种成熟度级别

  

显然是核心文件系统技术   慢慢移动(fat32,ext3,ntfs,   什么都是小鱼),什么   采用调试技术?

同样,在Windows中,大多数情况都是如此,在Solaris中,您有ZFS,并且在Linux ext4btrfs中存在。调试技术通常涉及在各种操作过程中关闭机器并查看剩下的状态数据,存储大量数据并查看性能。

  

什么是一般课程文件系统   发展到达a   高度优化,完全支持   主要操作系统的实施?

同样,这取决于哪个操作系统,但它确实涉及相当多的测试,尤其是 确保故障不会丢失数据。

答案 2 :(得分:1)

我建议您为内核块设备API层创建mock object。模拟层应使用mmap'd文件作为文件系统的后备存储。这样做有很多好处:

  1. 运行单元测试用例的FS性能非常快。
  2. 能够将调试代码/断点插入模拟层以检查故障情况。
  3. 轻松保存文件系统状态的多个副本以供学习或运行测试用例。
  4. 能够确定性地引入文件系统必须处理的块设备错误或其他系统事件。

答案 3 :(得分:0)

可敬的文件系统将快速高效。对于Linux来说,这基本上意味着用C语言编写,因为如果你没有与内核一起分发,你就不会被认真对待。

至于其他工具,如Fuse,还有MacFUSE,它允许你在mac和linux上使用相同的代码。