A resposta curta é: sim, sim, não.
Sim, um sistema de arquivos pode ser executado indefinidamente sem aplicativos chamando fsync
: os sistemas de arquivos não contam com isso para garantir que os dados (eventualmente) sejam armazenados no disco; há outros mecanismos em vigor. Não ter fsync
chamadas coloca seus dados em risco: por exemplo, se você copiar um arquivo e excluir o original, seu sistema perderá energia, há uma pequena chance de que a exclusão o faça no disco, mas a cópia estar incompleto.
Normalmente, há configurações que podem ser alteradas para controlar a velocidade com que o sistema operacional tenta armazenar dados no disco; Há também o Big Stick, sync
, que faz com que todos os dados pendentes sejam gravados. (Observe que, em todos os casos, o sistema operacional só pode garantir que os dados cheguem ao controlador de disco e talvez solicitar que os discos esvaziem seus buffers - não há garantia absoluta de que os dados estejam realmente armazenados no disco.)
No Linux, as configurações que você pode ajustar estão em /proc/sys/vm
; a documentação correspondente é sysctl/vm.txt
- procure por dirty_
. As várias configurações permitem que você especifique quantos dados podem estar aguardando para serem gravados ou por quanto tempo antes que o sistema operacional comece a gravá-los no disco. Existem dois mecanismos que podem entrar aqui: há um thread em segundo plano que grava dados pendentes no disco ( dirty_background_...
) e quando os processos começam a produzir muitos dados, o sistema operacional faz com que suas gravações sejam liberadas no disco (introduzindo efetivamente algo como fsync
). A razão pela qual existem dois mecanismos é que o sistema operacional tenta preservar um equilíbrio entre o desempenho de E / S e o desempenho de processamento: desde que os processos em execução não gravem dados muito rapidamente, o segmento em segundo plano cuida disso; mas uma vez que eles começam a escrever dados demais para os discos acompanharem, eles ficam lentos, o que ajuda o sistema a recuperar os dados pendentes de gravação e evita que muito mais dados sejam gravados.
Se você estiver preocupado com seus dados, não tente conferir se fsync
foi chamado, basta executar sync
.
(Ignore /proc/sys/vm/dirtytime_expire_seconds
, isso é algo totalmente diferente.)