TRIM이 실제로 SSD에서 작동하는지 독립적으로 확인


13

나는 luksOpen으로 LUKS파티션 /dev/sda1을 가지고 있습니다 --allow-discards:

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

그런 다음 옵션을 사용 하여 ext4파일 시스템 을 마운트하십시오 discard.

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

그런 다음 마운트 된 파티션의 여유 공간을 정리합니다.

fstrim -v /

사용 df하면 /80 %의 여유 공간이 있습니다. 이는 /dev/sda1디스크의 80 %가 이진 0 이라는 것을 의미합니다 .

내가 이미지를 복제하면 cat

cat /dev/sda1 > sda1.img

를 사용하여 이미지를 압축하면 xz디스크의 모든 0이 압축 될 것으로 예상됩니다. 디스크에있는 데이터의 20 %가 암호화되므로 무작위로 보이고 압축 할 수 없어야합니다. 따라서 xz 압축 이미지는 aprox 여야합니다. 원시 크기의 20 %

그러나 결과 xz 압축 이미지는 원본 이미지와 크기가 거의 같습니다.

내 추론이 맞습니까?

왜 내 이론이 실용화되지 않습니까?


2
unix.stackexchange.com/a/85880/30851dmsetup table | grep allow_discards
frostschutz

답변:


8

당신의 논리가 올바르지 않습니다. 그러나 일부 조건이 충족되는 경우에만 유효합니다.

TRIM 명령 에 지정된대로, ATA 명령 세트 , 또는이에 대해 실행되는 섹터를 제로되지 않을 수 있습니다.
사실, 어떤 데이터에 대한 표준 초점을 맞추고은 TRIM이 발행 된 후 반환하는 1 :

장치가 다듬는 섹터에 대해이 표준에 따라 다음 동작이 지정됩니다 (7.5.3.3 참조).

a) 비결정론 적-트림 된 섹터로부터의 리드에 응답하여 데이터가 호스트에 의해 섹터가 쓰여질 때까지 각각의 리드마다 변경 될 수있다;
b) DRAT (Deterministic Read After Trim)-트림 된 섹터의 읽기에 대한 응답으로 반환 된 데이터는 변경되지 않지만 이전에 반환 된 데이터와 다를 수 있습니다. 및
c) 읽기를 제로) 트림 (RZAT 후 - 트리밍 섹터의 판독에 응답하여 리턴 된 데이터가 제로이다.

[...] DRAT 및 비 결정적 저장 장치의 경우 데이터가 성공적으로 잘린 LBA에 대한 읽기 명령에 대한 응답으로 반환되었습니다.

a) 지정된 LBA에 대해 이전에 반환 된 데이터 일 수 있습니다.
b) 저장 장치에 의해 생성 된 패턴 일 수 있고; 및
c)는 이전에 호스트가 다른 LBA에 기록 된 데이터가 아니다.

따라서 장치가 반환 한 내용 fstrim은 구현하는 기능에 따라 다릅니다. RZAT를 지원하지 않는 한 잘린 장치에서 읽은 데이터가 0 일 것이라는 가정은 유지되지 않습니다.

당신이 사용할 수있는 hdparm이를 확인 데 .

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

두 개의 SSD를 사용하여 몇 가지 테스트를 수행 sda했으며sdb . 동일한 ATA 규격을 가진 동일한 제조업체, 다른 모델 :

$ 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
 ...

두 SSD는 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

발행 fstrim후 "TRIM 이후 결정적 읽기 ZEROs"(RZAT)를 지원하는 드라이브가 실제로 관련 파티션을 거의 완전히 제로화 한 것으로 보입니다. 반대로, 다른 드라이브는 여유 공간의 작은 부분 만 제로화했거나 압축률이 높은 일부 패턴으로 교체 한 것 같습니다.

1 온라인 출처 : INCITS 529 : 정보 기술-ATA / ATAPI 명령 세트-4 (ACS-4)


테스트에 대한 참고 사항 :

주석에서 frostschutz 가 지적한 바와 같이 읽은 후에 fstrim는 잘린 장치가 아닌 운영 체제 캐시에서 데이터를 반환 할 수 있습니다. 예를 들어, 이 qustion 에서 일어난 일입니다 .
(또한 이 답변을 가리킬 것입니다 TRIM 테스트를위한 대체 방법에 대한 동일한 질문 을 ).

fstrim다음 읽기 사이 에서 캐시를 삭제해야 할 수도 있습니다 (예 :

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

사용중인 파티션의 크기에 따라 캐시를 삭제하지 않으면 테스트에 실패 할 수 있습니다.


설정에 대한 참고 사항 :

discard옵션은 언제든지 파일이 삭제됩니다 즉, 연속 TRIM을 가능하게 마운트합니다. 필요하지 않습니다 fstrim. 실제로 주문형 TRIM과 연속 TRIM은 TRIM 작업을 관리하는 두 가지 고유 한 방법입니다. 자세한 내용 은 Arch Linux Wiki의 솔리드 스테이트 드라이브 를 가리키며이 문제에 대한 자세한 내용을 다루고 있습니다.


SSD는 데이터를 0으로 다시 읽더라도 Linux는 TRIM 이후 캐시에서 0이 아닌 데이터를 반환 할 수도 있습니다. 이것은 unix.stackexchange.com/a/85880/30851에 대한 yes-trim-test 문제 이지만 TRIM 전후 원시 데이터 읽기와 관련이있을 수 있습니다. 따라서 예상 할 때 0이 아닌 경우를 대비하여 캐시를 삭제하십시오.
frostschutz

@frostschutz 좋은 지적! OP가 "루트"볼륨을 언급 했으므로 메모리의 상당 부분을 메모리에 맞추기에는 너무 클 것입니다. 그러나 테스트 중에 캐시가 제대로 작동하지 않아서 떨어 뜨릴 때까지 비참하게 실패했습니다. 답변을 업데이트하겠습니다.
fra-san

2

SSD에 내장 하드웨어 암호화 계층이 있습니까? 하나가 있으면 TRIMmed 블록은 원시 하드웨어 수준에서 모두 0 (또는 가능하면 모두 1) 일 수 있지만 컴퓨터는 암호화 계층을 통해 블록을 볼 수 있으므로 모두 통과 한 후 의사 랜덤 횡설수설로 나타납니다. -복호화 프로세스를 통해 원시 블록을 0으로 만듭니다.

이러한 하드웨어 암호화 계층에는 몇 가지 장점이 있습니다.

  • 매우 빠른 보안 삭제 기능이 가능합니다. 드라이브가 하드웨어 암호화 계층에 사용 된 원래 키를 파괴하고 새로운 키로 교체하면 모든 실제 데이터를 즉시 복구 할 수 없게됩니다.
  • 원시 하드웨어 수준에 도달하는 모든 데이터가 암호화되므로 의사 난수로 보이게되므로 크게 균일합니다. 이렇게하면 열점 / 냉점을 피하고 마모 추정을 크게 단순화 할 수 있습니다.


0

df 여유 공간을보고한다고해서 공간이 0이되는 것은 아닙니다.

trim저장 장치에 블록이 사용되지 않음을 알려줍니다. 나는 이것이 제로라고 생각하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.