在電腦檔案系統領域中,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的軟體複製或打包(壓縮、歸檔)檔案。

參見

參考資料

外部連結

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.