Перерваючи rsync з ctrl-c, чи слід використовувати `--partial` або` --append`?


14

Я хотів би перервати rsyncз ctrl-c(скажімо, після того, як половина файлу перенесений) та відновити його, не повторно пересилаючи вже передані дані.

Інформація про stackexchange / google, яку я знайшов, здається суперечливою. Я знайшов деяких, хто каже, що використовують, --partialі деяких, хто каже, що використовують --append. Мені це здається, що вони обоє будуть працювати.

Якщо я хочу перервати rsync з ctrl-c, я повинен використовувати --partialабо --append?

Якщо б обоє працювали, коли краще використовувати один проти іншого?

Відповіді:


8

Для перезавантаження --partialдостатньо. Використовуйте, --inplaceякщо ви дійсно не хочете rsyncстворювати тимчасовий файл, який об'єднує наявні скопійовані дані та новий, наприклад, якщо rsyncвиникнуть проблеми з дозволом, створюючи тимчасовий файл у цільовій папці.

Використовуйте лише, --appendякщо ви можете гарантувати, що частково скопійовані дані все ще ідентичні джерелу. (Зазвичай це хибна оптимізація.)


1
тож коли я використовую вищевказані параметри (фактично використовуючи --append-verify) і rsync все ще стверджує, що це починається з початку, і я не бачу жодних змін у розмірі файлу, а решта часу файлу - це те, що він був спочатку коли я запустив копію, чи rsync бреше, чи я повинен хвилюватися?
Майкл

@Michael, якщо у вас є місцеве джерело та місце призначення, всі правила змінюються.
roaima

Я робив це через локальну мережу, але після трохи більше експериментів виявляється, що проблема полягає в тому, що оскільки --append-verifyнасправді доводиться фактично читати частини файлу з обох сторін, які там є, не швидше через вузьке місце будучи старшим накопичувачем на стороні читання, а не самою локальною мережею.
Майкл

@Michael добре так, якщо ви попросили перевірити вже передані дані, тоді він повинен прочитати дані!
roaima

1
@alper Я ніколи раніше не помічав цього варіанту. Схоже, це було б найкраще використовувати --partial-dir, але я ще цього не пробував.
roaima

3
  • --append припускає, що файл може вже існувати в пункті призначення, він просто змушує rsync не перевіряти вміст, який вже є (але дивіться нижче).
  • --partial повідомляє rsync не видаляти частково передані файли.

Вам також необхідно --inplaceз --partial(мається на увазі , з --append).

Виявляється --inplaceнасправді --partial, це означає , що цього --appendдостатньо (це означає, --inplaceщо має на увазі --partial). Але --partialоднієї недостатньо, вам потрібно --inplace, інакше rsync створює тимчасові файли замість оновлення остаточного.


Якщо я хочу перервати rsync з ctrl-c, я б використав --append? Бо --partialсам по собі не відновився б.
Тревор Бойд Сміт

Я б користувався просто --inplace. rsync "завжди поновлюється" (намагається передати необхідні мінімальні дані). Що --appendозначає сказати rsync, щоб не перевіряти суму даних уже в пункті призначення, тому якщо частковий файл у пункті призначення був пошкоджений, він залишатиметься пошкодженим --append. --appendможе бути цікаво, якщо, скажімо, частковий файл дуже великий, і ви не можете чекати (і ви впевнені, або не байдуже, чи він пошкоджений), або якась інша конкретна ситуація.
spuk

1
на Fedora 20 man rsyncваріант --appendговорить... Implies --inplace
Тревор Бойд Сміт

1
--inplaceбуду працювати. --appendбуде працювати, тому що (як я зазначив у відповіді) це випливає --inplace, що має на увазі --partial(що збереже частково передані файли при перериванні Ctrl-c, що було початковим питанням). Так --appendзначить "зробіть так --inplace, але не перевіряйте суму, що вже є в пункті призначення . Це важлива різниця. Якщо вам це не байдуже, використовуйте будь-яке.
spuk

1
так що тоді сенс --partial БЕЗ --inplace
Еван Керролл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.