Перш за все, щодо частини "резюме" у вашому запитанні --partialякраз і вказує на кінець прийому зберігати частково передані файли, якщо кінець відправки зникає так, ніби вони були повністю передані.
Під час передачі файлів вони тимчасово зберігаються як приховані файли у своїх цільових папках (наприклад .TheFileYouAreSending.lRWzDC) або спеціально вибраній папці, якщо встановити --partial-dirкомутатор. Якщо передача не вдасться і --partialне встановлена, цей прихований файл залишатиметься в цільовій папці під цим криптованим іменем, але якщо --partialвін встановлений, файл буде перейменований на фактичне цільове ім'я файлу (у цьому випадку TheFileYouAreSending), навіть незважаючи на те, що файл не завершено. Справа в тому, що згодом ви можете завершити передачу, запустивши rsync знову за допомогою --appendабо --append-verify.
Отже, сама по собі--partial не відновить невдалу або скасовану передачу. Щоб відновити його, вам доведеться використовувати один із вищезгаданих прапорів при наступному запуску. Отже, якщо вам потрібно переконатися, що ціль ніколи не буде містити файли, які здаються нормальними, але насправді є неповними, не слід використовувати . І навпаки, якщо ви хочете переконатися, що ви ніколи не залишаєте позаду білих файлів, які заховані в цільовому каталозі, і ви знаєте, що зможете завершити передачу пізніше, чи можна вам допомогти.--partial--partial
Що стосується --appendзгаданого вище перемикача, то це фактичний перемикач "відновити", і ви можете ним користуватися, використовуєте ви чи ні --partial. Насправді, коли ви використовуєте --append, тимчасові файли ніколи не створюються. Файли записуються безпосередньо до їхніх цілей. У цьому відношенні --appendдає такий же результат, як і --partialпри невдалій передачі, але без створення цих прихованих тимчасових файлів.
Отже, підводячи підсумок, якщо ви переміщуєте великі файли і хочете, щоб можливість відновити скасовувану або невдалу операцію rsync з точної точки, яка rsyncзупинилася, вам потрібно скористатися --appendабо --append-verifyввімкнути наступну спробу.
Як зазначає @Alex нижче, оскільки версія 3.0.0 rsyncтепер має новий параметр --append-verify, який поводиться так, як робився --appendдо цього перемикача. Ви, мабуть, завжди хочете поведінки --append-verify, тому перевірте свою версію rsync --version. Якщо ви на Mac і не використовуючи rsyncз homebrew, ви (принаймні , до і в тому числі El Capitan) мають більш стару версію і потрібно використовувати --appendзамість --append-verify. Чому вони не продовжували свою поведінку --appendі замість цього називали прибульця --append-no-verify, це трохи спантеличено. У будь-якому випадку, --appendна rsyncперед тим версії 3 така ж , як --append-verifyна новіших версіях.
--append-verifyНе небезпечно: вони завжди будуть читати та порівнювати дані з обох кінців, а не просто вважати, що вони рівні. Це робиться за допомогою контрольних сум, тому в мережі це легко, але потрібно прочитати загальний обсяг даних на обох кінцях дроту, перш ніж реально відновити передачу, додавши до цілі.
По-друге, ви сказали, що "чули, що rsync здатний знаходити відмінності між джерелом та пунктом призначення, а тому просто копіювати відмінності".
Це правильно, і це називається перенесення дельти, але це різна річ. Щоб увімкнути це, ви додаєте перемикач -cабо --checksum. Після використання цього комутатора rsync вивчить файли, які існують на обох кінцях дроту. Він робить це в шматки, порівнює контрольні суми на обох кінцях, і якщо вони відрізняються, він передає лише різні частини файлу. Але, як зазначає @Jonathan нижче, порівняння проводиться лише тоді, коли файли мають однаковий розмір на обох кінцях - різні розміри призведуть до того, що rsync завантажить весь файл, замінивши цільове однойменне ім'я.
Для цього потрібно спочатку трохи обчислити з обох кінців, але може бути надзвичайно ефективним для зменшення навантаження на мережу, якщо, наприклад, ви часто створюєте резервну копію дуже великих файлів фіксованого розміру, які часто містять незначні зміни. Прикладами, які спадають на думку, є віртуальні файли зображень жорсткого диска, що використовуються у віртуальних машинах або iSCSI-цілях.
Примітно, що якщо ви використовуєте --checksumдля передачі партії файлів, які є абсолютно новими в цільовій системі, rsync все одно буде обчислювати контрольні суми у вихідній системі перед їх передачею. Чому я не знаю :)
Отже, коротше:
Якщо ви часто використовуєте rsync, щоб просто "перемістити речі з А на В" і хочете, щоб можливість скасувати цю операцію та пізніше відновити її, не використовуйте --checksum, але не використовуйте --append-verify.
Якщо ви використовуєте rsync для резервного копіювання матеріалів часто, використання, --append-verifyймовірно, не зробить багато для вас, якщо тільки ви не маєте звички надсилати великі файли, які постійно збільшуються у розмірі, але рідко змінюються після написання. Як підказка про бонус, якщо ви створюєте резервну копію пам’яті, що підтримує знімки, наприклад, btrfsабо zfs, додавання --inplaceкомутатора допоможе вам зменшити розміри знімків, оскільки змінені файли не відтворюються, а змінені блоки записуються безпосередньо над старими. Цей перемикач також корисний, якщо ви хочете уникнути створення rsync копій файлів на цільовому рівні, коли відбулися лише незначні зміни.
Під час використання --append-verifyrsync буде вести себе так, як це завжди робиться для всіх файлів однакового розміру. Якщо вони відрізняються модифікацією чи іншими часовими позначками, це замінить ціль джерелом, не перевіряючи ці файли далі. --checksumбуде порівнювати вміст (контрольні суми) кожної пари файлів однакового імені та розміру.
ОНОВЛЕНО 2015-09-01 Змінено для відображення балів, зроблених @Alex (спасибі!)
ОНОВЛЕНО 2017-07-14 Змінено для відображення балів, зроблених @Jonathan (спасибі!)