У меня есть один сервер OEL / RHEL 5.3 с «исходным» подключением к общему ресурсу NFS 16 ТБ 10 Гбит / с и «целевым» подключением к LUN 16 ТБ FC, отформатированному с помощью OCFS2.
Мне нужно убедиться, что пункт назначения соответствует источнику, и я счастлив, что они не синхронизированы даже на час или два - этот бит легко использовать с помощью rsync.
Но было бы неплохо знать, что в случае, если кто-то удалит каждый файл в источнике, который не удален rsync в следующий запланированный период, он обнаруживает, что собирается удалить, скажем,> 20% источника из места назначения и предпочитает остановиться.
Возможно ли подобное, или для этой проблемы больше подходит другой инструмент? У меня есть гибкость с ОС и файловой системой этого компьютера, но не с фактическим типом подключения к обоим хранилищам.
Спасибо.
Вы можете использовать rsync --max-delete=NUM
чтобы сообщить rsync не удалять указанное количество файлов, где NUM - это некоторое число меньше примерно 20% ваших файлов, а --backup/--suffix
параметры для переименования файлов в целевом объекте, а не для удаления.
В случае каких-либо ошибок NFS вы теоретически должны быть защищены (man rsync
):
Если отправляющая сторона обнаруживает какие-либо ошибки ввода-вывода, удаление любых файлов в месте назначения будет автоматически отключено. Это сделано для предотвращения временных сбоев файловой системы (таких как ошибки NFS) на отправляющей стороне, вызывающих массовое удаление файлов в месте назначения.
Вы также можете ограничить урон с помощью --max-delete=NUM
так что удаляется лишь определенная часть. Затем вы можете восстановить эту часть с ленты или того, что вы используете.
На самом деле, может быть проблема в том, что кто-то жестяная банка удалить все файлы в источнике? и не следует ли вам просто остановить это с помощью разрешений?
Вы можете что-нибудь вместе взломать, чтобы просто подсчитать файлы. Собственно, примерно так:
(cd /source && ls -FalR . ) | sort > /root/sourcelist.$$
(cd /dest && ls -FalR . ) | sort > /root/destlist.$$
diff -u /root/sourcelist.$$ /root/destlist.$$ | egrep '^-' | wc -l
Сообщит вам, сколько файлов вы собираетесь удалить. Ударьте что-нибудь, что знает, сколько - это слишком много, и запустите это перед синхронизацией.