Qual é a maneira recomendada de esvaziar um SSD?

53

Acabei de receber meu novo SSD desde que o antigo morreu. Este Intel 320 SSD suporta TRIM. Para fins de teste, meu revendedor colocou o Windows nele, mas eu quero me livrar disso e instalar o Kubuntu nele.

Não precisa ser uma "limpeza segura", só preciso esvaziar o disco da maneira mais saudável. Acredito que dd if=/dev/zero of=/dev/sdaapenas preencha os blocos com zeros e, assim, faça outra gravação (corrija-me se estiver errado).

Eu já vi a resposta Como ativar o TRIM , mas parece que é adequado para limpar blocos vazios, sem limpar o disco.

hdparmparece ser o programa para fazer isso, mas não tenho certeza se ele limpa o disco OU limpa blocos vazios. Na sua página de manual:

  --trim-sector-ranges
          For  Solid State Drives (SSDs).  EXCEPTIONALLY DANGEROUS. DO NOT
          USE THIS OPTION!!  Tells the drive firmware to discard  unneeded
          data  sectors,  destroying  any  data that may have been present
          within them.  This makes those sectors available  for  immediate
          use  by  the firmware's garbage collection mechanism, to improve
          scheduling for wear-leveling of the flash  media.   This  option
          expects  one  or  more  sector range pairs immediately after the
          option: an LBA starting address, a colon, and  a  sector  count,
          with no intervening spaces.  EXCEPTIONALLY DANGEROUS. DO NOT USE
          THIS OPTION!!
          E.g.  hdparm --trim-sector-ranges 1000:4 7894:16 /dev/sdz

Como posso fazer com que todos os blocos pareçam vazios usando o TRIM?

Lekensteyn
fonte
Boa pergunta, talvez seja suficiente apenas excluir o sistema de arquivos NTFS?
Htorque 12/05/11
11
Portanto, é apenas um comentário. ;) No entanto, você pode primeiro verificar alguns setores nessa partição sudo dd if=/dev/sda iflag=direct bs=512 skip=<some_sectors> count=32 | hexdump -C, excluir a partição NTFS usando uma versão recente do Gparted e verificar novamente com o mesmo comando - se os dados forem limpos, você verá zeros.
Htorque 12/05/11
11
@ htorque: Acabei de testar, mas não está funcionando, usei hexdump -C /sda1e hexdump -C /sda1para determinar o bloco de partida. Boa ideia embora.
Lekensteyn
11
@Lekensteyn - eu quis dizer um pouco de língua na bochecha e deu uma resposta adequada para você abaixo. O artigo de Jeff tem um pouco sobre o desempenho, bem como, é por isso que ele usa-los, apesar da taxa de falhas :-)
Rory Alsop
3
Ainda não vejo por que você precisa apagá-lo ... por que você não pode apenas reformatá-lo com Ext4 ou o que seja?
Nathan Osman

Respostas:

52

ATA Secure Erase

Você deve usar o recurso de exclusão de segurança da unidade .

  1. Verifique se a segurança da unidade não está congelada . Se for, pode ajudar a suspender e reiniciar o computador.

    $ sudo hdparm -I /dev/sdX | grep frozen
           not     frozen 
    

    A saída do comando (filtrado) significa que esta unidade "não está congelada" e você pode continuar.

  2. Defina uma senha de usuário (essa senha também é limpa, a escolha exata não importa).

    sudo hdparm --user-master u --security-set-pass Eins /dev/sdX
    
  3. Emita o comando ATA Secure Erase

    sudo hdparm --user-master u --security-erase Eins /dev/sdX
    

Nota:

  • /dev/sdX é o SSD como um dispositivo de bloco que você deseja apagar.
  • Eins é a senha escolhida neste exemplo.

Consulte o artigo ATA Secure Erase no wiki do kernel do Linux para obter instruções completas, incluindo a solução de problemas.

psusi
fonte
Obrigado pelo link, parece bom para quem tem um BIOS que o suporta, mas o meu não parece suportá-lo. (congelado)
Lekensteyn
Viva! Depois de ler o artigo novamente, li "Colocando meu sistema em" suspensão "(notebook Clevo M865TU) também funcionou --- e isso pode redefinir outras unidades para" não congeladas "também". e tentei, já que o meu também é originalmente de Clevo (mas a BTO constrói). Funciona, vejo "não congelado" agora. ... mas a etapa 3 falhou com "ERASE_PREPARE: endereço incorreto" porque substituí o sudo pelo tempo, em vez de prefixar o comando!
Lekensteyn
11
OMG funcionou e levou apenas 19 segundos! Muito obrigado! Eu gostaria de poder te
votar
Eu só queria informar que a resposta aceita acima tem um link quebrado. É bastante inútil sem o referido link, alguém gostaria de postar um resumo do que o link dizia?
Ashimema
@Ashimema: O link está quebrado no momento porque o kernel.org foi invadido e, portanto, inoperante. O Google Cache está vazio, mas este blog o copiou: peter.membrey.hk/2011/09/11/…
Lekensteyn
30

O util-linux 2.23 oferece blkdiscardque descarta dados sem limpá-los com segurança. Eu testei: funciona com SATA e mmcblk, mas não com USB.

Um trecho da página de manual de blkdiscard(8):

NOME

blkdiscard - descarta setores em um dispositivo

SINOPSE

blkdiscard [-o offset] [-l length] [-s] [-v] device

DESCRIÇÃO

blkdiscard é usado para descartar setores do dispositivo. Isso é útil para drivers de estado sólido (SSDs) e armazenamento thin-provisioned. Diferente do fstrim (8), este comando é usado diretamente no dispositivo de bloco.

Por padrão, o blkdiscard descartará todos os blocos no dispositivo. Opções podem ser usadas para modificar esse comportamento com base no intervalo ou no tamanho, conforme explicado abaixo.

O argumento do dispositivo é o nome do caminho do dispositivo de bloco.

AVISO: Todos os dados na região descartada no dispositivo serão perdidos!

O comando existe desde o Ubuntu 15.04 e o OpenSUSE 13.1 (sim, o OpenSUSE possui 2 anos à frente do Ubuntu).

Tankman 六四
fonte
thx por adicionar informações a este post desatualizado e bem-vindo ao askubuntu.
Mondjunge
Arch Linux já tem este pacote como util-linux 2.23 foi lançado em 25 de Abril de 2013.
Lekensteyn
4
Obrigado pela recepção. Postagem desatualizada? Antigo, mas não desatualizado, desde que apareça na 1ª página do resultado de pesquisa do Google, sempre haverá novos caras procurando a mesma resposta aqui. Para mim, está desatualizado apenas quando páginas melhores o expulsam da 1ª página de resultados do Google.
Tankman六四
3
Se você está se perguntando a diferença entre blkdiscarde o hdparmcomando, ele é respondido aqui : "Quando você usa blkdiscard, o SSD (assumindo um SSD SATA) receberá um comando ATA TRIM, enquanto hdparm --security-erase emitirá um ATA SECURITY ERASE Comando UNIT. O que a unidade realmente faz depende dos detalhes de implementação do firmware desse SSD específico ".
Lekensteyn
2
Você realmente não quer usar blkdiscard. Primeiro, o objetivo é informar à unidade que partes específicas dela podem ser jogadas fora, não para limpar tudo. A unidade pode ou não apagar os dados. O comando secure erase deve apagar todos os dados, incluindo todos os dados que estão em partes da unidade que não estão acessíveis no momento. Editar: basta reler a pergunta e perceber que ela não exige apagamento, mas ainda vale a pena notar.
Psusi 11/09/2015
5

Se você não precisa de uma limpeza segura, por que não instala o kubuntu usando as opções para 'usar o disco inteiro' e o equivalente a 'formatação rápida' (não se lembra da terminologia exata agora)

Dessa forma, você abandona a tabela de alocação de arquivos e a unidade é efetivamente esvaziada para substituição. Você realmente não precisa esvaziá-lo.

Rory Alsop
fonte
2
Consulte anandtech.com/show/2865/2 . Excluir o bloco não é o mesmo que apagá-lo e marcá-lo como vazio.
Lekensteyn
A exclusão de @Lekensteyn não significa nada para um dispositivo de bloco. O instalador chama mkfs.ext4 e descarta o dispositivo inteiro; isso é tão seguro quanto uma "exclusão segura", no sentido de que, nos dois casos, você confia no firmware SSD.
Tobu
11
@ Tobu Certo, isso mudou em algum momento. mkfs.ext4(8)diz: descartar - tentativa de descartar blocos no tempo mkfs (descartar blocos inicialmente é útil em dispositivos de estado sólido e armazenamento esparso / thin-provisioned). Quando o dispositivo anuncia que o descarte também zera os dados (qualquer leitura subsequente após o descarte e antes da gravação retorna zero), marque todas as tabelas de inodes ainda não zeradas como zeradas. Isso acelera significativamente a inicialização do sistema de arquivos. Isso está definido como padrão.
Lekensteyn
@Tobu Para o meu caso de uso, o "apagamento seguro" não precisou realmente apagar os dados de seus chips flash, deveria apenas garantir que não haja efeitos negativos no desempenho resultantes do uso de alguns blocos.
Lekensteyn
1

Se a unidade tiver um arquivo Linux, você poderá usá-lo fstrim. Por padrão, o Ubuntu recente roda fstrimem unidades dos seguintes fornecedores:

    if [ -z "$NO_MODEL_CHECK" ]; then
        if ! contains "$HDPARM" "Intel" && \
           ! contains "$HDPARM" "INTEL" && \
           ! contains "$HDPARM" "Samsung" && \
           ! contains "$HDPARM" "SAMSUNG" && \
           ! contains "$HDPARM" "OCZ" && \
           ! contains "$HDPARM" "SanDisk" && \
           ! contains "$HDPARM" "Patriot"; then
            #echo "device $DEV is not a drive that is known-safe for trimming"
            continue

Uma vez por semana.

Portanto, uma resposta para sua pergunta é inicializar o sistema e esperar uma semana!

Bryce
fonte
11
fstrim é mencionado nesta publicação do blkdiscard , você também pode invocá-lo manualmente com sudo fstrim /(onde /é um ponto de montagem de um sistema de arquivos que suporta a discardopção).
Lekensteyn
-4

Basta remover a partição, não é necessário limpar o disco inteiro, os dados antigos serão substituídos quando o armazenamento for necessário para outra coisa.

Para ativar o TRIM:

gksudo gedit /etc/fstab

Altere "erros ext4 = remontar-ro 0" em "descarte ext4, erros = remontar-ro 0". (Adicionar descarte)

Salvar e reiniciar, o TRIM agora deve estar ativado.

Verifique se o TRIM está ativado:

sudo -i
dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
hdparm --fibmap tempfile

Use o primeiro endereço begin_LBA.

hdparm --read-sector [begin_LBA] /dev/sda

Agora, ele deve retornar números e caracteres. Remova o arquivo e sincronize.

rm tempfile
sync

Agora, execute o seguinte comando novamente. Se retornar zeros, o TRIM está ativado.

hdparm --read-sector [begin_LBA] /dev/sda
Alex
fonte
2
Você NÃO deseja preencher um SSD com zeros, pois ele será gravado em todos os blocos de apagamento, causando mais desgaste e deixando todos os blocos de apagamento cheios. Também muitas unidades NÃO zeram imediatamente setores cortados.
Psusi 12/05/11
Claro, requer muitas gravações, mas não danifica o disco. Eu uso um Corsair F120 há 10 a 11 meses e frequentemente o preencho com zeros. . (Fazê-lo antes de cada benchmark) Então, depois de 30-35 vezes o desempenho ainda é o mesmo (~ 285MB ler, 275 MB / gravação) Smart diz: O disco é saudável
Alex
9
Alex, cada gravação em um SSD o danifica um pouco. A gravação em cada bloco de apagamento faz com que todos sejam marcados em uso, o que impedirá que o GC da unidade funcione corretamente e o desempenho será prejudicado. Você pode pensar nisso como uma unidade inteira unTRIM.
Psusi 12/05/11