LINUX.ORG.RU

tar + rsync


1

1

всем привет

нужно затарить директорию, но места для хранения архива нету, и перелить по rsync'у - других вариантов передачи данных тоже нету

пробую:

tar -cjf - target_directory/ | rsync guest@rsyncServer::incoming/target_directory.tar.bz2

пишет ошибку - rsync: link_stat «/target_directory» (in incoming) failed: No such file or directory (2) rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1508) [Receiver=3.0.7]

т.е. получается что rsync с stdout'а не подать файл? а как еще можно перекинуть?

спасибо

★★★

Последнее исправление: fura13 (всего исправлений: 1)

tar + rsync - free space == no way

а как еще можно перекинуть?

Если только через rsync://, то сделать «место для хранения архива» или не делать архив.

sdio ★★★★★
()

Вот так можно бекапить сразу на другой сервер

dd if=/dev/sda | ssh user@server 'dd of=sda.img'
что-то аналогичное и с tar можно замутить, типа такого:
tar cf ./folder | ssh user@server 'tar cf folder.tar'

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

ssh'а к сожалению нету, была бы возможность повесить сервисы на таргет машине - повесил бы netcat )

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

в принципе есть квотированное место, на порядок меньшее чем получающийся архив, но все же есть

по идеи можно бы tar -cjf - target_directory/ | split -b <QUOTA_SPACE>m

и каждый кусок отправлять rsync'ом и удалять, но тут как то заморочено получается, в плане как убедить сплит подождать пока я отправлю и удалю

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

можно написать какую нить user_pipe прогу

tar -cjf - target_directory/ | user_pipe | split -b <QUOTA_SPACE>m

которая при получение SIGHUP'а (или любого друго сигнала) будет приостанавливать чтение из stdout'а до получения сигнала повторно

и параллельно запустить скрипт: сигнал посылается при появлении первого полного куска файла, отправляется rsync'ом, удаляется и новый сигнал, и так до завершения tar'a

интересно, стоит ли писать? нет ли все таки другого метода?

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

Мдя ... жаль что fuse не умеет rsync монтировать, тогда б воопще проблем не было б

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

fura13> в плане как убедить сплит подождать пока я отправлю и удалю

tar -cjf - target_directory | ./mysplit <QUOTA_SPACE>m

cat mysplit

#!/bin/sh

NUM=1
while :; do
 dd of=archive.tar.bz2.$NUM bs=$1 count=1
 rsync archive.tar.bz2.$NUM guest@rsyncServer::incoming/target_directory.tar.bz2.$NUM
 NUM=$(($NUM + 1))
done
Не проверял (писал прямо здесь)

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

+
если есть неткот, можно с его помощью запросто решить

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

Спасибо, работает, чуть-чуть подредактировал:

#!/bin/sh

NUM=1
while :; do
dd of=archive.tar.bz2.$NUM bs=$1 count=1048576
if [ -s archive.tar.bz2.$NUM ]; then
rsync archive.tar.bz2.$NUM user@host::incoming/target_directory.tar.bz2.$NUM
rm archive.tar.bz2.$NUM
NUM=$(($NUM + 1))
else
echo «finish: bb»
exit 2
fi
done

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