蹲这个文件系统好久了,特意为了它升级的内核,因为 NTFS-3G 在一些极端情况下性能实在太差(对各种磁盘镜像,比如 VM 的镜像开启 NTFS 透明压缩,此时用 NTFS-3G 直接卡成狗),必须考虑一个内核态的 NTFS Driver 。
在此之前一直用的 Paragon 的 NTFS For Linux ,对个人用户是免费的,这似乎是 Linux 内核态 NTFS Driver 的唯一选择。这个驱动包括后来的 NTFS3 (似乎 NTFS3 就是 Paragon 把它的商业驱动开源得来的,发现各种行为和商业驱动几乎一模一样,包括 mount options )
但是这两玩意(商业驱动和 NTFS3 )一直有个问题,就是不支持对 compressed 的文件 mmap rw 操作,只能 mmap 只能以 read only 方式打开,而 NTFS-3G 是支持的。
我对 mmap 了解不多,read 好理解,用了 page fault 机制 trap 进内核然后进文件系统 driver ,load 文件到相应的 page 上,这个过程可以 trap 进 uncompress 的代码来解压。但是对于写操作,网上的资料不是很多,目前也还没有去看源码。我还不了解对 mmap 的地址写操作之后会发生什么,莫非内核里面有个什么东西来监控这个地址的更改,然后再通知文件系统 write back ?有没有朋友了解这个 mmap write 流程的可以帮补充下,感谢!
但至少,NTFS-3G 这种用户态文件系统都能支持 mmap write ,不知道 NTFS3 迟迟不支持的原因到底是啥,这里面有没有什么坑,如果想填这个坑不知难度多大。
在此先开个脑洞贴~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.