Opened 6 лет ago

Closed 6 лет ago

Last modified 6 лет ago

#163 closed улучшение (invalid)

В атрибутах каталогов и файлов "дата создания" "дата изменения" не используется корректировка UTC

Сообщил: Art_M Владелец:
Приоритет: средний Этап разработки: 2-я очередь
Ключевые слова: Копия:

Описание (последним изменил Art_M)

smarthdc 1.0-r692

В атрибутах каталогов и файлов "дата создания" "дата изменения" не используется корректировка UTC. Это наблюдается как на файлах хранящихся на самом контроллере, так и создающихся на флэшке.

Предлагаю привести в соответствие атрибут даты создания каталога/файлов на USB флэшке и памяти контроллера реальному времени создания соответствующего файла/каталога.

Вложения (3)

История изменений (24)

in reply to:  description ; comment:1 by alx, 6 лет ago

Replying to Art_M:

В атрибутах каталогов и файлов "дата создания" "дата изменения" не используется корректировка UTC.

Что такое "корректировка UTC"?

comment:2 by alx, 6 лет ago

Тикет имеет тип "улучшение", что предполагает некое предложение, как сделать изделие лучше. В описании же тикета я предложения по улучшению не вижу. Верно ли я понял, что тип "улучшение" выбран по ошибке, и стоит изменить тип тикета на "баг"?

comment:3 by Art_M, 6 лет ago

Описание: изменено (отличие)

in reply to:  1 ; comment:4 by Art_M, 6 лет ago

Replying to alx:

Replying to Art_M:

В атрибутах каталогов и файлов "дата создания" "дата изменения" не используется корректировка UTC.

Что такое "корректировка UTC"?

Я имею ввиду, что во времени в атрибутах создания файлов/каталогов не прибавляются часы к UTС в соответствии с уставкой "Часового пояса". Для пояснения как раз и были приложены скриншоты, отображающие несоответствие местное время создания и атрибута файла.

in reply to:  description comment:5 by alx, 6 лет ago

Решение: invalid
Состояние: newclosed

Replying to Art_M:

Предлагаю привести в соответствие атрибут даты создания каталога/файлов на USB флэшке и памяти контроллера реальному времени создания соответствующего файла/каталога.

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

Неверное время создания (модификации, доступа) в атрибутах файла может быть лишь в случае, когда само системное время неверное. В этом случае мерой по приведению времени создания файла в соответствие с реальным временем, предложенной в описании тикета, будет приведение системного времени в соответствие с реальным (верным) временем. Для того чтобы системное время было верным в станции уже приняты все разумные меры:

  • во-первых, системное время синхронизируется по серверам времени в интернете;
  • во-вторых, когда у станции появится антенна GPS, системное время будет синхронизироваться по сигналам GPS тоже;
  • в-третьих, старнция имеет встроенные часы реального времени с питанием от батареи, в которых периодически сохраняется текущее системное время, что позволяет иметь правильное системное время сразу после включения питания станции, еще до того как выполнена синхронизация с внешними серверами или GPS;
  • наконец, в-четвертых, если по какой-то причине получение времени из внешних источников невозможно (нет ни сигналов GPS, ни интернета), имеется возможность установить правильное системное время вручную с панели оператора.

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

in reply to:  4 comment:6 by alx, 6 лет ago

Replying to Art_M:

Что такое "корректировка UTC"?

Я имею ввиду, что во времени в атрибутах создания файлов/каталогов не прибавляются часы к UTС в соответствии с уставкой "Часового пояса". Для пояснения как раз и были приложены скриншоты, отображающие несоответствие местное время создания и атрибута файла.

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

Представь себе, что есть некая компания, в которой работают три сотрудника: один в Перми, второй в Москве, третий в Лондоне. У каждого в компьютере, естественно, установлен их локальный часовой пояс. Теперь предположим, что первый сотрудник вставляет в свой компьютер флешку и создает на ней файл в 12:00 местного времени. Затем вынимает влешку, летит в Москву и передает ее второму сотруднику. Второй сотрудник вставляет флешку в свой компьютер. Какое время создания файла он должен увидеть? Правильно, 10:00. Именно такое время было в Москве в момент создания файла, так как когда в Перми 12 часов, в Москве еще тольео 10! Далее, если они привезут эту же флешку своему коллеге в Лондон, то они увидят в его компьютере время создания файла 7:00! Потому что 7:00 в Лондоне, 10:00 в Москве и 12:00 в Перми - это одно и то же время.

Так вот, для того чтобы любой компьютер показывал верное время создания (модификации, доступа) файла, при записи метаданных в файловой системе сохраняется не локальное, а универсальное время (UTC). А уже приложение каждого конкретного компьютера, прочитав время из файловой системы в UTC, и зная свой локальный часовой пояс, выполняет соответствующую корректировку непосредственно перед отображением времени на экране.

comment:7 by alx, 6 лет ago

И еще дам пояснение для вот этой картинки:


Несоответствие времени в имени файла и времени в метаданных файла вызвано тем, что при формировании имени файла контроллер использует локальное время станции, а не UTC. И это было сделано по просьбе Артема - см. #101.

Version 0, edited 6 лет ago by alx (следующий)

comment:8 by Art_M, 6 лет ago

Алексей, красиво рассказываешь, хорошие примеры приводишь, но есть огромное но:

Я взял свой старенький смартфон Lenovo P770, сделал фотографию, посмотрел атрибуты, так вот атрибуты файла практически совпадают с таймштампом (разница 1 секунда, ну тут вопросов нет, задержка от спуска до формирования файла). Т.е. в атрибутах устанавливается реальное время, а не UTC. Взял карту памяти через кардридер посмотрел на ПК, ничего не изменилось, атрибуты совпадают. Выключил кардридер, поменял часовой пояс c UTC+5 на UTC, отключил автомат синхронизации времени и вручную подвел часы к своему реальному времени. Т.е. сымитировал как-будто ПК переехал в Британию. Подключил флэшку, посмотрел снова атрибуты, и что? ничего не поменялось.

Точно тоже самое я проделал с другим своим телефоном Xiaomi Redmi Note 5. Таймштамп совпадает с атрибутами, а атрибуты имеют реальное время! При втыкании одной и той же флэшки в разные компы с установленными различными поясами, отображение атрибутов никоем образом не корректруется и соответствует реальному локальному времени, когда было сделано фото в том часовом поясе в который установлен в телефоне!

Далее я взял и на флэшке на своем ПК с UTC и отключенной синхронизацией создал файл с атрибутами 14:24, пошел и вставил в ПК с UTC+5 и увидел в атрибутах те же 14:24.

А этот эксперимент показывает два момента идущие в разрез логике Алексея:

  1. Вся техника, телефоны, фотоаппараты, которые создают файлы с атрибутами которых мне когда то приходилось иметь дело - создавали файлы с атрибутами реального локального времени, а не UTC. В противном случае переставляя флэшку из телефона с UTC+5 в ПК c UTC я бы получил разнобой с таймштампом.
  2. Может Linux так и умеет, но на ПК с Windows 7 никоим образом не корректируется отображение атрибут даты создания файла в зависимости от установленного пояса и времени и отображает его как есть, везде одинаково.

Прошивку контроллера нужно так же доработать, чтобы как и во всех телефонах, фотоаппаратах и во всех остальных устройствах всего мира, атрибут даты создания соответствовал реальному локальному времени создания файла, а не UTC. Что бы при дальнейшем использовании на ПК с Windows видеть правильные даты.

comment:9 by Art_M, 6 лет ago

А вот и весь прикол:
Изменение отображения атрибутов зависит от файловой системы! В FAT оно хранится только в локальном времени а в NTFS в UTC!
При эксперименте с флэшкой в FAT отображение времени не меняется и на всех компах одинковое, соответствующее локальному на устройстве создания, а вот с флэшкой в NTFS время создания действительно отображается по разному в соответствии с поясом!

Replying to alx:

Представь себе, что есть некая компания, в которой работают три сотрудника: один в Перми, второй в Москве, третий в Лондоне. У каждого в компьютере, естественно, установлен их локальный часовой пояс. Теперь предположим, что первый сотрудник вставляет в свой компьютер флешку и создает на ней файл в 12:00 местного времени. Затем вынимает влешку, летит в Москву и передает ее второму сотруднику. Второй сотрудник вставляет флешку в свой компьютер. Какое время создания файла он должен увидеть? Правильно, 10:00. Именно такое время было в Москве в момент создания файла, так как когда в Перми 12 часов, в Москве еще тольео 10! Далее, если они привезут эту же флешку своему коллеге в Лондон, то они увидят в его компьютере время создания файла 7:00! Потому что 7:00 в Лондоне, 10:00 в Москве и 12:00 в Перми - это одно и то же время.

Так вот, для того чтобы любой компьютер показывал верное время создания (модификации, доступа) файла, при записи метаданных в файловой системе сохраняется не локальное, а универсальное время (UTC). А уже приложение каждого конкретного компьютера, прочитав время из файловой системы в UTC, и зная свой локальный часовой пояс, выполняет соответствующую корректировку непосредственно перед отображением времени на экране.

Вывод, все не так, как порой кажется, все зависит от системы отсчета, т.е. в нашем случае от файловой системы. В случае с флэшкой в FAT все три сотрудника видели бы одно и то же время создания файла.

А так как у нас контроллер работает только с FAT флэшками то файлы копируемые на флэшку должны иметь не UTC а реальное локальное время. Вопрос файловая система в контроллере какая?

in reply to:  8 comment:10 by alx, 6 лет ago

Replying to Art_M:

Алексей, красиво рассказываешь, хорошие примеры приводишь, но есть огромное но:

Артем, ты описал несколькго экспериментов, но я, к сожалению, ни одного из них не понял. Главным образом я их не понял из-за используемой терминологии (например непонятен термин "реальное время". А какое еще бывает время кроме реального? Неправильное? Непонятно), во-вторых, сомнительные методики экспериментов - например, в одном из экспериментов ты имитируешт переезд в Британию, при этом кроме установки нового часового пояса зачем-то отключаешь (если я правильно понял) синхронизацию системных часов с серверами времени и вручную меняешь время. Таким образом, если ранее системные часы были синхронизированы с серверами и, таким образом, время в них было заведомо правильным, после ручной перестановки времени оно стало заведомо неправильным. Во-первых, непонятно, зачем переставлять время на заведомо неправильное (не думаешь же ты, что в Британии все пользователи намеренно устанавливают в компьютерах неправильное время вместо того чтобы, как во всем остальном мире, синхронизировать его с серверами времени?), в результате непонятно, как вообще можно интерпретировать результаты эксперимента в компьютере с намеренно сбитыми часами...

А этот эксперимент показывает два момента идущие в разрез логике Алексея:

  1. Вся техника, телефоны, фотоаппараты, которые создают файлы с атрибутами которых мне когда то приходилось иметь дело - создавали файлы с атрибутами реального локального времени, а не UTC.

Артем, поясни, пожалуйста, каким образом ты это определил (как пришел к выводу, что в файловой системе хранится локальное время создания файлов, а не универсальное). Ты нашел в файловой системе на своей флешке сектор с записью о файле, выделил в ней байты, отвечающие за время создания, и декодировал их?
Потому что если такой вывод ты сделал из описанных выше экспериментов, то, извини, меня это не убеждает по изложенным выше причинам.

В противном случае переставляя флэшку из телефона с UTC+5 в ПК c UTC я бы получил разнобой с таймштампом.

Не понимаю, что ты называешь "таймштампом".

  1. Может Linux так и умеет, но на ПК с Windows 7 никоим образом не корректируется отображение атрибут даты создания файла в зависимости от установленного пояса и времени и отображает его как есть, везде одинаково.

ИМХО это неправильно, так как один и тот же "физический" момент времени в разных часовых поясах отображается разным значением часов и минут - см. мой пример в comment:6.

in reply to:  9 ; comment:11 by alx, 6 лет ago

Replying to Art_M:

Изменение отображения атрибутов зависит от файловой системы! В FAT оно хранится только в локальном времени а в NTFS в UTC!
При эксперименте с флэшкой в FAT отображение времени не меняется и на всех компах одинковое, соответствующее локальному на устройстве создания,

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

Вывод, все не так, как порой кажется, все зависит от системы отсчета, т.е. в нашем случае от файловой системы. В случае с флэшкой в FAT все три сотрудника видели бы одно и то же время создания файла.

Так как все три сотрудника находятся в трех разных часовых поясах, увиденное ими одно и то же время означает три разных физических момента времени. И, так как в действительности файл был создан только один раз, как минимум, два из них увидели неправильное время.

А так как у нас контроллер работает только с FAT флэшками

Это не так. У нас контроллер работает не только с FAT, с другими типами файловых систем он тоже работает.

Вопрос файловая система в контроллере какая?

Какая файловая система в его внутренней флешке? UBIFS.

comment:12 by Art_M, 6 лет ago

Алексей, у тебя есть флэшка?
Форматни в NTFS создай файл "пустышку" (пустой текстовый файл например "123.txt"), проверь атрибуты (дату создания), измени часовой пояс в настройках системы (я не знаю как у тебя это делается на линуксе, но исходя из твоего примера root@sama5d3xek:~# TZ=UTC ls -l), проверь снова и ты увидишь что то типа такого:

root@sama5d3xek:~# TZ=UTC ls -l
-rw-r--r-- 1 root root 591 Feb 12 07:51 cert.pem
-rw------- 1 root root 152 Feb 12 07:51 key.pem
root@sama5d3xek:~# TZ=UTC-5 ls -l
-rw-r--r-- 1 root root 591 Feb 12 12:51 cert.pem
-rw------- 1 root root 152 Feb 12 12:51 key.pem

А теперь проделай тоже самое с флэшкой в FAT формате (форматни в FAT, создай файл, посмотри атрибуты, поменяй пояс и снова посмотри атрибуты) и ты увидишь, что время будет одно и тоже локальное в обоих случаях...

in reply to:  12 ; comment:13 by alx, 6 лет ago

Replying to Art_M:

Алексей, у тебя есть флэшка?

Да, найдется.

Форматни в NTFS создай файл "пустышку" (пустой текстовый файл например "123.txt"), проверь

...

А теперь проделай тоже самое с флэшкой в FAT

Я, наверное, могу все это проделать, но для начала хотелось бы узнать, зачем мне это делать. Или, иными словами, какова цель этих экспериментов?

in reply to:  13 ; comment:14 by Art_M, 6 лет ago

Чтобы ты сам убедился, что не прав в примере ниже

Представь себе, что есть некая компания, в которой работают три сотрудника: один в Перми, второй в Москве, третий в Лондоне. У каждого в компьютере, естественно, установлен их локальный часовой пояс. Теперь предположим, что первый сотрудник вставляет в свой компьютер флешку и создает на ней файл в 12:00 местного времени. Затем вынимает влешку, летит в Москву и передает ее второму сотруднику. Второй сотрудник вставляет флешку в свой компьютер. Какое время создания файла он должен увидеть? Правильно, 10:00. Именно такое время было в Москве в момент создания файла, так как когда в Перми 12 часов, в Москве еще тольео 10! Далее, если они привезут эту же флешку своему коллеге в Лондон, то они увидят в его компьютере время создания файла 7:00! Потому что 7:00 в Лондоне, 10:00 в Москве и 12:00 в Перми - это одно и то же время.

Так вот, для того чтобы любой компьютер показывал верное время создания (модификации, доступа) файла, при записи метаданных в файловой системе сохраняется не локальное, а универсальное время (UTC). А уже приложение каждого конкретного компьютера, прочитав время из файловой системы в UTC, и зная свой локальный часовой пояс, выполняет соответствующую корректировку непосредственно перед отображением времени на экране.

Если флэшка будет FAT, то время создания они будут видеть 12:00 куда бы они эту флэшку не запихнули!!!!

in reply to:  14 comment:15 by alx, 6 лет ago

Replying to Art_M:

Чтобы ты сам убедился, что не прав в примере ниже...

Понятно. Давай ограничимся флешкой с файловой системой FAT, так как, во-первых, она у меня уже есть, а во-вторых, в процитированном примере говорится только об одной файловой системе.

В моем эксперименте на файловой системе FAT создан файл utc-03-10-00, время создания которого 03:10 UTC. Часовой пояс на моем компьютере Екатеринбург (UTC +5 часов).

alx@alx:~$ sudo mount /dev/sdc2 /mnt
alx@alx:~$ ls -l /mnt
итого 0
-rwxr-xr-x 1 root root 0 мая  5 08:10 utc-03-10-00
alx@alx:~$ TZ=UTC ls -l /mnt
итого 0
-rwxr-xr-x 1 root root 0 мая  5 03:10 utc-03-10-00

Если флэшка будет FAT, то время создания они будут видеть 12:00 куда бы они эту флэшку не запихнули!!!!

Извини, Артем, но результат проведенного эксперимента убеждает меня, что я прав в примере выше.

in reply to:  11 comment:16 by Art_M, 6 лет ago

Ну так вот тебе мой эксперимент!

https://yadi.sk/i/VmPOWZ666RZ1ow

Внимание, в видео присутствует ненормативная лексика / телефон не вовремя отвлек внимание.

Обрати внимание, какие в итоге атрибуты имелись у двух файлов в FAT32 и NTFS! В FAT32 оба файла в итоге получили разницу в создании в несколько часов, а у NTFS - нет. Хотя в обоих случаях файлы создавались друг за другом. А все потому что в FAT32 время хранится не в UTC, а в локальном времени! и в дальнейшем не корректируется в зависимости от часового пояса!

Иными словами если бы на флэшках в Перми и Лондоне были созданы одновременно файлы и потом обе флэшки просмотривались в одном месте, то

  1. в случае с NTFS файлы бы имели одно и тоже время создания.
  2. в случае с FAT файлы бы имели разное время создания в соответствии со временем устройства создавшего файл. Т.е. один Лондонский имел бы дату создания 10 часов, а Пермский 15 часов!

comment:17 by Art_M, 6 лет ago

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

comment:18 by alx, 6 лет ago

Артем, спасибо за разъяснения и аргументы. Твое мнение я принял к сведению. Однако, после размышлений я принял решение все-таки оставить предложение без удовлетворения. Кратко резюмирую свое решение:

  1. Есть системы, интерпретирующие время как локальное, но есть и интерпретирующие как UTC. Интерпретация времени как UTC дает верный результат независимо от часового пояса, в котором читается флешка, интерпретация времени как локального - нет. Из двух имеющихся вариантов я склоняюсь к тому, который дает более правильные результаты.
  2. Локальное время станции и так фиксируется в именах файлов динамограмм - см. #101. В журналах же вообще каждая строка сопровождается указанием времени. Поэтому нет никакой проблемы определить время создания файла или возникновения события в часовом поясе станции и без использования метаданных файла.
  3. Непонятно, как реализовать предложенный функционал. Как я писал выше, время создания файла устанавливает ядро, и мне неизвестен механизм, через который пользовательский процесс мог бы его изменить или как-либо еще повлиять на результат.
  4. Наконец, манипуляции с временами файлов во внутренней флешке контроллера - это вообще диверсия, которая может привести к непредсказуемым последствиям, так как эти времена могут использоваться во внутренней логике каких-то программ и/или скриптов, и неизвестно, как поведет себя скрипт в неожиданной ситуации (например обнаружив будущее время модификации файла).

comment:19 by san, 6 лет ago

Русская Википедия говорит что FAT сохраняет отметки даты и времени по местному часовому поясу, но изучать этот вопрос подробнее мне не охота, я согласен с аргументами Алексея. Да и на мой взгляд не стоит эта проблема даже времени потраченного вами на этот тикет)

in reply to:  18 comment:20 by alx, 6 лет ago

Replying to alx:

время создания файла устанавливает ядро, и мне неизвестен механизм, через который пользовательский процесс мог бы его изменить.

Немного уточню. Можно из пользовательского процесса изменить время последнего доступа и время последней модификации файла. Но, насколько я знаю, нельзя изменить время создания файла.

Есть некая опция монтирования FAT FS time_offset=minutes, но ее описание в man mount не дало мне понимания, как она работает, а выяснять это экспериментальным путем смысла не вижу...

in reply to:  19 comment:21 by alx, 6 лет ago

Replying to san:

Русская Википедия говорит что FAT сохраняет отметки даты и времени по местному часовому поясу,

Действительно... :) Кстати, в английской статье такого указания нет...

Наверное в 1980 году, когда FAT появилась, действительно так и было - никому не приходило в голову учитывать часовой пояс, да и не было его, наверное, в MSDOS-1.0. Сейчас же, как мы видели, это не всегда так...

Note: See TracTickets for help on using tickets.