LINUX.ORG.RU
ФорумAdmin

Где tar хранит информацию об файлах для инкремента?


0

0

Хочу использовать increment tar-а, но что-то не совсем понимаю,
как он вычисляет файлы которые нужно удалить, добавить.
То есть:
-bash-3.2$ mkdir testbackup
-bash-3.2$ touch testbackup/1
-bash-3.2$ touch testbackup/2
-bash-3.2$ tar -jc -g meta_data.snar ./testbackup > 1.tar.bz2
-bash-3.2$ cp -p meta_data.snar meta_data.snar_tmp
-bash-3.2$ touch testbackup/3
-bash-3.2$ rm -f testbackup/2
-bash-3.2$ mkdir tmp
-bash-3.2$ mv 1.tar.bz2 tmp/
-bash-3.2$ tar -jc -g meta_data.snar ./testbackup > 2.tar.bz2
-bash-3.2$ mv 2.tar.bz2 tmp/
-bash-3.2$ diff -u meta_data.snar_tmp meta_data.snar
--- meta_data.snar_tmp 2008-12-08 14:54:26.000000000 +0300
+++ meta_data.snar 2008-12-08 14:55:45.000000000 +0300
@@ -1 +1 @@
-1228737266
+1228737345
-bash-3.2$ cd tmp
-bash-3.2$ tar -Gjxvf 1.tar.bz2

bzip2: (stdin): trailing garbage after EOF ignored
./testbackup/
./testbackup/1
./testbackup/2
-bash-3.2$ tar -Gjxvf 2.tar.bz2

bzip2: (stdin): trailing garbage after EOF ignored
./testbackup/
tar: Удаляется `./testbackup/2'
./testbackup/3

То есть, в meta_data.snar нет информации о том, какие файлы были
добавлены, какие удалены, да и исходного файла нет. Так откуда
tar берёт информацию об удалённых/добавленных файлах?

anonymous

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

anonymous
()
Ответ на: комментарий от Chumka

Большое спасибо. Но после прочтения вот этого:
http://www.gnu.org/software/tar/manual/tar.html#SEC89

The option ‘--listed-incremental’ instructs tar to operate on an incremental archive with additional metadata stored in a standalone file, called a snapshot file.

Совсем не понятно, где эти metadata смотреть, содержание самого файла:

$ cat meta_data.snar
1228737345
$

Это судя по всему время backup в секундах с 1970 года, но как сами metadata просмотреть, где их искать?

anonymous
()
Ответ на: комментарий от anonymous

Смотреть в самом файле. В ссылке, которую я выше приводил, написан формат dumpdir. Вот пример: tar -tj -g meta_data.snar arc < file.1.tar.bz2 Токо что проверил, работает на ура :)

Chumka ★★★
()
Ответ на: комментарий от Chumka

В самом файле понятно. Но интересует совсем другое.
Когда происходит процес инкрементного "затаривания", откуда tar знает, что было удалено в каталоге, что было добавлено, если сам файл snar эту информацию не содержит, то где она?
Я не расматриваю процесс "растаривания".

anonymous
()
Ответ на: комментарий от anonymous

Вот:
$ mkdir backup
$ touch backup/{1,2,3}
$ tar cv -g my.snap -f bk.level-0.tar backup
backup/
backup/1
backup/2
backup/3
$ cat my.snap
1228895512
$ rm backup/2
$ touch backup/4
$ tar cv -g my.snap -f bk.level-1.tar backup
backup/
backup/4

Т.е. вопрос "откуда tar знает какие файлы были добавлены" - в данном случае файл "4". Его mtime больше чем в файле my.snap, поэтому tar считает что файл добавили или изменили. Теперь как tar узнает, что файл "2" был удален. А никак. Вот информация dumpdir:
$ tar t -g my.snap -f bk.level-0.tar backup
Y1Y2Y3
backup/1
backup/2
backup/3
$ tar t -g my.snap -f bk.level-1.tar backup
backup/
N1N3Y4
backup/4

Т.е. инфы о файле "2" просто нет в dumpdir. И при инкр. растаривании он будет удален. А при обычном нет.

Вот. Как-то так.



Chumka ★★★
()
Ответ на: комментарий от Chumka

Chumka: Аналогично думал, что по датам после создания архива, но если с помощью touch прибавить +1 секунду, и время файла будет меньше чем время изготовления архива или в каталог просто добавить старый файл, этот файл всё равно попадёт в архив... Где-то эти данные все же хранятся :-)

anonymous
()
Ответ на: комментарий от anonymous

Я думаю tar все-таки смотрит на ctime, а не mtime. Когда ты делаешь touch на файл, делая его mtime в прошлом, то его ctime уходит в будущее - и файл будет добавлен в архив. В принципе логично - если мы изменим, например, только права на файл, а содержимое оставим неизменным - файл должен забекапиться.

Chumka ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.