У меня проблема с отметками времени файлов, скопированных с моего ПК или ноутбука на USB-накопители: время последнего изменения исходного файла и времени скопированного файла различаются. Поэтому синхронизация файлов между моим ПК и USB-накопителем довольно громоздка.
Пошаговое описание
Я копирую произвольный файл со своего ПК / ноутбука на USB-накопитель с помощью графического интерфейса или с помощью команды
cp -a file.txt /media/gabor/CORSAIR/
Я проверяю время последнего изменения исходного файла:
$ 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
Я проверяю время последнего изменения скопированного файла:
$ 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
Как вы можете видеть, секунды последнего времени модификации скопированного файла усекаются до нуля десятичных цифр. Однако, если я введу команду
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.
Ситуация изменится, если я отключу и снова подключу 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 часа, хотя на моем компьютере и ноутбуке одинаковые настройки даты и времени!
Дальнейшая информация
И мой ПК, и ноутбук показывают поведение, описанное выше. У меня 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.
источник
ext4
файловую систему Linux ? (Поддержка linux для проприетарных файловых систем Microsoft, FAT32, exFAT, NTFS, имеет некоторые ограничения.) См. Эту ссылку, которая предлагает не только,ext4
но иudf
как альтернативу проприетарным файловым системам Microsoft.Ответы:
Проблема с изменением временных меток происходит из-за того, что файловая система 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).udisks
должен уважать параметры монтирования, указанные в/etc/fstab
, если вы записываете запись для вашего USB-накопителя на него.Хотя я написал в своем вопросе, что «я хотел бы сохранить
vfat
файловую систему на своих USB-накопителях», в конце концов я переформатировал их вntfs
файловую систему. И Linux, и Windows могут справиться,ntfs
и кажется, что странное явление с временными метками, показанными выше, похоже, не проявляется.источник