Como remover / descartar uma partição SSD inteira no Linux?

23

Minha partição /dev/sda3 em uma unidade SSD não contém nenhum sistema de arquivos, mas contém lixo. Como faço uma operação TRIM / DISCARD em toda a partição?

    
por pts 08.07.2011 / 21:12

6 respostas

33

Se a sua versão do util-linux for nova o suficiente (setembro de 2012), existe na verdade uma ferramenta específica, blkdiscard , essa é a melhor maneira de fazer isso:

sudo blkdiscard /dev/sda3

Mas se você precisar de compatibilidade com versões antigas de Linux, continue lendo ... Há casos em que hdparm / wiper.sh se recusam a tocar em um volume porque não é uma partição, então precisamos de algo além disso.

A maneira mais suportada que encontrei é aproveitar o fato de que os volumes de troca do Linux suportam DISCARD quando estão ativados. Os wipefs no final estão lá para que o volume não seja reconhecido como swap mais tarde.

D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D

Isto emite o DISCARD na maioria do dispositivo.

    
por 15.09.2013 / 20:16
8

Eu sei que essa pergunta é bem antiga, mas ...

A maneira mais simples de fazer isso é simplesmente criar um sistema de arquivos ext4 na partição com uma versão razoavelmente recente de mkfs.ext4 . A primeira coisa que esta ferramenta faz é TRIM a partição inteira. Depois de fazer isso, você pode sobrescrever os dados criados com o sistema de arquivos desejado.

(Acabei de fazer isso para criar uma nova partição vfat em um cartão SD, por exemplo).

    
por 10.01.2013 / 17:23
6

hdparm --trim-sector-ranges é de baixo nível, é suposto falar diretamente com o SSD, então não há dependência no sistema de arquivos. O que o wiper.sh faz é usar programas específicos do sistema de arquivos para mapear regiões livres (sistemas de arquivos) para setores SSD (hardware), eles usam o hdparm para apará-los.

Respondendo a pergunta, você pode usar o hdparm para cortar essa partição, mas deve ser muito cuidadoso . A maneira de fazer isso é obter o intervalo do setor usado pela partição e, em seguida, usar o hdparm nesse intervalo de setor. Provavelmente, você precisará passar por vários intervalos de setores, pois cada intervalo para intervalos de setores --trim pode ter no máximo 65535 setores.

fdisk -l pode dizer-lhe o começo e o tamanho das partições. Preste atenção nas unidades em uso pelo fdisk e no tamanho do setor do seu SSD.

Exemplo (meu SSD):

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    39070079    19534016   83  Linux

Para descartar o espaço antes dessa partição, eu poderei cortar setores de 2047 (tamanho de 512 bytes, no meu SSD) a partir do setor 1: hdparm --trim-sector-ranges 1:2047 . Eu não posso cortar a partir do setor 0, porque esse é o MBR (não sei como vai para GPT).

Para descartar o espaço usado pela partição, eu faria hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ... . Pode ser roteirizado, mas não vou escrever um agora.

Além disso, só para ter certeza: não estou garantindo nada aqui, posso ter calculado mal os setores, fazer um backup de tudo antes de usar efetivamente os intervalos do setor de trim.

Nota : se você aparar o espaço "vazio" antes da primeira partição, como mostrei, não se esqueça de reinstalar o GRUB (ou qualquer outro gerenciador de inicialização que você use) antes de reinicializar, pois o GRUB armazena parte dele. em setores "não utilizados" antes da primeira partição. Não conheço outros bootloaders, mas acho que pode ser o caso, então tome cuidado.

    
por 28.11.2012 / 05:01
4

Você pode dar uma olhada no script wiper.sh incluído no pacote hdparm. Ele usa o comando hdparm --trim-sector-ranges para TRIM todos os setores vazios em uma partição, pelo menos se ele contiver um sistema de arquivos ext3 / 4. Não tenho certeza se ele funciona com partições não formatadas, mas você pode sempre formatá-lo temporariamente com o ext4.

    
por 08.07.2011 / 22:02
2

blkdiscard pode funcionar em partições, não apenas em unidades inteiras. Eu testei com sucesso no Fedora 20. Eu verifiquei as fontes de blkdiscard - é um programa muito simples que não sabe nada sobre partições. Eu assumo que o kernel faz a tradução.

Tenha muito cuidado, blkdiscard não faz perguntas e não mostra informações sobre progresso.

Se a blkdiscard não estiver disponível, use este script e alimente sua saída para hdparm. Primeiro argumento é o número de setores a aparar, o segundo é o primeiro setor a aparar.

#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
    if test $sectors -gt $MAXSECT; then
            size=$MAXSECT
    else
            size=$sectors
    fi
    echo $pos:$size
    sectors=$(($sectors-$size))
    pos=$(($pos+$size))
done
    
por 17.04.2014 / 00:08
-1

Aqui está um artigo interessante que fala sobre o uso do HDDErase para invocar o recurso de exclusão segura integrado do SSD, que deve fazer você desejar:

link

    
por 08.07.2011 / 22:47