Perda de dados ao montar um arquivo em um armazenamento USB removível por loop

3

Se eu conectar um USB, modificar arquivos e desconectá-lo, não perco dados. No entanto, se eu usar mount em um arquivo no USB, irei perder dados. O que há com isso? Existe alguma coisa que eu possa fazer para evitar a perda de dados? É estranho que eu possa escrever um arquivo e extrair meu usb sem perda de dados, mas ao usar o mount eu vou perder dados. Aqui está o exemplo

echo "Data Data Data" > /media/your-usb/data
#unplug your usb. plug into another computer
#you'll see you didn't lose any data

#Create a file, put ext4 filesystem on it
dd if=/dev/zero of='/media/your-usb/test.bin' count=100000;
losetup /dev/loop0 /media/your-usb/test.bin
mkfs.ext4 /dev/loop0
losetup -d /dev/loop0

#Mount FS
mkdir m
mount -o loop /media/your-usb/test.bin m

echo Test > m/test
umount m
#No loss of data

mount -o loop ./test.bin m
echo Test2 > m/test2
#wait a moment. You'd think the data will  flush

#unplug your USB
umount m
#plug your USB
mount -o loop ./test.bin m
cat m/test2 #error test2 is not a file
    
por Jimmy Douglas 28.10.2014 / 19:17

2 respostas

3

Quando o Linux detecta uma unidade removível, é inteligente o suficiente para saber que deve liberar os dados com freqüência. Quando você está montando um loopback, ele não sabe que o dispositivo de apoio é um arquivo que pode ser removido a qualquer momento.

Você pode forçar o sistema a não armazenar em cache as gravações usando:

mount -o loop,sync /media/your-usb/test.bin m

Isso resultará em um desempenho mais lento e também observará esse aviso sobre o desgaste da página man mount :

   sync   All  I/O to the filesystem should be done synchronously. In case
          of media with limited number of write cycles  (e.g.  some  flash
          drives) "sync" may cause life-cycle shortening.

Uma alternativa seria, pelo menos, executar sync antes de remover o dispositivo se você não quiser umount por algum motivo.

    
por 28.10.2014 / 19:29
1

If I plug in a USB and modify files and unplug it I don't lose data.

Correção: você ainda não perdeu dados . Que você notou.

Presumivelmente você, sua distribuição ou o mantenedor do programa de automontagem usado configurou dispositivos de armazenamento USB removíveis para serem montados com a opção sync , o que faz com que os dados sejam gravados imediatamente. A opção sync tem a vantagem de gravar todos os dados para que não sejam perdidos se a mídia de armazenamento for retirada de repente ou o sistema travar, mas tem muitas desvantagens:

  • O armazenamento do tipo flash se desgastará mais cedo, porque os dados são gravados em alguns bytes por vez, mas o armazenamento só pode ser atualizado escrevendo blocos bastante grandes a cada vez, portanto, cada bloco acaba sendo reescrito várias vezes. Isso pode matar as unidades USB básicas rapidamente.
  • Um sistema de arquivos que não está desmontado corretamente será marcado como sujo. Você não pode distinguir um sistema de arquivos que foi marcado como sujo, mas contém dados consistentes de um que foi retirado no meio de uma gravação e contém dados inconsistentes. Isso não se aplica a sistemas de arquivos como o FAT que não têm um indicador "sujo".
  • É mais lento - potencialmente muito mais lento.

Não use sync . Desmonte seus dispositivos antes de desconectá-los.

    
por 29.10.2014 / 02:10

Tags