LINUX.ORG.RU

[tar] как не сойти с ума

 


1

0

Есть каталог с дебутстрапнутым Дебианом. Его нужно заархивировать, сделать rsyncable, и залить на общий сервер, где его могут качать и изменять другие. rsyncable нужен естественно для снижения траффика и времени закачки/скачки. Делаем так (всё от рута):

делаем rsyncable архив
# GZIP="--rsyncable" tar cfz rootfs-lenny.tar.gz rootfs-lenny

удаляем оригинальный каталог
# rm -rf rootfs-lenny

распаковываем архив сюда же
# tar zxf rootfs-lenny.tar.gz

архив бэкапим
# mv rootfs-lenny.tar.gz rootfs-lenny.tar.gz-1

архивируем каталог заново
# GZIP="--rsyncable" tar cfz rootfs-lenny.tar.gz rootfs-lenny

результат: архивы rootfs-lenny.tar.gz и rootfs-lenny.tar.gz-1 различаются размером и не рсинкаются между собой. Что это за ерунда? Система и хостовая и rootfs - Debian Lenny.

Там файлы в разном порядке в архив упаковываются, отсюда и следует разная инфа на вход к gzip, которую он по разному упаковывает.

gaa ★★
()

И что это вообще такое?
GZIP="--rsyncable" и само понятие rsyncable

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

> Классно, а чем делать rsyncable архивы? :)

низнаю.

gaa ★★
()

> # GZIP="--rsyncable" tar cfz rootfs-lenny.tar.gz rootfs-lenny

Тут, наверно, должен быть GZIP_OPT

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

да, уже нашёл. Конечный результат такой же.
При повторении всех шагов получаются два разных архива. Даже без gzip:

$ find rootfs-lenny | sort | tar -T - --no-recursion -c -f out1.tar
$ mv rootfs-lenny rootfs-lenny-bk
$ tar xf out1.tar
$ find rootfs-lenny | sort | tar -T - --no-recursion -c -f out2.tar
$ diff out1.tar out2.tar
Двоичные файлы out1.tar и out2.tar различаются

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

Тогда смотреть, чем отличаются.
В rootfs-есть симлинки?
Кажется, в POSIX нет возможности выставить ctime для симлинка, при распаковке архива все симлинки будут иметь текущую дату.

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

Требуется создать полностью rsyncable архив.

Вот результат rsync-a двух предыдущих tar архивов:

$ cp out1.tar out.tar

$ rsync -h --progress -v -e ssh out.tar root@127.0.0.1:/usr/local/rsync
root@127.0.0.1's password:
out.tar
     775.92M 100%   14.50MB/s    0:00:51 (xfer#1, to-check=0/1)

sent 776.01M bytes  received 31 bytes  14.24M bytes/sec
total size is 775.92M  speedup is 1.00

$ cp out2.tar out.tar

$ rsync -h --progress -v -e ssh out.tar root@127.0.0.1:/usr/local/rsync
root@127.0.0.1's password:
out.tar
     775.92M 100%   16.13MB/s    0:00:45 (xfer#1, to-check=0/1)

sent 19.12M bytes  received 195.07K bytes  330.14K bytes/sec
total size is 775.92M  speedup is 40.17

--

20 Mb траффика на пустом месте. А должно быть ~300 Kb.
Просто из-за того, что при перепаковке tar архива с ним что-что случается.
А дальше ещё и gzip будет...

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

Может просто тупо не архивировать? Трафику-то то будет мало при небольших изменениях. А если еще и компресию рсинка использовать, то трафик даже вычитаться будет :-D

Ну а если очень надо, то архивировать можно на сервере по inotify или крону...

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