在 Windows NTFS 上,我最近在一个爱好开发项目中使用了一个很好但大部分未使用的功能,称为“备用数据流”(ADS)。
在 Mac HFS+ 上,还有一个类似的不错但大多未使用的功能,称为“命名分叉”。
我正在考虑把这个项目移植到Linux上,但不知道linux上的Filesystem有没有这样的功能?
在 Windows NTFS 上,我最近在一个爱好开发项目中使用了一个很好但大部分未使用的功能,称为“备用数据流”(ADS)。
在 Mac HFS+ 上,还有一个类似的不错但大多未使用的功能,称为“命名分叉”。
我正在考虑把这个项目移植到Linux上,但不知道linux上的Filesystem有没有这样的功能?
Windows 和 Linux(以及其他操作系统)上都有支持扩展属性 (EA) 的文件系统。为 OS/2 兼容添加了 Windows 支持,并且没有任何文档化接口,除了通过备份 API 的 hacky 方法(这就是 Cygwin 所做的)。EA 旨在仅存储小值。在 Windows 上,每个 EA 都有一个 ASCII 名称(而几乎所有其他名称都是 Unicode),并且文件中所有 EA 的组合大小不能大于 64k。EA 不是文件:您无法打开 EA 的文件句柄并像普通文件一样读取它。
备用数据流是 NTFS 提供的一项单独功能,它允许您在文件内提供备用子文件。每个文件都有一个默认的未命名数据流,它会自动打开,除非您指定另一个文件。您可以打开 ADS 的句柄并像普通文件一样读取(甚至执行)它,使用单个 (Unicode) 文件名。ADS 可以与任何磁盘文件一样大。
据我所知,Linux 上没有 ADS 的精确模拟,但如果数据值很小,您可以在 Linux 端口上使用 EA。
ADS 的问题在于,Windows 将在移动到任何非 NTFS 文件系统的第二次“丢失”这些 ADS 流。它不认为这些流很重要,因此通常不会保留它们。当通过网络共享、刻录到 CD、放入 USB 驱动器等时,您会发现它们无法访问或消失...
总而言之,除非您对应用程序的关注范围非常狭窄(始终在 NTFS 上),否则我会完全避免使用 ADS 流。
一些文件系统支持扩展属性,特别是 XFS 和(我认为)JFS;但大小有限(XFS 中为 64k)。Reiser4 支持任意大小的分叉;但我所知道的任何发行版都不支持它。另一个选择是 ZFS,同样不是很实用。
最后,只使用目录可能更明智。
大多数 Linux 文件系统都有extended attributes
. 我不熟悉 NTFS 流,所以无法比较两者。大多数文件系统需要挂载标志以启用扩展属性,因此这可能不适用于任何人的系统。它们通常缩写为xattr
或xattrs
。
我唯一知道的,有点朝那个方向发展的是扩展属性,但从我读到的关于 ADS 的内容来看,它是 def。不是一回事。你到底是用来做什么的?
常用的 Linux 文件系统不支持这一点。相反,您可以使用多个文件和合适的命名方案(可能只需将流索引附加到每个文件名),或包含多个文件的存档;无论如何,您会发现这种方法在其他方面更好 - 例如,如果有人想将文件 Windows 备份到具有非 NTFS 文件系统的介质,在 Windows 上会发生什么?