Init commit
This commit is contained in:
91
templates/drive_check.sh
Normal file
91
templates/drive_check.sh
Normal file
@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
# this is a big loop
|
||||
# it shows SSD health data
|
||||
exec 2> /dev/null
|
||||
while true; do
|
||||
clear
|
||||
# get all disks
|
||||
DISK_LIST=$(ls -lo /dev/sd? | awk '{print $9}')
|
||||
# process each disk
|
||||
IFS=$'\n' read -rd '' -a DISK_ARRAY <<< "$DISK_LIST"
|
||||
for DISK in "${DISK_ARRAY[@]}"; do
|
||||
# store smartctl data once
|
||||
SMART_DATA=$(smartctl -x $DISK)
|
||||
NVME_CHECK=$(echo "$SMART_DATA" | grep "NVMe Version")
|
||||
SSD_CHECK=$(echo "$SMART_DATA" | grep "Rotation Rate" | grep "Solid State")
|
||||
# if either SATA SSD or NVMe
|
||||
if [ -n "$NVME_CHECK" ] || [ -n "$SSD_CHECK" ]; then
|
||||
BLOCK_SIZE=$(fdisk -l $DISK | grep 'Sector size' | awk '{print $4}' )
|
||||
# SATA Logic
|
||||
if [ -n "$SSD_CHECK" ] ; then
|
||||
# Set Variables
|
||||
TBW=$(echo "$SMART_DATA" | grep "Logical Sectors Written" | \
|
||||
awk -v BLOCK_SIZE="$BLOCK_SIZE" '{print $4 * BLOCK_SIZE / (2 ^ 40)}')
|
||||
PLR=$(echo "$SMART_DATA" | grep Percent_Lifetime_Remain | awk '{print $4}')
|
||||
CAPACITY=$(echo "$SMART_DATA" | grep "User Capacity" | cut -d '[' -f 2 | sed 's/]//g')
|
||||
SERIAL=$(echo "$SMART_DATA" | grep "Serial Number" | cut -d ":" -f 2 | xargs)
|
||||
MODEL=$(echo "$SMART_DATA" | grep "Device Model" | cut -d ":" -f 2 | xargs)
|
||||
SMART=$(echo "$SMART_DATA" | grep "self-assessment test result" | cut -d ":" -f 2 | xargs)
|
||||
FLAVOR="SATA SSD"
|
||||
DRIVE_EXISTS=$(curl -s 0.0.0.0:5000/check?serial_lookup=$SERIAL | jq .serial_number_exists)
|
||||
# Display drive data
|
||||
echo "============ $DISK Disk Info - SSD: ============"
|
||||
#echo "DRIVE_EXISTS: $DRIVE_EXISTS"
|
||||
echo "Serial Number: $SERIAL"
|
||||
echo "Model String: $MODEL"
|
||||
echo "SMART Check: $SMART"
|
||||
echo "Disk capacity: $CAPACITY"
|
||||
echo "TB Written: $TBW TB"
|
||||
if [ -z "$PLR" ] ; then
|
||||
echo "Percent Lifetime Remaining data not available"
|
||||
else
|
||||
echo "$DISK has $PLR% lifetime remaining"
|
||||
fi
|
||||
echo
|
||||
# database handler
|
||||
if [ "$DRIVE_EXISTS" == "false" ] ; then
|
||||
#echo "{{ service_folder }}/store_drive.sh -a '$SERIAL,$MODEL,$FLAVOR,$CAPACITY,$TBW,$SMART' -d {{ db_path }}"
|
||||
{{ service_folder }}/store_drive.sh -a "$SERIAL,$MODEL,$FLAVOR,$CAPACITY,$TBW,$SMART" -d {{ db_path }}
|
||||
else
|
||||
#echo "{{ service_folder }}/store_drive.sh -u '$SERIAL,$TBW,$SMART' -d {{ db_path }}"
|
||||
{{ service_folder }}/store_drive.sh -u "$SERIAL,$TBW,$SMART" -d {{ db_path }}
|
||||
fi
|
||||
# NVMe Logic
|
||||
elif [ -n "$NVME_CHECK" ] ; then
|
||||
# Set Variables
|
||||
MODEL=$(echo "$SMART_DATA" | grep "Model Number" | cut -d ":" -f 2 | xargs)
|
||||
SERIAL=$(echo "$SMART_DATA" | grep "Serial Number" | cut -d ":" -f 2 | xargs)
|
||||
TBW=$(echo "$SMART_DATA" | grep "Data Units Written" | sed 's/,//g' | \
|
||||
awk -v BLOCK_SIZE="$BLOCK_SIZE" '{print $4 * BLOCK_SIZE / (2 ^ 30)}')
|
||||
AVAIL_SPARE=$(echo "$SMART_DATA" | grep "Available Spare:" | cut -d ':' -f 2 | xargs)
|
||||
CAPACITY=$(echo "$SMART_DATA" | grep "amespace 1 Size" | cut -d '[' -f 2 | sed 's/]//g')
|
||||
SMART=$(echo "$SMART_DATA" | grep "self-assessment test result" | cut -d ":" -f 2 | xargs)
|
||||
FLAVOR="NVMe"
|
||||
DRIVE_EXISTS=$(curl -s 0.0.0.0:5000/check?serial_lookup=$SERIAL | jq .serial_number_exists)
|
||||
# Display Disk Info
|
||||
echo "============ $DISK Disk Info - NVMe: ============"
|
||||
#echo "DRIVE_EXISTS: $DRIVE_EXISTS"
|
||||
echo "Serial Number: $SERIAL"
|
||||
echo "Model String: $MODEL"
|
||||
echo "SMART Check: $SMART"
|
||||
echo "Disk capacity: $CAPACITY"
|
||||
echo "TB Written: $TBW TB"
|
||||
echo "NAND spare blocks: $AVAIL_SPARE"
|
||||
echo
|
||||
# database handler
|
||||
if [ "$DRIVE_EXISTS" == "false" ] ; then
|
||||
#echo "{{ service_folder }}/store_drive.sh -a '$SERIAL,$MODEL,$FLAVOR,$CAPACITY,$TBW,$SMART' -d {{ db_path }}"
|
||||
{{ service_folder }}/store_drive.sh -a "$SERIAL,$MODEL,$FLAVOR,$CAPACITY,$TBW,$SMART" -d {{ db_path }}
|
||||
else
|
||||
#echo "{{ service_folder }}/store_drive.sh -u '$SERIAL,$TBW,$SMART' -d {{ db_path }}"
|
||||
{{ service_folder }}/store_drive.sh -u "$SERIAL,$TBW,$SMART" -d {{ db_path }}
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Skipping $DISK, not SATA SSD or NVMe"
|
||||
fi
|
||||
done
|
||||
# wait 15 seconds, loop again
|
||||
echo "Sleeping 15 seconds so you can read this"
|
||||
sleep 15
|
||||
done
|
||||
Reference in New Issue
Block a user