rsync - comportamento de dest -link quando executado como sudo

3

Para criar backups regulares, estou usando rsync junto com --link-dest para criar hard-links para arquivos inalterados. Por exemplo:

rsync -ax \
      --partial --delete --delete-excluded --inplace \
      --exclude-from=/tmp/temp_excludes \
      --link-dest=/Volumes/Backup/current \
      /Users /Volumes/Backup/2012-06-25

Isso funciona muito bem, desde que eu inicie o processo a partir da minha conta de usuário normal. Embora eu inicie o processo usando sudo , ele se comporta de forma errônea, significando que rsync copia todos os arquivos inalterados em vez de hard-linking .

Como sudo modifica o ambiente, eu também já tentei sudo -E em conjunto com certificando-se de que meu arquivo sudoers tenha a opção correspondente definida. Bem, isso não funcionou também.

Então, a questão é, como posso executar rsync usando sudo ? Considerando que o exemplo acima mostra apenas um backup do diretório Users , eu também preciso fazer backup de algum sistema arquivos que só posso acessar como root.

    
por fotNelton 25.06.2012 / 09:22

3 respostas

3

Sugiro que você inicie rsync com -i --dry-run para descobrir por que deseja copiar os arquivos inalterados. A opção -i imprimirá todas as atualizações junto com um código que especifica por que rsync considera que os arquivos foram alterados (soma de verificação, registro de data e hora, etc ...). Veja a man page para uma explicação completa do código.

Você provavelmente também deve especificar --numeric-ids caso os IDs do usuário sejam diferentes na origem e no sistema de destino.

    
por 25.06.2012 / 10:02
1

Embora a sugestão de Oliver seja realmente apreciada, a solução para o problema é a seguinte:

Quando os dispositivos (externos) são montados no OS X, eles têm seu sinalizador "Ignorar propriedade" correspondente definido por padrão. O OS X mantém um banco de dados especial para isso, acessível via vsdbutil (depreciado) e diskutil .

De acordo com alguns googling, o raciocínio por trás disso parece ser que o usuário típico do OS X é um usuário do produto de consumidor que deseja acessar seus dados que foram armazenados, por exemplo: em um disco USB externo de qualquer outro computador sem passar pelo incômodo de propriedade, permissios, etc.

Por isso, é vital para a solução de backup desejada usar rsync e sudo para desativar esse sinalizador :

# sudo diskutil enableOwnership <yourDeviceHere>
sudo diskutil enableOwnership /Volumes/Backup

Em seguida, desmonte e monte o dispositivo novamente para garantir que tudo funcione bem. Por fim, atualizei minha chamada rsync para o seguinte:

rsync -aNHAXx -i --fileflags --force-change \
      --partial --delete --delete-excluded --inplace \
      --exclude-from=/tmp/temp_excludes \
      --link-dest=/Volumes/Backup/current \
      /Users /Volumes/Backup/2012-06-25

A coisa é preenchida em um script bash (ligeiramente modificado) agora e permite backups diários incrementais em um disco USB externo no OS X.

    
por 26.06.2012 / 07:31
1

Se você usar o LBackup (um wrapper rsync) para o seu backup, uma das verificações que ele executa ao executar em um sistema OS X é que as permissões para a imagem de disco / unidade de destino estão ativadas.

Se as permissões não estiverem ativadas, o backup não prosseguirá, um aviso será emitido para ativar as permissões.

Você também pode encontrar esta página de documentação do projeto LBackup para ser interessante caso deseje continuar usando seu próprio script.

    
por 06.09.2012 / 22:39