У меня есть NAS, который поддерживает только CIFS, AFS, SSH (без возможностей rsyncd, без NFS).
Мне нужно создавать резервные копии очень больших файлов (образов vm), и я обычно устанавливаю сервер rsync на устройстве резервного копирования, а затем делаю rsync --inplace
передавать только дельту уровня блока больших файлов. Это отлично работает с rsyncd.
С CIFS кажется, что он должен прочитать весь файл назначения и локальный файл перед его копированием. ВСЕ над (целиком, а не только дельтой) .. лучше с SSHFS?
Есть ли другой способ переместить только дельту блока без rsyncd?
Нет, лучше не будет с sshfs
. Не может быть, как в случае с локально смонтированными удаленными файловыми системами, локальные rsync
процесс должен прочитать файл, чтобы увидеть, что нужно скопировать. Для этого весь файл необходимо передать по сети.
sshfs в этом не поможет; что вам нужно сделать, это добавить -W
возможность указать rsync просто передавать файлы целиком, не пытаясь выяснить, в чем заключаются конкретные различия. Вам также может потребоваться удалить --inplace
(не уверен в этом).
rsync действительно разработан для удаленных операций, когда на каждом компьютере есть экземпляр (или демон) rsync, каждый из которых имеет быструю ссылку на свой диск, но с медленной связью между экземплярами rsync. В вашем случае медленное соединение находится между "удаленным" rsync и его диском, поэтому необходим другой набор вариантов оптимизации. В частности, rsync обычно по умолчанию читает все исходные и целевые файлы, поэтому он может определить, какие разделы необходимо передать по «медленной» средней ссылке; в вашем случае замедляет его больше, чем просто слепая передача всего файла.
Также убедитесь, что у вас есть -t
вариант (или -a
, что означает -t
), и являются не с помощью -c
. -c
заставит его прочитать весь файл, чтобы увидеть, изменился ли он вообще; без этого он просто посмотрит размер файла и время модификации, что -t
(и -a
) сохранить.