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系列(麥金塔)的文件系統麥金塔文件系統(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 - on
Seamless Wikipedia browsing. On steroids.