Motive

최근 연구실의 RAID 서버 한 대가 사망해서 복구에 시간이 소요되었다. 원인은 OS가 설치된 하드의 사망이었고 하드를 교체하고 OS를 새로 설치한 후 하드웨어 RAID를 그대로 마운트해보니 다행히 RAID는 아무 이상이 없었고 데이터 손실도 없었다. 앞으로 이런 일이 또 발생하지 말란 법은 없으므로 서버의 하드디스크 등의 상태를 주기적으로 체크하는 것이 좋아보인다.

https://en.wikipedia.org/wiki/S.M.A.R.T.

이미 시중에 판매되고 있는 대부분의 (사실상 전부) HDD나 SSD는 S.M.A.R.T.라는 기능을 가지고 있고 이 기능을 통해 쉽게 드라이브의 상태를 모니터링할 수 있다. 이 기능을 그대로 사용만 하면 된다.

환경

– 작업 노드: 그냥 평범한 서버 컴퓨터
– OS: Ubuntu 18.04 혹은 Scientific Linux CERN 5 혹은 6

참고 링크

https://prefetch.net/articles/diskdrives.smart.html

Tool 설치

서버에 이미 binary가 있는지 확인한다. 주로 사용되는 툴은 smartdsmartctl이다. 보통은 /usr/sbin 경로에 있음.

$ which smartd
/usr/sbin/smartd
$ which smartctl
/usr/sbin/smartctl

만약 설치가 되어있지 않다면 패키지 매니저를 통해 설치하면 됨. 설치가 끝나면 smartd 데몬이 자동으로 실행될 것이다. 웬만한 이들은 다 알겠지만 Redhat 계열에선 yum을 쓰고, Debian 계열에선 apt를 쓰면 된다.

$ sudo yum install smartmontools
$ sudo apt install smartmontools

머신이 오프라인 상태거나, 여의치 않은 상황으로 패키지 매니저를 쓰지 못하는 경우에는 패키지나 소스를 다운받아 직접 설치해야 한다. 위의 참고 링크를 따라하면 됨.

smartd

보통 패키지 매니저에 의해 툴이 설치되면 자동으로 smartd 데몬이 서비스에 등록되고 실행된다. 이 데몬은 디스크를 모니터링하는 데몬으로 자세한 설명은 man smartd를 통해 확인할 수 있다. 주기적으로 드라이브의 상태 로그를 남기거나, 사용자가 원하는 시간에 드라이브 테스트를 실행시키는 등의 용도로 쓰인다. 설정 파일은 보통 /etc/smartd.conf이며, 주기적으로 저장되는 드라이브 상태 로그는 /var/lib/smartmontools 경로에 놓인다. 얼마전에 교체한 따끈따끈한 삼성 SSD의 로그 예시를 아래 첨부해본다. 로그 파일은 csv 형식으로, 각 값은 세미콜론으로 분리되어 있다. 숫자의 의미는 후술함.

2019-08-13 22:19:29;    5;100;0;    9;99;1315;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;70;30;  195;200;0;  199;100;0;  235;99;1;   241;99;361824046;
 2019-08-13 22:49:28;    5;100;0;    9;99;1315;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;70;30;  195;200;0;  199;100;0;  235;99;1;   241;99;361854614;
 2019-08-13 23:19:29;    5;100;0;    9;99;1316;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;71;29;  195;200;0;  199;100;0;  235;99;1;   241;99;361893870;
 2019-08-13 23:49:28;    5;100;0;    9;99;1316;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;72;28;  195;200;0;  199;100;0;  235;99;1;   241;99;361928142;
 2019-08-14 00:19:28;    5;100;0;    9;99;1317;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;72;28;  195;200;0;  199;100;0;  235;99;1;   241;99;361968110;
 2019-08-14 00:49:29;    5;100;0;    9;99;1317;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;72;28;  195;200;0;  199;100;0;  235;99;1;   241;99;362007254;
 2019-08-14 01:19:28;    5;100;0;    9;99;1318;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;72;28;  195;200;0;  199;100;0;  235;99;1;   241;99;364350454;
 2019-08-14 01:49:28;    5;100;0;    9;99;1318;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;72;28;  195;200;0;  199;100;0;  235;99;1;   241;99;364376318;
 2019-08-14 02:19:29;    5;100;0;    9;99;1319;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;73;27;  195;200;0;  199;100;0;  235;99;1;   241;99;364408494;
 2019-08-14 02:49:28;    5;100;0;    9;99;1319;  12;99;4;    177;100;0;  179;100;0;  181;100;0;  182;100;0;  183;100;0;  187;100;0;  190;72;28;  195;200;0;  199;100;0;  235;99;1;   241;99;364679478;

기본설정으로는 로그만 기록할 뿐 드라이브 검사를 돌리지는 않는 것 같다. 한두 달에 한 번 정도는 드라이브 검사를 돌려볼까도 생각해봤는데 어쨌든 검사도 드라이브에 로드를 주니까 자주 해봐야 별로 좋을 것 같지는 않아서 스케줄링을 하지는 않았음. 물론 언제든 마음이 바뀔 수 있다.

smartctl

smartd이 백그라운드에서 자기 혼자 드라이브를 감시한다면, smartctl은 유저가 직접 사용하는 툴로 언제든 드라이브 상태를 확인하고 검사할 수 있다. 사용은 smartctl [옵션] [장치] 같이 쓰이며 man smartctl 또는 smartctl -h를 통해 사용법과 옵션 등을 확인할 수 있다. 자주 쓰이는 옵션이 몇 가지 있다.

기본적으로 모든 정보를 확인 할 때는 -a(--all) 옵션을 많이 사용한다.

$ sudo smartctl -a /dev/sda

-a 옵션은 출력결과가 좀 길어지기 때문에 나는 보통 우선 -i 옵션을 통해 드라이브의 정보부터 확인한다.

$ sudo smartctl -i /dev/sda
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-5.0.0-23-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     Samsung SSD 860 PRO 512GB
Serial Number:    ???????????????
LU WWN Device Id: ? ?????? ?????????
Firmware Version: RVM01B6Q
User Capacity:    512,110,190,592 bytes [512 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   Unknown(0x09fc), ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Wed Aug 14 12:01:03 2019 KST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

(삼성 제품이 데이터베이스에 없다니. smartmontools 개발자들 이거 안되겠네.) 간단한 하드디스크의 상태를 확인 할 때는 -H(--health) 옵션을 사용한다.

$ sudo smartctl -H /dev/sda
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-5.0.0-23-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

산지 얼마 안된 삼성 SSD라 그런지 특별한 문제는 없다. 구체적인 드라이브의 속성(attributes)은 -A 옵션으로 출력한다. 실제 드라이브의 상태를 직접적으로 표현해주는 값들이다.

$ sudo smartctl -A /dev/sda
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-5.0.0-23-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   099   099   000    Old_age   Always       -       1320
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       4
177 Wear_Leveling_Count     0x0013   100   100   000    Pre-fail  Always       -       0
179 Used_Rsvd_Blk_Cnt_Tot   0x0013   100   100   010    Pre-fail  Always       -       0
181 Program_Fail_Cnt_Total  0x0032   100   100   010    Old_age   Always       -       0
182 Erase_Fail_Count_Total  0x0032   100   100   010    Old_age   Always       -       0
183 Runtime_Bad_Block       0x0013   100   100   010    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0032   072   062   000    Old_age   Always       -       28
195 Hardware_ECC_Recovered  0x001a   200   200   000    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x003e   100   100   000    Old_age   Always       -       0
235 Unknown_Attribute       0x0012   099   099   000    Old_age   Always       -       1
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       364715870

총 14개의 값이 출력되었고, 9번 값에 의하면 드라이브는 1320시간 동안 켜져있었고 날짜로 환산하면 55일이다. 다른 여러 값들의 의미는 https://en.wikipedia.org/wiki/S.M.A.R.T. 에서 확인할 수 있다. 위키피디아 페이지에는 attribute들 중 드라이브 상태에 치명적일 수 있는 것들이 표시되어 있는데 대표적으로 5번, 10번, 184번 등이다. 이것들이 0이 아니라 1이라도 생기기 시작하면 그 HDD나 SSD는 즉시 교체하는 것이 바람직할 것이다.

One Step More

이러한 smartdsmartctl은 디스크를 검사하거나 상태를 확인하는 데까지만 할 수 있고 실시간 모니터링을 좀 더 편하고 직관적으로 하려면 추가 작업이 필요해 보인다. 이 부분은 다음 포스팅에서 계속.

카테고리: Linux

0개의 댓글

답글 남기기

Avatar placeholder