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). 

外部連結