Skip to content
NTFS2exFAT

Как работает NTFS2exFAT

Пять этапов, и приложение отказывается пропускать любой из них. На этой странице рассказано, что происходит с вашими данными на каждом шаге и какие проверки стоят между вами и ошибкой.

Пять этапов

1. Проверка диска (только чтение)

Приложение сканирует диск, ничего не меняя. Оно считает файлы и папки, отмечает имена, недопустимые в exFAT, пропускает системные папки вроде System Volume Information и $RECYCLE.BIN и сравнивает занятое место, о котором сообщает диск, с файлами, которые macOS реально видит. Большая разница — предупреждение о том, что часть данных может быть невидима для macOS.

  • На диск ничего не записывается
  • Нечитаемые элементы перечисляются, а не пропускаются молча
  • Вы видите, сколько места нужно для резервной копии

2. Резервная копия с контрольными суммами

Файлы копируются в выбранную вами папку. Во время копирования каждого файла вычисляется его SHA-256. Ход работы сохраняется в манифесте, в который можно только дописывать, поэтому можно поставить на паузу, выйти и продолжить.

  • Копия не может находиться на диске, который будет стёрт
  • Пути копии исключают конфликты на томах без учёта регистра
  • Файлы записываются под временным именем и переименовываются только после завершения

3. Проверка резервной копии

Каждый файл копии заново читается с диска в обход кэша, а его контрольная сумма сравнивается с вычисленной по оригиналу. Один изменившийся байт не пройдёт проверку.

  • Чтение идёт с диска, а не из памяти
  • Любая ошибка останавливает процесс до шага форматирования

4. Защищённое стирание

Шаг форматирования доступен, только если выполнено всё сразу: резервная копия полностью проверена, файлы копии по-прежнему на месте и имеют правильные размеры, у диска те же идентификаторы тома и диска и тот же размер, копия не находится на этом диске, а вы ввели точное имя диска. Приложение записывает, что собирается стереть диск, до того как прикоснётся к нему, чтобы прерывание можно было распознать позже.

  • Предлагаются только внешние диски
  • Команда форматирования направлена именно на тот том, с которого сделана копия
  • Если для форматирования нужно разрешение, macOS запросит его

5. Возврат файлов и проверка

Всё копируется на новый том exFAT и заново читается для сравнения контрольных сумм. Имена, недопустимые в exFAT, переименовываются и попадают в список. Итоговый отчёт сохраняется рядом с резервной копией.

  • Повреждённый файл копии никогда не копируется на новый диск
  • Копия хранится, пока вы сами её не удалите

Что здесь значит «проверено»

Файл считается проверенным, если его содержимое, заново прочитанное с диска после записи, даёт тот же SHA-256, что и оригинал. Приложение не полагается только на размер или дату файла. Единственное исключение — служебные файлы macOS с именами ._*: после копирования на exFAT macOS объединяет их с расширенными атрибутами, поэтому можно подтвердить лишь то, что они записаны, но не перечитать их.

Имена файлов и метаданные

exFAT не допускает символы " * : < > ? \ |, управляющие символы и имена, оканчивающиеся пробелом или точкой. Такие имена заменяются и попадают в отчёт. Имена, различающиеся только регистром букв, делаются уникальными. Даты изменения файлов и папок сохраняются.

Честное ограничение

Встроенный в macOS драйвер чтения NTFS может скрывать или переименовывать файлы, имена которых недопустимы в Windows. NTFS2exFAT работает с тем, что показывает macOS. Приложение предупреждает, если занятое место на диске намного больше, чем размер видимых файлов, но не может обнаружить отдельный скрытый файл. Если ваш диск записывался драйвером NTFS на Mac или Linux, перед конвертацией проверьте его в Windows или с помощью драйвера на основе ntfs-3g, такого как NTFSTool.

Под капотом

Движок конвертации — небольшая библиотека на Swift без зависимостей, кроме Foundation и CryptoKit. Её используют и приложение для Mac, и CLI-утилита.

  • Манифест: одна JSON-строка на файл с путём, размером, контрольной суммой и статусом
  • Копирование: буферы по 4 МиБ, чтение и запись без кэша, fsync, атомарное переименование
  • Параллелизм: несколько файлов одновременно, по одному крупному файлу на каждый поток
  • Проверки безопасности находятся в движке, поэтому приложение и командная строка соблюдают одни и те же правила

Как это тестировалось

У движка есть модульные тесты (включая тест, который изменяет один байт в проверенной копии и ожидает, что проверка не пройдёт) и сквозные тесты, которые создают настоящий образ диска 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 →

Готовы перевести диск в exFAT?