O rsync não preserva a propriedade do diretório, mesmo com -a

12

Eu uso essa chamada de rsync para fazer backup do meu diretório pessoal:

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

A página de manual do rsync diz que -a implica -g e -o (entre outras opções), o que deve preservar a propriedade. No entanto, notei que, se um diretório não existe $BACKUP_MNTPOINT/$USER_HOME, ele é criado com a propriedade root: root em vez da correta. (Isso acontece apenas com os diretórios logo abaixo $BACKUP_MNTPOINT/$USER_HOME). Por que é que?

$BACKUP_MNTPOINTé uma unidade montada localmente. $BACKUP_MNTPOINT/$USER_HOMEpossui a propriedade e as permissões corretas. Nem $USER_HOMEnem $BACKUP_MNTPOINTterminar com uma barra.

Os sistemas de arquivos de origem e de destino são XFS e a execução mkdir $BACKUP_MNTPOINT/$USER_HOMEcria um diretório com a propriedade esperada.

kralyk
fonte
1
O que é um sistema de arquivos $BACKUP_MNTPOINTe com quais opções ele é montado? Isso acontece apenas no $BACKUP_MNTPOINT/$USER_HOMEdiretório parent ( ) ou em todos os diretórios criados? Fazer $BACKUP_MNTPOINTe $USER_HOMEterminar com um /?
terdon
Eu uso o XFS para ambos /homee para a unidade de backup. Até agora, acho que isso aconteceu apenas para os diretórios pai. Nem $BACKUP_MNTPOINTnem $USER_HOMEterminar com uma barra. Edição: Posso confirmar agora isso só acontece com os diretórios logo abaixo$BACKUP_MNTPOINT/$USER_HOME
kralyk
Então, $BACKUP_MNTPOINT/$USER_HOMEtem as permissões corretas, mas os subdiretórios não? Por favor edite sua pergunta e adicionar esses detalhes. Além disso, esclareça se mkdir $BACKUP_MNTPOINT/$USER_HOME/foocria um diretório de propriedade do seu usuário se você o fizer manualmente.
terdon
Sim, mkdir $BACKUP_MNTPOINT/$USER_HOME/foocria um diretório com a propriedade do usuário.
kralyk
Seria muito bom ver informações relevantes de strace(como especificado em uma pseudo resposta).
Pavel Šimerda

Respostas:

18

Eu tive um problema semelhante ao usar o rsyncbackup do meu sistema no meu servidor. Eu usei:

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/

A solução é que não há realmente um problema. Eu suspeito que você abortou o rsyncprocesso depois que viu que ele cria pastas com permissões erradas definidas. O ponto crucial é que rsyncapenas define as permissões de uma pasta-pai quando a sincronização é feita com todas as subpastas e arquivos.

lord.garbage
fonte
1
Uau, isso não me ocorreu, muito bem visto, obrigado.
kralyk
0

Talvez execute o rsync via strace / truss e veja se você recebe um erro de volta do syscall chown () e também para confirmar que chown () tem o caminho correto e o UID / GID.

Jez
fonte
Um bom comentário, mas não uma resposta.
Pavel Šimerda