分享 NTFS HD 的問題 | Ubuntu 20.04 x Windows 10

分享 NTFS HD 的問題 | Ubuntu 20.04 x Windows 10

雙啟動計算機,Ubuntu 20.04 和 Windows 10 位於單獨的 m.2 nvme 儲存裝置上。我有一個設定為 NTFS 的外部硬碟 (14TB)。在任一作業系統上我都可以寫入光碟。但是,當我在 Windows 10 中開啟硬碟上的文件時,如果我使用 Ubuntu 20.04 來產生這些文件,它們通常會損壞。例如:

D:\my\path> type myfile.mrc.tlt
The file or directory is corrupted and unreadable.

我在兩個外部硬碟(一個 Seagate 和另一個 WD)上看到了這種行為。我原以為問題出在希捷硬碟。但我現在已經用 WD 複製了它。

不知道從哪裡開始排除故障。

當我在運行時安裝驅動器時,journalctl -f我得到以下資訊:

Nov 05 17:12:21 axoneme udisksd[894]: Mounted /dev/sdd1 at /media/jared/Elements on behalf of uid 1000
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Activating via systemd: service name='org.freedesktop.Tracker1' unit='tracker-store.service' requested by ':1.1' (uid=1000 pid=1637 comm="/usr/libexec/tracker-miner-fs " label="unconfined")
Nov 05 17:12:21 axoneme systemd[1629]: Starting Tracker metadata database store and lookup manager...
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Activating service name='org.gnome.Shell.HotplugSniffer' requested by ':1.37' (uid=1000 pid=1860 comm="/usr/bin/gnome-shell " label="unconfined")
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Successfully activated service 'org.gnome.Shell.HotplugSniffer'
Nov 05 17:12:21 axoneme dbus-daemon[1088]: [session uid=125 pid=1088] Successfully activated service 'org.freedesktop.Tracker1'
Nov 05 17:12:21 axoneme systemd[1072]: Started Tracker metadata database store and lookup manager.
Nov 05 17:12:21 axoneme dbus-daemon[1641]: [session uid=1000 pid=1641] Successfully activated service 'org.freedesktop.Tracker1'
Nov 05 17:12:21 axoneme systemd[1629]: Started Tracker metadata database store and lookup manager.
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10255 > 9984): Illegal seek
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10256 > 9984): Illegal seek
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10164 > 9984): Illegal seek
Nov 05 17:12:21 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10165 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10009 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10010 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10030 > 9984): Illegal seek
Nov 05 17:12:22 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10031 > 9984): Illegal seek

同樣,如果我ls -lth在 Ubuntu 20.04 的 NTFS HD 上的目錄中運行,我會在損壞的目錄中看到以下內容:

Nov 05 17:16:03 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10294 > 9984): Illegal seek
Nov 05 17:16:03 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10290 > 9984): Illegal seek
Nov 05 17:16:03 axoneme ntfs-3g[5491]: Trying to read non-allocated mft records (10360 > 9984): Illegal seek

答案1

因此,評論中的討論表明,一旦 Windows 訪問 NTFS 分割區,問題就會開始發生。那麼,這是 Windows 的問題嗎?看起來很有可能,儘管與 Windows 相比,ntfs-3g FUSE 驅動程式有可能以錯誤的方式解釋某些內容,從而導致不相容。

有趣的是,這個問題似乎極為罕見(我只發現了幾篇文章,其中包含來自journalctl的確切錯誤,一篇來自2008年,另一篇關於與RAID的一些奇怪的交互)。這是需要注意的事情,因為這可能意味著您有一些特殊的配置會導致這些問題,並且找出可能是什麼會非常有趣。但我會將其當作練習留給讀者。

就解決方法而言,您可以嘗試的是:

  1. 嘗試新的ntfs3核心驅動程式(與您使用的 ntfs-3g 相反),自 Linux 5.15 起由 Paragon Software 貢獻到核心中。不要與舊的唯讀 ntfs 核心驅動程式混淆,後者仍未被刪除。您需要更新到 5.15 或更高版本的 Linux 核心。 22.04中好像預設使用的是5.15(我建議您升級 20.04 → 22.04,因為在 20.04 上使用較舊的軟體,您會錯過很多優化和功能)

    順便說一句,我不知道如何讓檔案總管預設使用 ntfs3,但您可以新增一個/etc/fstab使用 ntfs3 驅動程式的條目。

    這可能對您的問題有幫助,也可能沒有幫助。但如果沒有,那麼我 97% 確定這純粹是您的 Windows 系統的錯誤(另請參閱我關於稀有性的觀點)。我之所以有信心,是因為 Paragon Software 是一家長期銷售檔案系統驅動程式的老公司,我很確定他們有足夠的專業知識和實踐經驗來解決與原始 Windows 驅動程式可能存在的不相容問題。

  2. 如果您專門使用 NTFS 來共享文件,您也可以考慮:

    1. 使用 UDF 檔案系統代替。 Windows 和 Linux 均支援它。
    2. 使用外脂肪。從 5.7 開始,SAMSUNG 新增了 exfat 驅動程式, 和他們還發布了exfatprogs,因此適當的支持已經到位。

PS:理想情況下,您也可以嘗試最新的 ntfs-3g,然後如果問題仍然可以重現,請回報錯誤。儘管您可能需要讓開發人員相信這確實是一個 ntfs-3g 問題。如果 ntfs3 驅動程式可以正常運作,那麼這可能是問題出在 ntfs-3g 驅動程式中的隱含證據。

相關內容