umount de sdcard deixa gordura-fs impura

3

Quando desmembro um cartão flash SD em um leitor de cartão USB e puxo o cartão, o sistema de arquivos fica "sujo".

Sistema:

  • RPi ou xubuntu 16.04.3
  • O leitor de cartões é um chinês muito barato. Eu tentei alguns diferentes
  • Eu já experimentei vários cartões SD diferentes.

Como reproduzir:

  1. conecte o leitor de cartão
  2. insira o cartão SD com o vfat na primeira partição
  3. aguarde o sistema detectar o cartão SD
  4. aguarde o sistema para montar automaticamente o sistema de arquivos ou montá-lo manualmente
  5. atualiza um arquivo aleatório, eu faço: date >> /media/mogul/2E3E-AE54/d
  6. desmontar: sudo umount /dev/sdd1
  7. (espaço reservado, não faça nada aqui, ainda)
  8. puxe o cartão sd do leitor de cartões

Agora repita a partir do passo 2. Fique de olho no seu dmesg, ele dirá:

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

(suporte do linux mais recente dmesg -w )

Agora, se eu adicionar uma ação adicional após o umount

  1. leia um byte aleatório no cartão SD, como: dd if=/dev/sdd1 skip=1000000 ibs=1 count=1 of=/dev/null

o sistema de arquivos parece sobreviver.

Isso parece um pouco hack para mim, estou faltando alguma coisa fundamental?

Você tem soluções mais elegantes?

Eu prefiro não usar eject , mas somente umount, since eject 'desliga o leitor de cartões também; o sistema não detectará um novo cartão SD antes de eu reconectar o leitor de cartão.

    
por mogul 17.12.2017 / 20:15

2 respostas

4

No seu passo 7, tente o seguinte:

echo 1 | sudo tee /sys/block/sdd/device/delete

ou se você estiver executando como root, apenas

echo 1 > /sys/block/sdd/device/delete

Isso sinaliza ao kernel que o dispositivo /dev/sdd está prestes a ser removido e deve acionar uma limpeza controlada de quaisquer buffers de gravação remanescentes na placa, para evitar a corrupção do sistema de arquivos.

Isso pode fazer com que o leitor desligue de maneira semelhante ao comando eject ; se isso acontecer, uma maneira alternativa seria simplesmente liberar os buffers sem a implicação de uma remoção de dispositivo iminente. Isso pode ser conseguido com o comando blockdev :

sudo blockdev --flushbufs /dev/sdd

Se isso não ajudar, receio que o leitor de cartões não suporte a desconexão a quente do cartão. Isso é possível com leitores baratos. A única maneira segura de usar um leitor desse tipo seria desconectar o leitor da porta USB e só então remover o cartão da leitora.

    
por 17.12.2017 / 21:46
0

Emitir o comando sync na etapa 7 gravará o cache de buffer no cartão SD e resultará em um sistema de arquivos limpo.

    
por 21.12.2017 / 15:15