
這顆 Transcend 2TB 外接硬碟平常在 Mac、Windows、Ubuntu 之間輪流使用,用了一段時間都沒問題。
某天在 Mac 上用完,可能因為趕時間,忘記按退出就直接拔掉了。當下其實有一點心虛,知道這樣不太對,但看起來也沒什麼異狀,就沒多想。
沒想到下次插回 MacBook,等了一下,桌面沒有出現硬碟圖示。打開 Finder,側欄也看不到。重新插拔幾次,還是沒反應。
那種感覺有點熟悉,就是上次沒有正確退出留下的後遺症。
在 Mac 終端機跑 diskutil list,指令直接卡住不動,沒有任何輸出。
改用 fs_usage 觀察系統行為:
sudo fs_usage | grep -i disk看到系統瘋狂對 /dev/rdisk4s1 發出大量 RdData 請求:
10:11:03 RdData[S] /dev/rdisk4s1 0.001712 W com.apple.fs
10:11:03 RdData[S] /dev/rdisk4s1 0.001698 W com.apple.fs
10:11:03 RdData[S] /dev/rdisk4s1 0.005336 W com.apple.fs
...(每秒幾十筆,持續不斷)這代表硬碟有被系統偵測到,但 macOS 嘗試掃描檔案系統時一直讀不到想要的資料,所以卡住。這是壞軌或檔案系統損壞的典型症狀。
之後 diskutil list 連外接硬碟都消失了,系統讀取失敗太多次後自動放棄。改用不會嘗試掛載的指令確認:
ls /dev/disk*輸出:
...
/dev/disk4
/dev/disk4s1確認硬碟還在,裝置為 disk4。
把硬碟接到 Ubuntu,用 lsblk 確認:
lsblk | grep sdcsdc 8:32 0 1.8T 0 disk
└─sdc1 8:33 0 1.8T 0 part /media/user/TranscendLinux 成功掛載了,格式是 exFAT。接著看 kernel 訊息:
sudo dmesg | grep sdc | tail -20最後一行出現關鍵訊息:
exFAT-fs (sdc1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.原因找到了。上次沒有正常退出就拔掉硬碟,exFAT 檔案系統被標記為「髒」(dirty),Mac 看到這個標記就拒絕掛載。Linux 對這個標記比較寬鬆,所以還能掛載成功。
exfatprogs 是 Linux 上用來管理 exFAT 檔案系統的工具包,由三星開發並開源,是目前 Linux 官方推薦的 exFAT 工具(取代舊版的 exfat-utils)。
Ubuntu 22.04 以上直接用 apt 安裝:
sudo apt install exfatprogs安裝後包含兩個主要指令:
fsck.exfat:檢查與修復 exFAT 檔案系統
fsck.exfat /dev/sdX1 # 只檢查,不修復
fsck.exfat -r /dev/sdX1 # 自動修復
fsck.exfat -v /dev/sdX1 # 詳細輸出mkfs.exfat:將磁碟格式化為 exFAT
sudo mkfs.exfat -L "MyDisk" /dev/sdX1 # -L 指定磁碟名稱注意:使用前必須先
umount卸載磁碟,否則會報錯。
exFAT 是目前跨平台相容性最好的格式:
| 格式 | Mac 讀 | Mac 寫 | Windows | Linux |
|---|---|---|---|---|
| NTFS | ✅ | ❌(需第三方) | ✅ | ✅ |
| HFS+ | ✅ | ✅ | ❌(需第三方) | ✅ |
| exFAT | ✅ | ✅ | ✅ | ✅ |
| FAT32 | ✅ | ✅ | ✅ | ✅(單檔限 4GB) |
外接硬碟要在 Mac 和 Windows 之間共用,exFAT 是最省事的選擇。
先安裝工具,卸載硬碟後跑 fsck:
sudo apt install exfatprogs
sudo umount /dev/sdc1
sudo fsck.exfat -v /dev/sdc1第一次跑 -v(詳細輸出模式),指令卡住很久,等了一段時間後中斷。重新跑確認狀態:
sudo fsck.exfat -v /dev/sdc1
# exfatprogs version : 1.2.2
# label: Transcend
# (卡住)中斷後直接把硬碟插回 Mac,結果還是看不到。
問題出在兩個地方:第一次沒有用 -r 讓工具自動修復,第二是跑完之後沒有執行 eject 正確退出,導致硬碟帶著髒狀態被拔走。
-r 並正確 eject(成功)重新卸載,這次改用 -r(自動修復模式):
sudo umount /dev/sdc1
sudo fsck.exfat -r /dev/sdc1輸出:
exfatprogs version : 1.2.2
/dev/sdc1: clean. directories 41649, files 329208clean 確認修復成功,41649 個資料夾、329208 個檔案全部完整。
這次跑完後先正確退出再拔:
sudo eject /dev/sdc插回 Mac,硬碟立刻出現在桌面。
exFAT 硬碟沒有正常退出就拔掉,Mac 會因為髒標記拒絕掛載。用 Linux 的 fsck.exfat -r 修復並搭配 eject 正確退出,就能解決。
這次踩坑的關鍵教訓有兩點:fsck 要加 -r 才會真正修復,跑完之後也要記得 eject 讓系統正確寫入乾淨標記再拔,缺少任何一步都不會成功。
預防方式:拔硬碟前記得先退出。
sudo eject /dev/sdX