Отметки времени файлов, скопированных на USB-накопитель


13

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

Пошаговое описание

  1. Я копирую произвольный файл со своего ПК / ноутбука на USB-накопитель с помощью графического интерфейса или с помощью команды

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Я проверяю время последнего изменения исходного файла:

    $ ls -l --time-style=full-iso file.txt
    -rw-rw-r-- 1 gabor gabor 0 2018-09-22 15:09:23.317098281 +0200 file.txt
    
  3. Я проверяю время последнего изменения скопированного файла:

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:23.000000000 +0200 /media/gabor/CORSAIR/file.txt
    
  4. Как вы можете видеть, секунды последнего времени модификации скопированного файла усекаются до нуля десятичных цифр. Однако, если я введу команду

    if ! [ file.txt -nt /media/gabor/CORSAIR/file.txt ] && ! [ file.txt -ot /media/gabor/CORSAIR/file.txt ]; then echo "The last modification times are equal."; fi
    

Я получаю вывод The last modification times are equal.

  1. Ситуация изменится, если я отключу и снова подключу USB-накопитель и снова выполню две последние команды:

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:22.000000000 +0200 /media/gabor/CORSAIR/file.txt
    $ if [ file.txt -nt /media/gabor/CORSAIR/file.txt ]; then echo "The file is newer on the PC."; fi
    The file is newer on the PC.
    
  2. Таким образом, после перемонтирования время последнего изменения скопированного файла дополнительно уменьшается на одну секунду. Однако дальнейшее демонтирование и повторный монтаж больше не влияют на время последней модификации. Кроме того, проверка файлов теперь показывает, что файл на ПК новее (хотя это не так).

Ситуация осложняется еще и тем, что время последнего изменения файлов по- разному отображается на моем компьютере и ноутбуке , разница составляет ровно 2 часа, хотя на моем компьютере и ноутбуке одинаковые настройки даты и времени!

Дальнейшая информация

И мой ПК, и ноутбук показывают поведение, описанное выше. У меня Ubuntu 14.04.5 (верный) на моем ПК и Ubuntu 16.04.2 (xenial) на моем ноутбуке.

Мои USB-накопители имеют файловую систему vfat. Выход mount | grep CORSAIR на моем компьютере является

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

Выход mount | grep CORSAIR на моем ноутбуке есть

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

Другие мои USB-накопители показывают то же поведение.

Вопрос

Можно ли как-то устранить разницу во времени последней модификации? Например, используя другие параметры при монтаже / демонтаже? Или это ошибка в Ubuntu?

Я хотел бы добиться того, чтобы временные метки исходных и скопированных файлов были точно такими же, чтобы синхронизация могла выполняться более эффективно. Кроме того, я хотел бы сохранить файловую систему vfat на своих USB-накопителях, чтобы их можно было использовать и под Windows.


Готовы ли вы создать на USB-накопителе другую файловую систему, например, ext4файловую систему Linux ? (Поддержка linux для проприетарных файловых систем Microsoft, FAT32, exFAT, NTFS, имеет некоторые ограничения.) См. Эту ссылку, которая предлагает не только, ext4но и udfкак альтернативу проприетарным файловым системам Microsoft.
Судод

Ответы:


17

Проблема с изменением временных меток происходит из-за того, что файловая система VFAT (да, даже FAT32) хранит время модификации с разрешением всего 2 секунды.

Очевидно, что пока файловая система смонтирована, драйвер файловой системы кэширует временные метки с точностью до 1 секунды (возможно, для удовлетворения требований POSIX), но как только файловая система отключена, кэши очищаются, и вы увидите, что на самом деле записано каталог файловой системы.

Двухчасовая разница между ПК и ноутбуком, вероятно, вызвана различными настройками часового пояса и / или различными вариантами монтирования по умолчанию для файловой системы VFAT. (Я предполагаю, что вы находитесь в часовом поясе, смещение UTC которого на данный момент составляет 2 часа, положительное или отрицательное.)

Внутренне Linux использует временные метки UTC в файловых системах в стиле Unix; но в файловых системах VFAT (текущим) по умолчанию используется местное время в метках времени файловой системы VFAT, потому что это то, что MS-DOS делал, а Windows все еще делает. Но есть два параметра монтирования, которые могут повлиять на это: вы можете указать опцию монтирования tz=UTCдля использования временных меток на основе UTC в файловых системах VFAT, или вы можете использовать, time_offset=<minutes>чтобы явно указать смещение часового пояса, которое будет использоваться с этой конкретной файловой системой.

Может случиться так, что параметры монтирования по умолчанию для VFAT изменились между Ubuntu 14.04 и 16.04, либо в ядре, либо в udisksслужбе поддержки съемных носителей, что приводит к двухчасовой разнице, которую вы видите.


Спасибо за ваш ответ. Я завершил свой вопрос выводом mount | grep CORSAIRна моем ноутбуке, который действительно отличается от вывода на моем ПК. Кроме того, вы правы, я нахожусь в центральной Европе в часовом поясе CEST (= UTC + 2).
К. Габор

Похоже, что ни один из этих выходов монтирования не содержит никаких опций монтирования, которые могли бы повлиять на временные метки, поэтому я думаю, что обработка по умолчанию для временных меток VFAT должна была быть изменена на уровне ядра где-то между этими версиями Ubuntu. Очевидно, современный udisksдолжен уважать параметры монтирования, указанные в /etc/fstab, если вы записываете запись для вашего USB-накопителя на него.
Телеком

0

Хотя я написал в своем вопросе, что «я хотел бы сохранить vfatфайловую систему на своих USB-накопителях», в конце концов я переформатировал их в ntfsфайловую систему. И Linux, и Windows могут справиться, ntfsи кажется, что странное явление с временными метками, показанными выше, похоже, не проявляется.


Да, NTFS хранит все временные метки файлов как 64-битные числа, основанные на времени UTC, поэтому они имеют разрешение 100 наносекунд, а диапазон дат - с 1 января 1601 года по 28 мая 60056 года. Этого должно быть более чем достаточно. Что еще более важно, в файловой системе VFAT нет места неоднозначности часового пояса.
Телеком
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.