SSD 에서 Trim 기능 사용하기

NAS 구성 및 설치 중간쯤에서 간단히 Trim 기능 사용하는 걸 적어놨는데, 좀 더 정리해보자…

먼저 자신의 시스템이 Trim 을 지원하는지부터 확인해 보자.

대개는 /etc/fstab 파일에

UUID=00c10849-6c91-4961-a477-f0fb9c88c417 /boot   ext4    discard,noatime,nodiration,errors=remount-ro  0 1
UUID=1abc2139-0cac-43d3-a284-b1b3d5e0ddf3 /       ext4    discard,noatime,nodiration,errors=remount-ro  0 1

로 입력이 되어 있을 거다. discard … 이게 자동으로 trim 을 켜주는 옵션이다.

hdparm -I /dev/sda | grep trim

이라고 root 권한으로 명령어를 입력했을 때

*    Data Set Management TRIM supported (limit 8 blocks)

라는 식으로 TRIM supported 라는 문구가 보인다면 Trim 을 지원하는 거다. 물론 SSD 위치에 따라서 /dev/sdb, /dev/sdc 등이 될 수는 있다.

일단 저렇게 메시지가 나왔다면 간단한 테스트를 해보자.

일단 파일을 만들어 보자.

# seq 1 1000 > test.txt
# sync

섹터단위로 읽어 보자.

# hdparm --fibmap test.txt

test.txt:
 filesystem blocksize 4096, begins at LBA 63; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0   12345678   12347890          8

# hdparm --read-sector 12345678 /dev/sda

/dev/sda:
reading sector 12345678: succeeded
0a31 0a32 0a33 0a34 0a35 0a36 0a37 0a38
...

정상적으로 저장됐다.

파일을 지워보자.

# rm -f test.txt
# sync && sync && sync && sleep 10

Trim 이 제대로 작동하는지 확인하자.

# hdparm --read-sector 12345678 /dev/sda

/dev/sda:
reading sector 12345678: succeeded
0000 0000 0000 0000 0000 0000 
...

이렇게 0000 이 나오면 정상적으로 작동하는 거고, 다른 값이 나오면 제대로 작동안하는 거다.

그 이유는 여러가지가 있는데, 대개는 커널에서 Trim 을 지원안하는 게 그 이유다. 커널 컴파일을 하면 되겠지만, 귀찮고 …

# fstrim -v /
/: 1234567890123 bytes were trimmed.
# fstrim -v /
/: 0 bytes were trimmed.

구글링에서 찾을 수 있는 몇몇 문서에서는 fstrim 을 우분투에서만 지원한다고 얘기하는데, CentOS 에서도 잘 지원한다.

fstrim 첫번째 명령에서는 trim 이 안됐었으니 당연히 큰 값이 나오는 거고, 두번째에서는 조금 전에 trim 을 했으니 0이라고 나온다.

이걸 cron 으로 돌리자..

사용량이 아주 많다면 모를까, 하루에 한번 정도면 될 것 같다. 만일 사용량이 많다면 시간을 좀 더 자주 하게 만들어 주면 된다.

하루에 한번이니 /etc/cron.daily 에다가 trim 이라는 파일 하나 만들자. 그 내용은 ..

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
/sbin/fstrim -v / >> $LOG

물론 SSD 파티션이 여러개라면 마지막 줄에 뒤에다가 fstrim -v /home » $LOG, fstrim -v /var » $LOG 등을 덧붙이면 된다. 그리고

chmod +x /etc/cron.daily/trim

이렇게 하면 설정에 따라 다르겠지만 일반적으로는 새벽 4시에 fstrim 이 돌면서 trim 작업을 해준다.


2016/01/18 akpil