Rsync ставит меня в тупик: кажется, работает нормально, но на самом деле не копирует файлы на внешний диск.

Вопрос или проблема

Вот ситуация: Synology Diskstation NAS, который использует DSM, их настроенную на базе Linux систему. Моя задача – сделать резервное копирование, сначала полное, а затем инкрементальное, нескольких сочетаний файловой системы на Diskstation на внешний жесткий диск, подключенный напрямую через USB. Когда диск смонтирован, он рассматривается как новое сочетание.

(Вы можете посмотреть текст сценария здесь, так как это может помочь увидеть все).

Скрипт вызывает rsync для выполнения резервного копирования. Планируется, что скрипт начнется с полного резервного копирования. После завершения будет создан символическая ссылка, указывающая на последнее место резервной копии (“latest”). При последующих инкрементальных запусках флаг –link-dest указывает на местоположение “latest”. Rsync должен создать жесткие ссылки для существующих файлов и скопировать новые. Старая символическая ссылка удаляется и заменяется после завершения нового события. Скрипт запускается непосредственно на NAS.

Вот пример команды, используемой для его запуска:

rsync --archive --progress --verbose --human-readable / 
--exclude '@eaDir'   -f'- #recycle/' -f'- .Trash**' /
-f'- *cache/' -f '- ./cache' -f'- *git/' /
--log-file="${LOG_FILE}" --link-dest $LAST  
"$p" "${BPATH}/${SOURCE}"

Это начальное резервное копирование не включает опцию “–link-dest $LAST”, только инкрементальные. Все переменные устанавливаются заранее (я проверял, используя команды вывода, чтобы убедиться, что они форматированы правильно). Переменная “$p” – это имя конкретного каталога сочетания в формате “dirname/”, чтобы скопировать весь каталог. Исключения и фильтры установлены таким образом из-за некоторых проблем с их работой… эти работают.

Проблема, с которой я сталкиваюсь, заключается в том, что скрипт выполняется нормально, я не вижу ошибок и получаю некоторый вывод, чтобы убедиться, что все в порядке. Когда он завершен, новые каталоги были созданы, символическая ссылка создана и добавлена, но ни одного файла – ничего – фактически не скопировано на внешний диск.

Вот небольшой фрагмент вывода, который я получаю:

~/scripts $ sudo ./backup_final.sh
Пароль: 
Резервный диск один или два?  два
текущий каталог резервного копирования не найден, создаем...
/volumeUSB1/usbshare/2024-09-30_19:52:17
отправка инкрементального списка файлов
drwxr-xr-x          4.10K 2024/09/30 19:52:17 .

отправлено 39 байт  получено 64 байта  68.67 байт/сек
общий размер 0  ускорение 0.00
отправка инкрементального списка файлов
drwxr-xr-x          4.10K 2024/09/30 19:52:17 .

отправлено 39 байт  получено 64 байта  206.00 байт/сек
общий размер 0  ускорение 0.00
отправка инкрементального списка файлов
drwxr-xr-x          4.10K 2024/09/30 19:52:17 .

отправлено 39 байт  получено 64 байта  206.00 байт/сек
общий размер 0  ускорение 0.00
отправка инкрементального списка файлов
drwxr-xr-x          4.10K 2024/09/30 19:52:17 .

Как видите, списки файлов создаются, но ничего не копируется.

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

Бесит то, что когда я играл с этим несколько недель назад, я смог заставить это работать хотя бы один раз. Теперь это не делает ничего.

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

Ответ или решение

Проблема, с которой вы столкнулись при использовании rsync, действительно может вызывать замешательство, особенно если скрипт не выдает ошибок, но и не выполняет ожидаемое действие. Давайте рассмотрим несколько возможных причин, по которым файлы не копируются на внешний диск, и предложим пути их решения.

  1. Правильность путей: Убедитесь, что все переменные, такие как $p (путь к директории на NAS) и ${BPATH}/${SOURCE} (путь к целевому расположению на внешнем диске), установлены правильно. Вы можете добавить команды echo в ваш скрипт, чтобы вывести значения этих переменных перед запуском rsync и убедиться, что они действительно указывают на ожидаемые директории.

  2. Права доступа: Убедитесь, что у rsync есть необходимые права доступа для чтения файлов из исходной директории и записи их на внешний диск. Вы можете проверить права на директории, выполнив команду ls -l, чтобы увидеть, соответствуют ли они ожиданиям. Если нужно, добавьте пользователю, под которым выполняется скрипт, права доступа к файлам и директориям.

  3. Использование ключа --link-dest: Убедитесь, что вы используете --link-dest правильно. Этот параметр предназначен для создания жестких ссылок на файлы из предыдущей резервной копии. Если вы запускаете первую резервную копию, этот параметр не должен использоваться. Убедитесь, что при первой резервной копии вы полностью исключаете параметр --link-dest и правильно создаете структуру с последующей резервной копией.

  4. Фильтры и исключения: Проверьте ваши фильтры и исключения. Возможно, они настроены таким образом, что в результате исключаются все файлы. Вы можете поэкспериментировать с удалением всех опций -f, чтобы убедиться, что проблема не в их настройках.

  5. Отладка команд: Вы можете запустить rsync с ключом -n (или --dry-run), чтобы увидеть, какие файлы скрипт пытается скопировать, без фактического выполнения операции. Это поможет вам понять, попадают ли файлы из исходной директории на ваш внешний диск.

  6. Логи: Убедитесь, что файл логирования ${LOG_FILE} правильно создается и записывается. Просмотрите его после выполнения скрипта — там может содержаться полезная информация о том, что произошло или не произошло.

  7. Работа в интерактивном режиме: Наконец, попробуйте выполнить команду rsync вручную в терминале (без использования скрипта) с теми же параметрами, чтобы отследить поведение и выявить возможные проблемы. Это может дать вам больше контроля и понимания того, что именно происходит.

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

Оцените материал
Добавить комментарий

Капча загружается...