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