rsync не сохраняет владение каталогом даже с параметром -a

12

Я использую этот вызов rsync для резервного копирования моего домашнего каталога:

rsync -aARrx --info= --force --delete --info=progress2 -F "$USER_HOME" "$BACKUP_MNTPOINT"

Страница man rsync говорит, что -a подразумевает -g и -o (среди других ключей), что должно сохранить владение. Однако я заметил, что если каталог не существует в каталоге $BACKUP_MNTPOINT/$USER_HOME, он создается с правами root: root вместо правильного. (Это происходит только с каталогами прямо под $BACKUP_MNTPOINT/$USER_HOME). Это почему?

$BACKUP_MNTPOINTэто локально установленный диск. $BACKUP_MNTPOINT/$USER_HOMEдействительно имеет право собственности и разрешения. Ни, $USER_HOMEни $BACKUP_MNTPOINTконец с косой чертой.

И исходная, и целевая файловые системы являются XFS, и при запуске mkdir $BACKUP_MNTPOINT/$USER_HOMEсоздается каталог с ожидаемым владельцем.

kralyk
источник
1
Что такое файловая система $BACKUP_MNTPOINTи с какими опциями она монтируется? Это происходит только для $BACKUP_MNTPOINT/$USER_HOMEкаталога parent ( ) или для всех созданных каталогов? Есть $BACKUP_MNTPOINTи $USER_HOMEзаканчиваться символом /?
Тердон
Я использую XFS для обоих /homeи резервного диска. Пока что я думаю, что это произошло только для родительских каталогов. Ни, $BACKUP_MNTPOINTни $USER_HOMEконец с косой чертой. РЕДАКТИРОВАТЬ: я могу подтвердить сейчас, это происходит только с каталогами прямо ниже$BACKUP_MNTPOINT/$USER_HOME
kralyk
Так $BACKUP_MNTPOINT/$USER_HOMEесть права доступа, но нет подкаталогов? Пожалуйста, отредактируйте свой вопрос и добавьте эти детали. Также уточните, mkdir $BACKUP_MNTPOINT/$USER_HOME/fooсоздает ли каталог, принадлежащий вашему пользователю, если вы делаете это вручную.
Тердон
Да, mkdir $BACKUP_MNTPOINT/$USER_HOME/fooсоздает каталог с правами пользователя.
kralyk
Было бы очень приятно увидеть соответствующую информацию от strace(как указано в псевдо-ответе).
Павел Шимерда

Ответы:

18

У меня была похожая проблема при использовании rsyncдля резервного копирования моей системы на моем сервере. Я использовал:

rsync -aAXSHPr \
-e ssh \
--rsync-path="sudo /usr/bin/rsync/" \
--numeric-ids \
--delete \
--progress \
--exclude-from="/path/to/file/that/lists/excluded/folders.txt" \
--include-from="/path/to/file/that/lists/included/folders.txt" \
/ USER@SERVER:/path/to/folder/where/backup/should/go/

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

lord.garbage
источник
1
Ничего себе, со мной это даже не пришло в голову, замечательно, спасибо.
kralyk
0

Возможно, запустите rsync через strace / truss и посмотрите, не получите ли вы ошибку из системного вызова chown (), а также убедитесь, что chown () имеет правильный путь и UID / GID.

Еж
источник
Хороший комментарий, но не ответ.
Павел Шимерда