Я розглянув це питання і це питання , але, схоже, вони не вирішують симптомів, які я бачу.
У мене великий файл журналу (близько 600 Мб), який я намагаюся перенести через стільникову мережу. Тому що це файл журналу він просто додається до (хоча це насправді в SQLite базі даних тільки з INSERT виконується, так що це не зовсім так просто, але за винятком останньої сторінки 4K (або , може бути, небагато) файл щоразу ідентичний. Важливо, що насправді надсилаються лише ті зміни (і те, що потрібно перевіряти), тому що з'єднання даних вимірюється.
Однак, коли я виконую тест через немереговане з'єднання (наприклад, безкоштовна точка доступу до Wi-Fi), я не бачу спостереження за швидкістю або зменшенням передачі даних. Через повільне підключення до WiFi я бачу порядку 1 Мб / с або менше, повідомляючи, що передача триватиме майже 20 хвилин. Через швидке підключення Wi-Fi я бачу рівномірну швидкість, але жодного звіту про швидкість, і друга спроба передачі (яка тепер повинна бути швидшою, оскільки два файли однакові) тепер не показує різниці.
Команда (дезінфікована для видалення конфіденційної інформації), яку я використовую:
rsync 'ssh -p 9999' --progress LogFile michael@my.host.zzz:/home/michael/logs/LogFile
Вихід, який я отримую в кінці, виглядає приблизно так:
LogFile
640,856,064 100% 21.25MB/s 0:00:28 (xfr$1, to-chk=0/1)
Немає жодної згадки про швидкість.
Я підозрюю, що проблема може бути однією з таких:
- Я відсутній варіант командного рядка. Однак, повторне читання довідкової сторінки, схоже, говорить про те, що передача дельти вмикається за замовчуванням: я бачу лише варіанти їх відключення.
- Я використовую rsync через ssh (навіть на нестандартному порту) через те, що сервер знаходиться за брандмауером, який дозволяє лише ssh. Я не бачив нічого прямо сказаного, що передача дельти не буде працювати, якщо демон rsync не працює. Я спробував використати нотацію "::" замість ":", але на сторінці man не дуже зрозуміло, що таке "модуль", і моя команда відхилена для введення недійсного модуля.
Я виключив таке:
- дельта передачі, які не здійснюються в локальній мережі. Виключено, тому що я намагаюся виконати передачу через Інтернет
- накладні витрати через розрахунок контрольної суми. Я бачив таку поведінку як на швидкому, так і повільному Wi-Fi-зв’язку, і швидкість передачі даних, здається, не обмежена.
rsync --stats
, а також -v -v
отримати ще більш детальну статистику. Rsync підкаже вам, скільки було зіставлених та неперевершених даних.
but with the exception of the last 4k page (or maybe a few) the file is identical each time.
Ви насправді це підтвердилиcmp
? Або краще, зxdelta
чи чимсь? Якщо ви дійсно хочете мінімізувати розмір передачі, зберігайте стару та нову версії локально, щоб ви могли обчислити мінімальний бінарний розріз локально (з чимось іншим, ніж rsync), і просто надіслати це, не надсилаючи контрольні суми через дозований з’єднання. Робити це на рівні запису бази даних замість рівня бінарних файлів, мабуть, ще краще, як пропонує дероберт.