6

Я смущаюсь далеко в сценарии резервного копирования bash и пропустил что-то важное. Я знаю, что файловые системы ext3 не отслеживают дату создания, но копирование файлов в ext3 обновляет измененное время, как видно через stat (что будет работать). Однако, когда файлы копируются с одного сервера Windows на другой (чье монтирование у меня через smb/cifs), из моего тестирования измененное время не обновляется. Я использую find для поиска в акциях cifs. Неужели нет способа определить, когда новый файл создается на общем ресурсе cifs из Linux с помощью команды "найти"?

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

2 ответа2

15

В ядре Linux уже несколько лет работает системный вызов xstat(2) . Дэвид Хауэллс из RedHat сделал большую часть работы. xstat(2) позволяет извлекать время создания (иногда переименованное в "время рождения" или "время рождения" в мирах Linux и BSD без действительно веской причины) файлов из нескольких файловых систем, которые его поддерживают, включая EXT4 (который имеет метку времени создания на диске) и CIFS (которая благодаря своему наследию DOS/OS/2/Windows поддерживала метку времени создания как первоклассный гражданин на протяжении десятилетий). М. Хауэллс работал над патчами CIFS, которые сопровождают системный вызов.

OpenSolaris и BSD действительно имеют данные st_birthtim в своих системных вызовах stat(2) прямо сейчас, и эта функция доступна авторам сценариев через такие прикладные программы, как find и ls . На странице руководства OpenSolaris ls вы найдете crtime а также atime , mtime и ctime в нескольких местах. Точно так же команда find FreeBSD имеет основные цвета -Bmin , -Bnewer и -Btime . А в Mac OS ls есть опция -U .

Если вы писали свой сценарий для OpenSolaris, BSD или Mac OS 10, вы могли бы просто заняться тем, что вы хотите сделать со временем создания прямо сейчас. Действительно, если бы вы писали для Windows, вы могли бы сделать то же самое. Cygwin поддерживает st_birthtim с 2007 года, создавая временную метку CreationTime Win32, которая была у него с первой версии Windows NT и которую Windows NT поддерживает на томах NTFS и FAT, доступных для инструментов Cygwin.

Однако, это не так в мире GNU Linux. Возможность времени создания еще не дошла до GNU coreutils ' ls или GNU findutils' find. На самом деле, это даже не часть основного ядра Linux. Частично проблема заключается в том, что системный вызов xstat(2) увяз в диверсии, когда люди хотели сохранить три метки времени вместо четырех, как в API ядра Windows NT, и дамп ctime чтобы заменить его на crtime .

В 2010 году Линус Торвальдс ответил, что «все это абсолютно бесполезно, и люди даже не могут договориться об имени» и "Давайте подождем пять лет".

На самом деле, как я подозреваю, большинство людей, читающих это, будут знать, что мир широко соглашается с названием "время создания" с 1980-х годов, и мы ждали по крайней мере 25 лет. Это имя используется в OS/2 1.0; это имя используется в VMS ODS-1; это имя используется в Windows NT 3.5; это имя используется в SMB; и это имя используется в вопросе. ☺

дальнейшее чтение

1

Я не могу действительно ответить на этот вопрос, но, по крайней мере, могу дать вам подсказку: книга « Реализация CIFS: Общая интернет-файловая система», написанная Кристофером Р. Хертелем, содержит две очень интересные страницы:

страница 1 и страница 2

Похоже, они указывают на то, что можно получить информацию, которую вы ищете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .