Когда вы отправляете тот же набор файлов, rsync
лучше подходит, потому что он будет отправлять только различия. tar
всегда будет отправлять все, и это пустая трата ресурсов, когда много данных уже там. В tar + rsync + untar
этом случае утрачивается это преимущество, а также преимущество синхронизации папок rsync --delete
.
Если вы копируете файлы в первый раз, сначала упаковывая, затем отправляя, а затем распаковывая (AFAIK rsync
не принимает ввод по каналу), это rsync
будет громоздко и всегда хуже, чем просто rsyncing, потому что не нужно будет выполнять какую-либо задачу больше, чем в tar
любом случае.
Совет: rsync версии 3 или новее выполняет инкрементную рекурсию, что означает, что он начинает копировать почти сразу же, прежде чем считает все файлы.
Совет 2: Если вы используете rsync
более ssh
, вы также можете использовать либоtar+ssh
tar -C /src/dir -jcf - ./ | ssh user@server 'tar -C /dest/dir -jxf -'
или просто scp
scp -Cr srcdir user@server:destdir
Общее правило, будь проще.
ОБНОВИТЬ:
Я создал 59M демо-данных
mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done
и несколько раз проверил передачу файла на удаленный сервер (не в той же локальной сети), используя оба метода
time rsync -r tmp server:tmp2
real 0m11.520s
user 0m0.940s
sys 0m0.472s
time (tar cf demo.tar tmp; rsync demo.tar server: ; ssh server 'tar xf demo.tar; rm demo.tar'; rm demo.tar)
real 0m15.026s
user 0m0.944s
sys 0m0.700s
сохраняя отдельные журналы от отправленных пакетов трафика ssh
wc -l rsync.log rsync+tar.log
36730 rsync.log
37962 rsync+tar.log
74692 total
В этом случае я не вижу никакого преимущества в меньшем сетевом трафике, используя rsync + tar, что ожидается, когда значение по умолчанию mtu равно 1500, а размер файлов - 10 КБ. rsync + tar генерировал больше трафика, работал медленнее в течение 2-3 секунд и оставил два мусорных файла, которые нужно было очистить.
Я провел одни и те же тесты на двух машинах на одной и той же локальной сети, и там rsync + tar показал гораздо лучшие результаты и значительно меньше сетевого трафика. Я предполагаю причину больших кадров.
Возможно, rsync + tar будет лучше, чем просто rsync для гораздо большего набора данных. Но, честно говоря, я не думаю, что это стоит того, вам нужно двойное пространство с каждой стороны для упаковки и распаковки, и есть несколько других вариантов, как я уже упоминал выше.