Copie arquivos de um servidor para outro com as mesmas permissões

1

Estou migrando para o novo servidor e preciso mover alguns sites, mas preciso ter as mesmas permissões de leitura / gravação para novos servidores, como no servidor antigo.

Eu não preciso manter o id do grupo e do proprietário, mas seria muito difícil se eu tivesse que passar por todos os arquivos no servidor antigo e verificar quais são as permissões de leitura / gravação em pastas e arquivos do que definir no novo servidor .

Minha idéia é empacotar os arquivos copiados para o novo servidor e descompactar, mas que de alguma forma redefinir todas as permissões para padrão com 644 para arquivos e 755 para pastas. Posso de alguma forma transferir arquivos e pastas com as mesmas permissões que estavam no servidor antigo?

    
por Aleksandar Đorđević 10.02.2013 / 14:10

4 respostas

2

Use apenas rsync :

rsync -avz /path/to/files newserver:/path_to_files 

Isso copiará recursivamente todos os arquivos de /path/to/files no servidor antigo para /path_to_files no novo servidor e manterá as permissões e informações do proprietário. Para mais informações, consulte man rsync .

    
por 10.02.2013 / 14:32
1

Antes de rsync existir, aqui está um truque que vale a pena conhecer. Às vezes você se encontra em um sistema sem rsync.

O truque é criar um arquivo tar dos arquivos, copiar o arquivo para o novo servidor e extrair o arquivo tar com -p para preservar as permissões do arquivo.

"Mas espere!" você pergunta. "Esse arquivo temporário pode ser enorme! Maior que o espaço livre que eu tenho!" Não se preocupe. Você pode escrever conectar os dois tar s por um pipe e você não precisa de um arquivo temporário, nem do espaço em disco! Para especificar stdin ou stdout, especifique o nome do arquivo - (hífen).

Juntando tudo:

cd $SRCDIR
tar -c -v -f - . | ssh $DEST_HOST "mkdir -p $DESTDIR && cd $DESTDIR && tar -x -p -f -"

Por exemplo:

cd /home/user12
tar -c -v -f - . | ssh other.example.com "mkdir -p $DESTDIR && cd /home/user12 && tar -x -p -v f -"

O && é como ; (ponto-e-vírgula), mas significa "somente execute o próximo comando se este for bem-sucedido".

Lembre-se de que você precisa fazer isso como root se quiser copiar o proprietário do arquivo: group também. Sua conta de usuário normal normalmente não pode chown a um arquivo, portanto, nem pode tar. O comando funcionará mesmo se ssh solicitar uma senha porque ssh é inteligente o suficiente para não conectar o pipe até que o login seja concluído.

Nota: tar atualizará as permissões em todos os arquivos, exceto o diretório raiz, porque não o criou. Você criou com o mkdir -p . Você pode consertar isso se usar tar para capturar o diretório em vez de ".". Aqui está o último exemplo repetido de uma forma que atualizará as permissões em "user12":

cd /home
tar -c -v -f - user12 | ssh other.example.com "mkdir -p /home && cd /home && tar -x -p -v f -"

Veja a diferença?

    
por 10.02.2013 / 16:54
0

Se você tiver o linux / unix, você pode usar tar que efetivamente armazena permissões de arquivos, propriedade e softlinks.

cd /var
tar zcf allmycircuits.tgz www
    
por 10.02.2013 / 14:35
0

My idea is to pack files copy to new server and unpack, but that somehow reset all permissions to default with 644 to files and 755 to folders.

Você já teve dúvidas de que as permissões estão definidas para 644/755 ou tem medo disso? Se o primeiro: o que você fez?

BTW: Se tal problema ocorreu: É possível apenas substituir os direitos de acesso:

getfacl --recursive . > acl.txt
# and then on the other system or at the other path
setfacl --restore=acl.txt

Você sabe como corrigir os UIDs / GIDs?

    
por 10.02.2013 / 15:38