在计算机文件系统领域中,fork是一个与文件系统对象相关的数据集。没有fork机制的文件系统只允许内容拥有单个数据集,而有fork的文件系统允许多个内容。每个非空的文件至少有一个fork(通常为默认类型);因文件系统而不同,一个文件可能有一个或多个相关联的fork;fork可能包含有关该文件主体的数据,或者只是元数据。不同于通常为固定大小的一个类似的文件系统特性——扩展文件属性,fork可以为可变大小,甚至可能大于文件的主数据fork。一个文件的大小是其各fork大小的总和。因为其是可变大小(不同于固定大小的元数据),Fork也称为数据流(streams),但它与其他的“流”所表现出的“可用性随时间而变动(包括无限期)”不同。
此条目翻译自其他语言维基百科,需要相关领域的编者协助校对翻译。 |
方案
在没有fork的文件系统上,用户可以使用彼此互相关联的多个单独文件,尤其是用sidecar file来存储元数据。但是,这些文件间的连接不会由文件系统自动保留,并且每个程序都必须支持按这些文件来工作。另一种选择是容器文件,其将额外数据存储在指定的文件格式或者一个archive file中,因此允许在一个文件(单个fork)中存储多个文件及元数据。这将要求程序处理容器文件或压缩文件,而不是由操作系统处理fork。这些替代方案均需要处理数据的程序进行额外的处理,但对不支持fork的文件系统的可移植性更佳。
实现
苹果公司的分层文件系统(HFS)中fork与文件系统关系密切。[1]HFS与原有的Mac系列(麦金塔)的文件系统麦金塔文件系统(MFS)允许一个文件系统对象有多种fork:一个数据fork,一个资源fork,以及多个命名fork。
资源fork的设计是为存储被系统的图形用户界面(GUI)使用的非编译数据,例如可本地化文本字符串,由Finder或菜单使用的文件图标,以及应用程序相关的菜单和对话框等。[2]但这个特性非常灵活,因此也出现了额外的用途,例如将文字处理文档处理为内容和表示法,然后将各个部分存储在单独的资源中。由于编译后的软件代码也存储在资源中,所以应用程序通常只包含一个资源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。[3]
从1985年开始,Novell NetWare File System(NWFS)及其继任者Novell Storage Services(NSS)就已从头设计多种存储文件元数据的方法。部分元数据存储在Novell Directory Services(NDS)中,部分元数据存储在磁盘上的目录结构中,部分存储在文件本身的“多项数据流”中。多项数据流还允许Macintosh客户端附加和使用NetWare服务器。
在Windows NT 3.1引入的NTFS文件系统支持被称为替代数据流(ADS)文件系统fork。[4]随Windows Server 2012引入的新文件系统ReFS,最初不支持ADS,[5][6][7],但在Windows 8.1 64位及Server 2012 R2中已支持ADS,唯其长度最多128K的限制被加入到ReFS。[8]
ADS最初是为添加与现有的支持fork的操作系统的兼容性。计算机程序可以直接在文件路径的后面添加一个冒号(:)及指定的ADS名称来打开一个ADS。[9]尽管有此支持,但包括档案总管和DIR命令(Windows Vista之前)在内的大多数程序都会忽略ADS。Windows档案总管会复制ADS并在目标文件系统不支持ADS时发出警告,但只计算主流的大小,并且不会列出文件或文件夹的流。Windows Vista中的DIR命令支持显示ADS。[10]Windows PowerShell v3.0及之后的版本支持操作ADS。[11]
Windows 2000使用ADS以在图像文件中存储缩略图,并且在任何文件中存储摘要信息(诸如标题、作者等),这样不更改主数据流。[12][13]在Windows XP中,微软已意识到当文件被移出NTFS卷时,其所含的ADS容易丢失;因此Windows XP为只要文件格式支持,就尽量将数据存储在主数据流中。[12]Windows Vista停止支持添加摘要信息,微软认为用ADS操作它过于敏感。[14]但是,用于其他目的的ADS没有停止,Windows XP的Service Pack 2引入了附件执行服务,它将已下载文件的原始来源详情存储在一个名为“区域标识符”的ADS中,以努力保护用户免受下载文件所带来的风险。[15]Internet Explorer和Windows 8则是通过Microsoft SmartScreen执行此功能。[16]Internet Explorer也使用ADS来在Internet快捷方式文件中存储Favicon。[9]
Solaris第9版及之后的版本允许文件有“扩展属性”,这实际上就是fork;一个扩展属性的最大大小与文件的最大大小相同,并且读写它们是采用与读写文件相同的方式。在内部,它们实际上像普通文件一样存储和访问,因此其所有权和权限可能与父文件的所有权和权限相异。因为路径会与子目录冲突,因此它们的文件名不能包含“/”字符。
网络文件系统(NFS)第4版支持扩展文件属性,与Solaris的方式大致相同。
可能的安全问题和数据丢失风险
在文件系统支持某种或多种fork时,应用程序应该感知它们,以及注意数据和安全风险。允许经典软件访问无适当兼容层的数据是发生此类问题的主要原因。[来源请求]
如果各类系统实用程序(磁盘资源管理器、防病毒软件、压缩归档程序等)未感知fork,可能导致遇到下列问题:
参见
参考资料
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.