Вопрос или проблема
Я пытаюсь составить команду rsync для резервного копирования моего директории $HOME (в Ubuntu Studio 24.04.2 LTS) на существующую копию (созданную вручную из более ранних версий) на моем NAS.
Вот моя экспериментальная командная строка:
rsync -av --update --acls --xattrs --atimes --dry-run --whole-file --exclude="*cache*" --log-file=rsync.log $HOME/ /nas/home/
Как видите, я (умышленно) не указал “–delete”.
Почему тогда я получаю “cannot delete non-empty directory” сразу после “building file list” в файле журнала?
Ответ или решение
Причины, по которым rsync выдаёт ошибку "cannot delete non-empty directory", даже если вы не указали опцию "–delete", могут быть связаны с несколькими факторами, которые важно рассмотреть при работе с rsync. Давайте разберём вашу ситуацию более детально.
1. Контекст команды rsync
Ваше командное выражение выглядит следующим образом:
rsync -av --update --acls --xattrs --atimes --dry-run --whole-file --exclude="*cache*" --log-file=rsync.log $HOME/ /nas/home/
Давайте детально рассмотрим параметры:
- -a (archive mode): этот параметр включает в себя несколько опций, включая рекурсивное копирование, сохранение всех атрибутов файлов и т.д.
- –update: предотвращает копирование файлов, которые уже существуют на целевом хранилище и являются более новыми.
- –exclude: исключает файлы из копирования, но не мешает синхронизации структуры директорий.
- –dry-run: позволяет выполнить тестовый запуск, чтобы увидеть, какие изменения будут сделаны без фактического выполнения копирования.
2. Ошибка "cannot delete non-empty directory"
Ошибка "cannot delete non-empty directory" может возникнуть в ряде ситуаций:
-
Структура директорий: rsync пытается синхронизировать обе стороны. Если на стороне назначения (/nas/home/) есть директория, которая не пустая и вы не указали опцию
--delete
, но структура во многом отличается от структуры исходного каталога ($HOME), это может вызвать некоторые сложности. Однако, если ваша структура похожа, rsync не должен пытаться удалять директории без явного указания этой опции. -
Атрибуты и временные метки: Параметры, такие как
--acls
,--xattrs
, и--atimes
, могут влиять на поведение rsync, особенно если на NAS система (например, Samba), не поддерживает некоторые атрибуты или меняет логику ведения директорий.
3. Рекомендации по разрешению проблемы
Для решения данной проблемы можно использовать несколько подходов:
- Проверка прав доступа: Убедитесь, что у вас есть необходимые права на запись в директорию назначения.
- Проверка наличия других процессов: Если в директории назначения работают другие процессы, которые могут блокировать удаление или изменение содержимого, это также может быть причиной проблемы.
- Обновление rsync: Убедитесь, что у вас установлена последняя версия rsync, поскольку ошибки и баги, связанные с удалением, могут быть исправлены в обновлениях.
Заключение
Ваша ситуация, в которой rsync выдает ошибку "cannot delete non-empty directory", может быть связана с особенностями структуры директорий и правами доступа. Рекомендуется также внимательно проверять атрибуты файлов и директорий, а также проверять, нет ли конфликтующих процессов, которые мешают нормальной работе. Попробуйте уменьшить сложность команды, например, убрав некоторые параметры, чтобы изолировать и понять источник проблемы.