본문 바로가기

어떻게 할까/소프트웨어

Linux 에 SSD TRIM 적용 하기.


 Linux 는 항상 HDD 를 단 기기에 쓰다가 SSD 로 변경 하고 나니, TRIM 을 시스템에 적용해야 하는 이유가 생겼습니다. Windows 는 7 부터 지원 되는 TRIM 이 제가 사용하는 Linux Mint 17.3 에서는 수동으로 해야 하는 일이 있어 이를 적용 하고자 했습니다.

 인터넷에서 여러 방법을 찾아 본 결과 다음 몇가지는 기본으로 해야 했는데, 먼저 /etc/fstab 을 수정 해서 지금 사용중인 장치에 discard가 기본으로 적용 되어야 합니다.


먼저 SSD 가 TRM 르 지원 하는지 확인 하기

 먼저 현재 SSD가 TRIM 르 지원 하고, 리눅스가 이걸 인지 했는지 알아 보는 방법이 다음과 같습니다.


sudo hdparm -I /dev/sda | grep TRIM


 이렇게 했을 떄 아래 캡쳐 처럼 TRIM supported 라고 나오면 TRIM 이 인지 되었다 보면 됩니다.



fstab 에 discard 적용으로 TRIM 활성

 리눅스는 TRIM 적용을 /etc/fstab 설정을 통해서 적용 할 수 있습니다.



 방법은 terminal 에서 sudo 를 통해 관리자(root) 권한으로 fstab 르 수정 해야 합니다. 아닐경우 열리기는 하지만 쓸 수 있는 권한이 없어 저장을 실패 합니다. 물론 이 방법은 vi 로 해도 되고, nano 나 gedit 등을 통해서 수정 해도 됩니다. (사람마다 편리한 에디터를 쓰시는걸 추천 드립니다) 일단 저는 vi 가 가장 익숙 하므로 vi 를 사용 했습니다.



 위 캡쳐 화면을 보면 UUID 가 2개가 보입니다만, 윗부분 주석에 장치 명이 보입니다. 보통 일반 환경에서 sda (부팅 되는 HDD 또는 SSD) 이며, 이게 인지는 sdb1, sdb2 등으로 파티션 순서대로 인식 됩니다. 저의 경우는 swap 파티션을 사용하므로 2개가 존재 합니다.

 먼저 수정 해야 하는 부분은 ext4 뒤에 errors=remount-ro 만 되어 있는 부분에 다음 사항을 쉼표를 붙여 가며 다음과 같이 변경 해 줍니다.


errors=remount-ro,discard,noatime,nodiratime

또는

errors=remount-ro,discard


사실 옵션에 noatime, nodiratime 은 크게 TRIM과 상관은 없어 보입니다. ( 파일 및 디렉터리 정리 시간을 조절 하는 부분인데, 실제 써 보면 저건 의미가 없습니다 )


 이렇게 수정하고 나서 저장, 재시작 하고 나면 시스템이 TRIM 을 적용 하게 됩니다만, 문제는 이 TRIM 기능이 스케쥴 성능에 따라 보통 1주에 한번 구동 되게 된다는 점 입니다. 이것은 일반 사용자 OS 로 자주 쓰이는 Windows 와 Linux 가 다른 부분이 만든 차이 입니다. 그래서 일반적인 Windows 처럼 매번 이 TRIM 을 구동 하려면 다음과 같은 방법으로 1분 또는 1시간 에 한번 TRIM 르 구동해 주는 걸 등록 하는 방법이 있습니다.


자동으로 TRIM 을 수동으로 하는 방법



 이전이 fstab 에 등록 한 방법은 시스템에 따라 다르지만, 보통 1주에 한번 TRIM 르 수행 하게 됩니다. (매번 동작 하지 않습니다) 그래서 수동으로 fstrim 을 수행 하면 TRIM 르 수행 합니다. 수행은 fstrim 이며, 뒤에 TRIM 을 수행할 위치로 보통 root path 인 '/' 을 붙여 줍니다. 뒤에 -v 는 verbose 로 수행한 결과를 보여 주는 것 으로 위 캡쳐 이미지 처럼 나오게 됩니다. (저의 경우 이미 TRIM 르 계속 수행 하게 한 상태라 0 바이트 처리 되었다 나옵니다만, 처음 하시는 분은 사용한 기간에 따라 엄청큰 크기가 나오기도 합니다)


주기적으로 수동 TRIM 을 수행하도록 하는 방법

 위의 fstrim 을 매번 내가 하기 귀찮은 저 같은 분들은 root 에 스크립트를 하나 만들고, 이걸 crontab 에 등록 하는 방법을 쓰면 됩니다. crontab 은 리눅스가 정의한 스크립트 또는 명령을 매 시간 또는 날짜 등에 자동으로 수행 하도록 등록 하는 것으로 저는 다음 방법을 사용 했습니다. 이런 경우는 많은 파일을 쓰고 지우고 하는 경우에 효율적이라 하겠습니다. 특히 제가 쓰는 240GB 짜리 SSD 에서는 꽤 필요한 기능 이라 하겠습니다.


 먼저 /root 위치에 dofstrim.sh 를 하나 만듭니다. 당연히 일반 계정에서는 접근해서 만들 수 없으니 sudo 를 써서 하나 만듭니다.



 이제 아래 처럼 작성 해 줍니다.



#!/bin/sh

/sbin/fstrim /


스크립트에서 수행하는 fstrim 을 따로 로그를 출력할 필요가 없으므로 -v 옵션을 쓰지 않았습니다.

파일을 나들고 나서는 다음과 같이 chmod 로 스크립트에 수행 권한을 주도록 합니다.


sudo chmod 777 /root/dofstrim.sh


그리고 crontab 을 수정 해 주도록 합니다.


sudo crontab -e


그러면 여러 에디터중 하나를 선택 하라고 뜨는데, 시스템 파일은 vi 또는 nano 를 쓰는 것이 좋은데, crontab 의 경우는 nano 가 추천 되므로 그냥 nano 를 사용해서 수정 해 줍니다.



저의 경우 다음과 같이 한줄 추가 했습니다.


* */2* * * * /root/dofstrim.sh



매일 2시간 간격으로 한번씩 수행 한다는 조건 입니다.

nano 에서는 저장이 Ctrl+X 리르 눌러 Y 를 눌러 준 다음 엔터를 쳐서 파일을 저장 해 주면 됩니다.


이제 이렇게 하면 자동+수동 모두 적용 됩니다.


 Windows 에서는 자동으로 되는 기능인 반면 Linux 에서는 수동으로 해야 하는 번거러움이 있을 수 있습니다만, 한번 해 두고 나면 잊어 버릴수 있는 기능 이므로 한번은 해 주도록 하는 것이 좋습니다.