Linux 掛載 Windows 格式磁碟 (FAT32/NTFS) 時,中文檔名常因編碼不匹配顯示亂碼。核心在於正確指定 iocharset (核心內部編碼) 與 codepage (磁碟上儲存編碼)。本文提供完整掛載參數對照表、GNOME 圖形配置法與永久生效方案。
| 參數 | 含義 | 常用值 |
|---|---|---|
iocharset | 核心將檔名轉換為的內部編碼 (VFS 層) | utf8 (現代系統預設) |
codepage | 磁碟上實際儲存的檔名編碼 (DOS/Windows 代碼頁) | 936 (GBK/GB2312), 950 (Big5), 437 (美英預設) |
關鍵:中文 Windows 格式化的 FAT32 通常使用 CP936 (GBK) 儲存檔名,Linux 核心需 iocharset=utf8 正確轉換。
# 1. 最通用現代系統 (推薦首試)
mount -o iocharset=utf8 /dev/sdb1 /mnt/usb
# 2. 明確指定代碼頁 (中文 FAT32 標準)
mount -t vfat -o codepage=936,iocharset=utf8 /dev/sdb1 /mnt/usb
# 3. 僅指定 iocharset (舊核心相容)
mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb
# 4. 繁體中文環境 (Big5 儲存)
mount -t vfat -o codepage=950,iocharset=utf8 /dev/sdb1 /mnt/usb
# 5. 強制 GB2312/GBK/GB18030 輸出 (特殊舊系統)
mount -t vfat -o codepage=936,iocharset=gb2312 /dev/sdb1 /mnt/usb
mount -t vfat -o codepage=936,iocharset=gbk /dev/sdb1 /mnt/usb
mount -t vfat -o codepage=936,iocharset=gb18030 /dev/sdb1 /mnt/usb
測試方法:掛載後 ls /mnt/usb 檢查中文檔名是否正常顯示。
gconf-editor (GNOME 2) 或 dconf-editor (GNOME 3)。/system/storage/default_options/vfat/mount_options (GNOME 2)org.gnome.desktop.media-handling.automount-options (GNOME 3)。iocharset=utf8。原理:GNOME 自動掛載守護進程 (gvfs/udisks) 讀取此配置作為預設 mount 選項。
/dev/sdb1 /mnt/usb vfat defaults,codepage=936,iocharset=utf8,umask=000 0 0
umask=000:所有用戶可讀寫 (FAT 無權限概念)。UUID=xxxx-xxxx 替代 /dev/sdb1 避免裝置名漂移。# 需安裝 ntfs-3g
sudo apt-get install ntfs-3g
# 掛載 (ntfs-3g 預設支援 UTF-8,通常無需額外參數)
mount -t ntfs-3g -o defaults,umask=000 /dev/sdb1 /mnt/usb
# 如仍有亂碼 (極罕見)
mount -t ntfs-3g -o nls=utf8,umask=000 /dev/sdb1 /mnt/usb
ntfs-3g 使用 nls 參數而非 iocharset。
# 查看核心支援的代碼頁
ls /lib/modules/$(uname -r)/kernel/fs/nls/
# 查看支援的字符集
iconv -l | grep -i utf
mount -o utf8 — vfat 不支援 utf8 選項,必須用 iocharset=utf8。codepage (磁碟端) 與 iocharset (核心端)。ntfs-3g 並配合 nls。掌握 codepage=936,iocharset=utf8 黃金組合,配合 GNOME 配置編輯器或 /etc/fstab 永久化,即可徹底解決 Linux 下 FAT32 U 盤中文亂碼。現代發行版 (Ubuntu 18.04+, CentOS 7+) 預設已優化自動掛載編碼,手動干預場景大幅減少,但原理理解對排查邊緣案例仍不可或缺。