我听说 NTFS 支持在单个文件中包含多个数据流。您可以在其中指定要从主流以外的流读取或写入的流。
出于不同的原因,我在这里看到了相当大的潜力。
Linux 下有没有一个文件系统可以达到同样的效果?是否已经尝试过制作一个?为什么或为什么不是一个好主意?文件系统需要什么才能具有这种功能?
答案1
NTFS 中的文件只有一个主数据流,但它们可以有称为备用数据流(ADS)。 ADS 的引入是为了实现经典的 Mac 互操作性,因为 Apple 使用了资源分叉存储附加数据,这是一种数据叉
ADS 的使用有限,主要被病毒和恶意软件滥用。此外,使用分叉使得在使用普通工具复制或复制到不受支持的文件系统时容易丢失数据。因此 *nix 并没有完全赶上这一点。甚至 MS 也尝试在 Windows 2000 中将其用于缩略图,但随后在 XP 中放弃了这个想法。而当他们介绍参考文献(NTFS 的后继者)最初他们完全放弃了 ADS 支持
如今 ADS 唯一常见的有效用途是存储区域信息指示文件是从哪里下载的,以保护用户免受来自互联网的攻击。这需要很小的空间,所以它是越来越受欢迎在其他平台上。在*nix世界里扩展文件属性,即额外的数据,但与尺寸有限,在 2000 年代互联网时代蓬勃发展期间开始被添加到大多数 *nix 文件系统中。例如,FreeBSD 从 2003 年的 5.x 版本开始支持扩展属性
在 Linux 中,ext2、ext3、ext4、JFS、Squashfs、UBIFS、Yaffs2、ReiserFS、Reiser4、XFS、Btrfs、OrangeFS、Lustre、OCFS2 1.6、ZFS 和 F2FS 文件系统支持扩展属性(缩写属性)在内核配置中启用时。任何常规文件或目录都可以具有由名称和关联数据组成的扩展属性。该名称必须是以名称空间标识符和点字符为前缀的以 null 结尾的字符串。目前,存在四个命名空间:用户、可信、安全和系统。用户命名空间在命名或内容方面没有限制。系统命名空间主要由内核用于访问控制列表。例如,SELinux 使用安全命名空间。
对 POSIX.1e 草案[需要引用]中的扩展属性概念的支持于 1997 年被撤回,并于 2002 年左右被添加到 Linux 中。截至 2016 年,它们尚未被用户空间 Linux 程序广泛使用,但已被使用由 Beagle、OpenStack Swift、Dropbox、KDE 语义元数据框架 (Baloo)、Chromium、Wget 和 cURL 提供。
Linux 内核允许扩展属性的名称最多为 255 个字节,值最多为 64 KiB,XFS 和 ReiserFS 也是如此,但 ext2/3/4 和 btrfs 的限制要小得多,需要所有属性(名称和值)一个文件适合一个“文件系统块”(通常为 4 KiB)。根据 POSIX.1e,[需要引用] 名称必须以以下之一开头安全,系统,值得信赖的, 和用户加一个句号。这定义了扩展属性的四个命名空间。
https://en.wikipedia.org/wiki/Extended_file_attributes#Linux
如前所述,ReFS 最初不支持 ADS,但长度有限的ADS已添加回较新的 ReFS 版本,但这使得它本质上扩展属性
2002 年的 Solaris 9是第一个有分支的 Unix,因此 Solaris 是ZFS可能是唯一带有分叉的 Unix 文件系统,尽管他们称其为令人困惑的“扩展属性”