rsync - cria um arquivo temporário durante a transferência?

37

Tanto quanto posso ver, o rsync não cria o arquivo no diretório de destino até que esteja completo.

Isso deve significar que ele cria o arquivo em um diretório temporário em algum lugar e copia o arquivo no diretório de destino quando estiver concluído.

Primeiro, isso está correto?

Se verdadeiro, é possível para o rsync definir não usar um diretório temporário e criar o arquivo no diretório de destino e apenas continuar gravando nele até que esteja completo?

guepardo
fonte

Respostas:

46

Sim, ele cria um arquivo temporário.

De acordo com a página do manual, você pode especificar o diretório em que o arquivo temporário é armazenado com o parâmetro -T, como em

-T, --temp-dir = DIR cria arquivos temporários no diretório DIR

A resposta para a segunda parte da sua pergunta também pode ser encontrada lá:

--no lugar

Essa opção altera a maneira como o rsync transfere um arquivo quando os dados do arquivo precisam ser atualizados: em vez do método padrão de criar uma nova cópia do arquivo e movê-lo para o lugar quando estiver concluído, o rsync grava os dados atualizados diretamente no destino Arquivo.

superuser0
fonte
4
Nota importante! A pergunta supõe que o rsync "copia o arquivo no local", enquanto a documentação do rsync especifica que o rsync está realmente "movendo-o para o local", que é uma DISTINÇÃO IMPORTANTE . Isso garante que o arquivo apareça no local de destino de maneira atômica . Isso é útil para evitar condições de corrida em que outro aplicativo aguarda a exibição do arquivo de destino e o abre imediatamente para leitura, mas o arquivo não está sendo copiado.
Ogre Psalm33
15

Ele cria um arquivo temporário, por padrão, no diretório de destino e é nomeado .<FILE_NAME>.<RANDOM_STRING>. Portanto, se você estiver copiando foo.txt, ele criará um arquivo tmp chamado .foo.txt.GV4H3( GV4H3é a sequência aleatória que será diferente toda vez que você o executar). Você pode controlar esse comportamento usando estas rsyncopções:

   --partial
          By default, rsync will delete any partially transferred
          file if the transfer is interrupted.  In  some  circum‐
          stances  it  is more desirable to keep partially trans‐
          ferred files. Using the --partial option tells rsync to
          keep  the  partial  file which should make a subsequent
          transfer of the rest of the file much faster.

   --partial-dir=DIR
          A better way to keep partial files than  the  --partial
          option  is  to  specify a DIR that will be used to hold
          the partial data (instead of writing it out to the des‐
          tination file).  On the next transfer, rsync will use a
          file found in this dir as data to speed up the  resump‐
          tion  of  the  transfer and then delete it after it has
          served its purpose.

Por favor, leia as partes relevantes da rsyncpágina de manual (a seguir é apenas um pequeno extrato da seção grande sobre como usar --partial-dir).

Terdon
fonte
5

O rsync cria arquivos temporários no diretório de destino. Esse arquivo é nomeado como a fonte, mas com uma extensão. Pode ser assim:

source: foo.bar 
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example) 

A extensão é removida após o arquivo ter sido verificado como uma cópia exata da fonte. Durante o processo de renomeação, a propriedade, as permissões e o tempo de modificação são definidos. Portanto, é possível que você não veja o arquivo por causa das permissões. Verifique se você tem permissão suficiente para ver todos os arquivos e os que não pertencem a você para ver os arquivos temporários.

Simon
fonte
Um processo cria arquivos com as permissões do usuário que o executa . Não é possível não ver os arquivos devido a permissões nesse caso.
Ярослав Рахматуллин
@ ЯрославРахматуллин rsync também pode ser executado no modo daemon. Ou pode ser agendado como um cronjob. De qualquer maneira, é possível que o usuário sob o qual o rsync esteja executando não seja o usuário que deseja ver o arquivo temporário. Nesse caso, é possível que seja uma questão de permissão.
Simon
1
O arquivo temporário pode começar com ".". Nesse caso, é .foo.bar.hzmkjt7.
interskh