Em que situação é um arquivo gravado no dispositivo de bloco durante o desmembramento?

3

Eu tenho um cartão de memória flash compacto detectado como um dispositivo de bloco /dev/sdb . Tem uma única partição FAT16. Agora, se eu montar o sistema de arquivos FAT16, escrever algo no sistema de arquivos e umount no sistema de arquivos, a gravação real do arquivo ocorrerá durante o umount :

# mount | grep sdb
/dev/sdb1 on /media type vfat (rw)
# time cp image.bin /media/

real    0m0.179s
user    0m0.000s
sys 0m0.104s
# time umount /media 

real    0m18.185s
user    0m0.004s
sys 0m0.032s
# 

Eu tenho visto um comportamento semelhante com a memória flash USB. O que determina se o arquivo é gravado no sistema de arquivos imediatamente ou durante a desconexão do sistema de arquivos?

    
por Martin 24.05.2013 / 15:47

2 respostas

2

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.

    
por 24.05.2013 / 20:24
5

As gravações são feitas imediatamente se o arquivo for aberto de forma síncrona ou se o sistema de arquivos for montado com a opção de sincronização.

Isso geralmente é ruim para o desempenho geral do sistema, portanto, isso só é feito quando os dados críticos devem ser confirmados no dispositivo de armazenamento quando a chamada de gravação retorna. Copiar um arquivo não é considerado crítico, portanto, o kernel armazena a gravação internamente e apenas libera os dados para a mídia periodicamente.

Você pode pedir ao sistema operacional para liberar todos esses caches com o comando sync

    
por 24.05.2013 / 16:49

Tags