Якщо ви пройдете rsync два локальних шляхи, він за замовчуванням використовує "--whole-файл", а не передачу дельти. Отже, ви шукаєте "--no-file-file". Ви також отримаєте дельта-передачу, якщо ви попросили "-c".
Ось як можна перевірити:
$ mkdir a b
$ dd if=/dev/zero of=a/1 bs=1k count=64
$ dd if=/dev/zero of=a/2 bs=1k count=64
$ dd if=/dev/zero of=a/3 bs=1k count=64
$ rsync -av a/ b/
sending incremental file list
./
1
2
3
sent 196831 bytes received 72 bytes 393806.00 bytes/sec
total size is 196608 speedup is 1.00
Потім торкніться файла та повторно синхронізуйте
$ touch a/1
$ rsync -av --inplace a/ b/
sending incremental file list
1
sent 65662 bytes received 31 bytes 131386.00 bytes/sec
total size is 196608 speedup is 2.99
Ви можете перевірити, що він повторно використовував inode з "ls -li", але помітите, що він надіслав цілих 64 К байт. Спробуйте ще раз з --no-file-file
$ touch a/1
$ rsync -av --inplace --no-whole-file a/ b/
sending incremental file list
1
sent 494 bytes received 595 bytes 2178.00 bytes/sec
total size is 196608 speedup is 180.54
Тепер ви надіслали лише 494 байти. Ви можете використовувати strace для подальшої перевірки того, чи був записаний якийсь файл, але це показує, що принаймні використовується delta-transfer.
Зауважте (див. Коментарі), що для локальних файлових систем --whole-file
передбачається (див. Головну сторінку для rsync). З іншого боку, по всій мережі --no-whole-file
передбачається, тому --inplace
сама по собі буде вести себе як --inplace --no-whole-file
.