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