Skip to content
NTFS2exFAT

How NTFS2exFAT works

Five phases, and a refusal to skip any of them. This page explains what happens to your data at each step and which checks stand between you and a mistake.

The five phases

1. Check the drive (read-only)

The app scans the drive without changing anything. It counts files and folders, flags names that exFAT does not allow, skips system folders such as System Volume Information and $RECYCLE.BIN, and compares the used space reported by the drive with the files macOS can actually see. A large gap is a warning that some data may be invisible to macOS.

  • Nothing is written to the drive
  • Unreadable items are listed, not skipped silently
  • You see how much backup space is needed

2. Back up with checksums

Files are copied to a folder you choose. While each file is copied its SHA-256 is computed. Progress is stored in an append-only manifest, so you can pause, quit and resume.

  • The backup cannot be on the drive that will be erased
  • Backup paths avoid collisions on case-insensitive volumes
  • Files are written to a temporary name and renamed only when complete

3. Verify the backup

Every backup file is read back from disk, bypassing the cache, and its checksum is compared with the one computed from the original. A single flipped byte fails the check.

  • Reads come from the disk, not from memory
  • Any failure stops the process before the format step

4. Guarded erase

The format step is available only when all of these are true: the backup is fully verified, the backup files still exist with the right sizes, the drive still has the same volume and disk identity and size, the backup is not on that drive, and you typed the exact drive name. The app records that it is about to erase before it touches the drive, so an interruption can be recognised later.

  • Only external drives are offered
  • The format command targets the exact volume that was backed up
  • If formatting needs permission, macOS asks you

5. Copy back and verify

Everything is copied to the new exFAT volume and read back again to compare checksums. Names that exFAT does not allow are renamed and listed. A final report is saved next to the backup.

  • A corrupt backup file is never copied to the new drive
  • The backup is kept until you delete it

What “verified” means here

A file counts as verified when its content, read back from the drive after writing, produces the same SHA-256 as the original. The app does not rely on file size or date alone. The one exception is macOS metadata files named ._*: after copying to exFAT, macOS merges them into extended attributes, so they can only be confirmed as written, not re-read.

File names and metadata

exFAT does not allow the characters " * : < > ? \ |, control characters, or names ending in a space or dot. Such names are replaced and listed in the report. Names that differ only by upper and lower case are made unique. Modification dates of files and folders are preserved.

The honest limit

macOS's built-in NTFS reader can hide or rename files whose names Windows does not allow. NTFS2exFAT works with what macOS shows it. It warns when the drive's used space is much larger than the visible files, but it cannot detect an individual hidden file. If your drive was written by a Mac or Linux NTFS driver, check it in Windows or with an ntfs-3g based driver such as NTFSTool before converting.

Under the hood

The conversion engine is a small Swift library with no dependencies beyond Foundation and CryptoKit. It is shared by the Mac app and the command-line tool.

  • Manifest: one JSON line per file with path, size, checksum and status
  • Copy: 4 MiB buffers, uncached reads and writes, fsync, atomic rename
  • Concurrency: several files at once, one large file at a time per worker
  • Safety checks live in the engine, so the app and the command line enforce the same rules

How it was tested

The engine has unit tests (including a test that flips one byte in a verified backup and expects the check to fail) and end-to-end tests that build a real NTFS disk image, run the complete conversion, and compare every restored file by SHA-256. Tests on physical external drives are still ongoing, which is one reason this is a beta.

Prefer the command line?

The same engine is available as 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>

Source on GitHub →

Ready to switch your drive?