在Windows NTFS上有一个很好但很多未使用的功能 “备用数据流” (ADS)我最近在一个业余爱好开发项目中使用过。

在Mac HFS +上,还有一个同样不错但但大部分未使用的功能称为“命名分叉”。

我正在考虑将这个项目移植到Linux,但我不知道Linux上的任何Filesystem是否都有这样的功能?

有帮助吗?

解决方案

Windows和Linux(以及其他操作系统)上都有支持扩展属性(EA)的文件系统。为OS / 2 compat添加了Windows支持,并且没有任何文档化的界面,除了通过备份API的hacky方法(这是Cygwin所做的)。 EA旨在仅存储小值。在Windows上,每个EA都有一个ASCII名称(而几乎所有其他名称都是Unicode),并且文件中所有EA的组合大小不能大于64k。 EA不是文件:您无法打开EA的文件句柄并像普通文件一样阅读它。

备用数据流是NTFS提供的单独功能,允许您在文件内提供备用子文件。每个文件都有一个默认的未命名数据流,除非您指定备用数据流,否则该数据流将自动打开。您可以打开ADS的句柄,并使用单个(Unicode)文件名读取(甚至执行)它,就像普通文件一样。 ADS可以与任何磁盘文件一样大。

我所知道的Linux上的ADS没有确切的模拟,但如果数据值很小,您可以在Linux端口上使用EA。

其他提示

ADS的问题在于Windows会“失败”。那些ADS流第二个它移动到任何非NTFS文件系统。它并不认为这些流是重要的,因此它们通常不会被保留。通过网络共享,烧录到CD,放在USB驱动器等等时,您会发现它们无法访问或消失...

除非您对应用程序的关注非常狭窄(总是在NTFS上),否则我会完全避免使用ADS流。

某些文件系统支持扩展属性,特别是XFS和(我认为)JFS;但是尺寸有限(XFS中为64k)。 Reiser4支持任意大小的叉子;但我所知道的任何发行版都不支持它。另一种选择是ZFS,同样不是很有用。

最后,使用目录可能更明智。

大多数Linux文件系统都有扩展属性。我不熟悉NTFS流,所以我无法比较这两者。大多数文件系统需要使用标志来安装才能启用扩展属性,因此这对于任何人的系统来说都可能无法正常工作。它们通常缩写为 xattr xattrs

我所知道的唯一有点朝这个方向的是扩展属性,但是从我读到的关于ADS的内容来看,它是def。不一样的。你究竟用它做什么?

常用的Linux文件系统不支持此功能。相反,您可以使用多个文件和合适的命名方案(可能只是将流索引附加到每个文件名),或者包含多个文件的存档;你会发现这种方法在其他方面更好 - 例如,如果有人想将Windows文件备份到具有非NTFS文件系统的媒体,Windows会发生什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top