committed by
GitHub
1 changed files with 122 additions and 0 deletions
@ -0,0 +1,122 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
#----------------------------------------------------- |
||||
|
# Show Synology Drive number, model and serial number |
||||
|
# |
||||
|
# Github: https://github.com/007revad/Synology_HDD_db |
||||
|
#----------------------------------------------------- |
||||
|
|
||||
|
# Check script is running as root |
||||
|
if [[ $( whoami ) != "root" ]]; then |
||||
|
echo -e "\nERROR This script must be run as sudo or root!\n" |
||||
|
exit 1 # Not running as root |
||||
|
fi |
||||
|
|
||||
|
Yellow='\e[0;33m' # ${Yellow} |
||||
|
Cyan='\e[0;36m' # ${Cyan} |
||||
|
Off='\e[0m' # ${Off} |
||||
|
|
||||
|
get_drive_num(){ |
||||
|
# Get Drive number |
||||
|
disk_id="" |
||||
|
disk_id=$(synodisk --get_location_form "/dev/$drive" | grep 'Disk id' | awk '{print $NF}') |
||||
|
#if [[ $disk_id -gt "9" ]]; then |
||||
|
drive_num="Drive $disk_id " |
||||
|
#else |
||||
|
# drive_num="Drive $disk_id " |
||||
|
#fi |
||||
|
} |
||||
|
|
||||
|
get_nvme_num(){ |
||||
|
# Get M.2 Drive number |
||||
|
pcislot="" |
||||
|
cardslot="" |
||||
|
if nvme=$(synonvme --get-location "/dev/$drive"); then |
||||
|
if [[ ! $nvme =~ "PCI Slot: 0" ]]; then |
||||
|
pcislot="$(echo "$nvme" | cut -d"," -f2 | awk '{print $NF}')-" |
||||
|
fi |
||||
|
cardslot="$(echo "$nvme" | awk '{print $NF}')" |
||||
|
else |
||||
|
pcislot="$(basename -- "$drive")" |
||||
|
cardslot="" |
||||
|
fi |
||||
|
#if [[ -n $pcislot ]]; then |
||||
|
drive_num="M.2 Drive $pcislot$cardslot " |
||||
|
#else |
||||
|
# drive_num="M.2 Drive $pcislot$cardslot " |
||||
|
#fi |
||||
|
} |
||||
|
|
||||
|
show_drive_model(){ |
||||
|
# Get drive model |
||||
|
# $drive is sata1 or sda or usb1 etc |
||||
|
model=$(cat "/sys/block/$drive/device/model") |
||||
|
model=$(printf "%s" "$model" | xargs) # trim leading and trailing white space |
||||
|
|
||||
|
# Get drive serial number |
||||
|
if echo "$drive" | grep nvme >/dev/null ; then |
||||
|
serial=$(cat "/sys/block/$drive/device/serial") |
||||
|
else |
||||
|
serial=$(cat "/sys/block/$drive/device/syno_disk_serial") |
||||
|
fi |
||||
|
serial=$(printf "%s" "$serial" | xargs) # trim leading and trailing white space |
||||
|
|
||||
|
# Get drive serial number with smartctl for USB drives |
||||
|
# if [[ -z "$serial" && "${drive:0:4}" != "nvme" ]]; then |
||||
|
if [[ -z "$serial" ]]; then |
||||
|
serial=$(smartctl -i -d sat /dev/"$drive" | grep Serial | cut -d":" -f2 | xargs) |
||||
|
fi |
||||
|
|
||||
|
# Show drive model and serial |
||||
|
echo -e "\n${Cyan}${drive_num}${Off}$model ${Yellow}$serial${Off}" |
||||
|
} |
||||
|
|
||||
|
# Add drives to drives array |
||||
|
for d in /sys/block/*; do |
||||
|
# $d is /sys/block/sata1 etc |
||||
|
case "$(basename -- "${d}")" in |
||||
|
sd*|hd*) |
||||
|
if [[ $d =~ [hs]d[a-z][a-z]?$ ]]; then |
||||
|
drives+=("$(basename -- "${d}")") |
||||
|
fi |
||||
|
;; |
||||
|
sata*|sas*) |
||||
|
if [[ $d =~ (sas|sata)[0-9][0-9]?[0-9]?$ ]]; then |
||||
|
drives+=("$(basename -- "${d}")") |
||||
|
fi |
||||
|
;; |
||||
|
nvme*) |
||||
|
if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then |
||||
|
nvmes+=("$(basename -- "${d}")") |
||||
|
fi |
||||
|
;; |
||||
|
nvc*) # M.2 SATA drives (in PCIe card only?) |
||||
|
if [[ $d =~ nvc[0-9][0-9]?$ ]]; then |
||||
|
drives+=("$(basename -- "${d}")") |
||||
|
fi |
||||
|
;; |
||||
|
#usb*) |
||||
|
# if [[ $d =~ usb[0-9]?[0-9]?$ ]]; then |
||||
|
# drives+=("$(basename -- "${d}")") |
||||
|
# fi |
||||
|
#;; |
||||
|
esac |
||||
|
done |
||||
|
|
||||
|
if [[ -z "$errtotal" ]]; then errtotal=0 ; fi |
||||
|
|
||||
|
# HDD and SSD |
||||
|
for drive in "${drives[@]}"; do |
||||
|
# Show drive model and serial |
||||
|
get_drive_num |
||||
|
show_drive_model |
||||
|
done |
||||
|
|
||||
|
# NVMe drives |
||||
|
for drive in "${nvmes[@]}"; do |
||||
|
# Show drive model and serial |
||||
|
get_nvme_num |
||||
|
show_drive_model |
||||
|
done |
||||
|
|
||||
|
echo "" |
||||
|
|
||||
Loading…
Reference in new issue