Перш за все, щодо частини "резюме" у вашому запитанні --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-verify
rsync буде вести себе так, як це завжди робиться для всіх файлів однакового розміру. Якщо вони відрізняються модифікацією чи іншими часовими позначками, це замінить ціль джерелом, не перевіряючи ці файли далі. --checksum
буде порівнювати вміст (контрольні суми) кожної пари файлів однакового імені та розміру.
ОНОВЛЕНО 2015-09-01 Змінено для відображення балів, зроблених @Alex (спасибі!)
ОНОВЛЕНО 2017-07-14 Змінено для відображення балів, зроблених @Jonathan (спасибі!)