Solucionando o problema de cache em dispositivos de armazenamento USB

O problema de cache em dispositivos de armazenamento USB é algo bastante comum e que pode ser frustrante para os usuários. Quando copiamos arquivos grandes para um pendrive ou HD plugado na USB, a cópia é feita rapidamente, mas ao tentarmos remover com segurança o dispositivo, é preciso esperar por um longo período.

[ Hits: 2.239 ]

Por: Bruno Gonçalves Araujo em 22/03/2023


Introdução



O problema de cache em dispositivos de armazenamento USB é algo bastante comum e pode ser frustrante para os usuários. Quando copiamos arquivos grandes para um pendrive ou HD plugado na USB, a cópia é feita rapidamente, mas ao tentarmos remover com segurança o dispositivo, é preciso esperar por um longo período.

Isso ocorre porque a cópia dos arquivos não diferencia a cópia em cache da cópia real para o outro dispositivo. O tamanho da cache varia conforme a quantidade de memória RAM livre, o que é bom para acelerar o sistema, mas pode ser inconveniente para dispositivos USB.

Ao longo dos anos, houve muitos relatos de usuários de várias distribuições Linux que não gostam desse comportamento. No entanto, reduzir a configuração de "dirty pages" para diminuir a cache pode também reduzir a velocidade do sistema como um todo, inclusive do armazenamento interno.

Fiz uma solução que está sendo utilizada no BigLinux, mas deve funcionar em todas as outras distribuições, chamei de usb-dirty-pages-udev, que detecta automaticamente dispositivos de armazenamento plugados na USB e estabelece a cache especificamente para eles em 16 MB, enquanto o restante do sistema continua com o sistema de cache padrão. Isso resolve o problema de espera prolongada para remover com segurança os dispositivos USB, sem afetar o desempenho geral do sistema.

Se a distribuição for instalada em um dispositivo USB, esse dispositivo não terá a redução de cache para 16 MB, mantendo o desempenho do sistema e o código completo pode ser visto aqui: https://github.com/biglinux/usb-dirty-pages-udev

Se você não está utilizando uma distribuição instalada em um dispositivo USB, que deve ser a situação de quase todos os usuários, é mais simples ainda, basta criar um arquivo de configuração do udev com esse conteúdo:

ACTION=="add", KERNEL=="sd[a-z]", SUBSYSTEM=="block", ENV{ID_USB_TYPE}=="disk", RUN+="/usr/bin/bash -c 'echo 1 > /sys/block/%k/bdi/strict_limit; echo 16777216 > /sys/block/%k/bdi/max_bytes'"

Sugestão de pasta e nome para o arquivo: /etc/udev/rules.d/60-usb-dirty-pages-udev.rules

Vamos entender o que essa regra faz, ao plugar um dispositivo (add), é feira a verificação se o kernel vai criar algum dispositivo /dev/sda ou qualquer outro dispositivo em ordem alfabética até o /dev/sdz, verifica é o SUBSYSTEM é block e o ID_USB_TYPE é disk. Se o dispositivo corresponder a essas características, então serão executadas duas mudanças na configuração:

# echo 1 > /sys/block/%k/bdi/strict_limit

Esse comando ativa o limite de cache específico para esse dispositivo, lembre que %k é a identificação do dispositivo fornecida pelo udev, por exemplo, sda.

# echo 16777216 > /sys/block/%k/bdi/max_bytes'

Esse comando estabelece o limite de cache em RAM desse dispositivo em 16 MB, você pode alterar o valor para o que achar melhor.

Após salvar o arquivo pode atualizar as regras do udev sem precisar reiniciar com o comando:

udevadm control --reload-rules && udevadm trigger

Dica complementar 1: para você criar suas próprias regras do udev, utilize esse comando para ter informações do dispositivo, troque o endereço para o do dispositivo que for necessário, no exemplo irá verificar informações sobre o sda:

# udevadm info /sys/class/block/sda

Dica complementar 2: para monitorar o que ocorre com o udev ao conectar ou desconectar um dispositivo, utilize o comando:

# udevadm monitor

Dica complementar 3: venha fazer parte do BigLinux, criando automações e outras facilidades para o sistema.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Reduzindo problemas de atualizações no Debian, Ubuntu e derivados - Parte 2

BigBashView, interface gráfica para o seu shell script

Reduzindo problemas de atualizações no Debian, Ubuntu e derivados

Leitura recomendada

Configurando a Sony Cybershot DSC-W1

Gerenciador de programas no pQui Linux

Cluster de alta disponibilidade para servidores web com Debian 7.1 + Corosync + Pacemaker + DRBD

Reempacotamento e repositório local em um sistema Debian-like

Porque o RedHat 9 tem problemas com teclados US-International?

  
Comentários
[1] Comentário enviado por fabio em 22/03/2023 - 17:11h

BigLinux tá bom demais! Parabéns pelo trabalho.

[2] Comentário enviado por bigbruno em 22/03/2023 - 17:15h


[1] Comentário enviado por fabio em 22/03/2023 - 17:11h

BigLinux tá bom demais! Parabéns pelo trabalho.


Obrigado, a tendência é esse ano ter várias melhorias, também estou mais próximo do pessoal do Manjaro, esse é o segundo pacote do Big que entra para o repositório deles.

[3] Comentário enviado por niquelnausea em 25/03/2023 - 10:36h


já vi tanta reclamação e perguntas em fóruns sobre este problema, finalmente conhecemos uma solução. parabéns.

[4] Comentário enviado por maurixnovatrento em 25/03/2023 - 16:09h


Vou ver como isso fica no slackware.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10

[5] Comentário enviado por Minions em 23/04/2024 - 16:31h


Sera que resolve o problema no Virtualbox (VM biglinux) com pendrive?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts