Minhas partições raiz e inicial são criptografadas com LUKS. Desejo ter o descarte/TRIM ativado neles (estou ciente das implicações de segurança). Se meu entendimento estiver correto, isso deve resultar em áreas descartadas sendo zeros em um dispositivo de disco bruto e sem sentido no dispositivo mapeado por cryptsetup.
Fiz algumas alterações de configuração, executei fstrim
e agora quero verificar se o descarte está funcionando. Para fazer isso, quero contar quantos bytes na minha partição são zeros. Em um disco aparado, eu esperaria que:
count of 0 bytes
÷total partition size
≈percentage of free space
Em uma partição criptografada não cortada: (assumindo que todos os bytes foram gravados pelo menos uma vez)
count of 0 bytes
≈total partition size
÷ 256
Inspirado por Como reunir estatísticas de ocorrência de bytes em arquivo binário? , eu tentei esta abordagem:
sudo pv /dev/disk/by-label/ESP | od -vtu1 -An -w1 | grep -Fx ' 0' | wc -l
mas os resultados foram decepcionantes: processar uma partição de 500 MB levou quase 3 minutos. São 3 MB/s, enquanto meu SSD pode atingir leituras sequenciais de 360 MB/s. Também notei que um dos meus núcleos de CPU estava funcionando a 100%, enquanto outros estavam ociosos, então acho que isso poderia se beneficiar da paralelização. (O impacto de pv
é insignificante, quase nenhuma diferença em comparação com cat
)
Qual é a maneira mais rápida de contar 0
bytes em uma partição?
Se você conseguir acessar o disco bruto (sem criptografia), poderá fazer:
Isso lerá 100 Mega bytes do disco, removerá todos os zeros e contará o número de bytes restantes.
Não sei se esse é o método mais rápido, mas deve ser bastante rápido, assumindo que existem mais zeros do que dados.
O comando acima lerá 100 vezes
1Mega byte
ou100*2^20
(104857600) bytes (se estiverem disponíveis). Tente com um número pequeno (10 ou 100) para testar a velocidade e quão bem o comando funciona. Para ler todo o disco basta remover a opção de contagem, deixe a lateral do disco limitar o comando.Extraindo os dois valores que importam (contagem completa de bytes do disco e número de bytes diferentes de zero), o comando se torna mais complexo:
Que imprimirá os dois valores como:
non-zero/disk
, como:calcule
1-766568020/999292928
para encontrar a porcentagem de zero bytes: