Como formatar SSD no Ubuntu via TRIM com blkdiscard

Visão Geral

O utilitário blkdiscard atua diretamente na controladora de unidades SSD e NVMe, emitindo instruções de descarte físico (TRIM) nos blocos de armazenamento para limpá-los instantaneamente. Para demonstrar a eficácia e os parâmetros práticos dessa ferramenta sem comprometer dados reais, este laboratório simula todo o procedimento em um dispositivo virtual de loopback. O passo a passo a seguir aborda desde o diagnóstico de compatibilidade até rotinas avançadas de reinicialização de setores.

1. Verificando o suporte a TRIM e inspecionando volumes de bloco

Antes de disparar qualquer operação de limpeza destrutiva, é essencial certificar-se de que o meio de armazenamento suporta instruções de descarte de blocos. A checagem dos parâmetros do hardware e dos pontos de montagem é realizada com:

lsblk --discard -o NAME,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,MOUNTPOINTS

Caso os campos DISC-GRAN e DISC-MAX exibam grandezas válidas e não nulas (a exemplo de 512B e 2T), conclui-se que o driver e a unidade física (aqui identificada como nvme0n1) conseguem interpretar e executar os comandos TRIM adequadamente.

Verificação de suporte a TRIM no dispositivo de bloco com lsblk

2. Preparando um ambiente seguro com dispositivo de loopback

Para resguardar os discos de produção durante o treinamento, cria-se uma imagem binária isolada de 64MB preenchida com entropia aleatória:

dd if=/dev/urandom of=/tmp/test_disk.img bs=1M count=64 status=none

Criação de imagem de teste com dados aleatórios via dd

Em seguida, vincula-se o arquivo recém-gerado à primeira interface de loopback disponível no kernel:

sudo losetup -fP /tmp/test_disk.img

Mapeamento do arquivo de imagem em dispositivo de loopback

Para facilitar a automação dos passos seguintes, armazena-se a rota do novo nó de bloco em uma variável do shell:

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

Exportação do caminho do dispositivo para variável de ambiente

Confirmando a atribuição da variável $LOOP_DEV:

echo "생성된 디바이스: $LOOP_DEV"

A resposta do terminal atesta que o alias /dev/loop0 foi associado com sucesso.

Confirmação do nome do dispositivo loopback alocado

Com o comando abaixo, inspecionam-se os primeiros 128 bytes em formato hexadecimal para assegurar a presença de dados prévios antes da sanitização:

sudo hexdump -C -n 128 $LOOP_DEV

A amostragem evidencia blocos heterogêneos e preenchidos, demonstrando que o volume não está zerado.

Inspeção dos primeiros bytes da imagem antes da limpeza

3. Executando o descarte total dos blocos com blkdiscard

Recarrega-se o identificador do volume virtual para dar início à sanitização completa:

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

Identificação da unidade de destino para sanitização

O wipe completo de todos os setores é executado de forma detalhada com o sinalizador de verbosidade ativado:

sudo blkdiscard -v $LOOP_DEV

O log confirma que a totalidade da capacidade (67.108.864 bytes / 64MB) a partir do deslocamento inicial zero foi integralmente descartada pelo controlador.

Execução do comando blkdiscard em modo verboso em todo o disco

Para validar a efetividade do descarte e inspecionar a integridade do estado final, analisa-se novamente o cabeçalho do disco:

sudo hexdump -C -n 128 $LOOP_DEV

O comando não retorna conteúdo ou reporta apenas zeros nulos, comprovando a eliminação imediata dos registros anteriores.

Validação da remoção dos dados com hexdump após descarte

4. Limpeza granular por deslocamento e tamanho (-o, -l)

Redefine-se a variável de referência da unidade virtual para os testes seletivos:

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

Reinicialização da variável apontando para o dispositivo

A fim de simular um cenário de descarte parcial, injetam-se novos dados de teste no cabeçalho do volume:

echo "TESTDATA_RELOAD" | sudo dd of=$LOOP_DEV bs=1M count=10 status=none

Gravação de novos dados de teste para teste de faixa restrita

Restringe-se a ação do blkdiscard a uma janela estrita de 10MB a partir do início do disco (offset 0):

sudo blkdiscard -v -o 0 -l 10M $LOOP_DEV

O relatório confirma que exatamente 10.485.760 bytes foram expurgados, preservando as demais regiões da unidade intocadas.

Aplicação de blkdiscard limitando o intervalo por offset e comprimento

Aferindo os 64 bytes iniciais para validar o reset do trecho selecionado:

sudo hexdump -C -n 64 $LOOP_DEV

A ausência de registros hexadecimais demonstra que a faixa delimitada foi completamente expurgada conforme planejado.

Confirmação da limpeza da fatia inicial com hexdump

5. Desmontagem do laboratório e recomendações operacionais

Ao término das validações práticas, localiza-se a associação ativa do dispositivo temporário:

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

Coleta do dispositivo de loopback ativo para encerramento

Desvincula-se a interface de loopback do núcleo do sistema operacional:

sudo losetup -d $LOOP_DEV

Desassociação segura do dispositivo de loopback

Remove-se o arquivo residual de imagem alocado em /tmp:

rm -f /tmp/test_disk.img

Exclusão da imagem temporária do sistema de arquivos

Por fim, audita-se a tabela de loopbacks para confirmar que não restaram interfaces orfãs ativas:

losetup -a

A saída vazia assegura que todos os recursos alocados foram liberados de forma limpa.

Auditoria de desmontagem confirmando ausência de loopbacks ativos

O blkdiscard representa uma das abordagens mais velozes e definitivas para sanear memórias flash e restaurar o desempenho de gravação em ambientes Linux. Contudo, em virtude de sua natureza irreversível, redobre a atenção sobre o identificador do disco antes de disparar o comando contra storages corporativos ou discos locais.