verifique independentemente se o TRIM realmente funciona no SSD


13

Eu tenho uma LUKSpartição /dev/sda1que eu luksOpen com --allow-discards:

cryptsetup --allow-discards luksOpen /dev/sda1 root

Em seguida, montei o ext4sistema de arquivos com a discardopção:

grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0

Depois aparei o espaço livre na partição montada:

fstrim -v /

com df, vejo que /tem 80% de espaço livre. Isso significa que /dev/sda180% do disco são zeros binários.

Se eu clonar a imagem com cat

cat /dev/sda1 > sda1.img

e comprima a imagem xz, eu esperaria que todos os zeros no disco fossem compactados. Como os 20% dos dados no disco são criptografados, eles devem parecer aleatórios e não compactáveis. Portanto, a imagem compactada em xz deve ser aprox. 20% do tamanho bruto.

No entanto, a imagem compactada xz resultante é aproximadamente do mesmo tamanho que o original bruto.

Meu raciocínio está correto?

Por que minha teoria não se traduz em prática?


2
unix.stackexchange.com/a/85880/30851 e tambémdmsetup table | grep allow_discards
frostschutz

Respostas:


8

Sua lógica não está incorreta. Mas isso só é válido se algumas condições forem atendidas.

O comando TRIM , conforme especificado no conjunto de comandos ATA , pode ou não zerar os setores nos quais é emitido.
Na verdade, o padrão se concentra em quais dados devem ser retornados após a emissão do TRIM 1 :

Os seguintes comportamentos são especificados por este padrão para setores que o dispositivo apara (consulte 7.5.3.3):

a) não determinístico - os dados em resposta a uma leitura de um setor aparado podem mudar para cada leitura até que o setor seja gravado pelo host;
b) Leitura determinística após recorte (DRAT) - os dados retornados em resposta a uma leitura de um setor recortado não mudam, mas podem ser diferentes dos dados retornados anteriormente; e
c) Ler zeros após aparar (RZAT) - os dados retornados em resposta a uma leitura do setor aparado são zero.

[...] Para dispositivos de armazenamento DRAT e não determinísticos, os dados retornados em resposta a um comando de leitura para um LBA que foi aparado com êxito:

a) podem ser os dados retornados anteriormente para o LBA especificado;
b) pode ser um padrão gerado pelo dispositivo de armazenamento; e
c) não é dados previamente gravados em um LBA diferente pelo hospedeiro.

Assim, o que o seu dispositivo retorna depois fstrimdepende dos recursos implementados. A menos que ele suporte RZAT, a suposição de que os dados lidos de um dispositivo aparado serão apenas zeros não é válida.

Você pode usar hdparmpara verificar isso:

sudo hdparm -I /dev/sdX | grep -i trim

Eu realizei alguns testes usando dois SSDs sdae sdb. Mesmo fabricante, modelos diferentes, com conformidade ATA diferente:

$ sudo hdparm -i /dev/sdb
 ...
 Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7
 ...

$ sudo hdparm -i /dev/sda
 ...
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7
 ...

Os dois SSDs têm suporte diferente para TRIM:

$ sudo hdparm -I /dev/sda | grep -i trim
           *    Data Set Management TRIM supported (limit 1 block)

$ sudo hdparm -I /dev/sdb | grep -i trim
           *    Data Set Management TRIM supported (limit 8 blocks)
           *    Deterministic read ZEROs after TRIM

Posso confirmar que, após a emissão fstrim, a unidade que suporta "ZEROs de leitura determinística após TRIM" (RZAT) parece realmente zerar a partição em questão quase inteiramente. Por outro lado, a outra unidade parece ter zerado (ou substituído por algum padrão altamente compressível) apenas uma parte menor do espaço liberado.

1 Fonte online: INCITS 529: Tecnologia da informação - Conjunto de comandos ATA / ATAPI - 4 (ACS-4)


Nota sobre o teste:

Conforme indicado por frostschutz nos comentários, uma leitura posterior fstrimpode retornar dados do cache do sistema operacional e não do dispositivo aparado. É, por exemplo, o que aconteceu nesta pergunta .
(Eu também apontaria essa resposta para a mesma pergunta, para um método alternativo para testar o TRIM).

Entre fstrime uma leitura subsequente, pode ser necessário descartar o cache, por exemplo, com:

echo 3 | sudo tee /proc/sys/vm/drop_caches

Dependendo do tamanho da partição com a qual você está reproduzindo, não soltar o cache pode ser suficiente para que seus testes falhem.


Nota sobre sua configuração:

A discardopção de montagem ativa o TRIM contínuo, ou seja, quando os arquivos são excluídos. Não é exigido por fstrim. De fato, o TRIM sob demanda e o TRIM contínuo são duas maneiras distintas de gerenciar as operações do TRIM. Para mais informações, aponto para a unidade de estado sólido no Arch Linux Wiki, que possui uma cobertura detalhada desse assunto.


O Linux também pode estar retornando dados diferentes de zero do cache após o TRIM, mesmo que o SSD os releia como zeros. Este foi um problema com meu teste sim-aparar lá unix.stackexchange.com/a/85880/30851, mas também pode estar relacionado à leitura dos dados brutos antes e depois do TRIM. Portanto, se você não obtiver zero quando espera, descarte os caches por precaução.
Frostschutz 6/02/19

@frostschutz Good point! De alguma forma, eu estava assumindo que, como o OP mencionava um volume "raiz", teria sido grande demais para uma parte significativa dele caber na memória. Mas definitivamente o cache estava no meu caminho durante os testes - que falharam miseravelmente até que eu comecei a descartá-lo. Vou atualizar minha resposta.
fra-san

2

O SSD possui uma camada de criptografia de hardware integrada? Se houver um, os blocos TRIMmed podem ser todos os zeros (ou possivelmente todos) no nível de hardware bruto, mas, como o computador os vê através da camada de criptografia, eles aparecerão como uma tagarelice pseudo-aleatória depois de passar o -zeroes bloco bruto através do processo de descriptografia.

Essa camada de criptografia de hardware teria algumas vantagens:

  • Isso permitiria uma funcionalidade de apagamento de segurança muito rápida: basta que a unidade destrua a chave original usada na camada de criptografia de hardware e substitua-a por uma nova e todos os dados ficarão instantaneamente irrecuperáveis ​​para fins mais práticos.
  • Como todos os dados que atingem o nível de hardware bruto seriam criptografados, seria garantido que parecesse pseudo-aleatório e, portanto, seria amplamente homogêneo. Isso pode ajudar a evitar pontos quentes / frios e simplificar muito a estimativa de desgaste.


0

df relatar espaço livre não implica espaço zero.

triminforma ao dispositivo de armazenamento que os blocos não são usados. Eu não acho que isso os zere.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.