Часові позначки файлів, скопійовані на USB-накопичувач


13

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

Покроковий опис

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

    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, NTFS, EXFAT, мають деякі обмеження.) Див це посилання , яка передбачає не тільки , ext4а й в udfякості альтернативи пропрієтарних файлових систем Microsoft.
sudodus

Відповіді:


17

Проблема із зміною секунд часової позначки виникає через те, що файлова система VFAT (так, навіть FAT32) зберігає час модифікації лише з 2-секундною роздільною здатністю.

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

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

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

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


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

Жоден із цих результатів кріплення, здається, не містить жодних параметрів монтажу, які впливали б на часові позначки, тому я думаю, що обробка за замовчуванням для часових міток VFAT повинна бути змінена на рівні ядра десь між цими версіями Ubuntu. Мабуть, сучасне udisksповинно поважати параметри кріплення, вказані в /etc/fstab, якщо ви пишете на ньому запис для свого USB-накопичувача.
telcoM

0

Хоча я в своєму запитанні писав, що "я хотів би зберегти vfatфайлову систему на своїх USB-накопичувачах", нарешті я переформатував їх у ntfsфайлову систему. І Linux, і Windows можуть впоратися, ntfsі, схоже, це не показує дивного явища за допомогою часових позначок, зображених вище.


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