Primeiro de tudo, quando você adquire um novo dispositivo, posso recomendar a gravação de dados nele e verificar os dados posteriormente usando o md5sum / sha1sum / ... Dispositivos USB especialmente baratos tendem a ser quebrados. :( Não é tão incomum que as canetas USB funcionem bem nos primeiros (cem) MBs, mas tendem a diminuir os dados nos últimos MBs. Infelizmente muitos usuários não estão cientes disso e percebem os problemas tarde demais: quando a caneta USB está ficando cheia .
O problema de que você está falando geralmente está localizado no chipset USB (embora, às vezes, seja visível apenas ao usar combinações especiais de hardware). Se ele funciona com o Windows, mas falha com o Linux usando o mesmo hardware, parece que há uma solução alternativa no driver do Windows que não existe no kernel do Linux (ainda). E enquanto o Linux usa max_sectors = 240 por padrão (sendo 120kB) parece ser 64kB transferências (max_sectors = 128) para o Windows, de acordo com link (onde alguns problemas com os adaptadores feitos pela Genesys Logic são mencionados também).
Para definir automaticamente os max_sectors: use o udev para esta tarefa. Ele permite que você configure max_sectors apenas para os dispositivos para os quais deseja ajustá-lo.
Você pode recuperar as informações necessárias sobre o dispositivo USB em execução:
# udevadm info -a -p /sys/class/block/sda/
ou para versões mais antigas do udev:
# udevinfo -a -p /sys/class/block/sda/
Em seguida, pegue os atributos que deseja usar para suas regras e crie um novo arquivo como 42-fix-max_sectors.rules e coloque-o em /lib/udev/rules.d (ao usar versões recentes do udev) ou / etc / udev / rules.d (para versões mais antigas do udev). Para ter uma ideia de como esse arquivo de configuração poderia ser:
SUBSYSTEM=="block", ATTRS{model}=="Voyager Mini ", RUN+="/bin/sh -c '/bin/echo 64 > /sys/block/%k/device/max_sectors'"
Certifique-se de recarregar o udev depois de escrever seu arquivo de regras (através da execução do /etc/init.d/udev reload). Para testar seu arquivo de configuração, posso recomendar o uso de:
# udevadm test /sys/class/block/sda/
PS: Eu prefiro substituir o hardware se eu notar qualquer problemas porque geralmente não vale a pena o esforço para trabalhar em qualquer solução alternativa (e tenho certeza que você está ciente do Murphy que vai te pegar de qualquer maneira assim que você achar que está funcionando;)).