Intereting Posts
Невозможно добавить раскладку клавиатуры на Cinnamon Сумма альтернативных значений в столбце с использованием команды sed или nawk Почему альса звучит поп, треск и вообще слишком искажен, чтобы слушать? Объедините 2 файла в одном с настраиваемой линией между Как установить метаданные для музыкальных файлов? контроль приоритета приложений с использованием групп Рабочая среда рабочего стола, которая может привязывать рабочее пространство к внешнему монитору Интернет не работает NetCat игнорирует (не отправляет) сетевые данные для широковещательных адресов Как обеспечить, чтобы анонимный FTP был отключен в системе Solaris 10? Libreoffice отсутствует меню в XFCE4 Сделать часть доступной для чтения файловой системы доступной для записи Как найти конкретную строку и распечатать всю строку? запустить x11vnc при загрузке Есть ли способ ждать завершения загрузки

Как создавать резервные копии файлов теневого копирования / etc / {, g} с разрешением 0000?

Я пытаюсь создать резервную копию нескольких серверов /etc с помощью rsync с другого сервера. Вот соответствующий фрагмент:

 PRIVKEY=/path/to/private.key RSYNC_OPTS="--archive --inplace --no-whole-file --quiet" ssh -n -i $PRIVKEY root@${ip} "rsync $RSYNC_OPTS /etc 192.168.25.6::"'$(hostname)' 

где ${ip} – IP-адрес сервера для резервного копирования, а 192.168.25.6 – IP-адрес сервера, на котором выполняется резервное копирование.

Все прошло хорошо, за исключением /etc/{,g}shadow файлов /etc/{,g}shadow на некоторых серверах. Поскольку их разрешения равны 0000 , rsync, похоже, не хочет их читать (ошибки «Разрешения на отказ (13)»).

Быстрая проверка:

 ssh -i $PRIVKEY root@${ip} "cat /etc/{,g}shadow" 

успешно сбрасывали файлы.

Есть ли способ обойти это ограничение rsync?


редактирует

Резервным сервером является Ubuntu 12.04. Серверы, подлежащие резервному копированию, являются серверами Ubuntu, RHEL, OEL и CentOS.

Я попытался добавить -t в параметры ssh и префикс rsync с помощью sudo , но все равно имею те же ошибки.

Разрешения для файлов на самом деле не применяются к root: программы, выполняемые с правами администратора, могут читать и записывать файлы независимо от настроек защиты. (Однако даже root не может выполнить файл, если не установлен один из битов выполнения, неважно, какой из них). Это объясняет, почему cat может это сделать. Но, по-видимому, rsync запускает собственную проверку, чтобы обуздать то, что можно скопировать. Таким образом, это не «ограничение», а намеренное поведение (не то, чтобы это было для вас утешением). Я говорю «по-видимому», потому что я не нашел никакой документации для этого поведения.

(Извиняюсь, если я просто повторю ваш вопрос! Не совсем уверен в вашем описании.)

Если ваша проблема ограничена теневыми файлами, я был бы склонен добавить вызов cat к вашему сценарию резервного копирования и игнорировать ошибку rsync для этих файлов. Вы могли бы добавить логику только для синхронизации теневых файлов, когда они изменились, но на самом деле они достаточно малы, чтобы я не беспокоился.

Я не могу точно сказать, почему ваш rsync терпит неудачу, потому что копия rsync работает в моих системах.

Тем не менее, я могу дать вам рецепт для определения причины ошибки rsync. Как root на сервере для резервного копирования:

 cd /tmp echo foo > tst chmod 0000 tst strace -fo strace-cat.out \ cat tst strace -fo strace-rsync.out \ rsync -av --quiet tst tst.2 # set RSYNC_OPTS and hostname before executing following strace -fo strace-remote-rsync.out \ rsync $RSYNC_OPTS --quiet tst 192.168.25.6:/tmp/tst.3 

Это разбивает проблему на три части: успешный локальный open / read / close для cat, локальный rsync (который может преуспеть) и удаленный rsync, который будет терпеть неудачу, как ваш.

Вы сможете увидеть на выходе strace в strace-remote-rsync.out (и, возможно, strace-rsync.out), который системный вызов терпит неудачу. И вы увидите, что rsync – это гораздо более сложная операция с подпроцессами и разными ввода-выводами. Он использует mmap (2) для загрузки файла в память, а не для открытия (2) для получения файлового дескриптора для него.