Browse Source

Update syno_hdd_db.sh

pull/416/head
007revad 12 months ago
parent
commit
7a02010681
  1. 97
      syno_hdd_db.sh

97
syno_hdd_db.sh

@ -29,7 +29,7 @@
# /var/packages/StorageManager/target/ui/storage_panel.js # /var/packages/StorageManager/target/ui/storage_panel.js
scriptver="v3.5.106" scriptver="v3.6.109"
script=Synology_HDD_db script=Synology_HDD_db
repo="007revad/Synology_HDD_db" repo="007revad/Synology_HDD_db"
scriptname=syno_hdd_db scriptname=syno_hdd_db
@ -70,10 +70,10 @@ Options:
Do not use this option unless absolutely needed Do not use this option unless absolutely needed
-w, --wdda Disable WD Device Analytics to prevent DSM showing -w, --wdda Disable WD Device Analytics to prevent DSM showing
a false warning for WD drives that are 3 years old a false warning for WD drives that are 3 years old
DSM 7.2.1 already has WDDA disabled DSM 7.2.1 and later already has WDDA disabled
-p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor
-e, --email Disable colored text in output scheduler emails -e, --email Disable colored text in output scheduler emails
-S, --ssd=DRIVE Enable write_mostly on internal HDDs so DSM primary -S, --ssd=DRIVE Enable write_mostly on internal HDDs so DSM primarily
reads from internal SSDs or your specified drives reads from internal SSDs or your specified drives
-S automatically sets internal SSDs as DSM preferred -S automatically sets internal SSDs as DSM preferred
--ssd=DRIVE requires the fast drive(s) as argument, --ssd=DRIVE requires the fast drive(s) as argument,
@ -86,6 +86,10 @@ Options:
--autoupdate=AGE Auto update script (useful when script is scheduled) --autoupdate=AGE Auto update script (useful when script is scheduled)
AGE is how many days old a release must be before AGE is how many days old a release must be before
auto-updating. AGE must be a number: 0 or greater auto-updating. AGE must be a number: 0 or greater
-I, --ihm Update IronWolf Health Management to 2.5.1 to support
recent model IronWolf and IronWolf Pro drives.
For NAS with x86_64 CPUs only
Installs IHM on '22 series and newer models (untested)
-h, --help Show this help message -h, --help Show this help message
-v, --version Show the script version -v, --version Show the script version
@ -108,8 +112,8 @@ EOF
args=("$@") args=("$@")
# Check for flags with getopt # Check for flags with getopt
if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \
ssd:,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ ssd:,ihm,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \
-- "$@")"; then -- "$@")"; then
eval set -- "$options" eval set -- "$options"
while true; do while true; do
@ -165,6 +169,9 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \
-p|--pcie) # Enable creating volumes on M2 in unknown PCIe adaptor -p|--pcie) # Enable creating volumes on M2 in unknown PCIe adaptor
forcepci=yes forcepci=yes
;; ;;
-I|--ihm) # Update IronWolf Health Management
ihm=yes
;;
--autoupdate) # Auto update script --autoupdate) # Auto update script
autoupdate=yes autoupdate=yes
if [[ $2 =~ ^[0-9]+$ ]]; then if [[ $2 =~ ^[0-9]+$ ]]; then
@ -197,6 +204,7 @@ else
fi fi
# shellcheck disable=SC2317 # Don't warn about unreachable commands in this function
PS4func() { PS4func() {
local lineno="$1" local lineno="$1"
local i f='' local i f=''
@ -253,6 +261,12 @@ fi
model=$(cat /proc/sys/kernel/syno_hw_version) model=$(cat /proc/sys/kernel/syno_hw_version)
modelname="$model" modelname="$model"
# Get CPU platform_name
platform_name=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/synoinfo.conf platform_name)
# Get CPU arch
arch="$(uname -m)"
# Show script version # Show script version
#echo -e "$script $scriptver\ngithub.com/$repo\n" #echo -e "$script $scriptver\ngithub.com/$repo\n"
@ -267,7 +281,7 @@ smallfixnumber=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION smallfixnum
# Show DSM full version and model # Show DSM full version and model
if [[ $buildphase == GM ]]; then buildphase=""; fi if [[ $buildphase == GM ]]; then buildphase=""; fi
if [[ $smallfixnumber -gt "0" ]]; then smallfix="-$smallfixnumber"; fi if [[ $smallfixnumber -gt "0" ]]; then smallfix="-$smallfixnumber"; fi
echo "$model DSM $productversion-$buildnumber$smallfix $buildphase" echo "$model $arch DSM $productversion-$buildnumber$smallfix $buildphase"
# Convert model to lower case # Convert model to lower case
@ -956,10 +970,11 @@ getdriveinfo(){
# Account for SSD drives with spaces in their model name/number # Account for SSD drives with spaces in their model name/number
fwrev=$(/usr/syno/bin/syno_hdd_util --ssd_detect | grep "$device " | awk '{print $(NF-3)}') # GitHub issue #86, 87 fwrev=$(/usr/syno/bin/syno_hdd_util --ssd_detect | grep "$device " | awk '{print $(NF-3)}') # GitHub issue #86, 87
# Get M.2 SATA SSD firmware version # Get firmware version with smartctl if $fwrev null
# for M.2 SATA SSD and SAS drives. Github issue #407
if [[ -z $fwrev ]]; then if [[ -z $fwrev ]]; then
dev=/dev/"$(basename -- "$1")" dev=/dev/"$(basename -- "$1")"
fwrev=$(smartctl -a -d sat -T permissive "$dev" | grep -i firmware | awk '{print $NF}') fwrev=$(smartctl -a -d ata -T permissive "$dev" | grep -i firmware | awk '{print $NF}')
fi fi
# Get drive GB size # Get drive GB size
@ -2134,12 +2149,20 @@ if [[ $nodbupdate == "yes" ]]; then
# Add drive_db_test_url="127.0.0.1" # Add drive_db_test_url="127.0.0.1"
#echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo"
/usr/syno/bin/synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" /usr/syno/bin/synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1"
[ -d /tmpRoot ] && /tmpRoot/usr/syno/bin/synosetkeyvalue /tmpRoot/etc.defaults/synoinfo.conf "$dtu" "127.0.0.1" # Junior boot
#[ -d /tmpRoot ] && /tmpRoot/usr/syno/bin/synosetkeyvalue /tmpRoot/etc.defaults/synoinfo.conf "$dtu" "127.0.0.1"
if [ -f /tmpRoot/usr/syno/bin/synosetkeyvalue ] && [ -f /tmpRoot/etc.defaults/synoinfo.conf ]; then
/tmpRoot/usr/syno/bin/synosetkeyvalue /tmpRoot/etc.defaults/synoinfo.conf "$dtu" "127.0.0.1"
fi
disabled="yes" disabled="yes"
elif [[ $url != "127.0.0.1" ]]; then elif [[ $url != "127.0.0.1" ]]; then
# Edit drive_db_test_url= # Edit drive_db_test_url=
/usr/syno/bin/synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" /usr/syno/bin/synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1"
[ -d /tmpRoot ] && /tmpRoot/usr/syno/bin/synosetkeyvalue /tmpRoot/etc.defaults/synoinfo.conf "$dtu" "127.0.0.1" # Junior boot
#[ -d /tmpRoot ] && /tmpRoot/usr/syno/bin/synosetkeyvalue /tmpRoot/etc.defaults/synoinfo.conf "$dtu" "127.0.0.1"
if [ -f /tmpRoot/usr/syno/bin/synosetkeyvalue ] && [ -f /tmpRoot/etc.defaults/synoinfo.conf ]; then
/tmpRoot/usr/syno/bin/synosetkeyvalue /tmpRoot/etc.defaults/synoinfo.conf "$dtu" "127.0.0.1"
fi
disabled="yes" disabled="yes"
fi fi
@ -2231,6 +2254,60 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then
fi fi
# Optionally update IronWolf Health Management
if [[ $arch == "x86_64" ]]; then
if [[ $ihm == "yes" ]]; then
setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo support_ihm)"
if [[ $setting != "yes" ]]; then
# Enable support_ihm
/usr/syno/bin/synosetkeyvalue "$synoinfo" support_ihm "yes"
setting="$(/usr/syno/bin/synogetkeyvalue "$synoinfo" support_ihm)"
if [[ $setting == "yes" ]]; then
echo -e "\nEnabled support IronWolf Health Management."
fi
else
echo -e "\nSupport IronWolf Health Management already enabled."
fi
if [[ ! -f /usr/syno/sbin/dhm_tool ]]; then
# Install dhm_tool on models without it ('22 series and newer)
# Untested
md5hash="cf67c1d5006913297f85ca7f9d1795ba"
branch="main"
file_url="https://raw.githubusercontent.com/${repo}/${branch}/bin/dhm_tool"
# install_binfile <file> <file-url> <destination> <chmod> <bundled-path> <hash>
install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "755" bin/dhm_tool "$md5hash"
else
# Check if dhm_tool needs updating
dhm_version="$(dhm_tool --version | grep "Utility Version" | awk '{print $NF}')"
if ! printf "%s\n%s\n" "2.5.1" "$dhm_version" |
sort --check=quiet --version-sort >/dev/null ; then
# Backup existing dhm_tool
backupdb "/usr/syno/sbin/dhm_tool"
# Update dhm_tool
md5hash="cf67c1d5006913297f85ca7f9d1795ba"
branch="main"
file_url="https://raw.githubusercontent.com/${repo}/${branch}/bin/dhm_tool"
# install_binfile <file> <file-url> <destination> <chmod> <bundled-path> <hash>
install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "a+x" bin/dhm_tool "$md5hash"
# Check dhm_tool updated
dhm_version="$(dhm_tool --version | grep "Utility Version" | awk '{print $NF}')"
if [[ $dhm_version == "2.5.1" ]]; then
echo "Updated IronWolf Health Management."
else
echo "${Error}ERROR${Off} Failed to update IronWolf Health Management!"
fi
else
echo "IronWolf Health Management already updated."
fi
fi
fi
fi
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Finished # Finished

Loading…
Cancel
Save