对文件系统进行原型设计的一些最佳实践是什么?
我在 Python 中尝试过使用fusepy,现在我很好奇:
- 从长远来看,任何受人尊敬的文件系统实现都应该用 C 语言实现吗?不使用 C 语言会妨碍可移植性,还是最终会导致性能问题?
- 是否有其他实现,例如 FUSE?
- 显然核心文件系统技术发展缓慢(fat32、ext3、ntfs,其他一切都是小鱼),采用了哪些调试技术?
- 在主要操作系统中实现高度优化、完全支持的文件系统开发的一般课程是什么?
对文件系统进行原型设计的一些最佳实践是什么?
我在 Python 中尝试过使用fusepy,现在我很好奇:
存在于用户空间中的文件系统(在 FUSE 或其 Mac 版本中)确实是一个非常方便的东西,但不会具有与存在于内核空间中的传统文件系统相同的性能(因此必须在 C 中)。你可以说这就是为什么微内核系统(文件系统和其他东西存在于用户空间中)从来没有像 A. Tanenbaum 在 Minix 邮件列表上的一篇著名帖子中攻击 Linux 时所说的那样,真正“将单片内核留在尘土中” 20 年前(作为一名 CS 教授,他说他会因为 Linus 为他的操作系统选择单体架构而失败——Linus 当然反应热烈,整个交流现在非常有名,可以在网络上的许多地方找到;-)。
可移植性并不是真正的问题,除非您的目标是内存非常有限的“嵌入式”设备——除了此类设备,您可以在可以运行 C 的地方运行 Python(如果有的话,那就是 FUSE 的可用性将限制你,而不是 Python 运行时)。但性能绝对可以。
从长远来看,任何受人尊敬的文件系统实现都应该用 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 中存在ext4和btrfs 。调试技术通常涉及在各种操作过程中关闭机器,查看数据处于何种状态,存储大量数据并查看性能。
在主要操作系统中实现高度优化、完全支持的文件系统开发的一般课程是什么?
同样,这取决于哪个操作系统,但它确实涉及大量测试,尤其是确保故障不会丢失数据。
我建议您为内核块设备 API 层创建一个模拟对象。模拟层应该使用mmap
'd 文件作为文件系统的后备存储。这样做有很多好处:
受人尊敬的文件系统将快速高效。对于 Linux,这基本上意味着用 C 语言编写,因为如果您没有与内核一起分发,您将不会被认真对待。
至于 Fuse 等其他工具,还有MacFUSE,它允许您在 mac 和 linux 上使用相同的代码。