Fork (文件系统)

在计算机文件系统领域中，fork是一个与文件系统对象相关的数据集。没有fork机制的文件系统只允许内容拥有单个数据集，而有fork的文件系统允许多个内容。每个非空的文件至少有一个fork（通常为默认类型）；因文件系统而不同，一个文件可能有一个或多个相关联的fork；fork可能包含有关该文件主体的数据，或者只是元数据。不同于通常为固定大小的一个类似的文件系统特性——扩展文件属性，fork可以为可变大小，甚至可能大于文件的主数据fork。一个文件的大小是其各fork大小的总和。因为其是可变大小（不同于固定大小的元数据），Fork也称为数据流（streams），但它与其他的“流”所表现出的“可用性随时间而变动（包括无限期）”不同。 在没有fork的文件系统上，用户可以使用彼此互相关联的多个单独文件，尤其是用sidecar file来存储元数据。但是，这些文件间的连接不会由文件系统自动保留，并且每个程序都必须支持按这些文件来工作。另一种选择是容器文件，其将额外数据存储在指定的文件格式或者一个archive file中，因此允许在一个文件（单个fork）中存储多个文件及元数据。这将要求程序处理容器文件或压缩文件，而不是由操作系统处理fork。这些替代方案均需要处理数据的程序进行额外的处理，但对不支持fork的文件系统的可移植性更佳。 蘋果公司的分层文件系统（HFS）中fork与文件系统关系密切。HFS与原有的Mac系列（麦金塔）的文件系统麦金塔文件系统（英语：Macintosh File System）（MFS）允许一个文件系统对象有多种fork：一个数据fork（英语：Data fork），一个资源fork（英语：Resource fork），以及多个命名fork。 资源fork的设计是为存储被系统的图形用户界面（GUI）使用的非编译数据，例如可本地化文本字符串，由Finder或菜单使用的文件图标，以及应用程序相关的菜单和对话框等。但这个特性非常灵活，因此也出现了额外的用途，例如将文字处理文档处理为内容和表示法，然后将各个部分存储在单独的资源中。由于编译后的软件代码也存储在资源中，所以应用程序通常只包含一个资源fork，而没有数据fork。 HFS+的一项最晦涩的特性是，一个文件除了传统的数据和资源fork之外，还可以有任意数量的自定义的“命名fork”。此特性很少被使用，因为苹果公司从未在Mac OS 8.1至10.3.9上添加对它的支持。从10.4开始，一个部分实现被完成，以支持苹果的扩展内联属性。 在Mac OS X v10.4之前，用户运行Mac OS X上所自带的经典的Unix命令行实用工具（例如tar）可能带来数据丢失风险，因为这些工具未被更新以支持处理文件的资源fork，直到v10.4。 从1985年开始，Novell NetWare File System（英语：NetWare File System）（NWFS）及其继任者Novell Storage Services（英语：Novell Storage Services）（NSS）就已从头设计多种存储文件元数据的方法。部分元数据存储在Novell Directory Services（英语：Novell Directory Services）（NDS）中，部分元数据存储在磁盘上的目录结构中，部分存储在文件本身的“多项数据流”中。多项数据流还允许Macintosh客户端附加和使用NetWare服务器。 在Windows NT 3.1引入的NTFS文件系统支持被称为替代数据流（ADS）文件系统fork。随Windows Server 2012引入的新文件系统ReFS，最初不支持ADS，，但在Windows 8.1 64位及Server 2012 R2中已支持ADS，唯其长度最多128K的限制被加入到ReFS。 ADS最初是为添加与现有的支持fork的操作系统的兼容性。计算机程序可以直接在文件路径的后面添加一个冒号（:）及指定的ADS名称来打开一个ADS。尽管有此支持，但包括檔案總管和DIR命令（Windows Vista之前）在内的大多数程序都会忽略ADS。Windows檔案總管会复制ADS并在目标文件系统不支持ADS时发出警告，但只计算主流的大小，并且不会列出文件或文件夹的流。Windows Vista中的DIR命令支持显示ADS。Windows PowerShell v3.0及之后的版本支持操作ADS。 Windows 2000使用ADS以在图像文件中存储缩略图，并且在任何文件中存储摘要信息（诸如标题、作者等），这样不更改主数据流。在Windows XP中，微软已意识到当文件被移出NTFS卷时，其所含的ADS容易丢失；因此Windows XP为只要文件格式支持，就尽量将数据存储在主数据流中。Windows Vista停止支持添加摘要信息，微软认为用ADS操作它过于敏感。但是，用于其他目的的ADS没有停止，Windows XP的Service Pack 2引入了附件执行服务，它将已下载文件的原始来源详情存储在一个名为“区域标识符”的ADS中，以努力保护用户免受下载文件所带来的风险。Internet Explorer和Windows 8则是通过Microsoft SmartScreen执行此功能。Internet Explorer也使用ADS来在Internet快捷方式文件中存储Favicon。 Solaris第9版及之后的版本允许文件有“扩展属性”，这实际上就是fork；一个扩展属性的最大大小与文件的最大大小相同，并且读写它们是采用与读写文件相同的方式。在内部，它们实际上像普通文件一样存储和访问，因此其所有权和权限可能与父文件的所有权和权限相异。因为路径会与子目录冲突，因此它们的文件名不能包含“/”字符。 网络文件系统（NFS）第4版支持扩展文件属性，与Solaris的方式大致相同。 在文件系统支持某种或多种fork时，应用程序应该感知它们，以及注意数据和安全风险。允许经典软件（英语：Legacy system）访问无适当兼容层的数据是发生此类问题的主要原因。[來源請求] 如果各类系统实用程序（磁盘资源管理器、防病毒软件、压缩归档程序等）未感知fork，可能导致遇到下列问题： 用户不会得知任何fork的存在，也不知道文件的实际总大小，只能看到文件的主数据流的大小。 计算机病毒可能在Windows上使用替代数据流（ADS）隐藏而逃脱检测，如果防病毒软件未意识到fork的存在。 在通过fork不敏感的通道发送文件时，数据可能丢失。这些渠道包括例如电子邮件、不支持fork的文件系统，并也包括在支持fork的文件系统上使用不支持fork的软件复制或打包（压缩、归档）文件。 扩展文件属性 Apple. File Forks. Apple. 1996-07-02 [2006-11-18]. （原始内容存档于2008-07-24）.  Bruce Horn. The Grand Unified Model (1) - Resources. Folklore.org. [2006-11-18]. （原始内容存档于2006-10-23）.  Command-line Backup Solutions on Mac OS X. Apple. 2005-10-29 [2006-11-18]. （原始内容存档于2008-02-25）.  Microsoft. Files and Clusters. Microsoft. [2006-11-18]. [永久失效連結] Verma, Surendra. Sinofsky, Steven , 编. Building the next generation file system for Windows: ReFS. Building Windows 8. Microsoft. MSDN blogs. 16 January 2012 [20 January 2013]. （原始内容存档于2013-05-15）.  Foley, Mary Jo. Microsoft goes public with plans for its new Windows 8 file system. ZDNet. CBS互動. 16 January 2012 [21 January 2013]. （原始内容存档于2013-05-15）.  Windows Server 2012: Does ReFS replace NTFS? When should I use it? （页面存档备份，存于互联网档案馆） - Martin Lucas, TechNet Resilient File System Overview. TechNet Library. 微软. 29 February 2012 [25 December 2013]. （原始内容存档于2017-02-01）.  Law, Eric. Fun with Favicons. IEInternals. 微软. 8 September 2013 [17 November 2013]. （原始内容存档于2016-01-26）.  Bart De Smet. Use Vista's DIR command to display alternate data streams. B# .NET Blog. 2006-07-13 [2007-07-07]. （原始内容存档于2009-05-26）.  FileSystem Provider (Windows PowerShell 3.0). TechNet. 微软. 9 August 2012 [2016年12月20日]. （原始内容存档于2016年6月24日）.  Chen, Raymond. Why are custom properties created on Windows 2000 lost when I view the file from newer versions of Windows?. The Old New Thing. 微软. 27 May 2011 [17 November 2013]. （原始内容存档于2013-07-27）.  Microsoft. Indexing service adds data streams to image files. Microsoft. 2006-10-27 [2006-11-18]. （原始内容存档于2007-02-09）.  Chen, Raymond. What happened to the Summary information created on Windows 2000 and Windows XP?. The Old New Thing. 微软. 1 May 2012 [17 November 2013]. （原始内容存档于2014-04-13）.  Bart De Smet. Demo of "Attachment Execution Service internals" in Windows XP SP2 and Windows Server 2003 SP1. B# .NET Blog. 2005-08-19 [2006-11-18]. （原始内容存档于2006-11-04）.  Chen, Raymond. Manipulating the zone identifier to specify where a file was download from. The Old New Thing. 微软. 4 November 2013 [2016-12-20]. （原始内容存档于2015-06-10）.  MSDN Library: File Streams（页面存档备份，存于互联网档案馆） Alternate Data Streams（页面存档备份，存于互联网档案馆） Alternate Data Streams in Windows