21 сент. 2014 г.

Почему метка времени файла, скопированного на флэшку, увеличивается на 2 секунды?

Автор: Рэймонд Чен.
Оригинал статьи: Why does the timestamp of a file increase by up to 2 seconds when I copy it to a USB thumb drive?

Некоторое время назад мы узнали, что файловая система FAT записывает метки времени в местном времени с двухсекундным разрешением. Это значит, что копирование файла на устройство с файловой системой FAT (обычно это дискета или флэшка) может увеличить метку времени файла на 2 секунды. И даже после копирования метка времени непостоянна. Метка времени меняется в зависимости от часового пояса, установленного на компьютере, который обращается к устройству. Если вы находитесь в местности с переходом на зимнее/летнее время, метка времени файла весной смещается на час в одну сторону, а осенью - в другую (часы переводятся дважды в год).

Хорошо, но почему метка времени всегда увеличивается? Почему бы не округлять её до ближайшего двухсекундного интервала? В этом случае метка времени менялась бы не более, чем на секунду.
Потому что округление в сторону ближайшего интервала означает, что файл может "путешествовать" в прошлое, а это создаёт свои проблемы.
Представьте, что вы регулярно копируете файлы с диска C: с файловой системой NTFS на флэшку (диск F:) следующей командой:
xcopy /D C:\Files\* F:\Files\*
Если метки времени округляются до ближайшего двухсекундного интервала, в среднем у половины файлов на флэшке метки времени будут меньше, чем у файлов на диске C:. Это значит, что при повторном выполнении команды примерно половина файлов будет скопирована снова. С точки зрения пользователя команда xcopy никогда на заканчивает работу, потому что каждый раз вы просите: "Выполни добавочное копирование", и она всегда находит что-то для копирования. Она никогда не говорит: "Все файлы актуальны, можно идти домой."
Во избежание такого бесконечного цикла округление всегда делается ввверх, чтобы копия файла не была старше оригинала.

Комментариев нет:

Отправить комментарий