[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: tar incremental archive



On Tue, Jun 23, 2015 at 09:59:09AM +0300, tarasca wrote:
> 06/23/2015 12:10 AM, Dmitri V. Ivanov пишет:
> >>2. Ну и общесистемное: чем неприятным грозят инкрементальные бэкакпы
> >>средствами tar, если за пределы наитивных ФС я выходить не планирую?
> >--listed-incremental=SNAPSHOTFILE и --level=N читайте в info tar.
> Совет про --listed-icremental не понял совсем (очевидно, я его
> использую). что касается level - читал в мане и на
> http://www.gnu.org/software/tar/manual/, но ничего полезного, кроме
> "level=0 нужен, чтобы игнорировать снапшот" не нашел.
> 
> >Работает сие естественно на posix-совместимых ФС. На ntfs например работает
> >вряд ли.
> вроде и про это написал.

Так. Я позволю себе кратко напомнить эту историю. Исаак родил Авраама. Авраам родил....

В posix предусмотрен timestamp файла CTIME, который помечается для
обновления в текущее время при всех изменениях будь то: запись/усечение, изменение timestamps,
прав доступа, создание/удаление ссылок (не символьных). Единственное место, где в стандарте
не очевидно обновление CTIME это переименование/перемещение файла. В linux на ext3 обновляется.

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

В итоге можно определить менялся ли файл с некоторого момента, глядя на значение CTIME за исключением
одного момента: переименования файла (в linux этого исключения нет), или каталога, содержащего файл
(а вот оно в полный рост).

Чтобы определить, что каталог тот же и используется snapshot file (в нем хранятся имена и соответствующие
inode numbers). Если при сравнении актульного значения с сохраненным совпадения нет - нет и гарантии, что
каталог тот же самый, и его содержимое нельзя считать неизменным с указанного момента при любых значениях
CTIME.

Соответственно с tar вы при создании полного архива указываете --listed-incremental=file, где file не
существует, или дополняете --level=0, если file существует, но его нужно игнорировать. При создании
инкрементального архива вы указываете --listed-incremental=file, где file - с прошлого раза (tar его
перепишет в процессе использования, и следующий инкремент будет от предыдущего инкремента).

При распаковке из архивов такого формата вы также указываете --listed-incremental=file, где file в примерах
/dev/null, и при распаковке инкрементальных архивов tar будет удалять файлы, которые не существовали на момент
создания инкрементов (в архивах хранится список файлов).

Занудствую уже. Пересказываю http://www.gnu.org/software/tar/manual/html_chapter/tar_5.html#SEC95



Reply to: