SSD 트림 적용을 위한 단계입니다.
먼저 HDD와 SSD의 차이점입니다. 가장 쉽게 설명한 글입니다.
HDD(Hard Disk Drive)는 디스크라고 부르는 원형 금속판에 데이터를 저장하지만, SSD (Solid-State Drive)는 NAND flash 라는 메모리에 데이터를 저장한다. DRAM 에 저장하는 특수한 저장장치도 역시 SSD 라고 부르기도 하는데, 일반인이 구경할 일은 없다.1 그러므로, SSD 라 하면 flash 에 저장하는 것만 생각해도 무방하다.SSD는 읽고 쓰기가 아주 빠르고, 물리적 충격에 강하고, 가볍고, 전력 소모량이 적으며, 사이즈를 줄이는데도 용이한 점 등등 수많은 장점이 있다. 단, 용량에 비해 무지무지 비싸다는 단 하나의 단점만을 가지고 있다. 현재 2TB HDD 가 약 15만원인데, 64GB SSD 역시 그정도 가격이다. 즉, SSD 가 HDD 에 비해서 30 배 정도 비싼 셈이다.
SSD 는 저장 매체의 특성으로 쓰기(좀더 정확히는 다시쓰기,rewrite) 에서의 동작이 다르다. HDD 는 처음에 한번 포맷을 해두면, 데이터를 몇번이나 덮어서 다시 써도 문제가 없다. 그래서 데이터를 쓴 뒤, 삭제하기 위해서는 삭제하겠다고 마크만 해두면 되며, 그 위에 다시 다른 데이터를 써버리면 된다.
HDD 의 다시쓰기 방식:데이터 쓰기 -> 삭제한다는 마크 표시 -> 그 위에 덮어쓰기
하지만, SSD 는 데이터를 다시 쓰기 위해서, 반드시 그 영역을 깨끗히 삭제해주는 절차가 필요하다. 포맷 자체가 삭제하는 동작을 해주므로, 처음 사용시에는 문제가 없으나, 데이터를 지우고 다시 쓰는 경우에는 삭제해주는 작업를 해야 해서, 쓰기 속도가 느려진다. 하지만, 그래도 HDD 보다 빠르다.
SSD 의 다시쓰기 방식:데이터 쓰기 -> 삭제한다는 마크 표시 -> 데이터 삭제 -> 그 위에 다시 쓰기
~]# uname -a /* * 커널 3.3 이상 nvme SSD 지원 */ ~]# hdparm -I /dev/sda | grep TRIM /* * Data Set Management TRIM supported 이렇게 나오면 트림지원 */ ~]# vi /etc/fstab /*SSD의 드라이브를 'noatime,nodiratime,discard'로 변경*/ /* discard 옵션은 파일이 지워질 때마다 TRIM 이 실행되도록 해 주는 옵션 */ /dev/sda /ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
다음 수동으로 TRIM 해 보려면 fstrim / -V 해보시면 됨.
IO스케줄러가 대단히 중요 해 진다고 하는데 각 스케줄러의 성능을 측정하고 설정바람.
~]# cat /sys/block/{DEVICE-NAME}/queue/scheduler ~]# cat /sys/block/sda/queue/scheduler /* 변경은 */ ~]# echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler ~]# echo noop > /sys/block/hda/queue/scheduler
스왑조정도 생각 해 보고.
마지막으로 불필요하게 SSD에 쓰는 것을 막기 위하여 메모리파일시스템인 tmpf를 이용하는 것도 방법
~]# vi /etc/fatab tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/spool tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0 /* 필요한 경우 */ tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0
보너스 UUID 찾기
# lsblk -f
systemd 서비스 이용.
fstrim.service 또는, fstrim.timer 를 켜주면 됩니다. 아래 명령어를 이용
부팅할 때 마다 TRIM 하려면, fstrim.service 를 켭니다.
systemctl enable fstrim.service
1주일에 한번씩 TRIM 하려면, fstrim.timer 를 켭니다.
systemctl enable fstrim.timer