Por que o Linux marca o FAT como 'sujo' simplesmente devido a montá-lo?

3

Se eu colocar um cartão de memória USB (formatado em FAT) em um PC com Windows, desconecte-o sem "ejetá-lo" e coloque-o novamente, o Windows não terá nenhum aviso sobre isso "possivelmente tendo problemas" ".

Mas se eu fizer o mesmo com o Linux (por exemplo, Ubuntu 15.04), depois de inseri-lo pela segunda vez, recebo mensagens de aviso no log como:

FAT-fs (sdf1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

E, se eu a colocar em um PC com Windows, receberei uma mensagem solicitando que eu verifique se há erros.

Por que a manipulação do sinalizador "sujo" do FAT é tão básica? Eu teria pensado que seria melhor apenas definir a bandeira "suja" se ela estiver potencialmente "suja" - por exemplo, algo como:

  • Defina o sinalizador "sujo" quando um arquivo é gravado.
  • Limpe o sinalizador "sujo" quando:
    • todos os arquivos gravados estão fechados e / ou
    • o cache de gravação é gravado em disco,
    • e, claro, quando o disco é desmontado.

Seria bom se houvesse pelo menos alguma opção de montagem para operar nesse modo, para reduzir a chance de os usuários obterem alertas falsos "sujos" para simplesmente conectar e desconectar um dispositivo removível, mesmo que nada tenha sido escrito.

    
por Craig McQueen 17.09.2015 / 02:42

1 resposta

7

Meu C é difícil, mas parece que o bit sujo e gordo é definido quando o superbloco é lido (este confirmar explica por que ele foi implementado da maneira como foi).

O Windows pode optar por não definir o bit até que algo seja alterado no FS, onde o linux adota uma abordagem um pouco mais paranóica de configurá-lo no momento da montagem.

Para mim, parece que é mais eficiente assim, supor sujo depois de montar e descomplicar após desmontar limpo, caso contrário o kernel teria que rastrear o estado sujo / limpo do volume e verificar se ele precisa ser configurado em cada escreva.

Como você pode ver no código e no comentário de commit; você pode montar RO e o bit não será alterado.

    
por 17.09.2015 / 03:09

Tags