O kernel mantém os dados em cache na memória, leitura dados são críticos (alguém está esperando por isso), escrevendo pode ser feito preguiçosamente (ninguém te apressa; os dados apenas pode ser usado novamente / modificado de novo). Como os dispositivos podem estar lendo ou gravando de cada vez, vale a pena adiar a escrita o máximo possível. Então os dados são escritos "voluntariamente" pelo kernel apenas se não houver saída (precisa do espaço agora ). Você pode forçar a mão do kernel abrindo arquivos de forma síncrona (escreva assim que algo mudar) chamando fsync(2)
no arquivo para forçar a saída de dados. Quando você desmonta um dispositivo, obviamente todos os dados armazenados em cache para isso devem ser escritos de antemão.
Os itens acima devem causar arrepios, pois a máquina pode falhar a qualquer momento e deixar muitos dados não gravados. É por isso que existe um programa chamado sync(1)
, que faz o kernel gravar todos os dados do arquivo em cache. Normalmente, ele é configurado para que seja executado periodicamente (normalmente a cada 5 segundos ou mais) para evitar a perda de dados, conforme descrito. Você precisa verificar a documentação da sua distribuição sobre como exatamente isso é configurado ou ajustado.