如何使用原生 NTFS 驅動替代舊版 FUSE NTFS 驅動
NTFS 是 Windows NT 系列操作系統支持的磁碟文件系統格式,它是一個特別為網路和磁碟配額、文件加密等管理安全特性設計的文件系統。而 Linux 內核中新進入主線支持的 NTFS3 驅動是一個功能齊全的 NTFS 驅動程序,該驅動程序適用於最高的 NTFS 3.1 版本。
簡介
最初,Linux 內核沒有 NTFS 的原生支持,後來對 NTFS 的支持也僅提供了只讀功能。來自 Tuxera 的 NTFS-3G 是之前主流的解決方案,但在實際使用中也存在一些問題。NTFS-3G 是藉助 Linux 的用戶空間文件系統(FUSE)模塊在用戶層實現的一個對 NTFS 支持的文件系統,其對 NTFS 的訪問邏輯代碼都是在用戶層代碼實現的。
在 NTFS3 出現之前,Linux 上使用 NTFS 主要問題還是缺乏穩定且功能齊全的讀/寫支持。
2020 年,Paragon 軟體公司做出了一個驚人的決定:嘗試將之前只提供給商業客戶的 NTFS3 驅動程序貢獻到 Linux 主線。最終,在經過多輪審核和修改之後,Linux 內核 5.15 合併了 Paragon 提供的 NTFS3 內核驅動,它擁有更高的性能和更多的特性。
- 該驅動程序實現了對 NTFS 文件系統中的正常、稀疏和壓縮文件的讀/寫支持。
- 支持本地日誌回放。
- 支持已掛載的 NTFS 卷的 NFS 導出。
- 支持文件和文件夾的許可權管理。
如何使用 NTFS3 驅動掛載 NTFS 卷
使用 NTFS3 驅動掛載時使用的文件系統類型是 ntfs3
。
手動掛載
以前使用 NTFS-3g 驅動的掛載方式是:
# mount -t ntfs-3g /dev/sdxY /mnt
現在只需要將 ntfs-3g
替換為 ntfs3
即可:
# mount -t ntfs3 /dev/sdxY /mnt
-t
指出文件系統類型,/dev/sdxY
是你的 NTFS 卷(分區)的路徑,可以使用 lsblk
命令查看。/mnt
是掛載的目標文件夾。
如果需要指定掛載參數,可使用 -o
指定參數,如:
# mount -t ntfs3 -o iocharset=utf8,umask=22,prealloc /dev/sdxY /mnt
這裡的 iocharset=utf8,umask=22,prealloc
掛載參數,詳見後文解釋。
開機自動掛載
如需在開機時自動掛載,可編輯 /etc/fstab
文件,添加如下行:
UUID=**** /data ntfs3 iocharset=utf8,umask=0,prealloc 0 0
其中 UUID=****
是指定卷(分區)的 UUID。使用 UUID
的好處在於它們與磁碟掛載順序無關。如果你在 BIOS 中改變了你的存儲設備順序,或是重新拔插了存儲設備,或是一些 BIOS 可能會隨機地改變存儲設備的順序,那麼用 UUID
來表示指定卷(分區)會更有效。可以使用 blkid
命令查看 UUID
。
/data
是掛載位置。本示例的位置是 /data
,你需要提前創建這個文件夾。
後面的選項都是掛載參數,參見後文介紹。
最後兩個 0 0
,表示是否備份和是否檢查。0 0
表示不備份、不檢查。
掛載參數說明
參數 | 解釋 |
---|---|
iocharset=name |
此選項告知驅動程序如何解釋路徑字元串,並將其轉換為 Unicode 或返回。如果未設置此選項,將使用默認代碼頁。示例:iocharset=utf8 |
uid= |
掛載用戶 ID |
gid= |
掛載組 ID |
umask= |
控制裝載 NTFS 卷後創建的文件/目錄的默認許可權。 |
dmask= |
fmask 只適用於文件,dmask 只適用於目錄,而不是指定同時適用於文件和目錄的 umask 。 |
fmask= | 見上 |
noacsrules |
「無訪問規則」裝載選項將文件/文件夾的訪問許可權設置為 777,所有者/組設置為 root。此裝載選項吸收所有其他許可權。文件/文件夾的許可權更改將報告為成功,但仍將保持 777。所有者/組更改將報告為成功,但他們將保留為 root 用戶。 |
nohidden |
Linux 下不會顯示具有 Windows 特定隱藏(FILE_ATTRIBUTE_HIDDEN )屬性的文件。 |
sys_immutable |
具有 Windows 特定系統(FILE_ATTRIBUTE_SYSTEM )屬性的文件將標記為系統不可變文件。 |
discard |
支持 TRIM 命令以提高刪除操作的性能,建議將其用於固態驅動器(SSD)。 |
force |
即使卷被標記為臟,也強制驅動程序裝載分區。不建議使用。 |
sparse |
創建稀疏的新文件。 |
showmeta |
使用此參數可顯示已裝入 NTFS 分區上的所有元文件(系統文件)。默認情況下,所有元文件都是隱藏的。 |
prealloc |
當寫入時文件大小增加時,為文件過度預分配空間。減少對不同文件執行並行寫入操作時的碎片。 |
acl |
支持 POSIX ACL(訪問控制列表)。如果內核支持,則有效。不要與 NTFS ACL 混淆。指定為 acl 的選項支持 POSIX acl。 |
NTFS3 的優點
NTFS3 是內核態的驅動,ntfs3 比 ntfs-3g 無論是速度還是負載都要好上不少。
已經有諸多網友做過測試:
除了性能更好以外,NTFS3 還支持掛載用戶和文件許可權管理等功能。具體使用方法可以自行學習 gid
、uid
以及 umask
的用法。
另外 NTFS3 還支持 NTFS 的 prealloc
特性,可以大幅減少文件碎片的產生。
關於 NTFS3 驅動無人維護的問題
Paragon 於 2020 年在 GNU 通用許可證下發布了 NTFS3 驅動程序,在開源後的一年裡,NTFS3 的驅動經過了多輪審查和修改,用來提高代碼質量。直到 2021 年合併進入內核主線。
但是自從該驅動 2021 年在 Linux 5.15 中最終被主線化以來,至今為止,在接近一年的時間裡,還沒有任何重大的錯誤修復被送入驅動。
有人推測是該驅動的維護者 Konstantin Komarov 身處俄羅斯,受到俄烏戰爭影響的原因。
隨後包括 Linus Torvalds 在內的諸多程序員都對此事表達了關切,並且願意參與到貢獻中來。
現在,我們看到 Paragon 軟體公司的 Konstantin Komarov 在因休息和其他事務而離開後,又重新活躍在內核郵件列表中。Komarov 在 2022 年 6 月 3 日為 Linux 5.19 的合併窗口提交了一批 NTFS3 的修正。
我相信 ntfs3 未來會越來越好。並且目前,ntfs3 已經是 Linux 中最好用 NTFS 驅動了,我覺得你也不妨嘗試一下。
作者簡介:一個喜歡瞎鼓搗的醫學生
via: https://www.insidentally.com/articles/000029/
作者:insidentally 編輯:wxy
本文由貢獻者投稿至 Linux 中國公開投稿計劃,採用 CC-BY-SA 協議 發布,Linux中國 榮譽推出
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive