NTFS-3G 的「unsupported reparse point」錯誤
DR 的家用 PC 是 Windows 10 + Linux(目前是 Fedora 27)雙系統,偶爾會需要在兩個系統之間互相抓取檔案。其中在 Linux 系統上掛載 NTFS 檔案系統的途徑,自然就是透過 NTFS-3G。然而最近 DR 在讀取掛載後的 Windows\Fonts 字型目錄時,卻出現大量的 IO 錯誤。如果針對其中一個無法讀取的檔案進行測試,例如:
- ls -l simsun.ttc
會發現該檔案是指向「unsupported reparse point」。為了進一步釐清狀況,DR 接著將能夠存取的檔案,與不能存取的檔案進行比對。具體的流程是先卸載分割區,然後分別執行以下指令:
- sudo ntfsinfo -F /Windows/Fonts/simsunb.ttf /dev/sda2
- sudo ntfsinfo -F /Windows/Fonts/simsun.ttc /dev/sda2
兩者的輸出訊息有一些差異,首先是 simsunb.ttf:
File attributes: ARCHIVE (0x00000020)
Namespace: POSIX
Filename: 'simsunb.ttf'
再來是 simsun.ttc:
File attributes: ARCHIVE SPARSE_FILE REPARSE_POINT (0x00000620)
Reparse point tag: 0x80000017 (Wof compressed)
Namespace: POSIX
Filename: 'simsun.ttc'
於是根據網路上的討論:
- https://bugzilla.redhat.com/show_bug.cgi?id=1377049
- https://bugs.launchpad.net/ubuntu/+source/ntfs-3g/+bug/1728354
得知這是因為 Windows 10 對閒置的系統檔案使用了新的壓縮技術,而 NTFS-3G 需要安裝 plugin 才能夠讀取(解壓縮)這些檔案。至於 plugin 的安裝就相當單純了,先確認系統中的 NTFS-3G 版本為 2017.3.23 或更新版本,然後前往以下頁面:
http://jp-andre.pagesperso-orange.fr/advanced-ntfs-3g.html#download
下載其中的 systcomp.zip,接著解開來,將 linux-64 目錄下的 ntfs-plugin-80000017.so 放置到新建立的 /usr/lib64/ntfs-3g 目錄裡(這道程序會因平台架構而異)。完成後,重新掛載檔案系統就不會再出現讀取錯誤了。