NTFS on Linux
以目前 Linux Kernel 對於 NTFS 的支援,若在編譯時選擇 CONFIG_NTFS_FS 與 CONFIG_NTFS_RW 兩個選項,則可以『部份的』支援 NTFS 檔案系統(只能讀取不可寫入,或是只可寫入也存在的檔案)。但若想要如 Windows 般正常的存取 NTFS,這兩個編譯選項依然猶如雞肋。現今大部分 Linux Distribution 為了要相容(萬惡的) NTFS 檔案系統,皆使用 ntfs-3g (3rd Generation read/write NTFS driver) 作為 Driver。然而,此『driver』卻是在 user space 執行,而不是在 kernel 中。
ntfs-3g
在 ntfs-3g manual page 開宗明義的第一句就說了
ntfs-3g is an NTFS driver, which can create, remove, rename, move files, directories, hard links, and streams
這馬上激起我的好奇心,為何你的 Driver 要寫在 User space,而不寫在 Kernel?
ntfs-3g 眾所皆知是一個基於 GPL 授權的 open source project,其運作在 user space 的大致原理是使用 Kernel 的 FUSE (File System in User Space) driver,建立一個 FUSE 檔案系統,讓 Linux 得以存取。很明顯地,ntfs-3g 與 Kernel 所支援的 NTFS driver 八竿子打不著關係。只要你的 Linux Kernel 支援 CONFIG_FUSE_FS 選項,就可以成功的 porting ntfs-3g 進你的系統。
為何不將 driver 寫在 Kernel Space?稍有概念的人都知道,Kernel Space 可以擁有較多的 CPU 時間,同樣的程式段執行在 Kernel Space 效能自然會比 User Space 來得好。尤其當運行的 AP 多了,效能差異便更加明顯。Tuxera 是家商業公司,如果要把這些 know-how 全都 open source 出來,那要靠甚麼吃飯?Tuxera 還有另一個商業授權版本的 ntfs-3g,就是 kernel module 的 NTFS driver。想要你的系統對 NTFS 有更好的效能與支援?還是乖乖掏腰包吧!至於為何 Kernel 社群上的那些神人不去改善 NTFS 的支援?我想下一段的標題可以作為解釋…
去你的NTFS
因為 M$ 作業系統在這個星球上依然很強勢的存著,NTFS 自然可以大行其道。且近些年家庭影音中心 (Home Media Center) 的崛起, Set-Top Box 與 NAS 等相關產品大量出籠。於此情況下,如何在嵌入式系統 (Embedded System) 穩定且有效率的支援 NTFS 儲存媒介,便是一個商機存在。無論是 ntfs-3g 的開發維護者 Tuxera,或是 Paragon 軟體公司等,都在 NTFS driver on Unix-Like System 有深入的著墨。或許,這便是站在 M$ 巨人的肩膀之上,發展出的另一種商業獲利模式。
这个标题太精辟了!