Skip to content
NTFS2exFAT

NTFS2exFAT の仕組み

5つのフェーズがあり、どれも省略しません。このページでは、各ステップでデータがどうなるのか、そしてミスを防ぐためにどんなチェックがあるのかを説明します。

5つのフェーズ

1. ドライブをチェック(読み取り専用)

アプリは何も変更せずにドライブをスキャンします。ファイルとフォルダの数を数え、exFAT で使えない名前を検出し、System Volume Information や $RECYCLE.BIN などのシステムフォルダをスキップし、ドライブが報告する使用済み容量と macOS が実際に見えるファイルを比較します。差が大きい場合は、macOS から見えないデータがある可能性を示す警告です。

  • ドライブには何も書き込まれません
  • 読み取れない項目は黙ってスキップせず、一覧に表示します
  • 必要なバックアップの空き容量が分かります

2. チェックサム付きでバックアップ

ファイルは、あなたが選んだフォルダにコピーされます。各ファイルのコピー中に SHA-256 を計算します。進捗は追記専用のマニフェストに保存されるため、一時停止、終了、再開ができます。

  • バックアップを、消去されるドライブ上に置くことはできません
  • 大文字と小文字を区別しないボリュームでも、バックアップのパスが衝突しないようにします
  • ファイルは一時的な名前で書き込まれ、完了したときにだけ名前が変更されます

3. バックアップを検証

すべてのバックアップファイルをキャッシュを介さずディスクから読み直し、元のファイルから計算したチェックサムと比較します。1バイトの違いでも検証に失敗します。

  • 読み取りはメモリではなくディスクから行います
  • 失敗した場合は、フォーマットのステップの前に処理が停止します

4. 保護された消去

フォーマットのステップは、次のすべてが満たされた場合にのみ実行できます。バックアップが完全に検証済みであること、バックアップファイルが正しいサイズで残っていること、ドライブのボリュームとディスクの識別情報およびサイズが同じであること、バックアップがそのドライブ上にないこと、そしてドライブ名を正確に入力したこと。アプリは、ドライブに触れる前に「これから消去する」ことを記録するため、中断されても後で認識できます。

  • 表示されるのは外付けドライブだけです
  • フォーマットのコマンドは、バックアップを取ったボリュームそのものを対象にします
  • フォーマットに許可が必要な場合は、macOS が確認を求めます

5. 書き戻して検証

すべてを新しい exFAT ボリュームにコピーし、もう一度読み直してチェックサムを比較します。exFAT で使えない名前は変更され、一覧に記載されます。最終的なレポートはバックアップの横に保存されます。

  • 破損したバックアップファイルが新しいドライブにコピーされることはありません
  • バックアップは、あなたが削除するまで残ります

ここでいう「検証済み」とは

書き込み後にドライブから読み直した内容が、元のファイルと同じ SHA-256 になった場合に、そのファイルは検証済みとみなされます。ファイルサイズや日付だけには頼りません。唯一の例外は、._* という名前の macOS のメタデータファイルです。exFAT にコピーすると macOS が拡張属性に統合するため、書き込まれたことは確認できても、読み直すことはできません。

ファイル名とメタデータ

exFAT では、文字 " * : < > ? \ |、制御文字、末尾がスペースまたはドットの名前は使えません。こうした名前は置き換えられ、レポートに記載されます。大文字と小文字の違いだけで区別される名前は、重複しないように調整されます。ファイルとフォルダの更新日時は保持されます。

正直な限界

macOS 標準の NTFS 読み取り機能は、Windows で使えない名前のファイルを隠したり、名前を変更したりすることがあります。NTFS2exFAT は、macOS が見せてくれるものを対象に動作します。ドライブの使用済み容量が見えているファイルよりはるかに大きい場合は警告しますが、隠れた個々のファイルを検出することはできません。ドライブが Mac や Linux の NTFS ドライバで書き込まれたものである場合は、変換の前に、Windows または NTFSTool のような ntfs-3g ベースのドライバで確認してください。

内部の仕組み

変換エンジンは、Foundation と CryptoKit 以外に依存関係のない小さな Swift ライブラリです。Mac アプリと CLI ツールで共有されています。

  • マニフェスト: ファイルごとに1行の JSON(パス、サイズ、チェックサム、状態)
  • コピー: 4 MiB のバッファ、キャッシュを使わない読み書き、fsync、アトミックな名前変更
  • 並行処理: 複数のファイルを同時に処理し、ワーカーごとに大きなファイルは1つずつ処理
  • 安全チェックはエンジンに組み込まれているため、アプリでもコマンドラインでも同じルールが適用されます

テストについて

エンジンにはユニットテスト(検証済みバックアップの1バイトを書き換え、チェックが失敗することを確認するテストを含む)と、実際の 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 のソースコード →

ドライブを切り替える準備はできましたか?