команда tar для получения файлов для периодического резервного копирования

команда tar для получения файлов для периодического резервного копирования

Какую команду tar следует использовать, чтобы получить файлы, измененные после указанной даты, включая изменения владельца, разрешений и т. д., но исключая файлы, которые были просто восстановлены из резервной копии?

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

Я использую команду, похожую на следующую, чтобы архивировать в tar все недавно измененные файлы с указанной даты для периодического резервного копирования:

$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -

Это не настоящая команда, но она иллюстрирует то, что я пытаюсь донести. Эта команда просто выводит список файлов, которые должны были бы попасть в файл tar, если бы я вместо этого отправлял вывод в файл tar.

До сих пор я думал, что эта команда работает нормально, пока я не заменил жесткий диск и не восстановил все файлы из резервной копии. Глядя на вывод stat, кажется, что дата изменения — это дата, когда я восстановил все файлы из резервной копии, поэтому теперь все файлы выбираются в моей команде tar выше.

$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500

Даже --newer-mtimeэто, похоже, не помогает:

$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -

ОБНОВЛЯТЬ:Я также попробовал следующее, но это тоже не помогло, поскольку все равно было выбрано больше файлов, чем мне нужно:

$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -

решение1

Отфильтровав каталоги:

$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf - | grep -v '^d'

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

По какой-то причине tar захватывает все каталоги без учета временной метки, но, думаю, с этим можно смириться, так что приведенная выше команда в большинстве случаев по-прежнему работает нормально, и именно поэтому я не видел с ней никаких проблем, пока не восстановил резервную копию.

Теперь относительно восстановления: я заявил, что это устанавливает атрибут «Изменить» для каждого восстановленного файла; следовательно, --after-dateэто бесполезно, поскольку в моем следующем резервном копировании будут сохранены все файлы.

Чтобы обойти это, в первый раз после восстановления я перешел на использование --newer-mtime:

$ tar cf - --newer-mtime="${SINCE} 00:00:00" . | tar tvf -

--after-dateЭто позволило мне получить все новые файлы с момента восстановления, и я планирую снова использовать оригинал, начиная со следующей резервной копии.

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

TheРуководство по GNU tarговорится следующее:

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

Я не совсем понимаю, что значит «и так далее», но это я тоже упускаю.

Учитывая, что я здесь резервирую, меня это не беспокоит, поэтому на этот раз меня это устраивает; однако, в тех случаях, когда меня это действительно волнует, я могу либо выбросить свои инкрементальные резервные копии и начать все заново с совершенно новой полной резервной копии, либо завершить процесс восстановления одной инкрементальной резервной копией, следуя шагам выше, используя --newer-mtimeсразу после восстановления. Последнее произойдет до того, как люди начнут использовать восстановленные файлы, поэтому я получаю хорошую инкрементальную резервную копию, прежде чем переключиться обратно на --after-date.

Связанный контент