跳至內容

Fork (文件系統)

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

在計算機文件系統領域中,fork是一個與文件系統對象相關的數據集。沒有fork機制的文件系統只允許內容擁有單個數據集,而有fork的文件系統允許多個內容。每個非空的文件至少有一個fork(通常為默認類型);因文件系統而不同,一個文件可能有一個或多個相關聯的fork;fork可能包含有關該文件主體的數據,或者只是元數據。不同於通常為固定大小的一個類似的文件系統特性——擴展文件屬性,fork可以為可變大小,甚至可能大於文件的主數據fork。一個文件的大小是其各fork大小的總和。因為其是可變大小(不同於固定大小的元數據),Fork也稱為數據(streams),但它與其他的「」所表現出的「可用性隨時間而變動(包括無限期)」不同。

方案[編輯]

在沒有fork的文件系統上,用戶可以使用彼此互相關聯的多個單獨文件,尤其是用sidecar file來存儲元數據。但是,這些文件間的連接不會由文件系統自動保留,並且每個程序都必須支持按這些文件來工作。另一種選擇是容器文件,其將額外數據存儲在指定的文件格式或者一個archive file中,因此允許在一個文件(單個fork)中存儲多個文件及元數據。這將要求程序處理容器文件或壓縮文件,而不是由操作系統處理fork。這些替代方案均需要處理數據的程序進行額外的處理,但對不支持fork的文件系統的可移植性更佳。

實現[編輯]

蘋果公司[編輯]

蘋果公司分層文件系統(HFS)中fork與文件系統關係密切。[1]HFS與原有的Mac系列(麥金塔)的文件系統麥金塔文件系統英語Macintosh File System(MFS)允許一個文件系統對象有多種fork:一個數據fork英語Data fork,一個資源fork英語Resource fork,以及多個命名fork。

資源fork的設計是為存儲被系統的圖形用戶界面(GUI)使用的非編譯數據,例如可本地化文本字符串,由Finder或菜單使用的文件圖標,以及應用程序相關的菜單和對話框等。[2]但這個特性非常靈活,因此也出現了額外的用途,例如將文字處理文檔處理為內容和表示法,然後將各個部分存儲在單獨的資源中。由於編譯後的軟件代碼也存儲在資源中,所以應用程序通常只包含一個資源fork,而沒有數據fork。

HFS+的一項最晦澀的特性是,一個文件除了傳統的數據和資源fork之外,還可以有任意數量的自定義的「命名fork」。此特性很少被使用,因為蘋果公司從未在Mac OS 8.110.3.9上添加對它的支持。從10.4開始,一個部分實現被完成,以支持蘋果的擴展內聯屬性

Mac OS X v10.4之前,用戶運行Mac OS X上所自帶的經典的Unix命令行實用工具(例如tar)可能帶來數據丟失風險,因為這些工具未被更新以支持處理文件的資源fork,直到v10.4。[3]

Novell[編輯]

從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。[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]

Sun[編輯]

Solaris第9版及之後的版本允許文件有「擴展屬性」,這實際上就是fork;一個擴展屬性的最大大小與文件的最大大小相同,並且讀寫它們是採用與讀寫文件相同的方式。在內部,它們實際上像普通文件一樣存儲和訪問,因此其所有權和權限可能與父文件的所有權和權限相異。因為路徑會與子目錄衝突,因此它們的文件名不能包含「/」字符。

網絡文件系統(NFS)第4版支持擴展文件屬性,與Solaris的方式大致相同。

可能的安全問題和數據丟失風險[編輯]

在文件系統支持某種或多種fork時,應用程序應該感知它們,以及注意數據和安全風險。允許經典軟件英語Legacy system訪問無適當兼容層的數據是發生此類問題的主要原因。[來源請求]

如果各類系統實用程序(磁盤資源管理器、防病毒軟件、壓縮歸檔程序等)未感知fork,可能導致遇到下列問題:

  • 用戶不會得知任何fork的存在,也不知道文件的實際總大小,只能看到文件的主數據流的大小。
  • 計算機病毒可能在Windows上使用替代數據流(ADS)隱藏而逃脫檢測,如果防病毒軟件未意識到fork的存在。
  • 在通過fork不敏感的通道發送文件時,數據可能丟失。這些渠道包括例如電子郵件、不支持fork的文件系統,並也包括在支持fork的文件系統上使用不支持fork的軟件複製或打包(壓縮、歸檔)文件。

參見[編輯]

參考資料[編輯]

  1. ^ Apple. File Forks. Apple. 1996-07-02 [2006-11-18]. (原始內容存檔於2008-07-24). 
  2. ^ Bruce Horn. The Grand Unified Model (1) - Resources. Folklore.org. [2006-11-18]. (原始內容存檔於2006-10-23). 
  3. ^ Command-line Backup Solutions on Mac OS X. Apple. 2005-10-29 [2006-11-18]. (原始內容存檔於2008-02-25). 
  4. ^ Microsoft. Files and Clusters. Microsoft. [2006-11-18]. [永久失效連結]
  5. ^ 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). 
  6. ^ 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). 
  7. ^ Windows Server 2012: Does ReFS replace NTFS? When should I use it?頁面存檔備份,存於網際網路檔案館) - Martin Lucas, TechNet
  8. ^ Resilient File System Overview. TechNet Library. 微軟. 29 February 2012 [25 December 2013]. (原始內容存檔於2017-02-01). 
  9. ^ 9.0 9.1 Law, Eric. Fun with Favicons. IEInternals. 微軟. 8 September 2013 [17 November 2013]. (原始內容存檔於2016-01-26). 
  10. ^ 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). 
  11. ^ FileSystem Provider (Windows PowerShell 3.0). TechNet. 微軟. 9 August 2012 [2016年12月20日]. (原始內容存檔於2016年6月24日). 
  12. ^ 12.0 12.1 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). 
  13. ^ Microsoft. Indexing service adds data streams to image files. Microsoft. 2006-10-27 [2006-11-18]. (原始內容存檔於2007-02-09). 
  14. ^ 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). 
  15. ^ 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). 
  16. ^ 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). 

外部連結[編輯]