為什麼 ext4 中需要不區分大小寫的選項?

為什麼 ext4 中需要不區分大小寫的選項?

我正在閱讀去年發布的 Linux 5.2 補丁說明,我注意到他們開始對 ext4 檔案系統中不區分大小寫的名稱的可選支持

所以...我想知道內核中需要不區分大小寫的選項(包括大小寫和標準化)的原因。我可以找出另一篇文章由 Krisman 編寫,他編寫了支援大小寫折疊檔案系統的核心程式碼,但case-insensitive file system allows us to resolve important bottlenecks for applications being ported from other operating systems並沒有觸及我的內心,我無法理解規範化和大小寫折疊的過程如何讓我們優化磁碟儲存。

我非常感謝您的幫助!

答案1

不區分大小寫的檔案系統使我們能夠解決從其他作業系統移植應用程式的重要瓶頸

沒有打動我的心,我無法理解規範化和案例折疊的過程如何讓我們優化磁碟儲存。

葡萄酒、Samba 和 Android提供不區分大小寫的檔案系統語意。如果底層檔案系統區分大小寫,則每次區分大小寫的查找都會失敗,Wine 等人。必須掃描每個目錄以證明不存在不區分大小寫的符合項目(例如,如果查找失敗,則必須對、 和中的所有檔案和所有目錄/foo/bar/readme.txt執行完整的目錄清單和大小寫比較)。foo/bar/*foo/*/*

這有幾個問題:

  • 深度嵌套的路徑可能會變得非常緩慢(這可能會生成數百個 FS 調用)或包含數萬個檔案的目錄(即透過 SMB 儲存增量備份)。
  • 這些檢查引入了競爭條件。
  • 它從根本上來說是不合理的:如果 和 都readme.txt存在README.txt,但應用程式要求README.TXT,則傳回哪個檔案是未定義的。

Android 甚至使用 FUSE/wrapfs 模擬不區分大小寫,然後使用內核SD卡FS。然而,SDCardFS 只是透過將進程移至核心空間† 來使一切變得更快。它仍然必須遍歷檔案系統(因此受到 IO 限制),引入了競爭條件,並且從根本上來說是不健全的。因此,為什麼 Google 資助†開發 F2FS 中的本機每目錄不區分大小寫的功能,並已棄用SD卡FS

過去曾多次嘗試透過 VFS 啟用不區分大小寫的查找。 2018 年的最近一次嘗試允許安裝檔案系統的不區分大小寫視圖。 Ted Tso 特別提到了添加此功能時wrappfs 的問題,因為它至少會更快並且(我相信)沒有競爭條件。然而,它仍然不健全(請求README.TXT可以返回readme.txtREADME.txt)。這被拒絕了,而只是添加對不區分大小寫的每個目錄的支持,並且不太可能將其納入 VFS††。

此外,用戶期望不區分大小寫,因此任何面向消費者的作業系統都必須提供它。 Unix 本身無法支援它,因為 Unicode 不存在且字串只是一個位元組包。對於案件折疊的處理方式有很多有效的批評在過去,但是 Unicode 提供了一個不可變的 案例折疊功能這對所有人都有效,除了單一語言環境(突厥語,即使如此,它也只是兩個代碼點)。還有檔案系統 B 樹是實施此行為的唯一合理地點。

亞洲資訊通信技術協會
††我給 Krisman 發了電子郵件,他是 EXT4 和 F2FS 上基於 VFS 的不區分大小寫查找和按目錄不區分大小寫支援的作者。

答案2

其他作業系統具有不區分大小寫的檔案系統。

例如:MacOS 允許不區分大小寫(預設)或區分大小寫。 Adobe Photoshop 和 Adob​​e Lightroom 無法很好地處理區分大小寫的檔案系統。這意味著在AdAdobe 程式中,可能存在以不同方式編寫的硬編碼路徑(可能是不同庫中的“文檔”和“文檔”,或者只是有時應用了一些過濾器(例如小寫和刪除空格,這可能與數據的路徑)。

因此,如果現在您想移植為我們時代的某些常見專有作業系統製作的程序,您應該修復所有路徑,以便始終一致地使用檔案名稱大小寫,或者您更喜歡有一個處理這些情況的檔案系統為你。

Adobe 無法在 MacOS 上做到這一點,因此對於其他供應商來說,事情會更加困難(而且成本高昂)。看https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html

答案3

我不知道使用區分大小寫的 FS 的唯一原因:它唯一做的就是它完全讓使用者感到困惑。微軟開發人員從一開始就理解它,並且不會為一個破碎的概念而煩惱。現在,三十年後,一些 Linux 開發人員已經意識到不區分大小寫更安全、更符合邏輯,並最終實現了它。

為什麼第一個 Unix 檔案系統區分大小寫?這可能是因為 CPU 更容易使用它們。您不需要額外的函數來消耗CPU 週期來驗證名稱相似的檔案是否已經存在,儘管大小寫不同(除了拉丁/英語之外,還有其他字母表,在這些字母中實現不區分大小寫並非易事)。如今,有了現代超高速 CPU,這已經不是什麼大問題了。

相關內容