Файл не менялся, но программа считает иначе: подводные камни сравнения по дате
Знакомая ситуация: папка с документами синхронизирована с флешкой, за неделю в ней ничего не менялось, но после перехода на летнее время или подключения накопителя к другому компьютеру программа предлагает перезаписать сотни файлов. Это не сбой и не вирус. Дело в том, что разные файловые системы и протоколы по-разному хранят метки времени.
Проблему удобно разобрать на примере FreeFileSync, бесплатной утилиты с открытым исходным кодом для синхронизации папок. Она умеет сравнивать файлы двумя способами: по дате изменения и размеру или по содержимому. Программа работает не только с локальными дисками, но и с серверами по FTP и SFTP, а также с Google Drive, поэтому на ней хорошо видно, где возникают расхождения.
Откуда берутся ложные изменения
Первая причина в разной точности хранения времени. FAT32, на которой до сих пор форматируют многие флешки, записывает время изменения с шагом в 2 секунды, а NTFS хранит его с точностью до 100 наносекунд. При копировании метка округляется, и формально файлы перестают совпадать.
Вторая причина связана с часовыми поясами. NTFS хранит время в UTC, а FAT32 в местном времени компьютера. После перевода часов или подключения флешки к машине в другом поясе все файлы на накопителе сдвигаются ровно на час или на несколько часов. Размер при этом не меняется, и по этому признаку легко узнать ложное срабатывание.
Третья причина в сетевых протоколах. Старые FTP-серверы могут отдавать время с точностью до минуты, а иногда и без года. Облачные хранилища порой ставят собственную метку в момент загрузки. В итоге даже аккуратно скопированный файл выглядит изменённым.
Дата или содержимое: что выбрать
Сравнение по дате и размеру используется по умолчанию. Программа читает только метаданные, поэтому десятки тысяч файлов проверяются за секунды. Для ежедневной синхронизации рабочих папок на дисках NTFS этого почти всегда хватает.
Сравнение по содержимому читает файлы побайтно и не зависит от меток времени. Оно точно показывает, отличаются ли данные на самом деле, но работает медленно, потому что каждый файл приходится прочитать с обеих сторон. На внешнем USB-диске или в Google Drive проверка большого архива может занять часы.
Режим лучше выбирать под задачу. Для регулярных обновлений достаточно сравнения по дате. Проверку по содержимому стоит запускать после переноса данных между разными файловыми системами или если есть подозрение, что копия повреждена.
Страховка от ошибки
На случай сдвига из-за часовых поясов в FreeFileSync есть отдельная настройка: в параметрах сравнения можно указать допустимое расхождение во времени в часах. Если задать 1, файлы, которые отличаются ровно на час, будут считаться одинаковыми. Погрешность в пределах двух секунд программа по умолчанию не учитывает.
Настройки помогают не во всех случаях, поэтому полезно включить архивирование. Тогда файл, который синхронизация должна перезаписать или удалить, не пропадает, а переносится в отдельную папку. Если сравнение ошиблось и старая версия затёрла новую, её можно вернуть вручную.
Достаточно один раз проверить, какие метки времени выдаёт конкретная флешка, сервер или облако, и подобрать подходящий режим. После этого синхронизация будет переносить только файлы, которые действительно изменились, и не будет предлагать перезаписать сотни файлов без причины.

6 сентября, 2021
27 апреля, 2021
25 ноября, 2015