Рейтинг:1

rsync отказывается исключать каталог

флаг mx

Я пытаюсь сделать резервную копию ОС с помощью rsync и поместить ее в crontab. который сам по себе отлично работает, но по какой-то причине он отказывается принимать во внимание /export при просмотре исключений...

0 2 * * 0 rsync -aAXv / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*"," /mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/server-backup/ >/dev/null 2>&1

Однако он исключает все остальные папки из резервной копии.

Общая причина, по которой я также хочу исключить это /экспорт/* это связано с тем, что этот резервный диск также монтируется как привязка к /export из-за общего ресурса nfs на диске на удаленном сервере.

В связи с тем, что включает /экспорт/* я продолжаю заканчивать тем, что мой диск переполняется из-за цикла в моем rsync, когда он начинает создавать резервную копию самого диска на себя (/export/backup-disk/ -> /media/backup-disk/server-backup)

монтирование моего /media/backup-disk для экспорта выглядит следующим образом: /etc/fstab:

/media/backup-disk /export/backup-disk нет привязки 0 0 

Итак, мой общий вопрос: почему он включает /экспорт/* пока он находится внутри опции исключения rsync, и как мне это исправить?

Редактировать:

результат пробного запуска с --stats --progress (без перенаправления stout en stin в /dev/null):

sudo rsync -aAXv --stats --progress / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*" ,"/mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/test/ > /media/backup-disk/test.txt 

кошка /media/backup-disk/test.txt | grep -A1 экспорт/        
экспорт/
дом/
--
главная/пользователь/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__init__.py
          9 060 100 % 38,98 КБ/с 0:00:00 (xfr#17141, ir-chk=1174/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/day.py
         12 609 100% 54,24 КБ/с 0:00:00 (xfr#17142, ir-chk=1173/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/export_custom_job.py
         12 034 100% 51,77 КБ/с 0:00:00 (xfr#17143, ir-chk=1172/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/job.py
          8 970 100 % 38,59 КБ/с 0:00:00 (xfr#17144, ir-chk=1171/22834)
главная/пользователь/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/__init__.cpython-38.pyc
          8809 100% 37,90 КБ/с 0:00:00 (xfr#17145, ir-chk=1169/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/day.cpython-38.pyc
         12 206 100% 52,28 КБ/с 0:00:00 (xfr#17146, ir-chk=1168/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/export_custom_job.cpython-38.pyc
         11 859 100% 50,79 КБ/с 0:00:00 (xfr#17147, ir-chk=1167/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/job.cpython-38.pyc
          9 302 100% 39,84 КБ/с 0:00:00 (xfr#17148, ir-chk=1166/22834)
...

Это указывает на то, что он исключает экспорт, но все же каким-то образом я продолжаю обнаруживать, что мой диск заполнен каждый раз, когда запускается cron, потому что он все еще копирует данные внутри /export в мой каталог резервного копирования сервера...

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

bac0n avatar
флаг cn
Что будет, если поменяться местами с потерянным+найденным
terdon avatar
флаг cn
Будет ли это работать так, как ожидалось, если вы инвертируете логику и включите только то, что хотите, а не исключите все остальное? `rsync -aAXv /{boot,bin,etc.home,net,opt,root,srv,var}`? Кроме того, не могли бы вы [отредактировать] свой вопрос и включить вывод rsync, показывающий пути в `/export`, которые он подбирает? В зависимости от того, как они появляются, это может дать нам некоторую информацию. Наконец, вы пробовали `rsync -aAXv / "/export/*"`? Работает ли это так, как ожидалось, если вы исключите только «экспорт» и ничего больше?
флаг ar
Вы также перенаправляете как stdout, так и stderr на /dev/null. Попробуйте сначала без этого перенаправления и посмотрите, что скажет rsync?
флаг ar
Также попробуйте убрать запятые.
FGOD avatar
флаг mx
отличные предложения, позвольте им попробовать некоторые из этих вещей с пробным запуском
FGOD avatar
флаг mx
Сейчас я повторяю попытку с --stats --progress, чтобы получить лучший вывод того, что видит rsync, и отредактирую сообщение с ним.
FGOD avatar
флаг mx
может ли это быть /dev/null?
флаг hr
Задания cron AFAIK по умолчанию запускаются в `/bin/sh`, что не поддерживает расширение скобок. Я удивлен, что *любой* из исключений работает - если вы не добавили явное `SHELL=/bin/bash` или подобное перед спецификацией работы?
FGOD avatar
флаг mx
@steeldriver, так что было бы лучше сделать файл со списком исключений и использовать файл в исключениях?
FGOD avatar
флаг mx
@sudodus хорошо, отключение монтирования привязки заставит его работать как обычно, потому что в /export/ в любом случае не будет ничего копировать ... Он работает так, как должен делать это вручную в терминале, как вы можете видеть в редактировании, которое я сделал. Я могу попытаться составить список того, что нужно скопировать вместо этого, но не будет ли это также составлять большой список, поскольку я не смогу сделать / в качестве источника, и вместо этого мне нужно будет предоставить список всех каталогов for нужно копировать?
флаг hr
@FGOD imho, можно использовать расширение скобок - при условии, что вы убедитесь, что команда запущена в оболочке, которая ее поддерживает (ksh, zsh, bash, ...), либо установив `SHELL` для cronjob, либо переместив команду в отдельный сценарий оболочки с соответствующим шебангом и вместо этого запускать его из cron
FGOD avatar
флаг mx
@steeldriver Я пытался запустить rsync в sh, и он действительно включает экспорт. Тем не менее, думаю, что это странно, что он исключает все остальное. Но проверим позже сегодня, установив оболочку в cron и запустив ее.
FGOD avatar
флаг mx
@steeldriver, даже когда я добавляю SHELL=/bin/zsh, он все равно получает /export. Я сделал из него скрипт с #!/bin/zsh в начале и поместил этот скрипт в cron, и теперь он работает нормально. Спасибо за подсказку о том, как работает cron!
Рейтинг:2
флаг mx

Кажется, проблема действительно была такой, как упоминал @steeldriver, в том, как запускаются crons (в sh вместо bash, zsh или любой другой оболочки). Это сделало его несовместимым с расширением скобок списка исключений.

Совет по добавлению оболочки в cron не решил эту проблему, но помещение команды в скрипт и запуск скрипта решили проблему.

Итак, теперь у меня есть скрипт, который имеет следующее:

#!/бин/зш

rsync -aAXv --stats --progress / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*", "/mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/test > /dev/null 2>&1

и cron следующим образом, чтобы он запускался каждое воскресенье в 2 часа ночи:

0 2 * * 0 /opt/scripts/rsync-os-backup
sudodus avatar
флаг jp
Спасибо, что поделились своим решением :-)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.