Подтвердить что ты не робот

Являются ли операции rsync атомарными на уровне файлов?

Я пытаюсь понять, как если файлы rsyncing являются атомарными. Я не мог найти подтверждения об этом. Из-за того, что rsync мог отправлять только дельта, у меня создалось впечатление, что он также обновляет только части живых файлов.

С другой стороны, DJB рекомендует rsync для синхронизации живых файлов .cdb, и я нашел это сообщение (http://lists.samba.org/archive/rsync/2002-April/002210.html), которые оба будет означать, что новый файл будет создан, а затем переместится в нужное место.

Может кто-нибудь указать мне на официальный источник, подтверждающий тот или иной?

4b9b3361

Ответ 1

Rsync создает новый временный файл, который будет содержать блоки из локальной (получающей) копии и любых блоков, которые она требует от отправляющей копии. Когда это делается, временный файл перемещается на место, заменяя оригинал.

Полная информация здесь;

http://rsync.samba.org/how-rsync-works.html

Ответ 2

Существует perl script, который должен добавить эту функциональность:  http://www.opensource.apple.com/source/rsync/rsync-40/rsync/support/atomic-rsync

Проблема в том, что я пытался ее протестировать, и это не сработает. Также есть что-то страшное, потому что из URL-адреса это похоже на то, что связано с rsync 4.0, а текущая версия rsync - 2.6.9!

Ответ 3

Нет, rsync не пишет файлы атомарно.

Во время передачи создается скрытый временный файл в том же целевом каталоге (.[original-filename].[6-random-characters]), который содержит переданный файл в его текущем состоянии.

Если вам не удастся потерять соединение во время передачи или rsync встретит любую другую проблему, в результате чего соединение будет закрыто, до убийства процесс rsync обязательно скопируйте временный файл в чтобы сохранить все уже перенесенные пакеты. Вы можете просто переименовать временный файл (удалить ведущий "." И конечный ".xxxxxx", чтобы получить исходное имя файла).