Por que um usuário sem privilégios pode executar o comando 'sync'?

10

Atualmente no Ubuntu Linux, mas notei isso em outros sistemas operacionais também. Aparentemente, qualquer usuário pode executar o comando sync - mas por que isso acontece? Eu só vejo a desvantagem: o sistema fica lento devido a gravações desnecessárias no disco.

Por que todo usuário pode executar sync ?

    
por jippie 02.12.2012 / 00:30

2 respostas

16

Existem muitas maneiras de um usuário não privilegiado desacelerar um sistema, e a sincronização em execução está longe de ser mais eficiente. Por outro lado, ter os dados dos sistemas de arquivos confirmados no 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 declaração "write disk desnecessária". Essas gravações são certamente necessárias e ocorrerão automaticamente após um pequeno período de tempo de qualquer maneira.

Até não há garantia de que a chamada de sincronização fará qualquer coisa em particular, dependendo da sua implementação. Chamando sync, é, como o padrão POSIX define , apenas uma "sugestão" para o sistema operacional liberar seus caches de sistema de arquivos , isso não necessariamente força os flushes a acontecerem imediatamente. Mais precisamente, as chamadas pedem que o sistema operacional agende um esvaziamento de cache, mas não há garantia de que isso acontecerá antes do tempo já agendado, embora a implementação do Linux espere que aconteça antes de retornar.

Além disso, chamar a sincronização várias vezes seguidas não atrasaria tanto os sistemas, pois assim que os caches forem esvaziados, se nenhum processo estiver gravando ativamente em arquivos, os caches estarão vazios, portanto a sincronização não funcionará.

Se você realmente quiser impedir que os usuários executem a sincronização em seu sistema, basta executar esses comandos:

mv /bin/sync /bin/.sync
ln /bin/true /bin/sync

Isso passaria despercebido pelos usuários e não teria efeitos negativos, exceto com pessoas que apenas executassem a sincronização e removessem dispositivos de armazenamento (por exemplo: usb thumbdrive) sem desmontá-los, mas esses usuários já estavam agindo de maneira estúpida.

Note que eu não recomendaria o link anterior / bin / sync com / bin / true. sync é certamente útil em alguns casos. Por exemplo, se você temer que um desligamento brutal (escassez de energia, pânico do sistema, ...) possa acontecer em breve, isso ajudaria a preservar o conteúdo dos sistemas de arquivos. Isto é o que eu chamo de um pedido legítimo.

    
por 02.12.2012 / 00:50
5

sync não pode causar danos ao sistema. Ele pode atrasá-lo, 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 precisarem ser executadas em ordem, mesmo se o sistema travar ou perder energia. Por exemplo, considere um agente de transferência de email que receba um email. Depois de ter escrito o arquivo que contém o email para o spool, ele chama sync e, somente então, ele responde à máquina emissora notificando que o email foi recebido. Se ele não chamasse sync e a máquina receptora perdesse a energia logo após o envio da notificação de recepção, mas antes de enviar o arquivo para o disco, o e-mail seria perdido.

Os sistemas operacionais atrasam gravações de disco para eficiência. Eles não podem saber quando um aplicativo realmente precisa que a gravação aconteça. Então, os aplicativos recebem uma maneira de dizer ao sistema operacional para escrever agora, com sync(1) e sync(2) e fsync(2) .

    
por 03.12.2012 / 01:23