Como root, configure um pipe nomeado:
# mkfifo /tmp/fifo
# chmod o+w /tmp/fifo
Em seguida, transfira seus dados como me
:
$ tar cfzp - foldertocopy | ssh me@machine "cat > /tmp/fifo"
Mas leia como root
:
# tar -xfzp /tmp/fifo
Estou tentando copiar uma estrutura de pastas grande entre máquinas. Eu quero manter a propriedade / direitos durante a cópia, pois não é razoável "consertar" os privs depois.
Portanto, estou usando o seguinte comando para tar o arquivo com privs intacto e transferir os dados para a máquina de destino. Os mesmos usuários existem em ambas as máquinas.
tar cfzp - foldertocopy | ssh me@machine "cat > /applications/incoming/foldertocopy.tar.gz"
A transferência funciona bem, e o próximo passo é su fazer root na máquina remota e descompactar o arquivo.
O problema é: não há espaço em disco suficiente para armazenar os dados compactados e descompactados ao mesmo tempo .
Eu poderia usar rsync / scp recursivo, mas meu usuário não tem o direito de criar os arquivos com os privs corretos e o root não pode logar remotamente.
Quais são minhas opções? A máquina de origem é RHEL4 e o destino é RHEL5.
Uma solução para o problema é fazer com que o ssh execute o untar diretamente:
tar cfzp - foldertocopy | ssh me@machine "cd rightplace; tar xzf -"
Por que você não usa o rsync de arquivamento?
rsync -avzHAX foldertocopy user@remoteserver:/file/path/to/copy
Desta forma você pode salvar todos os detalhes sobre o arquivo, também com "z" o rsync comprime o fluxo em tempo real.