Arquivar a pasta inicial do usuário no servidor remoto, sem seguir os links simbólicos?

1

Precisamos fazer uma cópia arquivada das pastas iniciais dos usuários para um servidor de arquivamento (pendente de exclusão final) quando eles saírem, no caso de descobrirem que ainda podem precisar de alguns de seus arquivos (embora façamos isso É claro que os encorajamos a fazer o backup de tudo o que ainda precisam antes de irem embora.

Nós tínhamos usado scp para isso, mas agora fomos inadvertidamente capturados por um antigo usuário que havia instalado algum software que criara uma estrutura de links simbólicos incomum em uma de suas pastas, o que parecia resultar em scp sempre olhando para cima e, em seguida, tentar copiar um pouco mais do que o esperado antes de ser interrompido.

Infelizmente, parece que o scp parece seguir sempre links simbólicos e não parece ter nenhuma opção para evitar isso.

Estou procurando uma maneira alternativa de fazer backup de uma pasta de usuário que evite esse problema (e, idealmente, não é mais complicado do que o necessário).

tar poderia ser uma possibilidade, mas estou um pouco preocupado que a criação de um tarball localmente antes de copiá-lo para o servidor de arquivamento possa usar uma quantidade insignificante de espaço de armazenamento, e pode representar algumas dificuldades caso nossa O servidor de arquivos se torna mais completo em algum momento no futuro.

Outra possibilidade pode ser usar rsync , mas isso parece possivelmente over-the-top para uma transferência de arquivos única, e eu sei da experiência anterior que o ajuste das opções do rsync às vezes pode ser complicado.

Alguém pode sugerir uma alternativa confiável e simples ao scp para isso?

    
por dave559 22.06.2017 / 18:45

2 respostas

2

Se você gosta de tar , exceto o arquivo temporário, isso é fácil: não use um arquivo temporário. Use um cano.

cd /home ; tar cf - user | gzip | ssh archivehost -l archiveuser 'cat > user.archived.tar.gz'

Substitua xz ou o que você preferir por gzip . Ou mova-o para o outro lado da conexão, se salvar os ciclos da CPU no servidor principal é mais importante do que salvar a largura de banda da rede (e a CPU no servidor de arquivamento)

cd /home ; tar cf - user | ssh archivehost -l archiveuser 'gzip > user.archived.tar.gz'

Você também pode colocar um gpg nele. Tenha um par de chaves que seja apenas para esses arquivos, criptografe com a chave pública ao armazenar, use a chave privada quando precisar recuperar algo.

Mais detalhes, conforme solicitado:

Pretendo que user seja o usuário cujo diretório pessoal /home/user você está arquivando. archivehost é o servidor no qual você armazenará os arquivos e archiveuser é uma conta no servidor de arquivamento que possuirá os arquivos.

tar cf - user significa "criar um arquivo tar de user e gravá-lo no stdout". O -c é "criar" e -f - é "use stdin / stdout como o arquivo". Ele provavelmente funcionará com apenas tar c user , já que -f - provavelmente será o padrão, mas originalmente a ação padrão de tar era ler ou gravar um dispositivo de fita. Usar um -f - explícito pode ser apenas um sinal de que sou velho.

O sinalizador tar z ficaria bom, exceto que não consegui mostrar como movê-lo para o outro lado do ssh . (Além disso, conectando gzip e tar com um tubo explícita é uma daquelas "pessoas velhas" coisas - tar nem sempre tem essa opção.) Além disso, eu pode substituir bzip2 , lzop , xz -3v ou qualquer outro programa de compactação sem precisar lembrar as opções tar correspondentes.

Eu nunca ouvi falar de --checkpoint antes, então você só precisará confiar em seus próprios testes para esse.

    
por 22.06.2017 / 19:08
1

O rsync é uma escolha razoável. Não há nada de errado em usar o rsync para uma transferência única.

Alcatrão também é uma escolha razoável. Você não precisa armazenar o arquivo localmente, pode canalizá-lo diretamente para o SSH .

Outra possibilidade é montar o diretório do servidor em SSHFS . No entanto, esteja ciente de que o SSHFS não preservará todos os metadados, como permissões. (Tar e rsync podem não preservar todos os metadados, mas podem fazer um trabalho melhor - passe --acls --xattrs para o GNU tar, passe --acls --xattrs para rsync.)

    
por 23.06.2017 / 04:32