"fstrim"을 사용하면 매번 모든 사용 가능한 블록이 기록되나요?

"fstrim"을 사용하면 매번 모든 사용 가능한 블록이 기록되나요?

LVM 및 dm-crypt가 포함된 500G SSD 디스크가 있는 Ubuntu 18.04 서버가 있습니다. 최근에 디스크에 기록된 바이트 수가 ( vmstat -d또는 에서 보고 한 대로 iostat) 비현실적으로 높다는 사실을 발견했습니다. 시스템 I/OI를 모니터링한 후 fstrim.service런타임 동안 일주일에 한 번씩 디스크 쓰기가 크게 급증하는 것을 발견했습니다.

쓴 바이트 수

fstrim로그를 살펴보면 시스템이 거의 유휴 상태이고 최대 일주일에 10Gb 미만이 기록되었음에도 불구하고 기본적으로 사용 가능한 모든 공간이 디스크에 기록되었다고 매주 실행 보고하는 것 같습니다 .

이것이 예상되는 동작입니까? 나는 fstrim매번 전체 여유 공간을 폐기하는 것이 아니라 마지막 실행 이후 새로운 여유 블록 만 폐기해야 한다고 항상 생각했습니다 . 이로 인해 SSD에 비정상적으로 높은 마모가 발생합니다(디스크에서 보고된 미디어 마모 값으로 판단). 아니면 의 존재와 관련이 있습니까 dm-crypt?

디스크는 TRIM을 지원합니다.

hdparm -I /dev/sda | grep TRIM
  *    Data Set Management TRIM supported (limit 8 blocks)
  *    Deterministic read ZEROs after TRIM

또한 드롭 전달도 활성화되었습니다 dm-crypt.

dmsetup table
  silverbox--vg-swap: 0 19529728 linear 253:0 917964800
  silverbox--vg-root: 0 917962752 linear 253:0 2048
  sda3_crypt: 0 937496576 crypt aes-xts-plain64 00...0 0 8:3 4096 1 allow_discards

답변1

ATA trim명령은 디스크 드라이브의 메타데이터만 변경하며 저장 장치에 대한 저수준 쓰기는 전혀 수행하지 않습니다. 디스크가 deterministic trim트리밍 블록을 지원하는 경우 0이 반환되지만 이는 명령을 내릴 때 셀이 실제로 지워졌기 때문이 아니라 새 메타데이터 상태를 기반으로 컨트롤러에 의해 수행됩니다 trim.

trim불행하게도 내가 아는 모든 커널 통계에서 이 명령은 쓰기로 간주됩니다. 그러니 iostat아니면 주 sar든지/sys/fs/ext4/*/lifetime_write_kbytes실제 쓰기와 가지치기의 합. 당신은 또한 볼 수 있습니다슈퍼유저에 대한 질문.

fstrim일주일에 한 번씩 이 작업을 실행하면 사용되지 않은 전체 디스크 공간이 확보되는 것 같습니다. 예를 들어, 50% 사용된 1TB 디스크가 있는 경우 기본 fstrim활동은 통계에 주당 쓰기 500GB 또는 하루 쓰기 70GB로 표시됩니다.

결론은 다음과 같습니다.쓰기 통계는 특히 적당히 채워진 파일 시스템의 경우 쓰기로 계산되는 정리에 의해 쉽게 지배될 수 있습니다..

관련 정보