TRIM이 SSD에서 작동하는지 독립적으로 검증

TRIM이 SSD에서 작동하는지 독립적으로 검증

열고 싶은 파티션이 있습니다 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 /

, 여유 공간이 80% df인 것으로 보입니다 . /이는 Windows에서 /dev/sda1디스크의 80%가 이진수 0임을 의미합니다.

이미지를 복제하면cat

cat /dev/sda1 > sda1.img

그리고 압축된 이미지의 경우 xz디스크의 모든 0이 압축되기를 원합니다. 디스크에 있는 데이터의 20%가 암호화되어 있으므로 무작위로 나타나며 압축할 수 없습니다. 따라서 xz로 압축된 이미지는 대략 100배가 되어야 합니다. 원본 크기의 20%입니다.

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

내 추론이 맞나요?

왜 내 이론이 실천으로 옮겨질 수 없나요?

답변1

당신의 논리는 틀리지 않았습니다. 그러나 특정 조건이 충족되는 경우에만 유효합니다.

이것트림 명령, 지정된대로ATA 명령 세트, 발행된 부문을 0으로 만들 수도 있고 그렇지 않을 수도 있습니다.
실제로 표준은 TRIM이 발행 된 후 어떤 데이터가 반환되어야 하는지에 중점을 둡니다 1.

이 표준은 장치 정리된 섹터에 대해 다음 동작을 지정합니다(7.5.3.3 참조).

a) 비결정적 – 트리밍된 섹터의 읽기에 대한 응답으로 호스트가 해당 섹터에 쓸 때까지 각 읽기마다 데이터가 변경될 수 있습니다.
b) 트리밍 후 결정론적 읽기(DRAT) – 읽기에 대한 응답으로 섹터가 반환될 때 데이터가 반환됩니다. 잘려진 것은 변경되지 않지만 이전에 반환된 데이터와 다를 수 있습니다. c
) 트림 후 0 읽기(RZAT) - 잘린 섹터 읽기에 대한 응답으로 반환된 데이터는 0입니다.

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

a) 이전에 반환된 특정 LBA의 데이터일 수 있습니다.
b) 저장 장치에서 생성된 패턴일 수 있습니다. c
) 호스트가 이전에 다른 LBA에 쓴 데이터가 아닐 수 있습니다.

따라서 장치가 반환하는 내용은 fstrim구현하는 기능에 따라 달라집니다. RZAT를 지원하지 않는 한 가지치기 장치에서 읽은 데이터가 0일 뿐이라는 가정은 사실이 아닙니다.

hdparm다음 방법을 사용하여 확인할 수 있습니다 .

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

저는 sda동일한 sdb제조업체, 서로 다른 모델, 서로 다른 ATA 규격을 갖춘 두 개의 SSD를 사용하여 몇 가지 테스트를 수행했습니다.

$ 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"RZAT(Deterministic Read Zeroing After TRIM)"를 지원하는 드라이브가 문제 발생 후 실제로 문제의 파티션을 거의 완전히 0으로 만드는 것으로 나타나는 것을 확인할 수 있습니다 . 대신, 다른 드라이브는 여유 공간의 작은 부분만 0으로 만드는(또는 압축률이 높은 모드에서 교체하는) 것처럼 보입니다.

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


테스트 참고사항:

지적한대로프로스트슈츠참고로 후속 읽기에서는 fstrim정리된 장치가 아닌 운영 체제 캐시에서 데이터를 반환할 수 있습니다. 예를 들어, 다음과 같은 일이 발생합니다.이 문제.
(나도 지적하고 싶다.이 답변TRIM에 대한 동일한 질문 테스트 대안의 경우).

다음 읽기 사이에 캐시를 삭제해야 할 수도 있습니다 fstrim. 예를 들면 다음과 같습니다.

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

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


설정에 주의하세요.

마운트 discard옵션을 사용하면 지속적인 TRIM이 가능합니다. 즉, 파일이 언제든지 삭제됩니다. 필수 사항은 아닙니다 fstrim. 실제로 주문형 TRIM과 지속적인 TRIM은 TRIM 작업을 관리하는 두 가지 다른 방법입니다. 더 많은 정보를 위해 제가 지적하고 싶은 것은SSDArch Linux Wiki에 이에 대한 자세한 보고서가 있습니다.

답변2

SSD에는 하드웨어 암호화 계층이 내장되어 있나요? 하나가 있는 경우 TRIMmed 블록은 원시 하드웨어 수준에서 모두 0(또는 모두 1)일 수 있지만 컴퓨터는 암호화 계층을 통해 이를 확인하므로 모든 암호화 계층을 통과한 후에 의사 무작위 횡설수설로 나타납니다. . - 복호화 과정을 통해 원본 블록을 제로화합니다.

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

  • 매우 빠른 보안 삭제 기능이 가능합니다. 드라이브가 하드웨어 암호화 계층에 사용된 원래 키를 파기하고 새 키로 교체하면 대부분의 실용적인 목적을 위해 모든 데이터를 즉시 복구할 수 없습니다.
  • 원시 하드웨어 수준에 도달하는 모든 데이터는 암호화되므로 의사 무작위로 나타나므로 대체로 동질적입니다. 이는 뜨겁거나 차가운 지점을 피하고 마모 추정을 크게 단순화하는 데 도움이 될 수 있습니다.

답변3

폐기는 0과 동일하지 않습니다.

cryptsetup을 사용하여 제로화하려면 fs를 축소한 다음 crypt 블록을 축소하고 사용되지 않은 볼륨 공간을 추가하면 됩니다.

가지치기가 효과적인지 알고 싶다면, 많이 사용한 후 속도 테스트를 하는 것이 지표가 되어야 합니다.

https://linux.die.net/man/8/fstrim https://en.m.wikipedia.org/wiki/Trim_(계산)

답변4

df여유 공간을 보고한다고 해서 공간이 비워졌다는 의미는 아닙니다.

trim해당 블록이 사용되지 않음을 저장 장치에 알립니다. 나는 그것이 그것들을 0으로 만들 것이라고 생각하지 않습니다.

관련 정보