【Hacker News搬运】开始使用Python编写FUSE文件系统的指南
-
Title: Started a guide to writing FUSE filesystems in Python
开始使用Python编写FUSE文件系统的指南
Text:
Url: https://gwolf.org/2024/10/started-a-guide-to-writing-fuse-filesystems-in-python.html
根据您提供的链接,Gunnar Wolf 最近开始了一项撰写关于如何使用 Python 编写 FUSE 文件系统的指南。以下是文章内容的总结和翻译: --- **标题**:Gunnar Wolf 开始撰写关于在 Python 中编写 FUSE 文件系统的指南 **摘要**: Gunnar Wolf 在德布Conf22(Debian开发者大会)结束后,在科索沃与 Eeveelweezel 的对话中,被邀请为芝加哥Python用户组(ChiPy)准备一场演讲。他最初认为自己不是特别擅长Python,但最终还是接受了邀请。两年后,在韩国釜山的DebConf24上,Eeveelweezel 再次提及这个话题。Gunnar 思考了一些想法,但没有一个让他特别满意。尽管如此,他偶尔会写一些Python代码,并使用Python进行教学,因为这是他发现学生最能应对的语言。然而,向ChiPy提供演讲并不是一件简单的事。 另一方面,Gunnar 很早就设计了一个非常简单且有限的文件系统——FIUnamFS(墨西哥国立自治大学工程系),并将其作为课堂上的实施项目。这是一个玩具级的文件系统,具有许多不良的特性,但易于指定和实现。它基于连续文件分配,不支持子目录,并且通常限于1.44MB软盘的大小。 Gunnar 将这个文件系统作为项目分配给学生(而不仅仅是家庭作业),并要求他们提供高质量、专业的界面,而不仅仅是简单的菜单。他告诉学生们,最好的界面将是如果他们提供对FIUnamFS的无缝支持,用户在使用时不需要过多思考。高概率上,这意味着使用FUSE。 然而,在过去的六个学期中(每个学期有30-40名学生),只有一名学生勇敢地尝试了FUSE实现。 这可能是因为从像Python这样的高级语言中构建基于FUSE的文件系统并不容易?是的,他看到了一些实现示例和很好的网页(例如,与Stavros的passthrough文件系统一起提供的示例,Dave文件系统,以及Stavros的进一步解释和几个其他示例),解释了如何提供基本功能。他还找到了Matteo Bertozzi 15年前在PyCon4上展示的一个特别有用的演示……但是,在我看来,没有一个足够易于遵循。此外,大多数这些内容都很旧(也许世界正在告诉我一些我拒绝理解的事情?)。 当然,没有统一的接口可以工作。仅就Python而言,我们就可以找到python-fuse、Pyfuse、Fusepy等……从哪里开始呢? 因此,他开始着手尝试帮助他人。 在过去的几周里,Gunnar 一直在慢慢撰写自己的版本,并以一系列逐步的任务的形式进行展示,添加文件系统调用,并仔细记录他所写的内容(但……也许我的文档最终会模糊意图?我希望不会——继续阅读,我已经提供了一些补救措施)。 他在GitLab上创建了一个项目,用于编写基于Python的FUSE文件系统的引导式指南。这个项目展示了几个工作的FUSE文件系统实现,一些是基于RAM的,一些是基于passthrough的,他打算添加更多基于伪块设备的文件系统(例如他的FIUnamFS)。 到目前为止,他已经添加了五个逐步的部分,从最基本的空文件系统开始,添加系统调用(和功能),直到(到目前为止)一个带有基本支持的读写RAM文件系统或只读passthrough文件系统。 他认为提供有趣或有用的示例也是让学生使用他所教授内容的好方法,因此他添加了一些自己的想法:DNS文件系统、即时markdown编译文件系统、解压缩文件系统和取消注释文件系统。 它们都提供了一些可能被视为有用的东西,以易于教授的方式,只需几十行代码。而且,如果我的注释/文档太长难以阅读,我将很高兴自动删除所有注释和空白!😉 所以……我将在明天(2024年10月10日,GMT-6 18:30)以虚拟方式在ChiPy发表演讲。我还会在下下周在阿根廷圣菲的“区域开源软件会议”上以虚拟方式发表这场演讲。11月,我将亲自在墨西哥城举办的nerdear.la上演讲,这是该活动首次在墨西哥城举行。 --- 以上是对Gunnar Wolf撰写关于在Python中编写FUSE文件系统指南文章的总结和翻译。
Post by: levlaz
Comments:
dsp_person: The libfuse github has some good examples for C/C++ in [0] of increasing complexity:<p>- passthrough.c mirrors existing filesystem, "Its performance is terrible."<p>- passthrough_fh.c "performance is not quite as bad."<p>- passthrough_ll.c implemented with low level api and "the least bad among the three"<p>- passthrough_hp.cc high performance version written in C++<p>Some interesting fuse projects in my notes: [1] splitting large files into segments; [2] show ZFS incremental snapshots as files; [3] transparent filesystem compression; [4] and [5] options for mounting archives as filesytems.<p>- [0] <a href="https://github.com/libfuse/libfuse/tree/master/example">https://github.com/libfuse/libfuse/tree/master/example</a><p>- [1] <a href="https://github.com/seiferma/splitviewfuse">https://github.com/seiferma/splitviewfuse</a><p>- [2] <a href="https://github.com/UNFmontreal/zfs_fuse_snapshot">https://github.com/UNFmontreal/zfs_fuse_snapshot</a><p>- [3] <a href="https://github.com/FS-make-simple/fusecompress">https://github.com/FS-make-simple/fusecompress</a><p>- [4] <a href="https://github.com/google/fuse-archive">https://github.com/google/fuse-archive</a><p>- [5] <a href="https://github.com/mxmlnkn/ratarmount">https://github.com/mxmlnkn/ratarmount</a>
dsp_person: libfuse github上有一些很好的C#示例;复杂性日益增加的[0]中的C++:<p>-paththrough.C镜像了现有的文件系统,“;它的表现很糟糕&“<p> -passthrough_fh.c";表现并没有那么糟糕&“<p> -使用低级api和“passthrough_lil.c”实现;三者中最差的"<p> -passthrough_hp.cc用C++编写的高性能版本<p>我笔记中的一些有趣的融合项目:[1]将大文件分割成段;[2] 将ZFS增量快照显示为文件;[3] 透明文件系统压缩;[4] 以及[5]种将档案作为文件系统挂载的选项<p> -[0]<a href=“https:/;/ github.com/-libfuse//libfuse&#x2F树/.master示例”>https:/;github.com;libfuse;libfuse;树;master;示例</a><p>-[1]<a href=“https:/;github.com/ seiferma/-splitviewfuse”>https:"/;github.com;seiferma;splitviewfuse</a><p>-[2]<a href=“https:/;github.com/;UNFmontreal&#zfs_fuse_snapshot”>https:"/;github.com;联合国蒙特利尔论坛;zfs_fuse_snapshot</a><p>-[3]<a href=“https:/;/ github.com/-FS使fusepress变得简单”>https:"/;github.com;FS让一切变得简单;fusepress</a><p>-[4]<a href=“https:/;github.comG;google+;fuse archive”>https:"/;github.com;谷歌;fuse archive</a><p>-[5]<a href=“https:/;github.com/ mxmlnkn/-ratarmount”>https:/;github.com;mxmlnkn;ratarmount</a>
aargh_aargh: Just wanted to throw out there that although I'm a fan of FUSE, it's not the only option. I've had fun implementing a virtual filesystem via the 9p protocol not too long ago.<p>IIRC, I used py9p and the python experience was much nicer than fuse-python. You can mount a 9p service via FUSE (9pfuse) if you want. I just used the kernel v9fs client. If you're just looking to pass a filesystem through the network, I think I used the diod 9p server.<p>Overall, it's a nice little ecosystem to explore.
aargh_aargh: 只是想把它扔出去,尽管我;我是FUSE的粉丝,它;这不是唯一的选择。我;不久前,我通过9p协议实现了一个虚拟文件系统<p> IIRC,我使用了py9p,python的体验比fuse python好得多。如果你愿意,你可以通过FUSE(9pfuse)挂载9p服务。我刚刚使用了内核v9fs客户端。如果您;我们只是想通过网络传递文件系统,我想我使用了diod 9p服务器<p> 总体而言,它;这是一个值得探索的小生态系统。
iamjackg: I wish I had known about this a month ago, when I had to go through the exact same process!<p>In a desperate attempt to find a less frustrating way to interact with Jira, I had the silly idea of starting a jira-as-filesystem project that uses our internal issue categorization to build a tree: directories represent issues, with files representing issue fields and subdirectories for linked issues. I ended up choosing fuse-python.<p>I haven't worked on it in a minute, but I was already bumping into issues (pun not intended) with the abstraction: using just the issue ID as directory name makes automation easier, but it makes it hard for humans to browse the tree, since a
ls
would just show you a bunch of inscrutable IDs. I ended up adding a parallel<issue-type>-with-summary
directory type where the slugified summary is appended to each issue ID.iamjackg: 我希望我一个月前就知道这件事,当时我必须经历完全相同的过程<p> 为了找到一种不那么令人沮丧的与Jira交互的方法,我有一个愚蠢的想法,即启动一个Jira作为文件系统项目,该项目使用我们的内部问题分类来构建一棵树:目录代表问题,文件代表问题字段,子目录代表链接问题。我最终选择了fuse python<p> 我还没有;我没有在一分钟内完成它,但我已经遇到了抽象的问题(双关语不是故意的):只使用问题ID作为目录名可以使自动化更容易,但它使人类难以浏览树,因为'ls'只会显示一堆难以理解的ID。我最后添加了一个平行的`<;问题类型>-使用summary目录类型,其中每个问题ID都附加了模糊摘要。
mcoliver: So many fuse mount options out there with varying tradeoffs, performance, and features (s3fs, goofys, seaweed, minio, Google drive, etc..). JuiceFS is pretty interesting for doing things like mounting an object store and accessing it via posix with all the metadata you would expect on a traditional filesystem.
<a href="https://juicefs.com" rel="nofollow">https://juicefs.com</a>mcoliver: 有如此多的保险丝安装选项,具有不同的权衡、性能和功能(s3fs、傻瓜、海藻、minio、谷歌硬盘等)。JuiceFS在执行诸如挂载对象存储并通过posix访问它以及在传统文件系统上所需的所有元数据等操作时非常有趣。<a href=“https://juicefs.com”rel=“nofollow”>https:///;juicefs.com</a>
kapnap: Off topic but whenever I see a blog with some 90s/2000s vibes, I always go to their first page of posts. Never disappoints to sneak a peak into that time capsule - including gwolf.org!
kapnap: 离题,但每当我看到一个90年代的博客;在2000年代的氛围中,我总是去他们帖子的第一页。在这个时间胶囊里偷偷地达到顶峰永远不会让人失望——包括gwolf.org!