Recentemente ao desenvolver um dispositivo Linux que se apresenta como USB Drive para Windows, com um sistema de arquivos criado a cada montagem usando mkfs.fat, porém quando montado (via g_mass_storage) e apresentado ao Windows sempre mostra a mensagem "Pode haver um problema com algum arquivos neste dispositivo ou disco. Isso pode acontecer se você remover o dispositivo ou disco antes que todos os arquivos tenham sido gravados nele."
Depois de deixar o Windows corrigi-lo, o Windows relata que não foram encontrados erros.
O que faz com que o Windows relate "há um problema com esta unidade"?
Os sistemas de arquivos FAT32 e vFat têm um sinalizador "Dirty" que deve ser definido para indicar que as gravações estão em andamento, a fim de sinalizar que o sistema de arquivos pode ser parcialmente gravado (e, portanto, precisa ser verificado).
O Linux define o sinalizador "sujo" na unidade quando ela é montada para leitura e gravação e não a desativa até que seja desmontada. Isso significa que se a unidade for removida sem ser desmontada primeiro, o sinalizador sujo ainda será definido, mesmo que nenhuma alteração esteja pendente ou tenha sido feita.
O que ele deve fazer é defini-lo quando um arquivo ou diretório é aberto pela primeira vez para gravação e, em seguida, desativá-lo quando todos esses arquivos são fechados e as gravações pendentes são concluídas.