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

23

Quando fui apresentado pela primeira vez ao Linux, trabalhando na Cisco Systems em 2000, aprendi os méritos do comando sync , usado para liberar buffers em disco para evitar corrupção de dados / perda de arquivos. Foi-me dito não só por colegas de trabalho, mas por amigos na faculdade para executar sempre sync "alguns" ou "um monte" de vezes, isto é, talvez 5 - 10 vezes, em vez de apenas uma vez.

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

    
por Josh 30.12.2010 / 23:07

3 respostas

30

Eu ouvi (desculpe, esqueci onde) como digitar o comando sync três vezes (como em: S Y N C Retorna , aguarde o prompt, repita, repita). Eu também li que a origem era um sistema em particular, onde levaria alguns segundos para o disco terminar de liberar seus buffers, mesmo depois de ter dito ao sistema operacional que tudo estava bem. Digitar o comando mais duas vezes deu ao disco tempo suficiente para resolver. Parece que, ao longo dos anos, o propósito foi esquecido, e o conselho foi abreviado como sync; sync; sync , o que não teria o efeito desejado (já que o disco reportou o "tudo limpo", o segundo e o terceiro sincronismo seriam concluídos instantaneamente) e o prompt voltaria cedo demais.

Eu nunca ouvi falar de um sistema em que várias operações sync tenham qualquer uso, e eu sou altamente cético em relação a qualquer existência. Eu considero isso uma lenda urbana. Por outro lado, acho muito provável que existam sistemas onde você deve aguardar alguns segundos após a sincronização e antes de desligar.

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

    
por 30.12.2010 / 23:33
6

Veterano aqui. Nos dias de glória do TAPE, 3 sincronizações rápidas seguidas eram uma maneira de dizer aos controladores TAPE para não apenas desassociar / desenrolar o fluxo de fita, mas também para rebobiná-lo, ou seja, definir o FD / rw-head para 0.

"sync; sync; sync" foi realmente usado apenas, de forma produtiva, por aqueles que usaram o Unix baseado em TAPE, ou seja, aplicativos cujos arquivos foram montados em / var / spool, o armazenamento mais barato possível no momento . ;)

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

    
por 18.12.2017 / 23:15
2

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 se tornou destilado para:

When thou shuttest down the system, thou shalt sync three times. No more, no less. Three shall be the number of the syncing, and the number of the syncing shall be three. Four times shalt thou not sync, neither sync twice, except that thou proceedest to sync a third time...

Eu realmente não sei de onde vieram os três tempos, 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.

Nos dias de, digamos, o V7 UNIX, o reparo do sistema de arquivos não foi 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 que você confiaria.

Isso está começando a soar como uma história de "andamos pela neve subindo a ambos os lados". Bem, não tínhamos comandos sofisticados como reinicializar ou desligar. Quando você quiser reiniciar o sistema, sincronize o sistema de arquivos com a sincronização e pressione Ctrl-P no console para interrompê-lo.

Quando o comando sync saía, o kernel tinha programado a sincronização, mas nem todos os buffers (incluindo o importantíssimo superbloco do sistema de arquivos) tinham necessariamente chegado ao disco. Por isso, foi muito fácil executar a sincronização e interromper as coisas antes que fosse seguro.

Executar a sincronização novamente foi fácil, ocupou o tempo e teve um certo apelo intuitivo sem ter que entender tudo ou lidar com instruções vagas como "contar até 10" ou algo assim.

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

With update running, if the CPU is halted just as the sync is executed, a file system can be damaged. This is partially due to DEC hardware that writes zeros when NPR requests fail. A fix would be to have sync(1) temporarily increment the system time by at least 30 seconds to trigger the execution of update. This would give 30 seconds grace to halt the CPU.

(que, a propósito, 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. O folclore, o vodu e a magia do sistema entram nele quando o sistema se comporta misteriosamente. Sincronizar duas vezes tornava muito menos provável que você tivesse que soltar as pinças para colocar o seu sistema de arquivos de volta, então ele se tornou parte do ritual. Depois de fazer isso várias vezes, você faz isso 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 é autoritativo e posso estar errado sobre alguns detalhes. Mas acho que é bem próximo da origem.

    
por 11.01.2018 / 23:01