Idioma
Categoria
Pesquisar

Como usar rsync com NTFS e FAT32 no Linux: problemas e soluções

Sincronização e backup de arquivos entre Linux, NTFS e FAT32. Entenda as limitações de timestamps e permissões e aprenda a contorná-las com opções como --modify-window e --size-only

Índice

Como usar rsync com NTFS e FAT32 no Linux: problemas e soluções
Em Terminal Por Rudi Drusian Lange
Publicado em
Última atualização

Introdução

Ao utilizar o rsync em partições NTFS ou FAT32, é necessário considerar particularidades desses sistemas de arquivos em relação aos utilizados em sistemas baseados em Unix. Em ambientes Unix, é comum utilizar a opção -a como parâmetro do comando rsync, o que equivale ao conjunto de opções -rlptgoD:

Os parâmetros mencionados possuem as seguintes funções:

  • -r Copia subdiretórios recursivamente.
  • -l Copia links simbólicos como links.
  • -p Preserva permissões.
  • -t Preserva datas de modificação (timestamps).
  • -g Preserva o grupo.
  • -o Preserva o proprietário.
  • -D Transfere arquivos de dispositivos especiais e de blocos (ex.: sda, tty).

Para informações detalhadas sobre o uso do comando rsync no Linux, consulte:

Dos parâmetros listados, os sistemas de arquivos utilizados no Windows suportam plenamente apenas a cópia recursiva -r. NTFS e FAT32 não oferecem suporte às opções -p, -g, -o e -D. Embora as versões mais recentes do NTFS permitam o uso de links simbólicos, eles não são compatíveis com o estilo Unix, o que pode fazer com que a opção -l falhe.

Já a preservação das datas de modificação -t (timestamp) é suportada, porém, em alguns casos, podem ocorrer diferenças na precisão utilizada. O NTFS emprega uma precisão de 100 nanossegundos, enquanto, em sistemas baseados em Unix, essa precisão pode variar de 1 segundo a microssegundos.

Entre sistemas de arquivos Unix mais modernos, como ext4 e XFS, e o NTFS, não devem ocorrer problemas na checagem de timestamps. No entanto, quando se trata do FAT32, a discrepância se torna mais significativa. Isso pode levar o rsync a interpretar arquivos idênticos como diferentes devido à variação na data de modificação.

 Existem opções para contornar essas limitações, conforme será demonstrado a seguir.

Ambiente

Os comandos utilizados neste artigo foram testados no Slackware Linux 15, com o kernel 5.15.161, e devem funcionar em qualquer sistema Linux ou baseado em Unix. O sistema de arquivos da raiz foi formatado com ext4, enquanto partições NTFS e FAT32 foram utilizadas em outros discos presentes no mesmo sistema.

Nos testes, as partições NTFS foram montadas tanto com o ntfs-3g, um driver em espaço de usuário amplamente utilizado há anos, quanto com o driver NTFS nativo do kernel, introduzido na versão 5.15. O comportamento do rsync foi o mesmo em ambos os casos.

Usando rsync com NTFS

Em versões mais recentes dos sistemas de arquivos utilizados no Linux e do NTFS, o rsync deve funcionar normalmente tanto entre partições Linux e NTFS quanto entre partições NTFS, mesmo ao utilizar o parâmetro -a, que inclui opções incompatíveis com NTFS, conforme discutido anteriormente.

Isso ocorre porque, ao montar uma partição NTFS, o Linux simula permissões de arquivo. Assim, os parâmetros não suportados são ignorados, e os arquivos recebem proprietário, grupo e permissões conforme definidos durante a montagem.

É essencial que as partições sejam montadas com permissões adequadas ao usuário que executará o comando rsync. Se a unidade for montada com propriedade do usuário root, mesmo que outros usuários tenham permissão de leitura e escrita, o rsync apresentará um erro ao tentar definir a data de modificação:

failed to set times on "/pasta/de/destino/": Operation not permitted (1) 

Esse erro impedirá o rsync de verificar corretamente se os arquivos no destino são idênticos aos da origem, resultando na cópia redundante dos arquivos a cada execução do comando.

Para contornar esse erro, a partição deve ser montada com as permissões apropriadas. Um exemplo de configuração no arquivo /etc/fstab é:

/etc/fstab

/dev/sdXn   /mnt/particao   ntfs3   fmask=022,dmask=022,uid=1000,gid=100

Onde:

  • uid=1000 Substitua 1000 pelo ID do usuário.
  • gid=100 Substitua 100 pelo ID do grupo do usuário.
  • fmask=022 Concede permissão total para o proprietário do arquivo e permissões de leitura e execução para grupo e outros usuários.
  • dmask=022 Concede permissão total para o proprietário do diretório e permissões de leitura e execução para grupo e outros usuários.

Com as permissões adequadas, o rsync pode ser utilizado com as opções convencionais:

$ bash

rsync -av /origem/ /destino/

Após a primeira execução e a cópia dos arquivos para o destino, execute o comando novamente para verificar se os arquivos são copiados na segunda tentativa. Caso sejam, o rsync falhou ao comparar os timestamps. Se tudo estiver correto, na segunda execução, nenhum arquivo deve ser transferido.

Se o comando falhar devido a permissões ou ao uso de drivers mais antigos, pode-se executá-lo utilizando apenas os parâmetros compatíveis com NTFS:

$ bash

rsync -rtv /origem/ /destino/

Neste exemplo, o rsync é executado com as seguintes opções:

  • -r Habilita o modo recursivo.
  • -t  Preserva a data de modificação (timestamp).
  • -v  Exibe detalhes da transferência (verbose).

Use o parâmetro --modify-window

O NTFS pode apresentar pequenas diferenças na precisão dos timestamps em comparação com sistemas baseados em Unix. Para contornar essa limitação, utilize o parâmetro --modify-window, que permite uma margem de erro ao comparar timestamps. Por exemplo:

$ bash

rsync -rtv --modify-window=1 /origem/ /destino/

Isso informa ao rsync para considerar timestamps iguais se a diferença entre eles for de até 1 segundo.

Usando rsync com FAT32

O FAT32 é limitado em termos de timestamps, com baixa precisão, não armazena a hora de acesso e apresenta problemas de fuso horário. Essas características tornam-no inadequado para cenários onde a precisão temporal é crucial, como em backups ou sincronização de arquivos.

Para executar o rsync com FAT32 preservando timestamps, use o comando:

$ bash

rsync -rtv --modify-window=1 /origem/ /destino/

A opção --modify-window=1 instrui o rsync a considerar timestamps iguais se a diferença entre eles for de até 1 segundo. Se o comando não funcionar com esse valor, tente usar 2 segundos. Sempre execute o comando novamente para verificar se os arquivos serão transferidos na segunda execução; eles serão copiados apenas se o rsync falhar ao verificar o timestamp.

Use o parâmetro --size-only

Se você não precisa preservar os timestamps e deseja evitar problemas relacionados à precisão, utilize a opção --size-only. Isso faz com que o rsync considere apenas o tamanho dos arquivos ao decidir se um arquivo deve ser copiado.

$ bash

rsync -rv --size-only /origem/ /destino/

Note que os parâmetros -t e --modify-window foram removidos do comando, pois são usados para lidar com timestamps e são incompatíveis com a opção --size-only, que desativa a verificação de timestamps.

Conclusão

Ao usar rsync com sistemas de arquivos NTFS ou FAT32, é crucial atentar-se às opções de montagem das partições, já que permissões e propriedades de arquivos são limitações desses sistemas. Parâmetros como --modify-window e --size-only ajudam a contornar problemas de precisão de timestamps e garantem uma sincronização mais eficiente.

Referências

O manual (man page) do rsync foi consultado na elaboração deste artigo.

Mural do site

Parte do conteúdo deste site, incluindo textos, imagens, gráficos e outros materiais, pode ser gerado ou aprimorado por ferramentas de inteligência artificial (IA). Para mais detalhes sobre o uso de IA, consulte nosso Termo de Uso.

Anúncio
Índice
Anúncio