Atualmente no Ubuntu Linux, mas notei isso em outros sistemas operacionais também. Aparentemente, qualquer usuário pode executar o sync
comando - mas por que isso? Só vejo a desvantagem: o sistema fica mais lento devido a gravações desnecessárias no disco.
Por que todo usuário pode executar sync
?
/bin/sync
como seu shell, para que você possa sincronizar sem fazer login.sync
reduzam o tempo de espera entre as chamadas (por exemplo, no HP-Unix). O motivo é evitar esperas desnecessárias devido ao grande número de gravações pendentes sendo gravadas no disco de uma só vez.Respostas:
Existem várias maneiras de um usuário sem privilégios diminuir a velocidade do sistema e executar a sincronização está longe de ser a mais eficiente. Por outro lado, ter os dados dos sistemas de arquivos comprometidos com o disco é uma solicitação bastante legítima, portanto, proibir os usuários (e, portanto, seus processos) de fazê-lo seria excessivo.
De qualquer forma, discordo da sua declaração "gravações desnecessárias em disco". Essas gravações são certamente necessárias e ocorrerão automaticamente após um pequeno período de tempo.
Não há garantia de que a chamada de sincronização fará algo em particular, dependendo de sua implementação. A chamada de sincronização é, como define o padrão POSIX , apenas uma "sugestão" para o sistema operacional liberar seus caches de sistema de arquivos, não necessariamente força os descargas a acontecer imediatamente. Mais precisamente, as chamadas solicitam ao sistema operacional que agende uma liberação de cache, mas não há garantia de que isso aconteça antes do horário já agendado, embora a implementação do Linux espere que isso aconteça antes de retornar.
Além disso, chamar a sincronização várias vezes seguidas não reduziria a velocidade dos sistemas, pois uma vez que os caches são liberados, se nenhum processo estiver gravando ativamente nos arquivos, os caches estão vazios, portanto, a sincronização é uma operação não operacional.
Se você realmente deseja impedir que os usuários executem a sincronização no seu sistema, basta executar estes comandos:
Isso seria amplamente despercebido pelos usuários e não tem efeitos negativos, exceto com pessoas que apenas executam a sincronização e removem os dispositivos de armazenamento (por exemplo: usb thumbdrive) sem desmontá-los, mas esses usuários já estavam agindo de maneira tola de qualquer maneira.
Observe que eu não recomendaria o link / bin / sync anterior com / bin / true.
sync
é certamente útil em alguns casos. Por exemplo, se você teme que um desligamento brutal (falta de energia, pânico no sistema, ...) possa acontecer em breve, isso ajudaria a preservar o conteúdo do sistema de arquivos. É isso que chamo de pedido legítimo.fonte
sync
binário faz é chamar async()
função, assim (como Bonsi Scott disse) que você está realmente perguntando é porque o kernel permite que usuários sem privilégios chamarsync()
umount
, que, independentemente do sistema operacional, sempre libera os buffers (a menos que o disco tenha acabado ...), em vez dosync
que não é garantido, dependendo do sistema operacional. Observe que o Linuxsync
espera que o flush seja eficaz, portanto também pode ser confiável.sync
não pode causar nenhum dano ao sistema. Ele pode diminuir a velocidade, mas não mais do que executar programas que acessam o disco. Por que deveria ser restrito?Há um bom motivo para permitir que qualquer usuário execute
sync
. Isso é necessário se algumas operações tiverem que ser executadas em ordem, mesmo que o sistema trate ou perca energia. Por exemplo, considere um agente de transferência de email que recebe um email. Depois de gravar o arquivo que contém o email no spool, ele chamasync
e só então responde à máquina de envio notificando que o email foi recebido. Se não ligassesync
e a máquina receptora perdesse energia logo após enviar a notificação de recepção, mas antes de enviar o arquivo para o disco, o e-mail seria perdido.Os sistemas operacionais atrasam a gravação do disco por eficiência. Eles não sabem quando um aplicativo realmente precisa que a gravação aconteça. Portanto, os aplicativos têm uma maneira de dizer ao sistema operacional para escrever agora, com
sync(1)
esync(2)
efsync(2)
.fonte