Linux / Comando sync: sincronizar gravações e entender seus limites

O comando sync solicita ao kernel que sincronize gravações pendentes de arquivos e sistemas de arquivos com o armazenamento. Ele pode ajudar após uma cópia, mas não desmonta o volume nem autoriza retirar um dispositivo ainda em uso. Para remover um disco externo, termine as gravações e conclua a desmontagem normal.

O que sync faz e qual é seu alcance

O kernel pode manter dados gravados em memória para reduzir acessos ao armazenamento. O sync pede a sincronização desses dados; ele não copia arquivos para outro destino nem cria um backup. Salve primeiro o trabalho no aplicativo: dados que ainda estejam apenas no buffer do programa não são necessariamente gravações já entregues ao kernel.

Sem argumentos, o comando tem alcance sobre o sistema inteiro. No GNU sync, informar um arquivo limita a operação a esse arquivo por padrão; com -f, o alcance passa ao sistema de arquivos que contém o caminho informado. Escolha o alcance adequado para evitar confundir “um arquivo”, “um volume” e “todo o sistema”.

Sintaxe e implementação instalada

sync [opções] [arquivo...]

Os colchetes e as reticências descrevem a sintaxe e não devem ser digitados literalmente. Os exemplos de arquivo e as opções abaixo seguem o GNU Coreutils. Consulte sync --help, sync --version e man sync no ambiente em que trabalhará; outras implementações podem aceitar opções diferentes.

Sincronizar o sistema, um arquivo ou um volume

Para solicitar a sincronização geral:

sync

Sem nome de arquivo, a operação inclui as gravações pendentes do sistema e pode levar tempo conforme a carga de escrita. No Linux, a chamada de sistema aguarda a conclusão das operações de entrada e saída, como explica o manual de sync e syncfs. Isso não impede que processos produzam novas gravações depois da chamada, nem substitui a desmontagem.

Para sincronizar um arquivo existente no diretório atual:

sync report.txt

report.txt deve existir e apontar para o arquivo pretendido. O comando não cria esse arquivo, não copia seu conteúdo e não escolhe automaticamente um arquivo de mesmo nome em outro diretório. Se o caminho contiver espaços, coloque-o entre aspas.

Para sincronizar o sistema de arquivos que contém um arquivo:

sync -f /mnt/data/report.txt

Esse exemplo supõe que /mnt/data/report.txt existe e pertence ao volume desejado. Confirme a montagem antes: se o volume esperado não estiver montado, um arquivo existente no mesmo caminho pode pertencer ao sistema de arquivos que está por baixo do ponto de montagem. Não substitua o caminho por /dev/sdb1 por suposição; -f usa o sistema de arquivos que contém o arquivo informado, não necessariamente o dispositivo representado por um nó em /dev.

Na verificação em Bash 5.3.9 do Git para Windows, com GNU Coreutils 8.32, sync report.txt e sync -d report.txt foram executados apenas sobre um arquivo novo de teste e retornaram 1 com “Permission denied”. O conteúdo permaneceu igual; a falta de um arquivo também produziu erro. A chamada sem argumentos, -f e a remoção de dispositivos não foram executadas; esses resultados não validam a persistência em Linux nativo.

Sem saída na tela: como conferir o resultado

Em caso de sucesso, sync normalmente não imprime uma confirmação. Confira também as mensagens de erro e o status do comando, sem concluir que uma tela sem saída significa gravação concluída. No exemplo abaixo, echo $? deve vir imediatamente após sync, antes de outro comando substituir o status:

sync
echo $?

Se a chamada tiver terminado com sucesso, o status exibido será:

0

Esse zero é uma saída ilustrativa de sucesso, não o resultado medido no teste de arquivo em Windows descrito acima. Naquele teste, a consulta imediata do status mostrou 1. Além disso, o status final de um bloco que termina com echo pode refletir o sucesso de echo; para avaliar sync, leia o valor preservado logo após a chamada pertinente.

Um status zero não comprova que existe um backup completo nem que todo o conjunto de hardware, controladora e armazenamento está livre de falhas. A chamada Linux sync(), usada no caso geral, não fornece um relatório de erros como uma verificação de integridade. Por isso, não use apenas o zero como teste de saúde do disco.

Opções principais e formatos

Opção ou formato Alcance no GNU sync
Sem argumentos Solicita a sincronização das gravações pendentes do sistema inteiro.
arquivo Sincroniza o arquivo especificado, incluindo seus dados e metadados, pela operação fsync.
-d arquivo Usa fdatasync para dados e metadados necessários à leitura posterior desses dados; não significa ignorar todos os metadados.
-f arquivo Usa syncfs para o sistema de arquivos que contém o caminho. Não fica restrito ao conteúdo daquele arquivo.

As diferenças entre dados e metadados são explicadas no manual de fsync e fdatasync. Sincronizar apenas um arquivo não garante, por si só, persistir também sua entrada no diretório pai. Para escolher opções e alcance, consulte o manual específico de sync no GNU Coreutils e o manual do comando GNU sync.

Preparar a remoção de armazenamento externo

  1. Termine o trabalho que está gravando dados. Salve e feche arquivos ou pare o serviço responsável. Sync não fecha programas e não impede novas gravações.
  2. Confira o volume correto e os erros. Se usar um caminho de arquivo ou -f, confirme a montagem e o alcance. Aguarde a chamada terminar e investigue recusas, erros de entrada e saída ou falhas de sincronização antes de prosseguir.
  3. Desmonte normalmente. Use o procedimento de umount para liberar o sistema de arquivos e confirme que ele terminou com sucesso. Se o alvo estiver ocupado, libere o uso; uma desmontagem adiada não é confirmação de que todos os acessos terminaram.
  4. Confirme que o dispositivo inteiro foi liberado. Um disco pode conter vários volumes ou outros usos, como swap. Siga a remoção segura do ambiente utilizado e só desconecte depois da liberação efetiva de todos os usos necessários.

Pergunta frequente

Basta executar sync antes de retirar um pendrive?

Não. Sync solicita sincronização de gravações, mas não desmonta o volume nem impede novos acessos. Termine o trabalho, conclua a desmontagem normal e a remoção segura do ambiente e confirme que o dispositivo não está mais em uso antes de desconectá-lo.