smartctl 을 이용한 디스크 점검하기

 

 

for i in `fdisk -l | grep "Disk\ \/dev\/" | awk '{print $2}' | awk -F ":|/" '{print $3}'`
##디스크 디바이스명 다 불러와서

 

###SSD / SATA&SAS 에 따라

DISK_CLASS=`cat /sys/block/$i/queue/rotational`

###0이면 SSD 1이면 SATA

if [ $DISK_CLASS = 0 ];then

elif [ $DISK_CLASS = 1 ];then

 

레이드 컨트롤러 장착 여부에 따라 디스크 체크하는 스크립트를 만들기

 

 

 

 

SSD 디스크 점검 사항
Power_On_Hours / 디스크 사용 시간

Wear_Leveling_Count / 모든 셀에 데이터가 1회 기록되면 카운트 +1
ㄴ즉 512GB 짜리 SSD에 있는 모든 저장 공간에 512GB 전체(실 사용 용량으로 치면 한...480GB 되나 ?)에 데이터가 한번씩 씌어지면 1회로 치는듯 

Airflow_Temperature_Cel / 디스크 온도

Reallocated_Sector_Ct / 섹터에 문제가 생겨서 스페어 영역으로 섹터를 이동시켰따... 즉 베드섹터
Total_LBAs_Written / 디스크에 총 write 된 사용량

 

###필드 설명###
VALUE : 속성의 현재 값(보통 백분율 단위)

WORST : 속성이 여지껏 가장 안좋았던 값

THRESH : 속성이 해당 값이 되면 안된다 하는 값 (임계값)

RAW_VALUE : 백분율로 하지 않은 현재 값

 
 

1.Power_On_Hours / 디스크 사용 시간

  9 Power_On_Hours          0x0032   098   098   000    Old_age   Always       -       6714

여기서 raw_value는 시간단위이다. 6714시간 사용했다는 뜻
여기서는 value 값을 보면된다.

THRESH 가 0 이고 VALUE 는 98 이다. 아직 여유 많다. 한 5~10 미만으로 내려가면 알람오게 설정할 예정

 

 

2.Wear_Leveling_Count / 모든 셀에 데이터가 1회 기록되면 카운트 +1

177 Wear_Leveling_Count     0x0013   099   099   000    Pre-fail  Always       -       19

이것도 RAW_VALUE는 볼 필요 없고 VALUE 만 보면 된다.

099 니까 이것도 5~10미만으로 내려가면 알람오게 설정

 

 

3.Airflow_Temperature_Cel / 디스크 온도

190 Airflow_Temperature_Cel 0x0032   073   067   000    Old_age   Always       -       27

이것도 뭐 .. VALUE 10미만이면 알람오게
 
4.Reallocated_Sector_Ct / 섹터에 문제가 생겨서 스페어 영역으로 섹터를 이동시켰따... 즉 베드섹터

  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
RAW_VALUE 가 0 이 아니라면 디스크 교체해야함

 

5.Total_LBAs_Written / 디스크에 총 write 된 사용량

241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       6174993057

이것도 VALUE 10미만이면 알람오게 하면 되나..?

정확히는 raw_value를 기준으로 계산하는법이 있다.
https://brunch.co.kr/@lars/3 요사이트에 설명 잘 돼있음
대충 요약하자면... 디스크의 총 WRITE 된 용량을 계산하고 해당 디스크가 어느정도 용량의 WRITE를 워런티? 해주는지... 말그대로 수명이다.

삼성 SSD 256기가 기준으로
RAW_VALUE(ex..6174993057) * 512 / 1024 * 1024 * 1024 * 1024 > 300 일경우 문제가 생긴다.
raw_value * 512 = 현재 write 된 사용량과 거기에 섹터 사이즈를 곱해서 실제로 write 된 용량을 확인하고..
그다음 1024 ^4 을 나눠서TB 로 계산하기 위해서다.
삼성 ssd 256 860 pro 는 300TBW를 보장한다고 한다. 300TBW란 300테라(T) 바이트(B)의 write(W)를 보장한다는 뜻이다.

 

https://www.samsung.com/semiconductor/minisite/ssd/product/consumer/860pro/ 에서 확인해보면 아래와 같다.

Warranty

  • MZ-76P256BW (256 GB)
  • 5 Years or 300 TBW
  •  
  • MZ-76P512BW (512 GB)
  • 5 Years or 600 TBW
  •  
  • MZ-76P1T0BW (1,024 GB)
  • 5 Years or 1,200 TBW
  • MZ-76P2T0BW (2,048 GB)
  • 5 Years or 2,400 TBW
  •  
  • MZ-76P4T0BW (4,096 GB)
  • 5 Year or 4,800 TBW

 

 

 

 

 

 

 

 

 

 

실제로 계산해보면... 터무니없는 용량이다... 아무리 쓰기가 빈번한 디스크라쳐도... 이걸 찾아보면서 굳이 이 스크립트를 만드는게 의미가 있는걸까 싶긴한데.... 그래도 앞으로 5년 10년 사용하면 문제가 생길테니까.. 그외 뭐 사용 시간이라던지 온도라던지... 이걸 굳이 스크립트로 짤 필요가 있나란 생각도 잠깐 들었는데 이 서버를 앞으로 3년 5년 사용하다보면 문제 생길테니까 미리 만들어놓는게 좋겠습니다.

 

 

그 외에 추가로 봐야할 속성들은..

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

ㄴ 삭제 실패 갯수, 아직 한개도 없네요. 없는게 정상

위 두개도 더 봐주면 좋겠네요.

 

ssd 끝

#####

sata 시작

 

SATA 점검해야할 송성

 

Reallocated_Sector_Ct = SSD에서 설명함, 동일함

Seek_Error_Rate = 탐색 지연 오류 비율 이라한다. 정상일경우 0

Spin_Retry_Count = 오류로 멈추었따가 구동된 횟수  정상일경우 0

Current_Pending_Sector = 명령시간 초과 횟수 정상일경우 0

Offline_Uncorrectable = 수정 할 수 없는 에러 발생, 정상일경우 0

UDMA_CRC_Error_Count = 케이블 뷸량, 파티션간 에러, 정상일경우 0

ㄴ이거는 몇몇 서버에서 0 아닌서버들이 적잖이 있음, 이런 서버는 디스크, 혹은 케이블등 점검이 필요한 것같다.

 

전부 raw_value 기준이다.

 

 

그 외에... 

 

Raw_Read_Error_Rate = 디스크raw단에서 데이터 읽는 과정에서 문제가 있을 경우(sata가 뺑글뺑글 돌면서 물리적인 표면에서 읽을 때 문제가 있을경우인듯) 물리적인 부분이라 물리적인 충격에 의해 발생한다고 함, 이거는 정상이라면 0이어야 하는데 0 아닌 서버들이 겁나게 많다. 완벽주의자면... 다 교체 해주던가... 난 패쓰해도 될꺼같다.... 추가로 SSD는 0인 디스크들이 대부분인반면 SATA는 0인 서버를 찾을 수가 없다. 이건 뭐.. ssd 플래시 메모리 방식과 sata 구동방식의 차이 때문 아닐까 혼자 짐작해본다.

 

 

###########

nvme 설명

 

available_spare                     : 100%     

available_spare_threshold           : 4%

percentage_used                     : 0%

controller_busy_time                : 2,502

unsafe_shutdowns                    : 4

media_errors                        : 0

 

 

요약하자면

 

1. available_spare < available_spare_threshold  이 되면 위험 , spare 영역 어쩌구 저쩌구
2. percentage_used 100% 넘어가면 위험함, 밴더사별로 내놓은 워런티? 수명? 뭐 그런거임

3. controller_busy_time 분단위인데.... 바쁘게(I/O 큐가 밀려있을때) 움직인 시간... 대기작업이 많이 있는경우 올라가는거라 정상인것같다.(정확하지 않다.) 0인 서버 못찾음

4. unsafe_shutdowns 말그대로임, 서버 강종하지말자.

5. media_errors 는 1 되면 배드섹터 감지된거니까 교체해야함

 

nvme는 모니터링해야되는게
1. available_spare < available_spare_threshold 

2. percentage_used > 100 

3.media_errors > 0

 

위 3개정도 하면 될듯하다.

 

###

 

sas 는 total uncorrected erros 이 항목만 보연 된댄다.

 

        SAS=`smartctl -a /dev/$i | grep Transport | wc -l`

        if [ $SAS != 0 ];then

        TUE=`smartctl -d /dev/$i  | egrep "read:|write:|verify:" | awk '{print $8}'`

                for sas_disk in $TUE

                do

                        if [ $sas_disk -gt 0 ];then

                        echo -ne "\033[33m Disk Total uncorrected error check\n"

                        echo -e "\033[0m"

                        fi

                done

        fi

 

 

################

마지막으로 레이드 컨트롤러가 장착돼있을 경우 smartctl 하는 방법

 

 

HP서버

 

smartctl -a -d cciss,디스크넘버 /dev/sda

 

+ Recent posts