Skip to content
NTFS2exFAT

NTFS2exFAT 運作方式

五個階段,而且絕不跳過任何一個。本頁說明你的資料在每個步驟會發生什麼事,以及有哪些檢查在保護你避免出錯。

五個階段

1. 檢查磁碟(唯讀)

App 在不改動任何內容的情況下掃描磁碟。它會計算檔案與資料夾數量、標示 exFAT 不允許的名稱、略過 System Volume Information 與 $RECYCLE.BIN 等系統資料夾,並將磁碟回報的已用空間與 macOS 實際看得到的檔案做比較。差距過大,表示可能有部分資料對 macOS 是不可見的。

  • 不會對磁碟寫入任何內容
  • 無法讀取的項目會被列出,不會被悄悄略過
  • 你會看到所需的備份空間大小

2. 備份並計算校驗碼

檔案會複製到你選擇的資料夾。複製每個檔案時同時計算其 SHA-256。進度記錄在只增不減的清單檔(manifest)中,因此你可以暫停、結束並續傳。

  • 備份不能放在即將被清除的磁碟上
  • 備份路徑會避開不分大小寫磁碟區上的名稱衝突
  • 檔案先以暫存名稱寫入,完整後才改成正式名稱

3. 驗證備份

每個備份檔案都會略過快取、從磁碟讀回,並將其校驗碼與原始檔案計算出的校驗碼比對。即使只有一個位元組被改動,檢查也會失敗。

  • 從磁碟讀取,而非從記憶體
  • 任何失敗都會在格式化步驟之前停止流程

4. 防護式清除

只有在下列條件全部成立時,才能進行格式化:備份已完整驗證、備份檔案仍存在且大小正確、磁碟的磁碟區與磁碟身分及大小皆未改變、備份不在該磁碟上,且你輸入了確切的磁碟名稱。App 會在動到磁碟之前先記錄「即將清除」,因此中斷之後也能被辨識出來。

  • 只會列出外接磁碟
  • 格式化指令針對的是剛才備份的那個確切磁碟區
  • 如果格式化需要權限,macOS 會詢問你

5. 複製回去並驗證

所有檔案複製到新的 exFAT 磁碟區,並再次讀回以比對校驗碼。exFAT 不允許的名稱會被重新命名並列出。最終報告會儲存在備份旁邊。

  • 損毀的備份檔案絕不會被複製到新磁碟
  • 備份會保留,直到你自行刪除

這裡所說的「已驗證」是什麼意思

當檔案寫入後從磁碟讀回的內容,算出的 SHA-256 與原始檔案相同時,才算已驗證。App 不會只憑檔案大小或日期判斷。唯一的例外是名為 ._* 的 macOS 中繼資料檔案:複製到 exFAT 後,macOS 會將它們合併到擴充屬性中,因此只能確認已寫入,無法重新讀回驗證。

檔名與中繼資料

exFAT 不允許 " * : < > ? \ | 這些字元、控制字元,或以空格、句點結尾的名稱。這類名稱會被取代並列入報告。僅大小寫不同的名稱會被調整為唯一。檔案與資料夾的修改日期會被保留。

誠實說明的限制

macOS 內建的 NTFS 讀取程式可能隱藏或重新命名名稱不符 Windows 規則的檔案。NTFS2exFAT 只能處理 macOS 呈現給它的內容。當磁碟的已用空間遠大於可見檔案時它會發出警告,但無法偵測單一被隱藏的檔案。如果你的磁碟是由 Mac 或 Linux 的 NTFS 驅動程式寫入,請在轉換前先在 Windows 中,或用 NTFSTool 這類基於 ntfs-3g 的驅動程式檢查。

技術細節

轉換引擎是一個小型 Swift 函式庫,除了 Foundation 與 CryptoKit 之外沒有其他相依項目。Mac App 與命令列工具共用同一個引擎。

  • 清單檔(manifest):每個檔案一行 JSON,包含路徑、大小、校驗碼與狀態
  • 複製:4 MiB 緩衝區、不經快取的讀寫、fsync、原子式更名
  • 並行:同時處理多個檔案,每個工作執行緒一次只處理一個大型檔案
  • 安全檢查位於引擎內,因此 App 與命令列遵守相同規則

測試方式

引擎有單元測試(包括一項會在已驗證的備份中改動一個位元組,並預期檢查失敗的測試),以及端對端測試:建立真實的 NTFS 磁碟映像、執行完整轉換,並以 SHA-256 比對每個還原的檔案。實體外接磁碟的測試仍在進行中,這也是目前為測試版的原因之一。

偏好命令列嗎?

同一個引擎也提供 ntfs2exfat-cli。

ntfs2exfat-cli list
ntfs2exfat-cli start disk4 ~/Backups
ntfs2exfat-cli backup ~/Backups/NTFS2exFAT-<job>
ntfs2exfat-cli erase ~/Backups/NTFS2exFAT-<job> --confirm "MY DRIVE"
ntfs2exfat-cli restore ~/Backups/NTFS2exFAT-<job>

GitHub 原始碼 →

準備好轉換你的磁碟了嗎?