ZFS trim 실행 및 autotrim 설정하기

by ANTIBIOTICS posted Nov 03, 2022
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

특정 디스크 블록이 한번이라도 쓰여진(written) 적이 있다면 SSD 컨트롤러는 해당 블록을 사용중(in use)으로 인식합니다. 아무리 여유 공간이 많더라도 어느 순간에는 모든 블록이 사용중이며 접근할 수 없는 (in use and unavailable) 상태가 되며, 일부 블록에만 계속해서 덮어쓰기가 발생하여 SSD의 쓰기 성능과 수명에 악영향을 끼칩니다.

 

trim을 실행하면 커널은 현재 사용되지 않는 블록의 목록을 SSD 컨트롤러에게 전달하며, 컨트롤러는 이 블록을 페이지로 집계하여 제로필(zero-filling)합니다.

 

1.png

 

zpool status -t [ pool 이름 ]

 

현재 pool 상태를 조회합니다.

해당 pool에서 trim이 실행된 적이 없다면 untrimmed가 출력됩니다.

 

 

2.png

3.png

 

zpool trim [ pool 이름 ]

 

수동으로 trim을 실행합니다.

해당 pool 상태를 조회하면 위 사진과 같이 trim 진행상황을 알 수 있습니다.

 

 

4.png

 

zpool set autotrim=on [ pool 이름 ]

 

자동 trim은 비활성화되어 있으나 위와 같이 활성화할 수 있습니다.

 

자동 trim을 사용할 경우 적은 수의 디스크 블록을 자주 관리해야 하므로 SSD 컨트롤러에 부담이 됩니다. 특히 swap 메모리와 같이 잦은 빈도로 I/O가 발생하는 경우 오히려 상당한 성능 저하가 발생할 수 있습니다.

 

그러므로 정기적인 수동 trim이 권장됩니다. 수동 trim을 cron job으로 등록하여 매주 특정 요일에 실행하는 방법을 고려해볼 수 있습니다.

 

0 4 * * 0 /sbin/zpool trim rpool

(매주 일요일 새벽 4시에 trim을 실행하는 예시)