Являются ли операции rsync атомарными на уровне файлов?
Я пытаюсь понять, как если файлы rsyncing являются атомарными. Я не мог найти подтверждения об этом. Из-за того, что rsync мог отправлять только дельта, у меня создалось впечатление, что он также обновляет только части живых файлов.
С другой стороны, DJB рекомендует rsync для синхронизации живых файлов .cdb
, и я нашел это сообщение (http://lists.samba.org/archive/rsync/2002-April/002210.html), которые оба будет означать, что новый файл будет создан, а затем переместится в нужное место.
Может кто-нибудь указать мне на официальный источник, подтверждающий тот или иной?
Ответы
Ответ 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", чтобы получить исходное имя файла).