LINUX.ORG.RU
ФорумAdmin

Подскажите с архивацией.


0

1

делаю периодически архив пользовательского каталога таром, возникла потребность запускать кроном и добавлять в архив только новые и измененные файлы, tar же при ключе -u дописывает все файлы каталога, подскажите как таром (если это возможно) или другой утилитой реализовать это?

tar же при ключе -u дописывает все файлы каталога

точно?

$ ./run.sh
asd.txt
qwe.txt
zxc.txt
Файлы archive1.tar.dump и archive2.tar.dump идентичны
run.sh:
#!/bin/bash

rm *.txt
rm *.tar

echo "qwe" >qwe.txt
echo "asd" >asd.txt

tar cvf archive.tar *.txt

rm qwe.txt
echo "zxc" >zxc.txt
tar uvf archive.tar *.txt

xxd archive.tar | grep -v ": 0000 0000 0000 0000 0000 0000 0000 0000  " >archive1.tar.dump

for((i=0;i<1000;i++)); do
  tar uvf archive.tar *.txt
done

xxd archive.tar | grep -v ": 0000 0000 0000 0000 0000 0000 0000 0000  " >archive2.tar.dump

diff -s archive1.tar.dump archive2.tar.dump

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

хорошо, а как тогда такой результат вы объясните?

$ ./run.sh
asd.txt
qwe.txt
zxc.txt
write(3, "\r\302\217\30\37\340p\313\260\3756\v<\323I\205(\374?\0007n\335\302J\352\21W\301>M\350"..., 10240) = 10240
+++ exited with 0 +++
run.sh:
#!/bin/bash

rm *.txt
rm *.tar

dd if=/dev/urandom bs=1024 count=$((10*1024)) of=qwe.txt 2>/dev/null
dd if=/dev/urandom bs=1024 count=$((10*1024)) of=asd.txt 2>/dev/null

tar cvf archive.tar *.txt

rm qwe.txt
dd if=/dev/urandom bs=1024 count=$((10*1024)) of=zxc.txt 2>/dev/null
tar uvf archive.tar *.txt

strace -ff -e write tar uvf archive.tar *.txt

write(3, "..."..., 10240) = 10240

что серьезно он за 10240 байт смог в архив записать 2*1024*10*1024 байт данных? (2 - 2 файла при вызове strace, 1024 - размер блока при создании файла, 10*1024 - количество блоков в файле)

anonymous
()
Ответ на: комментарий от provodnik
$ tar --version
tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное ПО: вы можете продавать и распространять его.
Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.

Авторы: John Gilmore и Jay Fenlason.

а у вас какая версия?

anonymous
()
$ tar --help | grep "update" -A 1
  -u, --update               добавление в архив только
                             более новых файлов

про измененный файл ни слова. а дописывает он только более новые по времени файлы.

rsync, но архивация будет приделана сбоку. описание.

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

местечко на этот промежуток с синком до упаковки будет отъедать столько же сколько и сам каталог, не годится, места маловато.

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

вот так делалось раньше на win раром «c:\Program Files\WinRAR\Rar.exe» a -r g:\backups\user.rar g:\user\*

новые файлы дописывались а измененные перезаписывались, удаленные в папке user файлы оставались в архиве.

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

но оно в процессе обновления архива создает временную версию архива, размер которой равен основной версии архива.

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

Если места на той машине что нужно бекапить маловато - лейте сразу на другую машину: tar + nc или rsync или bacula

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

Но я все равно не могу понять, и из info тоже, почему в формате tar -uvf

не апдейтит архив, а дописывает в конец архива то же самое, только новое.

tar умеет добавлять файлы только в конец, хоть новые, хоть старые измененные.

Попробуйте воспользоваться rsync или хотя бы более менее полноценным архиватором - 7zip что ли

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

новые файлы дописывались а измененные перезаписывались, удаленные в папке user файлы оставались в архиве.

В tar нет перезаписи, только добавление.

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