it-swarm-pt.com

Existe verdade na filosofia que você deve sincronizar; sincronizar; sincronizar; sincronizar?

Quando fui apresentado ao Linux, trabalhando na Cisco Systems em 2000, aprendi os méritos do comando sync, usado para liberar buffers para o disco para evitar corrupção/perda de dados do sistema de arquivos. Eu fui informado não apenas por colegas de trabalho lá, mas por amigos na faculdade para sempre executar sync "algumas" ou "muitas" vezes, ou seja, talvez 5 a 10 vezes, em vez de apenas uma.

Continuei com esse hábito desde então, mas há algum mérito nisso? Alguém mais já ouviu isso? E o mais importante, alguém pode fornecer uma boa base lógica/evidência empírica a favor/contra a ideia de que você precisa executar sync mais de uma vez para que seja eficaz?

27
Josh

Eu ouvi (desculpe, esqueci onde) digitando o comando sync três vezes (como em: SYNCReturn, aguarde o prompt, repita, repita). Eu também li que o Origin era um sistema específico em que demoraria alguns segundos para o disco terminar de limpar seus buffers, mesmo depois de ter informado ao sistema operacional que estava tudo bem. Digitar o comando mais duas vezes deu ao disco tempo suficiente para se estabelecer. Parece que, ao longo dos anos, o propósito foi esquecido e o conselho foi abreviado como sync; sync; sync que não teria surtido o efeito desejado (já que o disco relatou “tudo limpo”, a segunda e a terceira sincronizações seriam concluídas instantaneamente e o Prompt voltaria muito cedo).

Nunca ouvi falar de um sistema em que múltiplas operações sync tenham alguma utilidade, e sou altamente cético quanto à existência de alguma. Eu considero isso uma lenda urbana. Por outro lado, acho altamente confiável que haja sistemas nos quais você deva esperar alguns segundos após a sincronização e antes de desligar.

Googling leva a algumas análises concorrentes independentes, por exemplo, A legenda da sincronização . Veja também A execução de sync (8) ainda é necessária antes de desligar o Linux? .

34

Old-timer aqui. Nos dias de glória do TAPE, 3 sincronizações rápidas seguidas era uma maneira de dizer aos controladores TAPE para não apenas desvincular/descompactar o stream de fita, mas também rebobiná-lo, ou seja, definir o FD/rw-head a 0.

"sync; sync; sync" só foi realmente usado, de forma produtiva, por aqueles de nós que começaram a trabalhar com Unix baseado em TAPE, ou seja, aplicativos cujos arquivos foram montados em/var/spool, o armazenamento mais barato possível na época. ;)

Os manuais do operador MIPS Risc/OS têm uma página sobre isso.

9
ibisum

Certamente havia sistemas UNIX mais antigos para os quais era mais seguro sincronizar mais de uma vez, mas não todos em uma linha de comando como "sync; sync; sync". Em meados dos anos 80, isso foi destilado para:

Quando desligar o sistema, sincronizará três vezes. Nem mais nem menos. Três será o número da sincronização e o número da sincronização será três. Quatro vezes não sincronizarás, nem sincronizarás duas vezes, exceto se procederes a sincronizar uma terceira vez ...

Eu realmente não sei de onde vieram as três vezes, exceto talvez que foi divertido. Mas a Palavra na rua para fazer isso duas vezes. Não como "sync; sync", mas como duas linhas separadas no Shell.

Na época, digamos, do V7 UNIX, o reparo do sistema de arquivos não era muito divertido. Você tinha que fazer isso manualmente, sabendo muito sobre como o sistema de arquivos funcionava e as idiossincrasias de programas como dcheck, ncheck e icheck. fsck, se você tivesse, nem sempre era algo em que você confiaria.

Isso está começando a soar como uma história de "subimos a colina em ambos os sentidos". Bem, não tínhamos comandos sofisticados, como reiniciar ou desligar. Quando você queria reinicializar o sistema, sincronizava o sistema de arquivos com sincronização e pressionava Ctrl-P no console para interrompê-lo.

Quando o comando sync foi encerrado, o kernel agendou a sincronização, mas nem todos os buffers (incluindo o superbloco do sistema de arquivos muito importante) necessariamente foram para o disco. Portanto, foi muito fácil executar a sincronização e interromper as coisas antes que fosse seguro.

Executar a sincronização novamente era uma coisa fácil de fazer, tomava tempo e tinha um certo apelo intuitivo sem ter que entender tudo ou lidar com instruções vagas como "contar até 10" ou algo parecido.

Havia até uma seção de BUG na página de manual do V7 para update também dizia:

Com a atualização em execução, se a CPU for interrompida assim que a sincronização for executada, um sistema de arquivos pode ser danificado. Isso se deve parcialmente ao hardware DEC que grava zeros quando as solicitações NPR falham. Uma correção seria fazer com que o sync (1) incrementasse temporariamente a hora do sistema em pelo menos 30 segundos para acionar a execução da atualização. Isso daria 30 segundos de graça para interromper a CPU.

(que, aliás, foi a última coisa no Volume 1 dos manuais V7)

Com o tempo, as ferramentas do sistema de arquivos e os programas para desligar e reinicializar os sistemas ficaram melhores para evitar lidar com isso. Folclore, vodu e magia do sistema entram nele quando o sistema se comporta misteriosamente. Sincronizar duas vezes tornava muito menos provável que você tivesse que usar uma pinça de bits para recompor seu sistema de arquivos, então isso se tornou parte do ritual. Depois de fazer isso várias vezes, você o faz sem pensar. Então, alguém percebe e pergunta por quê. E a resposta é algo como: "Sempre fiz assim. É mais seguro."

Não vou afirmar que isso é oficial, e posso estar errado sobre alguns dos detalhes. Mas acho que é bem parecido com a Origem.

7
Win