Browse Source

Update syno_hdd_db.sh

v1.1.15
- Added support for M.2 drives on a PCI card (M2Dxx and E10G18-T1 and future models).
- Improved flags/options checking and added usage help.
- Can now download the latest script version for you (if you have user home service enabled in DSM).
- Now adds 'support_m2_pool="yes"' line for models that don't have support_m2_pool in synoinfo.conf
  - To (hopefully) prevent losing your SSH created M2 volume when running this script on models that DSM 7.2 Beta does not list as supported for creating M2 volumes.
- Changed Synology model detection to be more reliable (for models that came in different variations).
- Changed checking drive_db_test_url setting to be more durable.
pull/14/head
007revad 3 years ago
committed by GitHub
parent
commit
e5ca4bb449
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 547
      syno_hdd_db.sh

547
syno_hdd_db.sh

@ -23,17 +23,32 @@
#-------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------
# TODO # TODO
# Bypass M.2 volume lock for unsupported M.2 drives.
#
# Detect if expansion unit(s) connected and get model(s) and edit expansion unit db files. # Detect if expansion unit(s) connected and get model(s) and edit expansion unit db files.
# Or add support for specifying user's expansion unit model(s) as arguments. # Or add support for specifying user's expansion unit model(s) as arguments.
# Or maybe use the shotgun approach and update all expansion unit db files. # Or maybe use the shotgun approach and update all expansion unit db files.
# #
# Add support for M.2 SATA and NVMe drives on a M2D17 PCI card. # Maybe also edit the other disk compatibility db in synoboot, used during boot time.
#
# Maybe also edit the other disk compatibility DB in synoboot, used during boot time.
# It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead.
# DONE # DONE
# Added check that M.2 volume support is enabled. # Added support for M.2 drives on a PCI card (M2Dxx and E10G18-T1 and future models).
#
# Improved flags/options checking and added usage help.
#
# Can now download the latest script version for you (if you have user home service enabled in DSM).
#
# Now adds 'support_m2_pool="yes"' line for models that don't have support_m2_pool in synoinfo.conf
# to (hopefully) prevent losing your SSH created M2 volume when running this script on models
# that DSM 7.2 Beta does not list as supported for creating M2 volumes.
#
# Changed Synology model detection to be more reliable (for models that came in different variations).
#
# Changed checking drive_db_test_url setting to be more durable.
#
#
# Added check that M.2 volume support is enabled (on supported models).
# #
# Added support for M.2 SATA drives. # Added support for M.2 SATA drives.
# #
@ -63,58 +78,100 @@
# Optionally disable "support_disk_compatibility". # Optionally disable "support_disk_compatibility".
scriptver="v1.1.14" scriptver="v1.1.15"
script=Synology_HDD_db
repo="007revad/Synology_HDD_db"
# Check latest release with GitHub API
get_latest_release() { # Shell Colors
curl --silent "https://api.github.com/repos/$1/releases/latest" | #Black='\e[0;30m'
grep '"tag_name":' | # Get tag line Red='\e[0;31m'
sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value #Green='\e[0;32m'
Yellow='\e[0;33m'
#Blue='\e[0;34m'
#Purple='\e[0;35m'
Cyan='\e[0;36m'
#White='\e[0;37m'
Error='\e[41m'
Off='\e[0m'
usage(){
cat <<EOF
$script $scriptver - by 007revad
Usage: $(basename "$0") [options]
Options:
-s, --showedits Show the edits made to host db file(s)
-n, --noupdate Prevent DSM updating the compatible drive databases
-m, --m2 Don't process M.2 drives
-f, --force Force DSM to not check drive compatibility
-r, --ram Disable memory compatibility checking
-h, --help Show this help message
-v, --version Show the version
EOF
exit 0
} }
tag=$(get_latest_release "007revad/Synology_HDD_db")
if ! printf "%s\n%s\n" "$tag" "$scriptver" | scriptversion(){
sort --check --version-sort &> /dev/null ; then cat <<EOF
echo -e "\e[0;36mThere is a newer version of this script available.\e[0m" $script $scriptver
echo -e "Current version: ${scriptver}\nLatest version: $tag" by 007revad
echo "https://github.com/007revad/Synology_HDD_db/releases/latest" https://github.com/$repo
echo "" EOF
sleep 10 exit 0
fi }
# Check for flags with getopts # Check for flags with getopt
OPTERR=0 options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -a \
while getopts "sfnm" option; do -l showedits,noupdate,m2,force,ram,help,version -- "$@")"
# Need to ensure any other long flags do not contain s, n, or f if [[ $? -eq "0" ]]; then
if [[ ! ${#option} -gt "1" ]]; then eval set -- "$options"
case ${option,,,} in while true; do
s) case "${1,,}" in
-s|--showedits) # Show edits done to host db file
showedits=yes showedits=yes
;; ;;
n) -n|--nodbupdate) # Disable disk compatibility db updates
nodbupdate=yes # For future use nodbupdate=yes
;;
-m|--m2) # Don't add M.2 drives to db files
m2=no
;; ;;
m) -f|--force) # Disable "support_disk_compatibility"
m2=no # Don't add M.2 drives to db files force=yes
;; ;;
f) -r|--ram) # Include memory compatibility
force=yes # Disable "support_disk_compatibility" ram=yes # for future use
;; ;;
*) -h|--help) # Show usage options
usage
;;
-v|--version) # Show script version
scriptversion
;;
--)
shift
break
;;
*) # Show usage options
echo "Invalid option '$1'"
usage "$1"
;; ;;
esac esac
fi shift
done done
fi
model=$(cat /proc/sys/kernel/syno_hw_version) # Check script is running as root
model=${model,,} # convert to lower case if [[ $( whoami ) != "root" ]]; then
echo -e "${Error}ERROR${Off} This script must be run as root or sudo!"
# Check for -j after model - GitHub issue #2 exit 1
if [[ $model =~ '-j'$ ]]; then
model=${model%??} # remove last two chars
fi fi
# Get DSM major version # Get DSM major version
@ -123,63 +180,151 @@ if [[ $dsm -gt "6" ]]; then
version="_v$dsm" version="_v$dsm"
fi fi
# Check script is running as root # Get Synology model
if [[ $( whoami ) != "root" ]]; then model=$(cat /proc/sys/kernel/syno_hw_version) # not always the actual model number
echo -e "\e[41mERROR\e[0m This script must be run as root or sudo!"
exit 1 modeltype=$(printf "%s" "$model" | sed 's/[0-9].*//') # DS, RS etc
unique=$(get_key_value /etc/synoinfo.conf unique | cut -d'_' -f3) # 920+ etc
# Remove extra text from end, like DS213pv10-j and DS1817+-j
#[[ $model =~ ([0-9]{3,}) ]] && modelnum=${BASH_REMATCH[1]}
[[ $model =~ ([0-9]{3,}(RP\+|RPxs|RP|\+II|xsII|xs\+|xs|\+|j|slim|play|se|air|D)?) ]] &&\
modelnum=${BASH_REMATCH[1]}
if [[ $modelnum != "$unique" ]]; then
model="$modeltype$unique"
fi
model=${model,,} # convert to lower case
#------------------------------------------------------------------------------
# Check latest release with GitHub API
get_latest_release() {
curl --silent "https://api.github.com/repos/$1/releases/latest" |
grep '"tag_name":' | # Get tag line
sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value
}
tag=$(get_latest_release "007revad/Synology_HDD_db")
shorttag="${tag:1}"
if [[ $HOME =~ /var/services/* ]]; then
shorthome=${HOME:14}
else
shorthome="$HOME"
fi
if ! printf "%s\n%s\n" "$tag" "$scriptver" |
sort --check --version-sort &> /dev/null ; then
echo -e "${Cyan}There is a newer version of this script available.${Off}"
echo -e "Current version: ${scriptver}\nLatest version: $tag"
if [[ ! -d $HOME ]]; then
# Can't download to home
echo "https://github.com/$repo/releases/latest"
sleep 10
elif [[ -f $HOME/$script-$shorttag.tar.gz ]]; then
# Latest version tar.gz in home but they're using older version
echo "https://github.com/$repo/releases/latest"
sleep 10
else
echo -e "${Cyan}Do you want to download $tag now?${Off} {y/n]"
read -r -t 30 reply
if [[ ${reply,,} == "y" ]]; then
if ! curl -LJO "https://github.com/$repo/archive/refs/tags/$tag.tar.gz"; then
echo -e "${Error}ERROR ${Off} Failed to download $script-$shorttag.tar.gz!"
else
if [[ -f $HOME/$script-$shorttag.tar.gz ]]; then
if ! tar -xf "$HOME/$script-$shorttag.tar.gz"; then
echo -e "${Error}ERROR ${Off} Failed to extract $script-$shorttag.tar.gz!"
else
if ! rm "$HOME/$script-$shorttag.tar.gz"; then
echo -e "${Error}ERROR ${Off} Failed to delete downloaded $script-$shorttag.tar.gz!"
else
echo -e "\n$tag and changes.txt are in ${Cyan}$shorthome/$script-$shorttag${Off}"
echo -e "${Cyan}Do you want to stop this script so you can run the new one?${Off} {y/n]"
read -r -t 30 reply
if [[ ${reply,,} == "y" ]]; then exit; fi
fi
fi
else
echo -e "${Error}ERROR ${Off} $shorthome/$script-$shorttag.tar.gz not found!"
#ls $HOME/ | grep "$script" # debug
fi
fi
fi
fi
fi fi
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Get list of installed SATA, SAS and M.2 NVMe/SATA drives # Get list of installed SATA, SAS and M.2 NVMe/SATA drives
getdriveinfo() {
# Get drive model and firmware version
hdmodel=$(cat "$1/device/model")
hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space
fwrev=$(cat "$1/device/rev")
fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space
if [[ $hdmodel ]] && [[ $fwrev ]]; then
hdlist+=("${hdmodel},${fwrev}")
fi
}
getm2info() {
nvmemodel=$(cat "$1/device/model")
nvmemodel=$(printf "%s" "$nvmemodel" | xargs) # trim leading and trailing white space
if [[ $2 == "nvme" ]]; then
nvmefw=$(cat "$1/device/firmware_rev")
elif [[ $2 == "nvc" ]]; then
nvmefw=$(cat "$1/device/rev")
fi
nvmefw=$(printf "%s" "$nvmefw" | xargs) # trim leading and trailing white space
if [[ $nvmemodel ]] && [[ $nvmefw ]]; then
nvmelist+=("${nvmemodel},${nvmefw}")
fi
}
getcardmodel() {
# Get M.2 card model
cardmodel=$(synodisk --m2-card-model-get "$1")
if [[ $cardmodel =~ M2D[0-9][0-9] ]]; then
# M2 adaptor card
m2carddblist+=("${model}_${cardmodel,,}${version}.db") # M.2 card's db file
m2cardlist+=("$cardmodel") # M.2 card
elif [[ $cardmodel =~ E[0-9][0-9]+M.+ ]]; then
# Ethernet + M2 adaptor card
m2carddblist+=("${model}_${cardmodel,,}${version}.db") # M.2 card's db file
m2cardlist+=("$cardmodel") # M.2 card
fi
}
for d in /sys/block/*; do for d in /sys/block/*; do
#echo $d # debug
case "$(basename -- "${d}")" in case "$(basename -- "${d}")" in
sd*|hd*) sd*|hd*)
if [[ $d =~ [hs]d[a-z]$ ]]; then if [[ $d =~ [hs]d[a-z][a-z]?$ ]]; then
hdmodel=$(cat "$d/device/model") # Get drive model and firmware version
hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space getdriveinfo "$d"
#echo "Model: '$hdmodel'" # debug
fwrev=$(cat "$d/device/rev")
fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space
#echo "Firmware: '$fwrev'" # debug
if [[ $hdmodel ]] && [[ $fwrev ]]; then
hdlist+=("${hdmodel},${fwrev}")
fi
fi fi
;; ;;
sata*|sas*) sata*|sas*)
if [[ $d =~ (sas|sata)[0-9][0-9]?[0-9]?$ ]]; then if [[ $d =~ (sas|sata)[0-9][0-9]?[0-9]?$ ]]; then
hdmodel=$(cat "$d/device/model") # Get drive model and firmware version
hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space getdriveinfo "$d"
#echo "Model: '$hdmodel'" # debug
fwrev=$(cat "$d/device/rev")
fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space
#echo "Firmware: '$fwrev'" # debug
if [[ $hdmodel ]] && [[ $fwrev ]]; then
hdlist+=("${hdmodel},${fwrev}")
fi
fi fi
;; ;;
nvme*) nvme*)
if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then
if [[ $m2 != "no" ]]; then if [[ $m2 != "no" ]]; then
nvmemodel=$(cat "$d/device/model") getm2info "$d" "nvme"
nvmemodel=$(printf "%s" "$nvmemodel" | xargs) # trim leading and trailing white space # Get M.2 card model if in M.2 card
#echo "NVMe Model: '$nvmemodel'" # debug getcardmodel "/dev/$d"
nvmefw=$(cat "$d/device/firmware_rev")
nvmefw=$(printf "%s" "$nvmefw" | xargs) # trim leading and trailing white space
#echo "NVMe Firmware: '$nvmefw'" # debug
if [[ $nvmemodel ]] && [[ $nvmefw ]]; then
nvmelist+=("${nvmemodel},${nvmefw}")
fi
fi fi
fi fi
;; ;;
@ -187,18 +332,9 @@ for d in /sys/block/*; do
#if [[ $d =~ nvc[0-9][0-9]?p[0-9][0-9]?$ ]]; then #if [[ $d =~ nvc[0-9][0-9]?p[0-9][0-9]?$ ]]; then
if [[ $d =~ nvc[0-9][0-9]?$ ]]; then if [[ $d =~ nvc[0-9][0-9]?$ ]]; then
if [[ $m2 != "no" ]]; then if [[ $m2 != "no" ]]; then
nvmemodel=$(cat "$d/device/model") getm2info "$d" "nvc"
nvmemodel=$(printf "%s" "$nvmemodel" | xargs) # trim leading and trailing white space # Get M.2 card model if in M.2 card
#echo "M.2 SATA Model: '$nvmemodel'" # debug getcardmodel "/dev/$d"
#nvmefw=$(cat "$d/device/firmware_rev")
nvmefw=$(cat "$d/device/rev")
nvmefw=$(printf "%s" "$nvmefw" | xargs) # trim leading and trailing white space
#echo "M.2 SATA Firmware: '$nvmefw'" # debug
if [[ $nvmemodel ]] && [[ $nvmefw ]]; then
nvmelist+=("${nvmemodel},${nvmefw}")
fi
fi fi
fi fi
;; ;;
@ -206,16 +342,25 @@ for d in /sys/block/*; do
done done
sortarray(){
# Sort $1 array into new $2 array to remove duplicates
local -n inarray=$1
outarray=()
if [[ ${#inarray[@]} -gt "0" ]]; then
while IFS= read -r -d '' x; do
outarray+=("$x")
done < <(printf "%s\0" "${inarray[@]}" | sort -uz)
fi
}
# Sort hdlist array into new hdds array to remove duplicates # Sort hdlist array into new hdds array to remove duplicates
if [[ ${#hdlist[@]} -gt "0" ]]; then sortarray "hdlist"
while IFS= read -r -d '' x; do hdds=${outarray[*]}
hdds+=("$x")
done < <(printf "%s\0" "${hdlist[@]}" | sort -uz)
fi
# Check hdds array isn't empty # Check hdds array isn't empty
if [[ ${#hdds[@]} -eq "0" ]]; then if [[ ${#hdds[@]} -eq "0" ]]; then
echo -e "\e[41mERROR\e[0m No drives found!" && exit 2 echo -e "${Error}ERROR${Off} No drives found!" && exit 2
else else
echo "HDD/SSD models found: ${#hdds[@]}" echo "HDD/SSD models found: ${#hdds[@]}"
num="0" num="0"
@ -228,11 +373,8 @@ fi
# Sort nvmelist array into new nvmes array to remove duplicates # Sort nvmelist array into new nvmes array to remove duplicates
if [[ ${#nvmelist[@]} -gt "0" ]]; then sortarray "nvmelist"
while IFS= read -r -d '' x; do nvmes=${outarray[*]}
nvmes+=("$x")
done < <(printf "%s\0" "${nvmelist[@]}" | sort -uz)
fi
# Check nvmes array isn't empty # Check nvmes array isn't empty
if [[ ${#nvmes[@]} -eq "0" ]]; then if [[ ${#nvmes[@]} -eq "0" ]]; then
@ -250,14 +392,40 @@ else
fi fi
# M.2 card db files
# Sort m2carddblist array into new m2carddbs array to remove duplicates
sortarray "m2carddblist"
m2carddbs=${outarray[*]}
# M.2 cards
# Sort m2cardlist array into new m2cards array to remove duplicates
sortarray "m2cardlist"
m2cards=${outarray[*]}
# Check m2cards array isn't empty
if [[ ${#m2cards[@]} -gt "0" ]]; then
echo "M.2 card models found: ${#m2cards[@]}"
num="0"
while [[ $num -lt "${#m2cards[@]}" ]]; do
echo "${m2cards[num]}"
num=$((num +1))
done
echo
fi
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Check database and add our drives if needed # Check databases and add our drives if needed
db1="/var/lib/disk-compatibility/${model}_host${version}.db" db1="/var/lib/disk-compatibility/${model}_host${version}.db"
db2="/var/lib/disk-compatibility/${model}_host${version}.db.new" db2="/var/lib/disk-compatibility/${model}_host${version}.db.new"
dbpath="/var/lib/disk-compatibility/"
synoinfo="/etc.defaults/synoinfo.conf"
if [[ ! -f "$db1" ]]; then echo -e "\e[41mERROR\e[0m $db1 not found!" && exit 3; fi
#if [[ ! -f "$db2" ]]; then echo -e "\e[41mERROR\e[0m $db2 not found!" && exit 4; fi if [[ ! -f "$db1" ]]; then echo -e "${Error}ERROR 3${Off} $db1 not found!" && exit 3; fi
#if [[ ! -f "$db2" ]]; then echo -e "${Error}ERROR 4${Off} $db2 not found!" && exit 4; fi
# new installs don't have a .db.new file # new installs don't have a .db.new file
@ -269,30 +437,36 @@ elif grep -F '{"success":1,"list":[' "$db1" >/dev/null; then
# DSM 6 drive db files start with {"success":1,"list":[ # DSM 6 drive db files start with {"success":1,"list":[
dbtype=6 dbtype=6
else else
echo -e "\e[41mERROR\e[0m Unknown database type $(basename -- "${db1}")!" echo -e "${Error}ERROR${Off} Unknown database type $(basename -- "${db1}")!"
exit 7 exit 7
fi fi
#echo "dbtype: $dbtype" # debug #echo "dbtype: $dbtype" # debug
# Backup database file if needed backupdb() {
if [[ ! -f "$db1.bak" ]]; then # Backup database file if needed
if cp "$db1" "$db1.bak"; then if [[ ! -f "$1.bak" ]]; then
echo -e "Backed up database to $(basename -- "${db1}").bak\n" if cp "$1" "$1.bak"; then
else echo -e "\nBacked up $(basename -- "${1}") database.\n"
echo -e "\e[41mERROR\e[0m Failed to backup $(basename -- "${db1}")!" else
exit 5 echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${1}")!"
return 1
fi
fi fi
fi }
# Shell Colors # Backup host database file if needed
Yellow='\e[0;33m' backupdb "$db1" || exit 5
Cyan='\e[0;36m'
Red='\e[0;31m' # Backup synoinfo.conf if needed
Off=$'\e[0m' backupdb "$synoinfo" || exit 9
function updatedb() {
#------------------------------------------------------------------------------
# Edit db files
updatedb() {
hdmodel=$(printf "%s" "$1" | cut -d"," -f 1) hdmodel=$(printf "%s" "$1" | cut -d"," -f 1)
fwrev=$(printf "%s" "$1" | cut -d"," -f 2) fwrev=$(printf "%s" "$1" | cut -d"," -f 2)
@ -317,13 +491,16 @@ function updatedb() {
#if sed -i "s/}}}/}},\"$hdmodel\":{$fwstrng$default/" "$2"; then # Don't need to add firmware version? #if sed -i "s/}}}/}},\"$hdmodel\":{$fwstrng$default/" "$2"; then # Don't need to add firmware version?
if sed -i "s/}}}/}},\"$hdmodel\":{$default/" "$2"; then if sed -i "s/}}}/}},\"$hdmodel\":{$default/" "$2"; then
echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}"
# Count drives added to host db files
if [[ $2 == "$db1" ]]; then if [[ $2 == "$db1" ]]; then
db1Edits=$((db1Edits +1)) db1Edits=$((db1Edits +1))
elif [[ $2 == "$db2" ]]; then elif [[ $2 == "$db2" ]]; then
db2Edits=$((db2Edits +1)) db2Edits=$((db2Edits +1))
fi fi
else else
echo -e "\n\e[41mERROR\e[0m Failed to update v7 $(basename -- "$2")${Off}" echo -e "\n${Error}ERROR 6${Off} Failed to update v7 $(basename -- "$2")${Off}"
exit 6 exit 6
fi fi
else else
@ -343,13 +520,16 @@ function updatedb() {
# {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, # {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]},
if sed -ir "s/$startstring/$startstring$string/" "$2"; then if sed -ir "s/$startstring/$startstring$string/" "$2"; then
echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}"
# Count drives added to host db files
if [[ $2 == "$db1" ]]; then if [[ $2 == "$db1" ]]; then
db1Edits=$((db1Edits +1)) db1Edits=$((db1Edits +1))
elif [[ $2 == "$db2" ]]; then elif [[ $2 == "$db2" ]]; then
db2Edits=$((db2Edits +1)) db2Edits=$((db2Edits +1))
fi fi
else else
echo -e "\n\e[41mERROR\e[0m Failed to update $(basename -- "$2")${Off}" echo -e "\n${Error}ERROR 8${Off} Failed to update $(basename -- "$2")${Off}"
exit 8 exit 8
fi fi
fi fi
@ -373,18 +553,36 @@ while [[ $num -lt "${#nvmes[@]}" ]]; do
if [[ -f "$db2" ]]; then if [[ -f "$db2" ]]; then
updatedb "${nvmes[$num]}" "$db2" updatedb "${nvmes[$num]}" "$db2"
fi fi
#------------------------------------------------
# M.2 adaptor cards
num2="0"
while [[ $num2 -lt "${#m2carddbs[@]}" ]]; do
if [[ -f "${dbpath}${m2carddbs[$num2]}" ]];then
backupdb "${dbpath}${m2carddbs[$num2]}" &&\
updatedb "${nvmes[$num]}" "${dbpath}${m2carddbs[$num2]}"
else
echo -e "${Error}ERROR 10${Off} ${m2carddbs[$num2]} not found!"
fi
num2=$((num2 +1))
done
#------------------------------------------------
num=$((num +1)) num=$((num +1))
done done
#------------------------------------------------------------------------------
# Edit /etc.defaults/synoinfo.conf
# Optionally disable "support_disk_compatibility" # Optionally disable "support_disk_compatibility"
sdc=support_disk_compatibility sdc=support_disk_compatibility
setting="$(get_key_value /etc.defaults/synoinfo.conf $sdc)" setting="$(get_key_value $synoinfo $sdc)"
if [[ $force == "yes" ]]; then if [[ $force == "yes" ]]; then
if [[ $setting == "yes" ]]; then if [[ $setting == "yes" ]]; then
# Disable support_disk_compatibility # Disable support_disk_compatibility
sed -i "s/${sdc}=\"yes\"/${sdc}=\"no\"/" "/etc.defaults/synoinfo.conf" sed -i "s/${sdc}=\"yes\"/${sdc}=\"no\"/" "$synoinfo"
setting="$(get_key_value /etc.defaults/synoinfo.conf $sdc)" setting="$(get_key_value "$synoinfo" $sdc)"
if [[ $setting == "no" ]]; then if [[ $setting == "no" ]]; then
echo -e "\nDisabled support disk compatibility." echo -e "\nDisabled support disk compatibility."
fi fi
@ -392,8 +590,8 @@ if [[ $force == "yes" ]]; then
else else
if [[ $setting == "no" ]]; then if [[ $setting == "no" ]]; then
# Enable support_disk_compatibility # Enable support_disk_compatibility
sed -i "s/${sdc}=\"no\"/${sdc}=\"yes\"/" "/etc.defaults/synoinfo.conf" sed -i "s/${sdc}=\"no\"/${sdc}=\"yes\"/" "$synoinfo"
setting="$(get_key_value /etc.defaults/synoinfo.conf $sdc)" setting="$(get_key_value "$synoinfo" $sdc)"
if [[ $setting == "yes" ]]; then if [[ $setting == "yes" ]]; then
echo -e "\nRe-enabled support disk compatibility." echo -e "\nRe-enabled support disk compatibility."
fi fi
@ -403,53 +601,76 @@ fi
# Check m2 volume support enabled # Check m2 volume support enabled
smp=support_m2_pool smp=support_m2_pool
setting="$(get_key_value /etc.defaults/synoinfo.conf ${smp})" setting="$(get_key_value $synoinfo ${smp})"
if [[ $setting == "no" ]]; then enabled=""
sed -i "s/${smp}=\"no\"/${smp}=\"yes\"/" "/etc.defaults/synoinfo.conf" if [[ ! $setting ]]; then
setting="$(get_key_value /etc.defaults/synoinfo.conf ${smp})" # Add support_m2_pool"yes"
echo 'support_m2_pool="yes"' >> "$synoinfo"
enabled="yes"
elif [[ $setting == "no" ]]; then
# Change support_m2_pool"no" to "yes"
sed -i "s/${smp}=\"no\"/${smp}=\"yes\"/" "$synoinfo"
enabled="yes"
elif [[ $setting == "yes" ]]; then
echo -e "\nM.2 volume support already enabled."
fi
# Check if we enabled m2 volume support
setting="$(get_key_value $synoinfo ${smp})"
if [[ $enabled == "yes" ]]; then
if [[ $setting == "yes" ]]; then if [[ $setting == "yes" ]]; then
echo -e "\nEnabled M.2 volume support." echo -e "\nEnabled M.2 volume support."
else
echo -e "${Error}ERROR${Off} Failed to enable m2 volume support!"
fi fi
fi fi
# Edit synoinfo.conf to prevent DB updates # Edit synoinfo.conf to prevent drive db updates
#if [[ $nodbupdate == "yes" ]]; then # For future use dtu=drive_db_test_url
file=/etc.defaults/synoinfo.conf url="$(get_key_value $synoinfo ${dtu})"
if [[ -f $file ]]; then disabled=""
# Backup synoinfo.conf if needed if [[ $nodbupdate == "yes" ]]; then
if [[ ! -f "$file.bak" ]]; then if [[ ! $url ]]; then
if cp "$file" "$file.bak"; then # Add drive_db_test_url="127.0.0.1"
echo "Backed up synoinfo.conf to $(basename -- "${file}").bak" echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo"
else disabled="yes"
echo -e "\e[41mERROR\e[0m Failed to backup $(basename -- "${file}")!" elif [[ $url != "127.0.0.1" ]]; then
exit 6 # Edit drive_db_test_url=
fi sed -i "s/drive_db_test_url=.*/drive_db_test_url=\"127.0.0.1\"/" "$synoinfo" >/dev/null
fi disabled="yes"
fi
url=$(get_key_value "$file" drive_db_test_url) # returns a linefeed if key doesn't exist # Check if we disabled drive db auto updates
if [[ ! $url ]]; then url="$(get_key_value $synoinfo drive_db_test_url)"
# Add drive_db_test_url=127.0.0.1 if [[ $disabled == "yes" ]]; then
echo 'drive_db_test_url="127.0.0.1"' >> "$file" if [[ $url == "127.0.0.1" ]]; then
disabled="yes" echo -e "\nDisabled drive db auto updates."
elif [[ $url != "127.0.0.1" ]]; then else
# Edit drive_db_test_url= echo -e "${Error}ERROR${Off} Failed to disable drive db auto updates!"
sed -i "s/drive_db_test_url=.*/drive_db_test_url=\"127.0.0.1\"/" "$file"
disabled="yes"
fi fi
fi
url=$(get_key_value "$file" drive_db_test_url) else
if [[ $disabled == "yes" ]]; then # Re-enable drive db updates
if [[ $url == "127.0.0.1" ]]; then if [[ $url == "127.0.0.1" ]]; then
echo "Disabled drive db auto updates." # Edit drive_db_test_url=
else sed -z "s/drive_db_test_url=\"127\.0\.0\.1\"\n//" "$synoinfo" >/dev/null
echo -e "\e[41mERROR\e[0m Failed to disable drive db auto updates!" #sed -i "s/drive_db_test_url=\"127\.0\.0\.1\"//" "$synoinfo" # works but leaves line feed
fi
# Check if we re-enabled drive db auto updates
url="$(get_key_value $synoinfo drive_db_test_url)"
if [[ $url != "127.0.0.1" ]]; then
echo -e "\nRe-enabled drive db auto updates."
fi fi
else
echo -e "\nDrive db auto updates already enabled."
fi fi
#fi fi
#------------------------------------------------------------------------------
# Finished
# Show the changes # Show the changes
if [[ ${showedits,,} == "yes" ]]; then if [[ ${showedits,,} == "yes" ]]; then
if [[ $dbtype -gt "6" ]];then if [[ $dbtype -gt "6" ]];then

Loading…
Cancel
Save