From 58a3fab31b85a6f8317c0b38b33b6e5691e5f77a Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Fri, 24 Mar 2023 21:02:02 +1100 Subject: [PATCH 001/694] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ce1d305..e1687c5 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,10 @@ ### Scheduling the script in Synology's Task Scheduler ### Running the script via SSH -You run the script in a shell with sudo or as root. +You run the script in a shell with sudo i or as root. ```YAML -sudo /path-to-script/syno_hdd_db.sh +sudo i /path-to-script/syno_hdd_db.sh ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. @@ -71,7 +71,7 @@ ### Running the script via SSH If you run the script with the -showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. ```YAML -sudo /path-to-script/syno_hdd_db.sh -showedits +sudo i /path-to-script/syno_hdd_db.sh -showedits ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. From 52b382dbcc8c8fa8e3aa1ee95b2f625549c2eeb8 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sat, 25 Mar 2023 09:20:59 +1100 Subject: [PATCH 002/694] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e1687c5..094313e 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,10 @@ ### Scheduling the script in Synology's Task Scheduler ### Running the script via SSH -You run the script in a shell with sudo i or as root. +You run the script in a shell with sudo -i or as root. ```YAML -sudo i /path-to-script/syno_hdd_db.sh +sudo -i /path-to-script/syno_hdd_db.sh ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. @@ -71,7 +71,7 @@ ### Running the script via SSH If you run the script with the -showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. ```YAML -sudo i /path-to-script/syno_hdd_db.sh -showedits +sudo -i /path-to-script/syno_hdd_db.sh -showedits ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. From 38dfb1d312957aefcbe810101459d28974a381e0 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Thu, 30 Mar 2023 19:22:49 +1100 Subject: [PATCH 003/694] Add files via upload --- images/update-now-disabled.png | Bin 0 -> 11986 bytes images/update-now-working.png | Bin 0 -> 33552 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/update-now-disabled.png create mode 100644 images/update-now-working.png diff --git a/images/update-now-disabled.png b/images/update-now-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..9619bdb6ab9c72a1bdf8ffb66dcff41df0e7698b GIT binary patch literal 11986 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 CK*d)8 literal 0 HcmV?d00001 diff --git a/images/update-now-working.png b/images/update-now-working.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9fbb60903a6f13cd01cd1418b7d60b5deef0a1 GIT binary patch literal 33552 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 literal 0 HcmV?d00001 From ca3db751846545f03c179f56cd11f587ac1d2ca4 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Thu, 6 Apr 2023 06:56:49 +1000 Subject: [PATCH 004/694] Update syno_hdd_db.sh - Changed to show usage if invalid long option used instead of continuing. --- syno_hdd_db.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 07ccaf6..ac97164 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -105,7 +105,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v1.3.33" +scriptver="v1.3.34" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -189,12 +189,14 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -a \ break ;; *) # Show usage options - echo "Invalid option '$1'" + echo -e "Invalid option '$1'\n" usage "$1" ;; esac shift done +else + usage fi From 7456578ce9f6aef5e21df0e360b3efacb5f7e305 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Thu, 6 Apr 2023 06:59:05 +1000 Subject: [PATCH 005/694] Update CHANGES.txt - Changed to show usage if invalid long option used instead of continuing. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index d6f4708..d469c6c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v1.3.34 +- Changed to show usage if invalid long option used instead of continuing. + v1.3.33 - Fixed bug inserting firmware version for already existing model. From 5912c69b15b08e957791ba57bedfc100377064ad Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Thu, 6 Apr 2023 14:23:51 +1000 Subject: [PATCH 006/694] Update CHANGES.txt --- CHANGES.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index d469c6c..d6f4708 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,3 @@ -v1.3.34 -- Changed to show usage if invalid long option used instead of continuing. - v1.3.33 - Fixed bug inserting firmware version for already existing model. From 4bdd31ccf4914648ce57a08f977e526cf950426f Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Thu, 6 Apr 2023 14:27:59 +1000 Subject: [PATCH 007/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index ac97164..ea1bbdf 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -195,8 +195,6 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -a \ esac shift done -else - usage fi From f566e605b3fe0d7260dca7e81a1b04e7e5700a4f Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Thu, 6 Apr 2023 14:31:11 +1000 Subject: [PATCH 008/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index cd06f9e..e47bbe8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v1.3.34 -- Now always shows your drive entries in the host db file if -s or --showedits used instead of only db file was edited during that run. +- Now always shows your drive entries in the host db file if -s or --showedits used instead of only if db file was edited during that run. - Changed to show usage if invalid long option used instead of continuing. v1.3.33 From cb58f08d1d842fb240abaeee6b660ce0a306fb87 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 10 Apr 2023 11:56:29 +1000 Subject: [PATCH 009/694] Create FUNDING.yml --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..41ec634 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: 007revad +custom: ["https://www.paypal.me/007revad"] From 723f705baafacff549254b94a6655a827fbb4647 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 10 Apr 2023 12:28:54 +1000 Subject: [PATCH 010/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e496eec..717dcdc 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ # Synology HDD db +[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) ### Description From 7ae86ea432be6f914c0f001167d801215bda2f79 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 21 Apr 2023 05:57:27 +1000 Subject: [PATCH 011/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff31cc3..e2b38fd 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ #### What the script does: * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). -* Enables creating M.2 storage pools and volumes from within Storage Manager. +* Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Makes DSM recheck disk compatibility so rebooting is not needed (DSM 7 only). * Reminds you that you may need to reboot the Synology after running the script (DSM 6 only). * Checks if there is a newer version of this script and offers to download it for you. From bdb682b4889b237ee72280f8db9d365d5e3ed7be Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 21 Apr 2023 21:22:15 +1000 Subject: [PATCH 012/694] Update syno_hdd_db.sh - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. --- syno_hdd_db.sh | 154 ++++++++++++++++++++++++++++++------------------- 1 file changed, 95 insertions(+), 59 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 8197c5a..418ae98 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,6 +30,9 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # DONE +# Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. +# +# # Improved shell output when editing max memory setting. # # Changed method of checking if drive is a USB drive to prevent ignoring internal drives on RS models. @@ -121,7 +124,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.1.38" +scriptver="v2.2.39" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -371,14 +374,14 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | # Delete downloaded .tar.gz file if ! rm "/tmp/$script-$shorttag.tar.gz"; then - delerr=1 + #delerr=1 echo -e "${Error}ERROR ${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag.tar.gz!" fi # Delete extracted tmp files if ! rm -r "/tmp/$script-$shorttag"; then - delerr=1 + #delerr=1 echo -e "${Error}ERROR ${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag!" fi @@ -437,7 +440,7 @@ getdriveinfo() { # $1 is /sys/block/sata1 etc # Skip USB drives - usb=$(grep $(basename -- "$1") /proc/mounts | grep usb | cut -d" " -f1-2) + usb=$(grep "$(basename -- "$1")" /proc/mounts | grep usb | cut -d" " -f1-2) if [[ ! $usb ]]; then # Get drive model and firmware version @@ -479,12 +482,22 @@ getcardmodel() { 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 + if [[ -f "${model}_${cardmodel,,}${version}.db" ]]; then + m2carddblist+=("${model}_${cardmodel,,}${version}.db") # M.2 card's db file + fi + if [[ -f "${model}_${cardmodel,,}.db" ]]; then + m2carddblist+=("${model}_${cardmodel,,}.db") # M.2 card's db file + fi + 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 + if [[ -f "${model}_${cardmodel,,}${version}.db" ]]; then + m2carddblist+=("${model}_${cardmodel,,}${version}.db") # M.2 card's db file + fi + if [[ -f "${model}_${cardmodel,,}.db" ]]; then + m2carddblist+=("${model}_${cardmodel,,}.db") # M.2 card's db file + fi + m2cardlist+=("$cardmodel") # M.2 card fi fi } @@ -513,7 +526,7 @@ for d in /sys/block/*; do getcardmodel "/dev/$(basename -- "${d}")" # Enable creating M.2 storage pool and volume in Storage Manager - echo 1 > /run/synostorage/disks/$(basename -- "$d")/m2_pool_support + echo 1 > /run/synostorage/disks/"$(basename -- "$d")"/m2_pool_support fi fi ;; @@ -526,7 +539,7 @@ for d in /sys/block/*; do getcardmodel "/dev/$(basename -- "${d}")" # Enable creating M.2 storage pool and volume in Storage Manager - echo 1 > /run/synostorage/disks/$(basename -- "$d")/m2_pool_support + echo 1 > /run/synostorage/disks/"$(basename -- "$d")"/m2_pool_support fi fi ;; @@ -644,16 +657,19 @@ fi #------------------------------------------------------------------------------ # Check databases and add our drives if needed -db1="/var/lib/disk-compatibility/${model}_host${version}.db" -db2="/var/lib/disk-compatibility/${model}_host${version}.db.new" dbpath="/var/lib/disk-compatibility/" +db1list=("$(find "$dbpath" -maxdepth 1 -name "*_host*.db")") +db2list=("$(find "$dbpath" -maxdepth 1 -name "*_host*.db.new")") synoinfo="/etc.defaults/synoinfo.conf" -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 +#if [[ ! -f "$db1" ]]; then echo -e "${Error}ERROR 3${Off} $db1 not found!" && exit 3; fi +if [[ ${#db1list[@]} -eq "0" ]]; then + echo -e "${Error}ERROR 4${Off} Host db file not found!" && exit 4 +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 getdbtype(){ @@ -689,7 +705,10 @@ backupdb() { # Backup host database file if needed -backupdb "$db1" || exit 5 +#backupdb "$db1" || exit 5 +for i in "${!db2list[@]}"; do + backupdb "${db2list[i]}" || exit 5 +done #------------------------------------------------------------------------------ @@ -697,9 +716,11 @@ backupdb "$db1" || exit 5 editcount(){ # Count drives added to host db files - if [[ $1 == "$db1" ]]; then + #if [[ $1 == "$db1" ]]; then + if [[ $1 =~ .*\.db$ ]]; then db1Edits=$((db1Edits +1)) - elif [[ $1 == "$db2" ]]; then + #elif [[ $1 == "$db2" ]]; then + elif [[ $1 =~ .*\.db.new ]]; then db2Edits=$((db2Edits +1)) fi } @@ -797,11 +818,12 @@ updatedb() { echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" # Count drives added to host db files - if [[ $2 == "$db1" ]]; then - db1Edits=$((db1Edits +1)) - elif [[ $2 == "$db2" ]]; then - db2Edits=$((db2Edits +1)) - fi + #if [[ $2 == "$db1" ]]; then + # db1Edits=$((db1Edits +1)) + #elif [[ $2 == "$db2" ]]; then + # db2Edits=$((db2Edits +1)) + #fi + #editcount "$2" else echo -e "\n${Error}ERROR 8${Off} Failed to update $(basename -- "$2")${Off}" >&2 @@ -814,10 +836,16 @@ updatedb() { # HDDs and SATA SSDs num="0" while [[ $num -lt "${#hdds[@]}" ]]; do - updatedb "${hdds[$num]}" "$db1" - if [[ -f "$db2" ]]; then - updatedb "${hdds[$num]}" "$db2" - fi + #updatedb "${hdds[$num]}" "$db1" + #if [[ -f "$db2" ]]; then + # updatedb "${hdds[$num]}" "$db2" + #fi + for i in "${!db1list[@]}"; do + updatedb "${hdds[$num]}" "${db1list[i]}" + done + for i in "${!db2list[@]}"; do + updatedb "${hdds[$num]}" "${db2list[i]}" + done #------------------------------------------------ # Expansion Units @@ -840,10 +868,16 @@ done # M.2 NVMe/SATA drives num="0" while [[ $num -lt "${#nvmes[@]}" ]]; do - updatedb "${nvmes[$num]}" "$db1" - if [[ -f "$db2" ]]; then - updatedb "${nvmes[$num]}" "$db2" - fi + #updatedb "${hdds[$num]}" "$db1" + #if [[ -f "$db2" ]]; then + # updatedb "${hdds[$num]}" "$db2" + #fi + for i in "${!db1list[@]}"; do + updatedb "${nvmes[$num]}" "$i" + done + for i in "${!db2list[@]}"; do + updatedb "${nvmes[$num]}" "$i" + done #------------------------------------------------ # M.2 adaptor cards @@ -1039,36 +1073,38 @@ fi # Show the changes if [[ ${showedits,,} == "yes" ]]; then - getdbtype "$db1" - if [[ $dbtype -gt "6" ]]; then - # Show 11 lines after hdmodel line - lines=11 - elif [[ $dbtype -eq "6" ]]; then - # Show 2 lines after hdmodel line - lines=2 - fi + for i in "${!db1list[@]}"; do + getdbtype "$i" + if [[ $dbtype -gt "6" ]]; then + # Show 11 lines after hdmodel line + lines=11 + elif [[ $dbtype -eq "6" ]]; then + # Show 2 lines after hdmodel line + lines=2 + fi - # HDDs/SSDs - if [[ ${#hdds[@]} -gt "0" ]]; then - num="0" - while [[ $num -lt "${#hdds[@]}" ]]; do - hdmodel=$(printf "%s" "${hdds[$num]}" | cut -d"," -f 1) - echo - jq . "$db1" | grep -A "$lines" "$hdmodel" - num=$((num +1)) - done - fi + # HDDs/SSDs + if [[ ${#hdds[@]} -gt "0" ]]; then + num="0" + while [[ $num -lt "${#hdds[@]}" ]]; do + hdmodel=$(printf "%s" "${hdds[$num]}" | cut -d"," -f 1) + echo + jq . "$i" | grep -A "$lines" "$hdmodel" + num=$((num +1)) + done + fi - # NVMe drives - if [[ ${#nvmes[@]} -gt "0" ]]; then - num="0" - while [[ $num -lt "${#nvmes[@]}" ]]; do - nvmemodel=$(printf "%s" "${nvmes[$num]}" | cut -d"," -f 1) - echo - jq . "$db1" | grep -A "$lines" "$nvmemodel" - num=$((num +1)) - done - fi + # NVMe drives + if [[ ${#nvmes[@]} -gt "0" ]]; then + num="0" + while [[ $num -lt "${#nvmes[@]}" ]]; do + nvmemodel=$(printf "%s" "${nvmes[$num]}" | cut -d"," -f 1) + echo + jq . "$i" | grep -A "$lines" "$nvmemodel" + num=$((num +1)) + done + fi + done fi From 6d35581453f32967c68de9feaaf1028826c4b1e1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 21 Apr 2023 21:22:54 +1000 Subject: [PATCH 013/694] Update CHANGES.txt - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 8af37d1..9603241 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v2.2.39 +- Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. + v2.1.38 - Improved shell output when editing max memory setting. - Changed method of checking if drive is a USB drive to prevent ignoring internal drives on RS models. From 99e513c621cf34502ce0c22996be994498a13df6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 23 Apr 2023 15:45:41 +1000 Subject: [PATCH 014/694] Update syno_hdd_db.sh - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. This will also ensure the script still works if: - Synology append different numbers to the db file names in DSM 8 etc. - The detected NAS model name does not match the .db files' model name. - Now backs up the .db.new files (as well as the .db files). - Now shows max memory in GB instead of MB. - Now shows status of "Support disk compatibility" setting even if it wasn't changed. - Now shows status of "Support memory compatibility" setting even if it wasn't changed. --- syno_hdd_db.sh | 179 ++++++++++++++++++++++++------------------------- 1 file changed, 86 insertions(+), 93 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 418ae98..699753e 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# shellcheck disable=SC1083,SC2054,SC2121 +# shellcheck disable=SC1083,SC2054,SC2121,SC2207 #-------------------------------------------------------------------------------------------------- # Github: https://github.com/007revad/Synology_HDD_db # Script verified at https://www.shellcheck.net/ @@ -31,6 +31,17 @@ # DONE # Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. +# This will also ensure the script still works if: +# Synology append different numbers to the db file names in DSM 8 etc. +# The detected NAS model name does not match the .db files' model name. +# +# Now backs up the .db.new files (as well as the .db files). +# +# Now shows max memory in GB instead of MB. +# +# Now shows status of "Support disk compatibility" setting even if it wasn't changed. +# +# Now shows status of "Support memory compatibility" setting even if it wasn't changed. # # # Improved shell output when editing max memory setting. @@ -174,7 +185,7 @@ EOF # Save options used -args="$@" +args="$*" # Check for flags with getopt @@ -374,14 +385,12 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | # Delete downloaded .tar.gz file if ! rm "/tmp/$script-$shorttag.tar.gz"; then - #delerr=1 echo -e "${Error}ERROR ${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag.tar.gz!" fi # Delete extracted tmp files if ! rm -r "/tmp/$script-$shorttag"; then - #delerr=1 echo -e "${Error}ERROR ${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag!" fi @@ -531,7 +540,6 @@ for d in /sys/block/*; do fi ;; nvc*) # M.2 SATA drives (in PCIe card only?) - #if [[ $d =~ nvc[0-9][0-9]?p[0-9][0-9]?$ ]]; then if [[ $d =~ nvc[0-9][0-9]?$ ]]; then if [[ $m2 != "no" ]]; then getm2info "$d" "nvc" @@ -629,7 +637,6 @@ fi path="/var/log/diskprediction" # shellcheck disable=SC2012 file=$(ls $path | tail -n1) -# shellcheck disable=SC2207 eunitlist=($(grep -Eow "([FRD]XD?[0-9]{3,4})(RP|II|sas){0,2}" "$path/$file" | uniq)) # Sort eunitlist array into new eunits array to remove duplicates @@ -658,18 +665,30 @@ fi # Check databases and add our drives if needed dbpath="/var/lib/disk-compatibility/" -db1list=("$(find "$dbpath" -maxdepth 1 -name "*_host*.db")") -db2list=("$(find "$dbpath" -maxdepth 1 -name "*_host*.db.new")") + +# Host db files +db1list=($(find "$dbpath" -maxdepth 1 -name "*_host*.db")) +db2list=($(find "$dbpath" -maxdepth 1 -name "*_host*.db.new")) + +# Expansion Unit db files +for i in "${!eunits[@]}"; do + eunitdb1list=($(find "$dbpath" -maxdepth 1 -name "${eunits[i],,}*.db")) + eunitdb2list=($(find "$dbpath" -maxdepth 1 -name "${eunits[i],,}*.db.new")) +done + +# M.2 Card db files +for i in "${!m2cards[@]}"; do + m2carddb1list=($(find "$dbpath" -maxdepth 1 -name "*_${m2cards[i],,}*.db")) + m2carddb2list=($(find "$dbpath" -maxdepth 1 -name "*_${m2cards[i],,}*.db.new")) +done synoinfo="/etc.defaults/synoinfo.conf" -#if [[ ! -f "$db1" ]]; then echo -e "${Error}ERROR 3${Off} $db1 not found!" && exit 3; fi if [[ ${#db1list[@]} -eq "0" ]]; then echo -e "${Error}ERROR 4${Off} Host db file not found!" && exit 4 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 +# Don't check .db.new as new installs don't have a .db.new file getdbtype(){ @@ -705,10 +724,18 @@ backupdb() { # Backup host database file if needed -#backupdb "$db1" || exit 5 +for i in "${!db1list[@]}"; do + backupdb "${db1list[i]}" ||{ + echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db1list[i]}")!" + exit 5 + } +done for i in "${!db2list[@]}"; do - backupdb "${db2list[i]}" || exit 5 -done + backupdb "${db2list[i]}" ||{ + echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db2list[i]}")!" + exit 5 # maybe don't exit for .db.new file + } +done #------------------------------------------------------------------------------ @@ -716,10 +743,8 @@ done editcount(){ # Count drives added to host db files - #if [[ $1 == "$db1" ]]; then if [[ $1 =~ .*\.db$ ]]; then db1Edits=$((db1Edits +1)) - #elif [[ $1 == "$db2" ]]; then elif [[ $1 =~ .*\.db.new ]]; then db2Edits=$((db2Edits +1)) fi @@ -785,17 +810,17 @@ updatedb() { if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then # Replace "disk_compatbility_info":{} with "disk_compatbility_info":{"WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}}} - echo "Edit empty db file" + #echo "Edit empty db file:" # debug editdb7 "empty" "$2" elif grep '"'"$hdmodel"'":' "$2" >/dev/null; then # Replace "WD40PURX-64GVNY0":{ with "WD40PURX-64GVNY0":{"80.00A80":{ ... }}}, - echo "Insert firmware version" + #echo "Insert firmware version:" # debug editdb7 "insert" "$2" else # Add "WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}} - echo "Append drive and firmware" + #echo "Append drive and firmware:" # debug editdb7 "append" "$2" fi @@ -807,24 +832,10 @@ updatedb() { string="{\"model\":\"${hdmodel}\",\"firmware\":\"\",\"rec_intvl\":\[1\]}," # {"success":1,"list":[ startstring="{\"success\":1,\"list\":\[" - - #echo "$startstring" >&2 # debug - #echo "$string" >&2 # debug - #echo >&2 # debug - # example: # {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, if sed -ir "s/$startstring/$startstring$string/" "$2"; then echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" - - # Count drives added to host db files - #if [[ $2 == "$db1" ]]; then - # db1Edits=$((db1Edits +1)) - #elif [[ $2 == "$db2" ]]; then - # db2Edits=$((db2Edits +1)) - #fi - #editcount "$2" - else echo -e "\n${Error}ERROR 8${Off} Failed to update $(basename -- "$2")${Off}" >&2 exit 8 @@ -836,10 +847,6 @@ updatedb() { # HDDs and SATA SSDs num="0" while [[ $num -lt "${#hdds[@]}" ]]; do - #updatedb "${hdds[$num]}" "$db1" - #if [[ -f "$db2" ]]; then - # updatedb "${hdds[$num]}" "$db2" - #fi for i in "${!db1list[@]}"; do updatedb "${hdds[$num]}" "${db1list[i]}" done @@ -849,16 +856,13 @@ while [[ $num -lt "${#hdds[@]}" ]]; do #------------------------------------------------ # Expansion Units - num2="0" - while [[ $num2 -lt "${#eunits[@]}" ]]; do - eudb="${dbpath}${eunits[$num2],,}${version}.db" - if [[ -f "$eudb" ]]; then - backupdb "$eudb" &&\ - updatedb "${hdds[$num]}" "$eudb" - else - echo -e "${Error}ERROR 11${Off} $eudb not found!" - fi - num2=$((num2 +1)) + for i in "${!eunitdb1list[@]}"; do + backupdb "${eunitdb1list[i]}" &&\ + updatedb "${hdds[$num]}" "${eunitdb1list[i]}" + done + for i in "${!eunitdb2list[@]}"; do + backupdb "${eunitdb2list[i]}" &&\ + updatedb "${hdds[$num]}" "${eunitdb2list[i]}" done #------------------------------------------------ @@ -868,28 +872,22 @@ done # M.2 NVMe/SATA drives num="0" while [[ $num -lt "${#nvmes[@]}" ]]; do - #updatedb "${hdds[$num]}" "$db1" - #if [[ -f "$db2" ]]; then - # updatedb "${hdds[$num]}" "$db2" - #fi for i in "${!db1list[@]}"; do - updatedb "${nvmes[$num]}" "$i" + updatedb "${nvmes[$num]}" "${db1list[i]}" done for i in "${!db2list[@]}"; do - updatedb "${nvmes[$num]}" "$i" + updatedb "${nvmes[$num]}" "${db2list[i]}" done #------------------------------------------------ # 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)) + for i in "${!m2carddb1list[@]}"; do + backupdb "${m2carddb1list[i]}" &&\ + updatedb "${nvmes[$num]}" "${m2carddb1list[i]}" + done + for i in "${!m2carddb2list[@]}"; do + backupdb "${m2carddb2list[i]}" &&\ + updatedb "${nvmes[$num]}" "${m2carddb2list[i]}" done #------------------------------------------------ @@ -909,22 +907,24 @@ setting="$(get_key_value $synoinfo $sdc)" if [[ $force == "yes" ]]; then if [[ $setting == "yes" ]]; then # Disable support_disk_compatibility - #sed -i "s/${sdc}=\"yes\"/${sdc}=\"no\"/" "$synoinfo" synosetkeyvalue "$synoinfo" "$sdc" "no" setting="$(get_key_value "$synoinfo" $sdc)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support disk compatibility." fi + elif [[ $setting == "no" ]]; then + echo -e "\nSupport disk compatibility already disabled." fi else if [[ $setting == "no" ]]; then # Enable support_disk_compatibility - #sed -i "s/${sdc}=\"no\"/${sdc}=\"yes\"/" "$synoinfo" synosetkeyvalue "$synoinfo" "$sdc" "yes" setting="$(get_key_value "$synoinfo" $sdc)" if [[ $setting == "yes" ]]; then echo -e "\nRe-enabled support disk compatibility." fi + elif [[ $setting == "yes" ]]; then + echo -e "\nSupport disk compatibility already enabled." fi fi @@ -935,26 +935,28 @@ setting="$(get_key_value $synoinfo $smc)" if [[ $ram == "yes" ]]; then if [[ $setting == "yes" ]]; then # Disable support_memory_compatibility - #sed -i "s/${smc}=\"yes\"/${smc}=\"no\"/" "$synoinfo" synosetkeyvalue "$synoinfo" "$smc" "no" setting="$(get_key_value "$synoinfo" $smc)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support memory compatibility." fi + elif [[ $setting == "no" ]]; then + echo -e "\nSupport memory compatibility already disabled." fi else if [[ $setting == "no" ]]; then # Enable support_memory_compatibility - #sed -i "s/${smc}=\"no\"/${smc}=\"yes\"/" "$synoinfo" synosetkeyvalue "$synoinfo" "$smc" "yes" setting="$(get_key_value "$synoinfo" $smc)" if [[ $setting == "yes" ]]; then echo -e "\nRe-enabled support memory compatibility." fi + elif [[ $setting == "yes" ]]; then + echo -e "\nSupport memory compatibility already enabled." fi fi -# Optioanlly set mem_max_mb to the amount of installed memory +# Optionally set mem_max_mb to the amount of installed memory if [[ $ram == "yes" ]]; then # Get total amount of installed memory IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory | grep -i 'size') @@ -982,7 +984,9 @@ if [[ $ram == "yes" ]]; then echo -e "\n${Error}ERROR${Off} Failed to change max memory!" fi elif [[ $setting == "$ramtotal" ]]; then - echo -e "\nMax memory already set to $ramtotal MB." + #echo -e "\nMax memory already set to $ramtotal MB." + ramgb=$((ramtotal / 1024)) + echo -e "\nMax memory already set to $ramgb GB." fi fi @@ -1000,7 +1004,6 @@ if [[ $m2 != "no" ]]; then enabled="yes" elif [[ $setting == "no" ]]; then # Change support_m2_pool="no" to "yes" - #sed -i "s/${smp}=\"no\"/${smp}=\"yes\"/" "$synoinfo" synosetkeyvalue "$synoinfo" "$smp" "yes" enabled="yes" elif [[ $setting == "yes" ]]; then @@ -1031,7 +1034,6 @@ if [[ $nodbupdate == "yes" ]]; then disabled="yes" elif [[ $url != "127.0.0.1" ]]; then # Edit drive_db_test_url= - #sed -i "s/drive_db_test_url=.*/drive_db_test_url=\"127.0.0.1\"/" "$synoinfo" >/dev/null synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" disabled="yes" fi @@ -1052,7 +1054,6 @@ else #if [[ $url == "127.0.0.1" ]]; then if [[ $url ]]; then # Delete "drive_db_test_url=127.0.0.1" line (inc. line break) - #sed -i "/drive_db_test_url=\"127.0.0.1\"/d" "/etc.defaults/synoinfo.conf" sed -i "/drive_db_test_url=*/d" "/etc.defaults/synoinfo.conf" # Check if we re-enabled drive db auto updates @@ -1073,8 +1074,8 @@ fi # Show the changes if [[ ${showedits,,} == "yes" ]]; then - for i in "${!db1list[@]}"; do - getdbtype "$i" + if [[ ${#db1list[@]} -gt "0" ]]; then + getdbtype "${db1list[0]}" if [[ $dbtype -gt "6" ]]; then # Show 11 lines after hdmodel line lines=11 @@ -1084,28 +1085,19 @@ if [[ ${showedits,,} == "yes" ]]; then fi # HDDs/SSDs - if [[ ${#hdds[@]} -gt "0" ]]; then - num="0" - while [[ $num -lt "${#hdds[@]}" ]]; do - hdmodel=$(printf "%s" "${hdds[$num]}" | cut -d"," -f 1) - echo - jq . "$i" | grep -A "$lines" "$hdmodel" - num=$((num +1)) - done - fi + for i in "${!hdds[@]}"; do + hdmodel=$(printf "%s" "${hdds[i]}" | cut -d"," -f 1) + echo + jq . "${db1list[0]}" | grep -A "$lines" "$hdmodel" + done # NVMe drives - if [[ ${#nvmes[@]} -gt "0" ]]; then - num="0" - while [[ $num -lt "${#nvmes[@]}" ]]; do - nvmemodel=$(printf "%s" "${nvmes[$num]}" | cut -d"," -f 1) - echo - jq . "$i" | grep -A "$lines" "$nvmemodel" - num=$((num +1)) - done - fi - done - + for i in "${!nvmes[@]}"; do + hdmodel=$(printf "%s" "${nvmes[i]}" | cut -d"," -f 1) + echo + jq . "${db1list[0]}" | grep -A "$lines" "$hdmodel" + done + fi fi @@ -1117,6 +1109,7 @@ if [[ -f /usr/syno/sbin/synostgdisk ]]; then # DSM 6.2.3 does not have synostgd echo -e "\nDSM successfully checked disk compatibility." else # Ignore DSM 6.2.4 as it returns 255 for "synostgdisk --check-all-disks-compatibility" + # and DSM 6.2.3 and lower have no synostgdisk command if [[ $dsm -gt "6" ]]; then echo -e "\nDSM ${Red}failed${Off} to check disk compatibility with exit code $status" echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." From 57d877be8d2a4b7983e09d8d99f00d0f3fae8082 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 23 Apr 2023 15:46:31 +1000 Subject: [PATCH 015/694] Update CHANGES.txt - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. This will also ensure the script still works if: - Synology append different numbers to the db file names in DSM 8 etc. - The detected NAS model name does not match the .db files' model name. - Now backs up the .db.new files (as well as the .db files). - Now shows max memory in GB instead of MB. - Now shows status of "Support disk compatibility" setting even if it wasn't changed. - Now shows status of "Support memory compatibility" setting even if it wasn't changed. --- CHANGES.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 9603241..49c6991 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,11 @@ v2.2.39 -- Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. +- Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. This will also ensure the script still works if: + - Synology append different numbers to the db file names in DSM 8 etc. + - The detected NAS model name does not match the .db files' model name. +- Now backs up the .db.new files (as well as the .db files). +- Now shows max memory in GB instead of MB. +- Now shows status of "Support disk compatibility" setting even if it wasn't changed. +- Now shows status of "Support memory compatibility" setting even if it wasn't changed. v2.1.38 - Improved shell output when editing max memory setting. From a57124c8a13a44ea15b6e85321b1fecd60d426da Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 23 Apr 2023 19:28:38 +1000 Subject: [PATCH 016/694] Update CHANGES.txt - Added a --restore option to undo all changes. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 49c6991..fd9c888 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v2.2.40 +- Added a --restore option to undo all changes. + v2.2.39 - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. This will also ensure the script still works if: - Synology append different numbers to the db file names in DSM 8 etc. From 0eaec15c123df1e9edf015bcb7301d1c30ef61e2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 23 Apr 2023 19:31:08 +1000 Subject: [PATCH 017/694] Update syno_hdd_db.sh - Added a --restore option to undo all changes made by the script. --- syno_hdd_db.sh | 59 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 699753e..bbe5360 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,6 +30,8 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # DONE +# Added a --restore option to undo all changes. +# # Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. # This will also ensure the script still works if: # Synology append different numbers to the db file names in DSM 8 etc. @@ -135,7 +137,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.39" +scriptver="v2.2.40" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -190,14 +192,18 @@ args="$*" # Check for flags with getopt if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -a \ - -l showedits,noupdate,nodbupdate,m2,force,ram,help,version,debug -- "$@")"; then + -l restore,showedits,noupdate,nodbupdate,m2,force,ram,help,version,debug -- "$@")"; then eval set -- "$options" while true; do case "${1,,}" in + --restore) # Restore changes from backups + restore=yes + break + ;; -s|--showedits) # Show edits done to host db file showedits=yes ;; - -n|--nodbupdate|--noupdate) # Disable disk compatibility db updates + -n|--nodbupdate|--noupdate) # Disable disk compatibility db updates nodbupdate=yes ;; -m|--m2) # Don't add M.2 drives to db files @@ -419,6 +425,49 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | fi +#------------------------------------------------------------------------------ +# Restore changes from backups + +dbpath=/var/lib/disk-compatibility/ +synoinfo="/etc.defaults/synoinfo.conf" + +if [[ $restore == "yes" ]]; then + dbbakfiles=($(find $dbpath -maxdepth 1 \( -name "*.db.new.bak" -o -name "*.db.bak" \))) + echo + + if [[ ${#dbbakfiles[@]} -gt "0" ]] || [[ -f ${synoinfo}.bak ]]; then + + # Restore .db files from backups + for f in "${!dbbakfiles[@]}"; do + deleteme="${dbbakfiles[f]%.bak}" # Remove .bak + if mv "${dbbakfiles[f]}" "$deleteme"; then + echo "Restored $(basename -- "$deleteme")" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore $(basename -- "$deleteme")!\n" + fi + done + + # Restore synoinfo.conf from backup + if [[ -f ${synoinfo}.bak ]]; then + if mv "${synoinfo}.bak" "${synoinfo}"; then + echo "Restored $(basename -- "$synoinfo")" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore synoinfo.conf!\n" + fi + fi + + if [[ -z $restoreerr ]]; then + echo -e "\nRestore successful." + fi + else + echo "Nothing to restore." + fi + exit +fi + + #------------------------------------------------------------------------------ # Get list of installed SATA, SAS and M.2 NVMe/SATA drives, # PCIe M.2 cards and connected Expansion Units. @@ -664,8 +713,6 @@ fi #------------------------------------------------------------------------------ # Check databases and add our drives if needed -dbpath="/var/lib/disk-compatibility/" - # Host db files db1list=($(find "$dbpath" -maxdepth 1 -name "*_host*.db")) db2list=($(find "$dbpath" -maxdepth 1 -name "*_host*.db.new")) @@ -682,8 +729,6 @@ for i in "${!m2cards[@]}"; do m2carddb2list=($(find "$dbpath" -maxdepth 1 -name "*_${m2cards[i],,}*.db.new")) done -synoinfo="/etc.defaults/synoinfo.conf" - if [[ ${#db1list[@]} -eq "0" ]]; then echo -e "${Error}ERROR 4${Off} Host db file not found!" && exit 4 From 9574120c2b23bd5466dd59011e09850c01e91af3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 23 Apr 2023 19:31:40 +1000 Subject: [PATCH 018/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index fd9c888..ce7337f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v2.2.40 -- Added a --restore option to undo all changes. +- Added a --restore option to undo all changes made by the script. v2.2.39 - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. This will also ensure the script still works if: From af55b3dab3be2b53ec37fd6b81f013dbd1adb53e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 24 Apr 2023 07:42:22 +1000 Subject: [PATCH 019/694] Update syno_hdd_db.sh - Fixed bug where expansion units ending in RP or II were not detected. --- syno_hdd_db.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index bbe5360..f70d0e4 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,6 +30,8 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # DONE +# Fixed bug where expansion units ending in RP or II were not detected. +# # Added a --restore option to undo all changes. # # Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. @@ -137,7 +139,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.40" +scriptver="v2.2.41" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -685,8 +687,8 @@ fi # Get list of connected expansion units (aka eunit/ebox) path="/var/log/diskprediction" # shellcheck disable=SC2012 -file=$(ls $path | tail -n1) -eunitlist=($(grep -Eow "([FRD]XD?[0-9]{3,4})(RP|II|sas){0,2}" "$path/$file" | uniq)) +file=$(ls $path | tail -n1) +eunitlist=($(grep -Eowi "([FRD]XD?[0-9]{3,4})(rp|ii|sas){0,2}" "$path/$file" | uniq)) # Sort eunitlist array into new eunits array to remove duplicates if [[ ${#eunitlist[@]} -gt "0" ]]; then From bee39eaf264c5f375abbe67314938667a2d1ef6e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 24 Apr 2023 07:43:17 +1000 Subject: [PATCH 020/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ce7337f..3e4dc28 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v2.2.41 +- Fixed bug where expansion units ending in RP or II were not detected. + v2.2.40 - Added a --restore option to undo all changes made by the script. From 19a9172ce05a31a9f078620efb568b47f5f3c127 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 24 Apr 2023 08:49:57 +1000 Subject: [PATCH 021/694] Update CHANGES.txt --- CHANGES.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3e4dc28..df2a5f8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,10 +1,6 @@ -v2.2.41 +v2.2.42 - Fixed bug where expansion units ending in RP or II were not detected. - -v2.2.40 - Added a --restore option to undo all changes made by the script. - -v2.2.39 - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. This will also ensure the script still works if: - Synology append different numbers to the db file names in DSM 8 etc. - The detected NAS model name does not match the .db files' model name. From f47a863c7f0d84e9c085299ac794b0a6a5474e69 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 24 Apr 2023 08:50:54 +1000 Subject: [PATCH 022/694] Update syno_hdd_db.sh - Fixed bug where expansion units ending in RP or II were not detected. - Added a --restore option to undo all changes made by the script. - Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. This will also ensure the script still works if: - Synology append different numbers to the db file names in DSM 8 etc. - The detected NAS model name does not match the .db files' model name. - Now backs up the .db.new files (as well as the .db files). - Now shows max memory in GB instead of MB. - Now shows status of "Support disk compatibility" setting even if it wasn't changed. - Now shows status of "Support memory compatibility" setting even if it wasn't changed. --- syno_hdd_db.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index f70d0e4..cf0b986 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -47,7 +47,6 @@ # # Now shows status of "Support memory compatibility" setting even if it wasn't changed. # -# # Improved shell output when editing max memory setting. # # Changed method of checking if drive is a USB drive to prevent ignoring internal drives on RS models. @@ -139,7 +138,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.41" +scriptver="v2.2.42" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From a184e2cfdd0e8c80529340df759ef488675b932f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 08:30:38 +1000 Subject: [PATCH 023/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index df2a5f8..e195749 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v2.2.43 +- Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. +- Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. + v2.2.42 - Fixed bug where expansion units ending in RP or II were not detected. - Added a --restore option to undo all changes made by the script. From e1f54a31d4f6d6a639405111ad946ccc4802a7fc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 08:31:56 +1000 Subject: [PATCH 024/694] Update syno_hdd_db.sh - Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. - Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. --- syno_hdd_db.sh | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index cf0b986..bc3da1a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,6 +30,11 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # DONE +# Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. +# +# Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. +# +# # Fixed bug where expansion units ending in RP or II were not detected. # # Added a --restore option to undo all changes. @@ -138,7 +143,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.42" +scriptver="v2.2.43" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -838,14 +843,13 @@ updatedb() { #echo hdmodel "$hdmodel" >&2 # debug #echo fwrev "$fwrev" >&2 # debug - if grep "$hdmodel"'":{"'"$fwrev" "$2" >/dev/null; then - echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 - else - # Check if db file is new or old style - getdbtype "$2" + # Check if db file is new or old style + getdbtype "$2" - if [[ $dbtype -gt "6" ]]; then - # Don't need to add firmware version? + if [[ $dbtype -gt "6" ]]; then + if grep "$hdmodel"'":{"'"$fwrev" "$2" >/dev/null; then + echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 + else fwstrng=\"$fwrev\" fwstrng="$fwstrng":{\"compatibility_interval\":[{\"compatibility\":\"support\",\"not_yet_rolling_status\" fwstrng="$fwstrng":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true}]}, @@ -869,8 +873,11 @@ updatedb() { #echo "Append drive and firmware:" # debug editdb7 "append" "$2" fi - - elif [[ $dbtype -eq "6" ]]; then + fi + elif [[ $dbtype -eq "6" ]]; then + if grep "$hdmodel" "$2" >/dev/null; then + echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 + else # example: # {"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, # Don't need to add firmware version? @@ -880,7 +887,7 @@ updatedb() { startstring="{\"success\":1,\"list\":\[" # example: # {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, - if sed -ir "s/$startstring/$startstring$string/" "$2"; then + if sed -i "s/$startstring/$startstring$string/" "$2"; then echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" else echo -e "\n${Error}ERROR 8${Off} Failed to update $(basename -- "$2")${Off}" >&2 @@ -890,6 +897,7 @@ updatedb() { fi } + # HDDs and SATA SSDs num="0" while [[ $num -lt "${#hdds[@]}" ]]; do @@ -1100,7 +1108,7 @@ else #if [[ $url == "127.0.0.1" ]]; then if [[ $url ]]; then # Delete "drive_db_test_url=127.0.0.1" line (inc. line break) - sed -i "/drive_db_test_url=*/d" "/etc.defaults/synoinfo.conf" + sed -i "/drive_db_test_url=*/d" "$synoinfo" # Check if we re-enabled drive db auto updates url="$(get_key_value $synoinfo drive_db_test_url)" From 0b2455420ae42b84ce2e7fe208e4f6b71d98513d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 08:32:23 +1000 Subject: [PATCH 025/694] Update syno_hdd_db.sh - Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. - Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. --- syno_hdd_db.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index bc3da1a..d903538 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -34,7 +34,6 @@ # # Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. # -# # Fixed bug where expansion units ending in RP or II were not detected. # # Added a --restore option to undo all changes. From 8b0037007f96460788120d6a98d430198ff5213e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 08:35:43 +1000 Subject: [PATCH 026/694] Update README.md Added --restore option --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e2b38fd..6357916 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ ### Options when running the script * If you run the script without --force or -f it will re-eanble "support_disk_compatibility". * --ram or -r to disable "support_memory_compatibility". * If you run the script without --ram or -r it will re-eanble "support_memory_compatibility". +* --restore to undo all the changes the script has made.

From e24f0e3da425a5dd974a2778bec6ab93bbe7894a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 08:39:44 +1000 Subject: [PATCH 027/694] Add --restore option Added info on --restore option --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6357916..426e00a 100644 --- a/README.md +++ b/README.md @@ -89,5 +89,6 @@ ### Running the script via SSH **Donators** -- A big thank you to Gummibando on reddit for their donation. +- Thank you to Gummibando on reddit for their donation. +- Thank you to the onimous donors. From 65f2677206a4a947a46c7978ce982168b38cf152 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:24:22 +1000 Subject: [PATCH 028/694] Update syno_hdd_db.sh - Prevent running with "sh scriptname.sh". --- syno_hdd_db.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index d903538..839ff23 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,6 +30,8 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # DONE +# Prevent running with "sh scriptname.sh". +# # Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. # # Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. @@ -142,10 +144,16 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.43" +scriptver="v2.2.44" script=Synology_HDD_db repo="007revad/Synology_HDD_db" +# Check BASH variable is is non-empty and posix mode is off, else abort with error. +[ "$BASH" ] && ! shopt -qo posix || { + printf >&2 "This is a bash script, don't run it with sh\n" + exit 1 +} + #echo -e "bash version: $(bash --version | head -1 | cut -d' ' -f4)\n" # debug # Shell Colors From 8597e135b57096bab04ee24bf39ee7e4f535d784 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:25:03 +1000 Subject: [PATCH 029/694] Update CHANGES.txt - Prevent running with "sh scriptname.sh". --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index e195749..e1716cc 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v2.2.44 +- Prevent running with "sh scriptname.sh". + v2.2.43 - Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. - Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. From 077419ab8645f15a515cb0a74efd2dbda6635578 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 22:49:05 +1000 Subject: [PATCH 030/694] Update CHANGES.txt - Added --restore info to --help - Updated restore option to download the latest db files from Synology - Now warns you if you try to run it in sh with "sh scriptname.sh" --- CHANGES.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index e1716cc..71435d8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,7 @@ v2.2.44 -- Prevent running with "sh scriptname.sh". +- Added --restore info to --help +- Updated restore option to download the latest db files from Synology +- Now warns you if you try to run it in sh with "sh scriptname.sh" v2.2.43 - Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. From 0978f8ab29743848b22460075fa0ff783f059345 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 25 Apr 2023 22:51:11 +1000 Subject: [PATCH 031/694] Update syno_hdd_db.sh - Added --restore info to --help - Updated restore option to download the latest db files from Synology - Now warns you if you try to run it in sh with "sh scriptname.sh" --- syno_hdd_db.sh | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 839ff23..778e7bc 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,7 +30,12 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # DONE -# Prevent running with "sh scriptname.sh". +# Added --restore info to --help +# +# Updated restore option to download the latest db files from Synology +# +# Now warns you if you try to run it in sh with "sh scriptname.sh" +# # # Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. # @@ -181,6 +186,7 @@ Options: -m, --m2 Don't process M.2 drives -f, --force Force DSM to not check drive compatibility -r, --ram Disable memory compatibility checking + --restore Undo all changes made by the script -h, --help Show this help message -v, --version Show the script version @@ -450,6 +456,16 @@ if [[ $restore == "yes" ]]; then if [[ ${#dbbakfiles[@]} -gt "0" ]] || [[ -f ${synoinfo}.bak ]]; then + # Restore synoinfo.conf from backup + if [[ -f ${synoinfo}.bak ]]; then + if mv "${synoinfo}.bak" "${synoinfo}"; then + echo "Restored $(basename -- "$synoinfo")" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore synoinfo.conf!\n" + fi + fi + # Restore .db files from backups for f in "${!dbbakfiles[@]}"; do deleteme="${dbbakfiles[f]%.bak}" # Remove .bak @@ -461,15 +477,8 @@ if [[ $restore == "yes" ]]; then fi done - # Restore synoinfo.conf from backup - if [[ -f ${synoinfo}.bak ]]; then - if mv "${synoinfo}.bak" "${synoinfo}"; then - echo "Restored $(basename -- "$synoinfo")" - else - restoreerr=1 - echo -e "${Error}ERROR${Off} Failed to restore synoinfo.conf!\n" - fi - fi + # Update .db files from Synology + syno_disk_db_update --update if [[ -z $restoreerr ]]; then echo -e "\nRestore successful." From c89ce47c6c1170380a0548304551e7aa6530d816 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 26 Apr 2023 12:21:44 +1000 Subject: [PATCH 032/694] Add files via upload --- images/syno_hdd_db_help2.png | Bin 0 -> 12490 bytes images/update-now-disabled.png | Bin 0 -> 11986 bytes images/update-now-working.png | Bin 0 -> 33552 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/syno_hdd_db_help2.png create mode 100644 images/update-now-disabled.png create mode 100644 images/update-now-working.png diff --git a/images/syno_hdd_db_help2.png b/images/syno_hdd_db_help2.png new file mode 100644 index 0000000000000000000000000000000000000000..a05aab81a47c368e2e297da8fe053ba98631f723 GIT binary patch literal 12490 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 CK*d)8 literal 0 HcmV?d00001 diff --git a/images/update-now-working.png b/images/update-now-working.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9fbb60903a6f13cd01cd1418b7d60b5deef0a1 GIT binary patch literal 33552 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 literal 0 HcmV?d00001 From e95ff5c10b21509eb5962f5cb7202942c4572b54 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 26 Apr 2023 12:22:27 +1000 Subject: [PATCH 033/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 426e00a..2293692 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ ### Options when running the script * If you run the script without --ram or -r it will re-eanble "support_memory_compatibility". * --restore to undo all the changes the script has made. -

+

### Scheduling the script in Synology's Task Scheduler From 07412e66a1357f3a5c373e7d49092ab27540bf5c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 26 Apr 2023 13:22:22 +1000 Subject: [PATCH 034/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 778e7bc..301bcc0 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -477,6 +477,10 @@ if [[ $restore == "yes" ]]; then fi done + # Delete any .dbr and .db.newr files left by previous script versions + for f in "${dbpath}"*dbr; do rm "$f"; done + for f in "${dbpath}"*db.newr; do rm "$f"; done + # Update .db files from Synology syno_disk_db_update --update From 44aa67f8c55adb47f0b098c83967178d5daa749f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 26 Apr 2023 13:32:42 +1000 Subject: [PATCH 035/694] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2293692..fdb6491 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ ### Description The script works in DSM 7 and DSM 6. +It also has a restore option to undo all the chnages made by the script. + #### What the script does: * Gets the Synology NAS model and DSM version (so it knows which db files to edit). From f1eaa7e3bf4a629b9737f44b60b49a3d0b0e7497 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 27 Apr 2023 05:02:01 +1000 Subject: [PATCH 036/694] Update README.md - Spelling... --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fdb6491..e89fb3b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ### Description The script works in DSM 7 and DSM 6. -It also has a restore option to undo all the chnages made by the script. +It also has a restore option to undo all the changes made by the script. #### What the script does: From e1531392d1db1a1bd3e0e997749131052ff5e3b1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 27 Apr 2023 17:20:08 +1000 Subject: [PATCH 037/694] Update syno_hdd_db.sh - Minor bug fix --- syno_hdd_db.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 301bcc0..5269e67 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -149,7 +149,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.44" +scriptver="v2.2.45" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -478,8 +478,8 @@ if [[ $restore == "yes" ]]; then done # Delete any .dbr and .db.newr files left by previous script versions - for f in "${dbpath}"*dbr; do rm "$f"; done - for f in "${dbpath}"*db.newr; do rm "$f"; done + for f in "${dbpath}"*dbr; do rm "$f" >/dev/null; done + for f in "${dbpath}"*db.newr; do rm "$f">/dev/null; done # Update .db files from Synology syno_disk_db_update --update From 6af4084ced7e7fddac82c2ff373e5b90be18ace5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 27 Apr 2023 17:20:45 +1000 Subject: [PATCH 038/694] Update CHANGES.txt - Minor bug fix --- CHANGES.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 71435d8..ec892b4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,9 @@ +v2.2.45 +- Minor bug fix. + v2.2.44 - Added --restore info to --help -- Updated restore option to download the latest db files from Synology +- Updated restore option to download the latest db files from Synology. - Now warns you if you try to run it in sh with "sh scriptname.sh" v2.2.43 From 253e14ad1201109005a394b8a7f5f05f622e1920 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 27 Apr 2023 17:52:36 +1000 Subject: [PATCH 039/694] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e89fb3b..6c3bd84 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ ### Options when running the script There are optional flags you can use when running the script: * --showedits or -s to show you the changes it made to the Synology's compatible-drive database. -* --noupdate or -n to prevent DSM updating the compatible drive databases. +* --noupdate or -n to prevent DSM updating the compatible drive databases. See note below. * --m2 or -m to prevent processing M.2 drives. * --force or -f to disable "support_disk_compatibility". This should only be needed if any of your drives weren't detected. * If you run the script without --force or -f it will re-eanble "support_disk_compatibility". @@ -53,6 +53,8 @@ ### Options when running the script * If you run the script without --ram or -r it will re-eanble "support_memory_compatibility". * --restore to undo all the changes the script has made. +**Note** If you have some Synology drives and want to update their firmware run the script **without** --noupdate or -n, then do the drive database update from Storage Manager and finally run the script again with your preferred options. +

### Scheduling the script in Synology's Task Scheduler From fc70ae6bbb691264faa07f4f77655426963722f3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 27 Apr 2023 17:55:19 +1000 Subject: [PATCH 040/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c3bd84..39c4cd1 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ ### Options when running the script * If you run the script without --ram or -r it will re-eanble "support_memory_compatibility". * --restore to undo all the changes the script has made. -**Note** If you have some Synology drives and want to update their firmware run the script **without** --noupdate or -n, then do the drive database update from Storage Manager and finally run the script again with your preferred options. +**Note:** If you have some Synology drives and want to update their firmware run the script **without** --noupdate or -n then do the drive database update from Storage Manager and finally run the script again with your preferred options.

From d0f485f665a29713e7e029bf33abb6af9a55c745 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 28 Apr 2023 09:15:48 +1000 Subject: [PATCH 041/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 39c4cd1..1c7fcc6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Synology HDD db +[![Github Releases](https://img.shields.io/github/downloads/007revad/Synology_HDD_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases)
[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) From ecde47fd04deb0f923315037a82ed70d83bb6e9e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 28 Apr 2023 09:52:14 +1000 Subject: [PATCH 042/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c7fcc6..a82191a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Synology HDD db -[![Github Releases](https://img.shields.io/github/downloads/007revad/Synology_HDD_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) +[![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) From 9fbac9a999d139a98e772d1a72e4e87ec3f382fc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 28 Apr 2023 14:29:35 +1000 Subject: [PATCH 043/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a82191a..a495c04 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Synology HDD db +https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg [![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) From 25584cfb04d6c5aac219178a61450c9776393da0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 28 Apr 2023 14:30:26 +1000 Subject: [PATCH 044/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a495c04..fedd988 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Synology HDD db -https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg +[![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) [![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) From 76c4a9a2be48c28fccf98198e8b132be5827a1d3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 28 Apr 2023 14:30:44 +1000 Subject: [PATCH 045/694] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index fedd988..a82191a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # Synology HDD db -[![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) [![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) From fcee1b9866263e307395a53ed1c479d2b19ae754 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 28 Apr 2023 19:05:02 +1000 Subject: [PATCH 046/694] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index a82191a..ca452d5 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,9 @@ # Synology HDD db [![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) + + + [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) ### Description From 2034fc82b5df73bc3927c714c9e34d742a249286 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 28 Apr 2023 19:06:07 +1000 Subject: [PATCH 047/694] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index ca452d5..7340cdc 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,8 @@ # Synology HDD db -[![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) - - - +[![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) ### Description From 0886e269870ae44a8ee13c429bbd4663b3b201cd Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 6 May 2023 09:28:50 +1000 Subject: [PATCH 048/694] Create my-other-scripts.md --- my-other-scripts.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 my-other-scripts.md diff --git a/my-other-scripts.md b/my-other-scripts.md new file mode 100644 index 0000000..e017633 --- /dev/null +++ b/my-other-scripts.md @@ -0,0 +1,28 @@ +## All my Synology Scripts + +- **Synology_HDD_db** + - Add your HDD, SSD and NVMe drives to your Synology's compatible drive database. + +- **Synology_enable_M2_volume** + - Enable creating volumes with non-Synology M.2 drives. + +- **Synology_M2_volume** + - Easily create an M.2 volume on Synology NAS. + +- **Synology_enable_Deduplication** + - Enable deduplication with non-Synology SSDs and unsupported NAS models. + +- **Synology_RAID-F1_SHR_switch** + - Easily switch between SHR and RAID F1. + +- **Synology_Config_Backup** + - Backup and export your Synology DSM configuration. + +- **Synology_Plex_Backup** + - A script to backup Plex to a tgz file. For DSM 7 and DSM 6. + +- **Plex_Server_Sync** + - Sync main Plex server database & metadata to backup Plex server + +- **ScriptNotify** + - DSM 7 package to allow your scripts to send DSM notifications From f7f1cb1705696a67452dfab0e909f629efd73f51 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 7 May 2023 13:28:29 +1000 Subject: [PATCH 049/694] Update my-other-scripts.md --- my-other-scripts.md | 1 + 1 file changed, 1 insertion(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index e017633..44d087c 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -5,6 +5,7 @@ ## All my Synology Scripts - **Synology_enable_M2_volume** - Enable creating volumes with non-Synology M.2 drives. + - Enable Health Info for non-Synology NVMe drives. - **Synology_M2_volume** - Easily create an M.2 volume on Synology NAS. From 91dfc7fffa5ec1fe4028ce55a37d7aad40a54a95 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 7 May 2023 15:12:33 +1000 Subject: [PATCH 050/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7340cdc..b108b4c 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ # Synology HDD db -[![Github Releases](https://img.shields.io/github/downloads/007revad/synology_hdd_db/total.svg)](https://github.com/007revad/Synology_HDD_db/releases) [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) + ### Description From 67ed9f433091d3e0cca11c0211d8c74a11584660 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 23 May 2023 19:52:19 +1000 Subject: [PATCH 051/694] Update syno_hdd_db.sh Fix bug #77 --- syno_hdd_db.sh | 64 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5269e67..437a012 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -3,7 +3,6 @@ #-------------------------------------------------------------------------------------------------- # Github: https://github.com/007revad/Synology_HDD_db # Script verified at https://www.shellcheck.net/ -# Tested on DSM 7.2 beta, 7.1.1 and DSM 6.2.4 # # Easiest solution: # Edit /etc.defaults/synoinfo.conf and change support_disk_compatibility="yes" to "no" and reboot. @@ -15,11 +14,11 @@ # /volume1/scripts/syno_hdd_db.sh # replace /volume1/scripts/ with path to script # # To run in a shell (replace /volume1/scripts/ with path to script): -# sudo /volume1/scripts/syno_hdd_db.sh +# sudo -i /volume1/scripts/syno_hdd_db.sh # or -# sudo /volume1/scripts/syno_hdd_db.sh -showedits +# sudo -i /volume1/scripts/syno_hdd_db.sh -showedits # or -# sudo /volume1/scripts/syno_hdd_db.sh -force -showedits +# sudo -i /volume1/scripts/syno_hdd_db.sh -force -showedits #-------------------------------------------------------------------------------------------------- # TODO @@ -149,12 +148,13 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.45" +scriptver="v2.2.46" script=Synology_HDD_db repo="007revad/Synology_HDD_db" # Check BASH variable is is non-empty and posix mode is off, else abort with error. [ "$BASH" ] && ! shopt -qo posix || { + printf \\a printf >&2 "This is a bash script, don't run it with sh\n" exit 1 } @@ -173,6 +173,9 @@ Cyan='\e[0;36m' Error='\e[41m' Off='\e[0m' +ding(){ + printf \\a +} usage(){ cat </dev/null; done - for f in "${dbpath}"*db.newr; do rm "$f">/dev/null; done + for f in "${dbpath}"*dbr; do + if [[ -f $f ]]; then + rm "$f" >/dev/null + fi + done + for f in "${dbpath}"*db.newr; do + if [[ -f $f ]]; then + rm "$f" >/dev/null + fi + done # Update .db files from Synology syno_disk_db_update --update @@ -520,7 +532,7 @@ fixdrivemodel(){ fi } -getdriveinfo() { +getdriveinfo(){ # $1 is /sys/block/sata1 etc # Skip USB drives @@ -543,7 +555,7 @@ getdriveinfo() { fi } -getm2info() { +getm2info(){ # $1 is /sys/block/nvme0n1 etc nvmemodel=$(cat "$1/device/model") nvmemodel=$(printf "%s" "$nvmemodel" | xargs) # trim leading and trailing white space @@ -559,7 +571,7 @@ getm2info() { fi } -getcardmodel() { +getcardmodel(){ # Get M.2 card model (if M.2 drives found) # $1 is /dev/nvme0n1 etc if [[ ${#nvmelist[@]} -gt "0" ]]; then @@ -639,6 +651,7 @@ fi # Check hdds array isn't empty if [[ ${#hdds[@]} -eq "0" ]]; then + ding echo -e "\n${Error}ERROR${Off} No drives found!" && exit 2 else echo -e "\nHDD/SSD models found: ${#hdds[@]}" @@ -757,6 +770,7 @@ done if [[ ${#db1list[@]} -eq "0" ]]; then + ding echo -e "${Error}ERROR 4${Off} Host db file not found!" && exit 4 fi # Don't check .db.new as new installs don't have a .db.new file @@ -778,7 +792,7 @@ getdbtype(){ } -backupdb() { +backupdb(){ # Backup database file if needed if [[ ! -f "$1.bak" ]]; then if [[ $(basename "$1") == "synoinfo.conf" ]]; then @@ -797,12 +811,14 @@ backupdb() { # Backup host database file if needed for i in "${!db1list[@]}"; do backupdb "${db1list[i]}" ||{ + ding echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db1list[i]}")!" exit 5 } done for i in "${!db2list[@]}"; do backupdb "${db2list[i]}" ||{ + ding echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db2list[i]}")!" exit 5 # maybe don't exit for .db.new file } @@ -821,10 +837,10 @@ editcount(){ fi } - editdb7(){ if [[ $1 == "append" ]]; then # model not in db file - if sed -i "s/}}}/}},\"$hdmodel\":{$fwstrng$default/" "$2"; then # append + #if sed -i "s/}}}/}},\"$hdmodel\":{$fwstrng$default/" "$2"; then # append + if sed -i "s/}}}/}},\"${hdmodel//\//\\/}\":{$fwstrng$default/" "$2"; then # append echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" editcount "$2" else @@ -833,7 +849,8 @@ editdb7(){ fi elif [[ $1 == "insert" ]]; then # model and default exists - if sed -i "s/\"$hdmodel\":{/\"$hdmodel\":{$fwstrng/" "$2"; then # insert firmware + #if sed -i "s/\"$hdmodel\":{/\"$hdmodel\":{$fwstrng/" "$2"; then # insert firmware + if sed -i "s/\"${hdmodel//\//\\/}\":{/\"${hdmodel//\//\\/}\":{$fwstrng/" "$2"; then # insert firmware echo -e "Updated ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" #editcount "$2" else @@ -842,7 +859,8 @@ editdb7(){ fi elif [[ $1 == "empty" ]]; then # db file only contains {} - if sed -i "s/{}/{\"$hdmodel\":{$fwstrng${default}}/" "$2"; then # empty + #if sed -i "s/{}/{\"$hdmodel\":{$fwstrng${default}}/" "$2"; then # empty + if sed -i "s/{}/{\"${hdmodel//\//\\/}\":{$fwstrng${default}}/" "$2"; then # empty echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" editcount "$2" else @@ -854,7 +872,7 @@ editdb7(){ } -updatedb() { +updatedb(){ hdmodel=$(printf "%s" "$1" | cut -d"," -f 1) fwrev=$(printf "%s" "$1" | cut -d"," -f 2) @@ -907,9 +925,11 @@ updatedb() { startstring="{\"success\":1,\"list\":\[" # example: # {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, - if sed -i "s/$startstring/$startstring$string/" "$2"; then + #if sed -i "s/$startstring/$startstring$string/" "$2"; then + if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" else + ding echo -e "\n${Error}ERROR 8${Off} Failed to update $(basename -- "$2")${Off}" >&2 exit 8 fi @@ -973,7 +993,7 @@ done # Edit /etc.defaults/synoinfo.conf # Backup synoinfo.conf if needed -backupdb "$synoinfo" || exit 9 +backupdb "$synoinfo" || ding && exit 9 # Optionally disable "support_disk_compatibility" sdc=support_disk_compatibility @@ -1074,7 +1094,8 @@ if [[ $m2 != "no" ]]; then enabled="" if [[ ! $setting ]]; then # Add support_m2_pool="yes" - echo 'support_m2_pool="yes"' >> "$synoinfo" + #echo 'support_m2_pool="yes"' >> "$synoinfo" + synosetkeyvalue "$synoinfo" "$smp" "yes" enabled="yes" elif [[ $setting == "no" ]]; then # Change support_m2_pool="no" to "yes" @@ -1104,7 +1125,8 @@ disabled="" if [[ $nodbupdate == "yes" ]]; then if [[ ! $url ]]; then # 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" + synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" disabled="yes" elif [[ $url != "127.0.0.1" ]]; then # Edit drive_db_test_url= From a7cb0d1ffbe7745016e0463ad60e1a44b8c6ccc1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 24 May 2023 02:09:43 +1000 Subject: [PATCH 052/694] Update README.md Updated reboot info --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b108b4c..ec09f34 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,9 @@ #### What the script does: * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. -* Makes DSM recheck disk compatibility so rebooting is not needed (DSM 7 only). -* Reminds you that you may need to reboot the Synology after running the script (DSM 6 only). +* Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). + * **If you have M.2 drives you may need to reboot.** + * Reminds you that you may need to reboot the Synology after running the script (DSM 6 only). * Checks if there is a newer version of this script and offers to download it for you. * The new version available messages time out so they don't prevent the script running if it is scheduled to run unattended. @@ -40,7 +41,7 @@ ### When to run the script You would need to re-run the script after a DSM update. If you have DSM set to auto update the best option is to run the script every time the Synology boots, and the best way to do that is to setup a scheduled task to run the the script at boot-up. -**Note:** For DSM 6, after you first run the script you may need to reboot the Synology to see the effect of the changes. +**Note:** After you first run the script you may need to reboot the Synology to see the effect of the changes. ### Options when running the script From 6264173c7a6339afe76c3eadaa9a5aa2fe031fa2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 24 May 2023 02:38:41 +1000 Subject: [PATCH 053/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 437a012..9cce579 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -148,7 +148,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.46" +scriptver="v2.2.47" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -805,6 +805,7 @@ backupdb(){ return 1 fi fi + return 0 } @@ -812,14 +813,14 @@ backupdb(){ for i in "${!db1list[@]}"; do backupdb "${db1list[i]}" ||{ ding - echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db1list[i]}")!" + #echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db1list[i]}")!" exit 5 } done for i in "${!db2list[@]}"; do backupdb "${db2list[i]}" ||{ ding - echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db2list[i]}")!" + #echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db2list[i]}")!" exit 5 # maybe don't exit for .db.new file } done @@ -993,7 +994,10 @@ done # Edit /etc.defaults/synoinfo.conf # Backup synoinfo.conf if needed -backupdb "$synoinfo" || ding && exit 9 +backupdb "$synoinfo" ||{ + ding + exit 9 +} # Optionally disable "support_disk_compatibility" sdc=support_disk_compatibility @@ -1203,12 +1207,15 @@ if [[ -f /usr/syno/sbin/synostgdisk ]]; then # DSM 6.2.3 does not have synostgd status=$? if [[ $status -eq "0" ]]; then echo -e "\nDSM successfully checked disk compatibility." + echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." else # Ignore DSM 6.2.4 as it returns 255 for "synostgdisk --check-all-disks-compatibility" # and DSM 6.2.3 and lower have no synostgdisk command if [[ $dsm -gt "6" ]]; then echo -e "\nDSM ${Red}failed${Off} to check disk compatibility with exit code $status" - echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." + #if [[ $m2 != "no" ]] && [[ ${#m2cards[@]} -gt "0" ]]; then + echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." + #fi fi fi fi From d51360d9616897c8853402d44b6d9d61dca35d8a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 24 May 2023 02:45:48 +1000 Subject: [PATCH 054/694] Update CHANGES.txt --- CHANGES.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ec892b4..64f312c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +v2.2.47 +- Updated reboot info in readme. +- Added reboot message for DSM 7. +- Bug fix for issue #77 (escape slashes in drive model name). +- Added error sound. + v2.2.45 - Minor bug fix. From 138fc73a434cab6c3bb76731981a9eb9f41f9be4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 31 May 2023 20:29:55 +1000 Subject: [PATCH 055/694] Update CHANGES.txt --- CHANGES.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 64f312c..0f4d343 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +v2.3.48 +- Now the script reloads itself after updating. +- Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. + - Autoupdate adds success/failed entry to the DSM system log. +- Added -w, --wdda option to disable WDDA. + v2.2.47 - Updated reboot info in readme. - Added reboot message for DSM 7. From a33689af0539059f07d82944ad598f75555b0428 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 31 May 2023 20:36:16 +1000 Subject: [PATCH 056/694] Update syno_hdd_db.sh - Now the script reloads itself after updating. - Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. - Autoupdate logs update success or errors to DSM system log. - Added -w, --wdda option to disable WDDA. --- syno_hdd_db.sh | 152 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 115 insertions(+), 37 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 9cce579..df51eb2 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,13 +29,19 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # DONE +# Now the script reloads itself after updating. +# +# Added --autoupdate option to auto update synology_hdd_db x days after new version released. +# Autoupdate logs update success or errors to DSM system log. +# Added -w, --wdda option to disable WDDA +# +# # Added --restore info to --help # # Updated restore option to download the latest db files from Synology # # Now warns you if you try to run it in sh with "sh scriptname.sh" # -# # Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. # # Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. @@ -148,7 +154,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.2.47" +scriptver="v2.3.48" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -184,15 +190,19 @@ $script $scriptver - by 007revad Usage: $(basename "$0") [options] Options: - -s, --showedits Show edits made to _host db and db.new 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 - --restore Undo all changes made by the script - -h, --help Show this help message - -v, --version Show the script version - + -s, --showedits Show edits made to _host db and db.new 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 + -w, --wdda Disable WD WDDA + --restore Undo all changes made by the script + --autoupdate=[age] Auto update script (useful when script is scheduled) + 'age' is how old a release must be in days before + auto-updating, and must be a number: 0 or greater + -h, --help Show this help message + -v, --version Show the script version + EOF exit 0 } @@ -209,12 +219,13 @@ EOF # Save options used -args="$*" +args=("$@") # Check for flags with getopt -if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -a \ - -l restore,showedits,noupdate,nodbupdate,m2,force,ram,help,version,debug -- "$@")"; then +if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ + restore,showedits,noupdate,nodbupdate,m2,force,ram,wdda,autoupdate:,help,version,debug \ + -- "$@")"; then eval set -- "$options" while true; do case "${1,,}" in @@ -237,6 +248,18 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -a \ -r|--ram) # Disable "support_memory_compatibility" ram=yes ;; + -w|--wdda) # Disable "support_memory_compatibility" + wdda=no + ;; + --autoupdate) # Auto update script + autoupdate=yes + if [[ $2 =~ ^[0-9]+$ ]]; then + delay="$2" + shift + else + delay="0" + fi + ;; -h|--help) # Show usage options usage ;; @@ -320,7 +343,7 @@ elif [[ $model =~ '-j'$ ]]; then # GitHub issue #2 fi # Show options used -echo "Using options: $args" +echo "Using options: ${args[*]}" #echo "" # To keep output readable @@ -328,18 +351,37 @@ echo "Using options: $args" #------------------------------------------------------------------------------ # Check latest release with GitHub API -get_latest_release(){ - # Curl timeout options: - # https://unix.stackexchange.com/questions/94604/does-curl-have-a-timeout - curl --silent -m 10 --connect-timeout 5 \ - "https://api.github.com/repos/$1/releases/latest" | - grep '"tag_name":' | # Get tag line - sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value +syslog_set(){ + if [[ ${1,,} == "info" ]] || [[ ${1,,} == "warn" ]] || [[ ${1,,} == "err" ]]; then + if [[ $autoupdate == "yes" ]]; then + # Add entry to Synology system log + synologset1 sys "$1" 0x11100000 "$2" + fi + fi } -tag=$(get_latest_release "$repo") + +# Get latest release info +# Curl timeout options: +# https://unix.stackexchange.com/questions/94604/does-curl-have-a-timeout +release=$(curl --silent -m 10 --connect-timeout 5 \ + "https://api.github.com/repos/$repo/releases/latest") + +# Release version +tag=$(echo "$release" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') shorttag="${tag:1}" -#scriptpath=$(dirname -- "$0") + +# Release published date +published=$(echo "$release" | grep '"published_at":' | sed -E 's/.*"([^"]+)".*/\1/') +published="${published:0:10}" +published=$(date -d "$published" '+%s') + +# Today's date +now=$(date '+%s') + +# Days since release published +age=$(((now - published)/(60*60*24))) + # Get script location # https://stackoverflow.com/questions/59895/ @@ -368,8 +410,17 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | 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 [[ $autoupdate == "yes" ]]; then + if [[ $age -gt "$delay" ]] || [[ $age -eq "$delay" ]]; then + echo "Downloading $tag" + reply=y + else + echo "Skipping as $tag is less than $delay days old." + fi + else + echo -e "${Cyan}Do you want to download $tag now?${Off} [y/n]" + read -r -t 30 reply + fi if [[ ${reply,,} == "y" ]]; then if cd /tmp; then url="https://github.com/$repo/archive/refs/tags/$tag.tar.gz" @@ -377,36 +428,40 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | then echo -e "${Error}ERROR ${Off} Failed to download"\ "$script-$shorttag.tar.gz!" + syslog_set warn "$script $tag failed to download" else if [[ -f /tmp/$script-$shorttag.tar.gz ]]; then # Extract tar file to /tmp/ if ! tar -xf "/tmp/$script-$shorttag.tar.gz" -C "/tmp"; then echo -e "${Error}ERROR ${Off} Failed to"\ "extract $script-$shorttag.tar.gz!" + syslog_set warn "$script failed to extract $script-$shorttag.tar.gz!" else # Copy new script sh files to script location if ! cp -p "/tmp/$script-$shorttag/"*.sh "$scriptpath"; then copyerr=1 echo -e "${Error}ERROR ${Off} Failed to copy"\ "$script-$shorttag .sh file(s) to:\n $scriptpath" + syslog_set warn "$script failed to copy $tag to script location" else - # Set permsissions on CHANGES.txt + # Set permsissions on script sh files if ! chmod 744 "$scriptpath/"*.sh ; then permerr=1 echo -e "${Error}ERROR ${Off} Failed to set permissions on:" echo "$scriptpath *.sh file(s)" + syslog_set warn "$script failed to set permissions on $tag" fi fi # Copy new CHANGES.txt file to script location if ! cp -p "/tmp/$script-$shorttag/CHANGES.txt" "$scriptpath"; then - copyerr=1 + if [[ $autoupdate != "yes" ]]; then copyerr=1; fi echo -e "${Error}ERROR ${Off} Failed to copy"\ "$script-$shorttag/CHANGES.txt to:\n $scriptpath" else # Set permsissions on CHANGES.txt if ! chmod 744 "$scriptpath/CHANGES.txt"; then - permerr=1 + if [[ $autoupdate != "yes" ]]; then permerr=1; fi echo -e "${Error}ERROR ${Off} Failed to set permissions on:" echo "$scriptpath/CHANGES.txt" fi @@ -416,32 +471,38 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | if ! rm "/tmp/$script-$shorttag.tar.gz"; then echo -e "${Error}ERROR ${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag.tar.gz!" + syslog_set warn "$script update failed to delete tmp files" fi # Delete extracted tmp files if ! rm -r "/tmp/$script-$shorttag"; then echo -e "${Error}ERROR ${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag!" + syslog_set warn "$script update failed to delete tmp files" fi # Notify of success (if there were no errors) if [[ $copyerr != 1 ]] && [[ $permerr != 1 ]]; then - echo -e "\n$tag and changes.txt downloaded to:"\ - "$scriptpath" - echo -e "${Cyan}Do you want to stop this script"\ - "so you can run the new one?${Off} [y/n]" - read -r reply - if [[ ${reply,,} == "y" ]]; then exit; fi + echo -e "\n$tag and changes.txt downloaded to: ${scriptpath}\n" + syslog_set info "$script successfully updated to $tag" + + # Reload script + printf -- '-%.0s' {1..79}; echo # print 79 - + exec "$0" "${args[@]}" + else + syslog_set warn "$script update to $tag had errors" fi fi else echo -e "${Error}ERROR ${Off}"\ "/tmp/$script-$shorttag.tar.gz not found!" #ls /tmp | grep "$script" # debug + syslog_set warn "/tmp/$script-$shorttag.tar.gz not found" fi fi else echo -e "${Error}ERROR ${Off} Failed to cd to /tmp!" + syslog_set warn "$script update failed to cd to /tmp" fi fi fi @@ -813,14 +874,14 @@ backupdb(){ for i in "${!db1list[@]}"; do backupdb "${db1list[i]}" ||{ ding - #echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db1list[i]}")!" + echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db1list[i]}")!" exit 5 } done for i in "${!db2list[@]}"; do backupdb "${db2list[i]}" ||{ ding - #echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db2list[i]}")!" + echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db2list[i]}")!" exit 5 # maybe don't exit for .db.new file } done @@ -1169,6 +1230,23 @@ else fi +# Optionally disable "support_wdda" +wdda=support_wdda +setting="$(get_key_value $synoinfo $wdda)" +if [[ $wdda == "no" ]]; then + if [[ $setting == "yes" ]]; then + # Disable support_memory_compatibility + synosetkeyvalue "$synoinfo" "$wdda" "no" + setting="$(get_key_value "$synoinfo" $wdda)" + if [[ $setting == "no" ]]; then + echo -e "\nDisabled support WDDA." + fi + elif [[ $setting == "no" ]]; then + echo -e "\nSupport WDDA already disabled." + fi +fi + + #------------------------------------------------------------------------------ # Finished From 2b63ff2eaacc071571816dc7a4a48e42c95f290f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 31 May 2023 20:36:42 +1000 Subject: [PATCH 057/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 0f4d343..a5f3fb4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ v2.3.48 - Now the script reloads itself after updating. - Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. - - Autoupdate adds success/failed entry to the DSM system log. + - Autoupdate logs update success or errors to DSM system log. - Added -w, --wdda option to disable WDDA. v2.2.47 From 11bd2b03f740a272095adb61e74848847d779b28 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 11 Jun 2023 20:14:50 +1000 Subject: [PATCH 058/694] Update CHANGES.txt --- CHANGES.txt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index a5f3fb4..92f3bfa 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,15 @@ -v2.3.48 +v2.3.49 +- Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). +- Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). +- Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). +- Fixed error if /run/synostorage/disks/nvme0n1/m2_pool_support doesn't exist yet (for DSM 7.2). +- Fixed drive db update still being disabled in /etc/synoinfo.conf after script run without -n or --noupdate option. +- Fixed drive db update still being disabled in /etc/synoinfo.conf after script run with --restore option. +- Fixed permissions on restored files being incorrect after script run with --restore option. +- Fixed permissions on backup files. +- Now skips checking the amount of installed memory in DSM 6 (because it was never working). - Now the script reloads itself after updating. +- Added "You may need to reboot" message when NVMe drives were detected. - Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. - Autoupdate logs update success or errors to DSM system log. - Added -w, --wdda option to disable WDDA. From ddedd6e72ba9b75ec626c2cde265cddb6f3e771e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 11 Jun 2023 20:15:04 +1000 Subject: [PATCH 059/694] Update syno_hdd_db.sh v2.3.49 - Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). - Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). - Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). - Fixed error if /run/synostorage/disks/nvme0n1/m2_pool_support doesn't exist yet (for DSM 7.2). - Fixed drive db update still being disabled in /etc/synoinfo.conf after script run without -n or --noupdate option. - Fixed drive db update still being disabled in /etc/synoinfo.conf after script run with --restore option. - Fixed permissions on restored files being incorrect after script run with --restore option. - Fixed permissions on backup files. - Now skips checking the amount of installed memory in DSM 6 (because it was never working). - Now the script reloads itself after updating. - Added "You may need to reboot" message when NVMe drives were detected. - Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. - Autoupdate logs update success or errors to DSM system log. - Added -w, --wdda option to disable WDDA. --- syno_hdd_db.sh | 189 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 126 insertions(+), 63 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index df51eb2..af495cc 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,12 +27,36 @@ # # 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. +# +# Solve issue of --restore option restoring files that were backed up with older DSM version. # DONE +# +# Added "You may need to reboot" message when NVMe drives were detected. +# +# Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). +# +# Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). +# +# Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). +# +# Fixed error if /run/synostorage/disks/nvme0n1/m2_pool_support doesn't exist yet (for DSM 7.2). +# +# Fixed drive db update still being disabled in /etc/synoinfo.conf after script run without -n or --noupdate option. +# +# Fixed drive db update still being disabled in /etc/synoinfo.conf after script run with --restore option. +# +# Fixed permissions on restored files being incorrect after script run with --restore option. +# +# Fixed permissions on backup files. +# +# Now skips checking the amount of installed memory in DSM 6 (because it was never working). +# # Now the script reloads itself after updating. # -# Added --autoupdate option to auto update synology_hdd_db x days after new version released. +# Added --autoupdate=AGE option to auto update synology_hdd_db x days after new version released. # Autoupdate logs update success or errors to DSM system log. +# # Added -w, --wdda option to disable WDDA # # @@ -154,7 +178,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.3.48" +scriptver="v2.3.49" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -190,18 +214,18 @@ $script $scriptver - by 007revad Usage: $(basename "$0") [options] Options: - -s, --showedits Show edits made to _host db and db.new 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 - -w, --wdda Disable WD WDDA - --restore Undo all changes made by the script - --autoupdate=[age] Auto update script (useful when script is scheduled) - 'age' is how old a release must be in days before - auto-updating, and must be a number: 0 or greater - -h, --help Show this help message - -v, --version Show the script version + -s, --showedits Show edits made to _host db and db.new 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 (DSM 7.x only) + -w, --wdda Disable WD WDDA + --restore Undo all changes made by the script + --autoupdate=AGE Auto update script (useful when script is scheduled) + AGE is how many days old a release must be before + auto-updating. AGE must be a number: 0 or greater + -h, --help Show this help message + -v, --version Show the script version EOF exit 0 @@ -444,7 +468,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | "$script-$shorttag .sh file(s) to:\n $scriptpath" syslog_set warn "$script failed to copy $tag to script location" else - # Set permsissions on script sh files + # Set permissions on script sh files if ! chmod 744 "$scriptpath/"*.sh ; then permerr=1 echo -e "${Error}ERROR ${Off} Failed to set permissions on:" @@ -459,7 +483,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "${Error}ERROR ${Off} Failed to copy"\ "$script-$shorttag/CHANGES.txt to:\n $scriptpath" else - # Set permsissions on CHANGES.txt + # Set permissions on CHANGES.txt if ! chmod 744 "$scriptpath/CHANGES.txt"; then if [[ $autoupdate != "yes" ]]; then permerr=1; fi echo -e "${Error}ERROR ${Off} Failed to set permissions on:" @@ -523,8 +547,9 @@ if [[ $restore == "yes" ]]; then # Restore synoinfo.conf from backup if [[ -f ${synoinfo}.bak ]]; then - if mv "${synoinfo}.bak" "${synoinfo}"; then - echo "Restored $(basename -- "$synoinfo")" + #if mv "${synoinfo}.bak" "${synoinfo}"; then + if cp -p "${synoinfo}.bak" "${synoinfo}"; then + echo -e "Restored $(basename -- "$synoinfo")\n" else restoreerr=1 echo -e "${Error}ERROR${Off} Failed to restore synoinfo.conf!\n" @@ -533,12 +558,13 @@ if [[ $restore == "yes" ]]; then # Restore .db files from backups for f in "${!dbbakfiles[@]}"; do - deleteme="${dbbakfiles[f]%.bak}" # Remove .bak - if mv "${dbbakfiles[f]}" "$deleteme"; then - echo "Restored $(basename -- "$deleteme")" + replaceme="${dbbakfiles[f]%.bak}" # Remove .bak + #if mv "${dbbakfiles[f]}" "$replaceme"; then + if cp -p "${dbbakfiles[f]}" "$replaceme"; then + echo "Restored $(basename -- "$replaceme")" else restoreerr=1 - echo -e "${Error}ERROR${Off} Failed to restore $(basename -- "$deleteme")!\n" + echo -e "${Error}ERROR${Off} Failed to restore $(basename -- "$replaceme")!\n" fi done @@ -554,6 +580,9 @@ if [[ $restore == "yes" ]]; then fi done + # Delete "drive_db_test_url=127.0.0.1" line (inc. line break) from /etc/synoinfo.conf + sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf + # Update .db files from Synology syno_disk_db_update --update @@ -572,8 +601,7 @@ fi # PCIe M.2 cards and connected Expansion Units. fixdrivemodel(){ - # Remove " 00Y" from end of Samsung/Lenovo SSDs - # To fix issue #13 + # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi @@ -597,7 +625,7 @@ getdriveinfo(){ # $1 is /sys/block/sata1 etc # Skip USB drives - usb=$(grep "$(basename -- "$1")" /proc/mounts | grep usb | cut -d" " -f1-2) + usb=$(grep "$(basename -- "$1")" /proc/mounts | grep "[Uu][Ss][Bb]" | cut -d" " -f1-2) if [[ ! $usb ]]; then # Get drive model and firmware version @@ -607,8 +635,12 @@ getdriveinfo(){ # Fix dodgy model numbers fixdrivemodel "$hdmodel" - fwrev=$(cat "$1/device/rev") - fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space + #fwrev=$(cat "$1/device/rev") + #fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space + + #fwrev=$(syno_hdd_util --ssd_detect | grep "/dev/$d" | awk '{print $2}') # GitHub issue #86, 87 + # Account for SSD drives with spaces in their model name/number + fwrev=$(syno_hdd_util --ssd_detect | grep "/dev/$d" | awk '{print $(NF-3)}') # GitHub issue #86, 87 if [[ $hdmodel ]] && [[ $fwrev ]]; then hdlist+=("${hdmodel},${fwrev}") @@ -659,6 +691,11 @@ getcardmodel(){ fi } +m2_pool_support(){ + if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 + echo 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support + fi +} for d in /sys/block/*; do # $d is /sys/block/sata1 etc @@ -683,7 +720,9 @@ for d in /sys/block/*; do getcardmodel "/dev/$(basename -- "${d}")" # Enable creating M.2 storage pool and volume in Storage Manager - echo 1 > /run/synostorage/disks/"$(basename -- "$d")"/m2_pool_support + m2_pool_support "$d" + + rebootmsg=yes # Show reboot message at end fi fi ;; @@ -695,7 +734,9 @@ for d in /sys/block/*; do getcardmodel "/dev/$(basename -- "${d}")" # Enable creating M.2 storage pool and volume in Storage Manager - echo 1 > /run/synostorage/disks/"$(basename -- "$d")"/m2_pool_support + m2_pool_support "$d" + + rebootmsg=yes # Show reboot message at end fi fi ;; @@ -857,15 +898,20 @@ backupdb(){ # Backup database file if needed if [[ ! -f "$1.bak" ]]; then if [[ $(basename "$1") == "synoinfo.conf" ]]; then - echo "" >&2 + echo "" >&2 # Formatting for stdout fi - if cp "$1" "$1.bak"; then + if cp -p "$1" "$1.bak"; then echo -e "Backed up $(basename -- "${1}")" >&2 else echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${1}")!" >&2 return 1 fi fi + # Fix permissions if needed + octal=$(stat -c "%a %n" "$1" | cut -d" " -f1) + if [[ ! $octal -eq 644 ]]; then + chmod 644 "$1" + fi return 0 } @@ -1116,36 +1162,53 @@ else fi # Optionally set mem_max_mb to the amount of installed memory -if [[ $ram == "yes" ]]; then - # Get total amount of installed memory - IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory | grep -i 'size') - if [[ ${#array[@]} -gt "0" ]]; then - num="0" - while [[ $num -lt "${#array[@]}" ]]; do - ramsize=$(printf %s "${array[num]}" | cut -d" " -f2) - if [[ $ramtotal ]]; then - ramtotal=$((ramtotal +ramsize)) - else - ramtotal="$ramsize" - fi - num=$((num +1)) - done - fi - # Set mem_max_mb to the amount of installed memory - setting="$(get_key_value $synoinfo mem_max_mb)" - if [[ $ramtotal -gt $setting ]]; then - synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" - # Check we changed mem_max_mb +if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo + if [[ $ram == "yes" ]]; then + # Get total amount of installed memory + IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory | grep "[Ss]ize") # GitHub issue #86, 87 + if [[ ${#array[@]} -gt "0" ]]; then + num="0" + while [[ $num -lt "${#array[@]}" ]]; do + #ramsize=$(printf %s "${array[num]}" | cut -d" " -f2) + ramsize=$(printf %s "${array[num]}" | awk '{print $2}') # GitHub issue #86, 87 + bytes=$(printf %s "${array[num]}" | awk '{print $3}') # GitHub issue #86, 87 + if [[ $ramsize =~ ^[0-9]+$ ]]; then # Check $ramsize is numeric # GitHub issue #86, 87 + if [[ $ramtotal ]]; then + ramtotal=$((ramtotal +ramsize)) + else + ramtotal="$ramsize" + fi + else + echo -e "\n${Error}ERROR${Off} Memory size is not numeric: '$ramsize'" + fi + num=$((num +1)) + done + fi + # Set mem_max_mb to the amount of installed memory setting="$(get_key_value $synoinfo mem_max_mb)" - if [[ $setting == "$ramtotal" ]]; then - echo -e "\nSet max memory to $ramtotal MB." + if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric + if [[ $bytes == "GB" ]]; then # DSM 7.2 dmidecode returns GB + ramtotal=$((ramtotal * 1024)) # Convert to MB + fi + if [[ $ramtotal -gt $setting ]]; then + synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" + # Check we changed mem_max_mb + setting="$(get_key_value $synoinfo mem_max_mb)" + if [[ $setting == "$ramtotal" ]]; then + #echo -e "\nSet max memory to $ramtotal MB." + ramgb=$((ramtotal / 1024)) + echo -e "\nSet max memory to $ramtotal GB." + else + echo -e "\n${Error}ERROR${Off} Failed to change max memory!" + fi + elif [[ $setting == "$ramtotal" ]]; then + #echo -e "\nMax memory already set to $ramtotal MB." + ramgb=$((ramtotal / 1024)) + echo -e "\nMax memory already set to $ramgb GB." + fi else - echo -e "\n${Error}ERROR${Off} Failed to change max memory!" + echo -e "\n${Error}ERROR${Off} Total memory size is not numeric: '$ramtotal'" fi - elif [[ $setting == "$ramtotal" ]]; then - #echo -e "\nMax memory already set to $ramtotal MB." - ramgb=$((ramtotal / 1024)) - echo -e "\nMax memory already set to $ramgb GB." fi fi @@ -1216,6 +1279,7 @@ else if [[ $url ]]; then # Delete "drive_db_test_url=127.0.0.1" line (inc. line break) sed -i "/drive_db_test_url=*/d" "$synoinfo" + sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf # Check if we re-enabled drive db auto updates url="$(get_key_value $synoinfo drive_db_test_url)" @@ -1285,20 +1349,19 @@ if [[ -f /usr/syno/sbin/synostgdisk ]]; then # DSM 6.2.3 does not have synostgd status=$? if [[ $status -eq "0" ]]; then echo -e "\nDSM successfully checked disk compatibility." - echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." + rebootmsg=yes # Show reboot message at end else # Ignore DSM 6.2.4 as it returns 255 for "synostgdisk --check-all-disks-compatibility" # and DSM 6.2.3 and lower have no synostgdisk command if [[ $dsm -gt "6" ]]; then echo -e "\nDSM ${Red}failed${Off} to check disk compatibility with exit code $status" - #if [[ $m2 != "no" ]] && [[ ${#m2cards[@]} -gt "0" ]]; then - echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." - #fi + rebootmsg=yes # Show reboot message at end fi fi fi -if [[ $dsm -eq "6" ]]; then +# Show reboot message if required +if [[ $dsm -eq "6" ]] || [[ $rebootmsg == "yes" ]]; then echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." fi From 8d26e2b2cf40fc04f120fe8c11452fe2ebb8a9a9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 12 Jun 2023 20:07:58 +1000 Subject: [PATCH 060/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index af495cc..2a87358 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -36,7 +36,7 @@ # # Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). # -# Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). +# Fixed detecting the amount of installed memory (for DSM 7.2 which now reports GB instead of MB). # # Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). # @@ -178,7 +178,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.3.49" +scriptver="v2.3.50" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -628,19 +628,21 @@ getdriveinfo(){ usb=$(grep "$(basename -- "$1")" /proc/mounts | grep "[Uu][Ss][Bb]" | cut -d" " -f1-2) if [[ ! $usb ]]; then - # Get drive model and firmware version + # Get drive model hdmodel=$(cat "$1/device/model") hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space # Fix dodgy model numbers fixdrivemodel "$hdmodel" + # Get drive firmware version #fwrev=$(cat "$1/device/rev") #fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space - #fwrev=$(syno_hdd_util --ssd_detect | grep "/dev/$d" | awk '{print $2}') # GitHub issue #86, 87 + device="/dev/$(basename -- "$1")" + #fwrev=$(syno_hdd_util --ssd_detect | grep "$device" | awk '{print $2}') # GitHub issue #86, 87 # Account for SSD drives with spaces in their model name/number - fwrev=$(syno_hdd_util --ssd_detect | grep "/dev/$d" | awk '{print $(NF-3)}') # GitHub issue #86, 87 + fwrev=$(syno_hdd_util --ssd_detect | grep "$device" | awk '{print $(NF-3)}') # GitHub issue #86, 87 if [[ $hdmodel ]] && [[ $fwrev ]]; then hdlist+=("${hdmodel},${fwrev}") From fdbcc53b106aa87afdb2f5b5da50ec626662a840 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 12 Jun 2023 20:08:51 +1000 Subject: [PATCH 061/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 92f3bfa..8829523 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v2.3.49 +v2.3.50 - Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). - Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). - Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). From 3938527dd0dcd5205615f9e717100dd3be577b9f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 12 Jun 2023 20:14:58 +1000 Subject: [PATCH 062/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 8829523..be401a7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v2.3.50 +v2.3.51 - Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). - Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). - Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). From 14356645da06a88eb109cf8d0e49912c46377909 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 12 Jun 2023 20:15:22 +1000 Subject: [PATCH 063/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 2a87358..46ffe24 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -178,7 +178,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.3.50" +scriptver="v2.3.51" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From 836a150c16c3b7912de5b92d35e9e70304ab4215 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 12 Jun 2023 20:56:20 +1000 Subject: [PATCH 064/694] Update CHANGES.txt --- CHANGES.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index be401a7..5ffe7fb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v2.3.51 +v2.3.52 - Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). - Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). - Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). @@ -7,8 +7,9 @@ v2.3.51 - Fixed drive db update still being disabled in /etc/synoinfo.conf after script run with --restore option. - Fixed permissions on restored files being incorrect after script run with --restore option. - Fixed permissions on backup files. -- Now skips checking the amount of installed memory in DSM 6 (because it was never working). +- Now skips checking the amount of installed memory in DSM 6 (because it was never working in DSM 6). - Now the script reloads itself after updating. +- Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. - Added "You may need to reboot" message when NVMe drives were detected. - Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. - Autoupdate logs update success or errors to DSM system log. From 3d9b62889a74abefa3a87f53cd8891842988bd48 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 12 Jun 2023 20:59:15 +1000 Subject: [PATCH 065/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 46ffe24..f96ee35 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -22,15 +22,13 @@ #-------------------------------------------------------------------------------------------------- # TODO -# Bypass M.2 volume lock for unsupported M.2 drives. -# See https://github.com/007revad/Synology_enable_M2_volume -# # 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. # # Solve issue of --restore option restoring files that were backed up with older DSM version. # DONE +# Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. # # Added "You may need to reboot" message when NVMe drives were detected. # @@ -178,7 +176,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.3.51" +scriptver="v2.3.52" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -811,9 +809,9 @@ fi # Check m2cards array isn't empty if [[ $m2 != "no" ]]; then if [[ ${#m2cards[@]} -eq "0" ]]; then - echo -e "No M.2 cards found\n" + echo -e "No M.2 PCIe cards found\n" else - echo "M.2 card models found: ${#m2cards[@]}" + echo "M.2 PCIe card models found: ${#m2cards[@]}" num="0" while [[ $num -lt "${#m2cards[@]}" ]]; do echo "${m2cards[num]}" From 720932c425f01a4f3b12d389d787c6cc0f44c935 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 16 Jun 2023 10:25:58 +1000 Subject: [PATCH 066/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 5ffe7fb..ce78926 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v2.3.52 +v2.3.53 - Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). - Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). - Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). From a97daa6214b7cb3bfd54458019f5be73cbc8ca83 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 16 Jun 2023 10:27:09 +1000 Subject: [PATCH 067/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index ce78926..a9619e6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,6 +9,7 @@ v2.3.53 - Fixed permissions on backup files. - Now skips checking the amount of installed memory in DSM 6 (because it was never working in DSM 6). - Now the script reloads itself after updating. +- Changed help to show -r, --ram also sets max memory to the amount of installed memory. - Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. - Added "You may need to reboot" message when NVMe drives were detected. - Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. From 6e96d4e6d1b92e8953e35ee70c564e8a5cac85b4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 16 Jun 2023 10:27:47 +1000 Subject: [PATCH 068/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index f96ee35..43181d5 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -28,6 +28,8 @@ # Solve issue of --restore option restoring files that were backed up with older DSM version. # DONE +# Changed help to show -r, --ram also sets max memory to the amount of installed memory. +# # Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. # # Added "You may need to reboot" message when NVMe drives were detected. @@ -176,7 +178,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.3.52" +scriptver="v2.3.53" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -216,7 +218,8 @@ Options: -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 (DSM 7.x only) + -r, --ram Disable memory compatibility checking (DSM 7.x only), + and sets max memory to the amount of installed memory -w, --wdda Disable WD WDDA --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) @@ -1169,17 +1172,20 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo if [[ ${#array[@]} -gt "0" ]]; then num="0" while [[ $num -lt "${#array[@]}" ]]; do - #ramsize=$(printf %s "${array[num]}" | cut -d" " -f2) - ramsize=$(printf %s "${array[num]}" | awk '{print $2}') # GitHub issue #86, 87 - bytes=$(printf %s "${array[num]}" | awk '{print $3}') # GitHub issue #86, 87 - if [[ $ramsize =~ ^[0-9]+$ ]]; then # Check $ramsize is numeric # GitHub issue #86, 87 - if [[ $ramtotal ]]; then - ramtotal=$((ramtotal +ramsize)) + check=$(printf %s "${array[num]}" | awk '{print $1}') + if [[ ${check,,} == "size:" ]]; then + #ramsize=$(printf %s "${array[num]}" | cut -d" " -f2) + ramsize=$(printf %s "${array[num]}" | awk '{print $2}') # GitHub issue #86, 87 + bytes=$(printf %s "${array[num]}" | awk '{print $3}') # GitHub issue #86, 87 + if [[ $ramsize =~ ^[0-9]+$ ]]; then # Check $ramsize is numeric # GitHub issue #86, 87 + if [[ $ramtotal ]]; then + ramtotal=$((ramtotal +ramsize)) + else + ramtotal="$ramsize" + fi else - ramtotal="$ramsize" + echo -e "\n${Error}ERROR${Off} Memory size is not numeric: '$ramsize'" fi - else - echo -e "\n${Error}ERROR${Off} Memory size is not numeric: '$ramsize'" fi num=$((num +1)) done From d284226e4f33d40f8a337ce0b2066c52b530eeee Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 17 Jun 2023 10:48:12 +1000 Subject: [PATCH 069/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index a9619e6..e368a04 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v2.3.53 +v2.3.54 - Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). - Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). - Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). From e44e0ec48e5144ae4b29c8ef6d9a0bd766967d0d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 17 Jun 2023 10:51:16 +1000 Subject: [PATCH 070/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 43181d5..da7ff06 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -178,7 +178,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.3.53" +scriptver="v2.3.54" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From 8c7347abcd6d2ccc8b43d411c326acd3a8830e12 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 20 Jun 2023 14:44:14 +1000 Subject: [PATCH 071/694] Update syno_hdd_db.sh - Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. - You can use a M2D20, M2D18, M2D17 or E10M20-T1 on any model with a PCIe slot (not Mini PCIe). - Added -i, --immutable option to enable immutable snapshots on models older than '20 series running DSM 7.2. --- syno_hdd_db.sh | 102 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 13 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index da7ff06..2722c3e 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -28,7 +28,11 @@ # Solve issue of --restore option restoring files that were backed up with older DSM version. # DONE -# Changed help to show -r, --ram also sets max memory to the amount of installed memory. +# Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. +# +# Added -i, --immutable option to enable immutable snapshots on models older than '20 series running DSM 7.2. +# +# Changed help to show that -r, --ram also sets max memory to the amount of installed memory. # # Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. # @@ -58,6 +62,9 @@ # Autoupdate logs update success or errors to DSM system log. # # Added -w, --wdda option to disable WDDA +# https://kb.synology.com/en-us/DSM/tutorial/Which_Synology_NAS_supports_WDDA +# https://www.youtube.com/watch?v=cLGi8sPLkLY +# https://community.synology.com/enu/forum/1/post/159537 # # # Added --restore info to --help @@ -178,16 +185,16 @@ # Optionally disable "support_disk_compatibility". -scriptver="v2.3.54" +scriptver="v3.0.55" script=Synology_HDD_db repo="007revad/Synology_HDD_db" -# Check BASH variable is is non-empty and posix mode is off, else abort with error. -[ "$BASH" ] && ! shopt -qo posix || { +# Check BASH variable is bash +if [ ! "$(basename "$BASH")" = bash ]; then + echo "This is a bash script. Do not run it with $(basename "$BASH")" printf \\a - printf >&2 "This is a bash script, don't run it with sh\n" exit 1 -} +fi #echo -e "bash version: $(bash --version | head -1 | cut -d' ' -f4)\n" # debug @@ -221,6 +228,8 @@ Options: -r, --ram Disable memory compatibility checking (DSM 7.x only), and sets max memory to the amount of installed memory -w, --wdda Disable WD WDDA + -i, --immutable Enable immutable snapshots on models older than + 20-series (DSM 7.2 and newer only). --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before @@ -249,7 +258,7 @@ args=("$@") # Check for flags with getopt if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ - restore,showedits,noupdate,nodbupdate,m2,force,ram,wdda,autoupdate:,help,version,debug \ + restore,showedits,noupdate,nodbupdate,m2,force,ram,wdda,immutable,autoupdate:,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do @@ -273,6 +282,9 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ -r|--ram) # Disable "support_memory_compatibility" ram=yes ;; + -i|--immutable) # Enable "support_worm" (immutable snapshots) + immutable=yes + ;; -w|--wdda) # Disable "support_memory_compatibility" wdda=no ;; @@ -337,6 +349,7 @@ fi # cut -d"/" -f5 | cut -d"_" -f1 | uniq) model=$(cat /proc/sys/kernel/syno_hw_version) +modelname="$model" # Show script version @@ -360,10 +373,12 @@ model=${model,,} # Check for dodgy characters after model number if [[ $model =~ 'pv10-j'$ ]]; then # GitHub issue #10 - model=${model%??????}+ # replace last 6 chars with + + modelname=${modelname%??????}+ # replace last 6 chars with + + model=${model%??????}+ # replace last 6 chars with + echo -e "\nUsing model: $model" elif [[ $model =~ '-j'$ ]]; then # GitHub issue #2 - model=${model%??} # remove last 2 chars + modelname=${modelname%??} # remove last 2 chars + model=${model%??} # remove last 2 chars echo -e "\nUsing model: $model" fi @@ -1100,6 +1115,52 @@ while [[ $num -lt "${#nvmes[@]}" ]]; do done +#------------------------------------------------------------------------------ +# Enable unsupported Synology M2 PCIe cards + +enable_card(){ + if [[ -f $1 ]] && [[ -n $2 ]]; then + # Check if section exists + if ! grep '^\['"$2"'\]$' "$1"; then + echo -e "Section [$2] not found in $(basename -- "$1")!" >&2 + return + fi + # Check if already enabled + val=$(get_section_key_value "$1" "$2" "$modelname") + if [[ $val != "yes" ]]; then + if set_section_key_value "$1" "$2" "$modelname" yes; then + echo -e "Enabled $1 for $modelname" >&2 + else + echo -e "${Error}ERROR 5${Off} Failed to enable $1 for ${modelname}!" >&2 + fi + else + echo -e "$1 already enabled for $modelname" >&2 + fi + fi +} + +for c in "${!m2cards[@]}"; do + echo "" + m2cardconf="/usr/syno/etc.defaults/adapter_cards.conf" + case "$c" in + E10M20-T1) + enable_card "$m2cardconf" E10M20-T1_sup_nvme + enable_card "$m2cardconf" E10M20-T1_sup_sata + ;; + M2D20) + enable_card "$m2cardconf" M2D20_sup_nvme + ;; + M2D18) + enable_card "$m2cardconf" M2D18_sup_nvme + enable_card "$m2cardconf" M2D18_sup_sata + ;; + M2D17) + enable_card "$m2cardconf" M2D17_sup_sata + ;; + esac +done + + #------------------------------------------------------------------------------ # Edit /etc.defaults/synoinfo.conf @@ -1301,13 +1362,12 @@ fi # Optionally disable "support_wdda" -wdda=support_wdda -setting="$(get_key_value $synoinfo $wdda)" +setting="$(get_key_value $synoinfo support_wdda)" if [[ $wdda == "no" ]]; then if [[ $setting == "yes" ]]; then # Disable support_memory_compatibility - synosetkeyvalue "$synoinfo" "$wdda" "no" - setting="$(get_key_value "$synoinfo" $wdda)" + synosetkeyvalue "$synoinfo" support_wdda "no" + setting="$(get_key_value "$synoinfo" support_wdda)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support WDDA." fi @@ -1317,6 +1377,22 @@ if [[ $wdda == "no" ]]; then fi +# Optionally enable "support_worm" (immutable snapshots) +setting="$(get_key_value $synoinfo support_worm)" +if [[ $immutable == "yes" ]]; then + if [[ $setting != "yes" ]]; then + # Disable support_memory_compatibility + synosetkeyvalue "$synoinfo" support_worm "yes" + setting="$(get_key_value "$synoinfo" support_worm)" + if [[ $setting == "yes" ]]; then + echo -e "\nEnabled Immutable Snapshots." + fi + elif [[ $setting == "no" ]]; then + echo -e "\nImmutable Snapshots already enabled." + fi +fi + + #------------------------------------------------------------------------------ # Finished From 7afea5768d1415b99cabecc3728a06a63f2dc5f1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 20 Jun 2023 14:44:31 +1000 Subject: [PATCH 072/694] Update CHANGES.txt --- CHANGES.txt | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e368a04..abf7652 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,15 @@ -v2.3.54 +v3.0.55 +- Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. + - You can use a M2D20, M2D18, M2D17 or E10M20-T1 on any model with a PCIe slot (not Mini PCIe). +- Now the script reloads itself after updating. +- Added -i, --immutable option to enable immutable snapshots on models older than '20 series running DSM 7.2. +- Added -w, --wdda option to disable WDDA (to prevent warnings when WD drives have been running more than 3 years). +- Added "You may need to reboot" message when NVMe drives were detected. +- Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. + - Autoupdate logs update success or errors to DSM system log. +- Changed help to show -r, --ram also sets max memory to the amount of installed memory. +- Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. +- Changed to skip checking the amount of installed memory in DSM 6 (because it was never working in DSM 6). - Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). - Fixed detecting amount of installed memory (for DSM 7.2 which now reports GB instead of MB). - Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). @@ -7,14 +18,6 @@ v2.3.54 - Fixed drive db update still being disabled in /etc/synoinfo.conf after script run with --restore option. - Fixed permissions on restored files being incorrect after script run with --restore option. - Fixed permissions on backup files. -- Now skips checking the amount of installed memory in DSM 6 (because it was never working in DSM 6). -- Now the script reloads itself after updating. -- Changed help to show -r, --ram also sets max memory to the amount of installed memory. -- Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. -- Added "You may need to reboot" message when NVMe drives were detected. -- Added --autoupdate=[age] option to auto update synology_hdd_db x days after new version released. - - Autoupdate logs update success or errors to DSM system log. -- Added -w, --wdda option to disable WDDA. v2.2.47 - Updated reboot info in readme. From 921c6d22901e2a0af57330abf360f7e9cbda076a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 20 Jun 2023 14:51:45 +1000 Subject: [PATCH 073/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ec09f34..7f76f07 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ### Description Add your SATA or SAS HDDs and SSDs plus SATA and NVMe M.2 drives to your Synology's compatible drive databases, including your M.2 card and Expansion Unit databases. -The script works in DSM 7 and DSM 6. +The script works in DSM 7, including DSM 7.2, and DSM 6. It also has a restore option to undo all the changes made by the script. From 87882fee529493d4c81b0daa8e58f5a62882bcd7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 20 Jun 2023 15:03:22 +1000 Subject: [PATCH 074/694] Update README.md --- README.md | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7f76f07..310d081 100644 --- a/README.md +++ b/README.md @@ -25,11 +25,13 @@ #### What the script does: * Optionally disable DSM's "support_disk_compatibility". * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. +* Optionally enables M2D20, M2D18, M2D17 and E10M20-T1 on Synology NAS that don't officially support them. +* Optionally enables immutable snapshots on models older than '20 series running DSM 7.2. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** - * Reminds you that you may need to reboot the Synology after running the script (DSM 6 only). + * Reminds you that you may need to reboot the Synology after running the script. * Checks if there is a newer version of this script and offers to download it for you. * The new version available messages time out so they don't prevent the script running if it is scheduled to run unattended. @@ -46,14 +48,20 @@ ### When to run the script ### Options when running the script There are optional flags you can use when running the script: -* --showedits or -s to show you the changes it made to the Synology's compatible-drive database. -* --noupdate or -n to prevent DSM updating the compatible drive databases. See note below. -* --m2 or -m to prevent processing M.2 drives. -* --force or -f to disable "support_disk_compatibility". This should only be needed if any of your drives weren't detected. - * If you run the script without --force or -f it will re-eanble "support_disk_compatibility". -* --ram or -r to disable "support_memory_compatibility". - * If you run the script without --ram or -r it will re-eanble "support_memory_compatibility". -* --restore to undo all the changes the script has made. +```YAML +-s, --showedits Show edits made to _host db and db.new 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 (DSM 7.x only) and set max memory to amount of installed memory +-w, --wdda Disable WD WDDA +-i, --immutable Enable immutable snapshots on models older than 20-series (DSM 7.2 and newer only) + --restore Undo all changes made by the script + --autoupdate=AGE Auto update script (useful when script is scheduled) + AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater +-h, --help Show this help message +-v, --version Show the script version +``` **Note:** If you have some Synology drives and want to update their firmware run the script **without** --noupdate or -n then do the drive database update from Storage Manager and finally run the script again with your preferred options. From 1b3eaf55b2dd23e960287b96de0876cb71af71dc Mon Sep 17 00:00:00 2001 From: Anton Smith Date: Thu, 22 Jun 2023 08:16:56 +1200 Subject: [PATCH 075/694] Fixing typos with showedits argument --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 310d081..2eb39e7 100644 --- a/README.md +++ b/README.md @@ -83,10 +83,10 @@ ### Running the script via SSH

-If you run the script with the -showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. +If you run the script with the --showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. ```YAML -sudo -i /path-to-script/syno_hdd_db.sh -nr -showedits +sudo -i /path-to-script/syno_hdd_db.sh -nr --showedits ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. From 70b24d99a8078959012479c87c4535ec20c80ac7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Jun 2023 10:36:56 +1000 Subject: [PATCH 076/694] Update syno_hdd_db.sh Minor bug fix for checking amount of installed memory. --- syno_hdd_db.sh | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 2722c3e..2a4b545 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -28,6 +28,9 @@ # Solve issue of --restore option restoring files that were backed up with older DSM version. # DONE +# Minor bug fix for checking amount of installed memory. +# +# # Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. # # Added -i, --immutable option to enable immutable snapshots on models older than '20 series running DSM 7.2. @@ -185,7 +188,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.0.55" +scriptver="v3.0.56" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -1244,8 +1247,8 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo else ramtotal="$ramsize" fi - else - echo -e "\n${Error}ERROR${Off} Memory size is not numeric: '$ramsize'" + #else + # echo -e "\n${Error}ERROR${Off} Memory size is not numeric: '$ramsize'" fi fi num=$((num +1)) @@ -1253,9 +1256,9 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo fi # Set mem_max_mb to the amount of installed memory setting="$(get_key_value $synoinfo mem_max_mb)" - if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric - if [[ $bytes == "GB" ]]; then # DSM 7.2 dmidecode returns GB - ramtotal=$((ramtotal * 1024)) # Convert to MB + if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric + if [[ $bytes == "GB" ]]; then # DSM 7.2 dmidecode returns GB + ramtotal=$((ramtotal * 1024)) # Convert to MB fi if [[ $ramtotal -gt $setting ]]; then synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" @@ -1272,6 +1275,10 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo #echo -e "\nMax memory already set to $ramtotal MB." ramgb=$((ramtotal / 1024)) echo -e "\nMax memory already set to $ramgb GB." + else [[ $setting -lt "$ramtotal" ]] + #echo -e "\nMax memory is set to $ramtotal MB." + ramgb=$((ramtotal / 1024)) + echo -e "\nMax memory is set to $ramgb GB." fi else echo -e "\n${Error}ERROR${Off} Total memory size is not numeric: '$ramtotal'" From c688adf878326e62d19d8b2b0c7f525f45c63919 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Jun 2023 10:37:48 +1000 Subject: [PATCH 077/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 7b4aea7..fed379a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.0.56 +- Minor bug fix for checking amount of installed memory. + v3.0.55 - Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. - You can use a M2D20, M2D18, M2D17 or E10M20-T1 on any model with a PCIe slot (not Mini PCIe). From f22c0da784908c7edefe2939be6baa83831b92e4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 24 Jun 2023 13:42:18 +1000 Subject: [PATCH 078/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2eb39e7..0a55cb8 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ ### Options when running the script ### Scheduling the script in Synology's Task Scheduler -See How to schedule a script in Synology Task Manager +See How to schedule a script in Synology Task Scheduler ### Running the script via SSH From a66496d06cf341bb5dddaadcf84eb5d1a6cd35b7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 24 Jun 2023 13:46:44 +1000 Subject: [PATCH 079/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2eb39e7..0a55cb8 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ ### Options when running the script ### Scheduling the script in Synology's Task Scheduler -See How to schedule a script in Synology Task Manager +See How to schedule a script in Synology Task Scheduler ### Running the script via SSH From 7e2111670457713b97bc5838e2f589b0890246da Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 24 Jun 2023 14:15:36 +1000 Subject: [PATCH 080/694] Update how_to_schedule.md --- how_to_schedule.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how_to_schedule.md b/how_to_schedule.md index 6db03aa..2eb596f 100644 --- a/how_to_schedule.md +++ b/how_to_schedule.md @@ -1,4 +1,4 @@ -# How to schedule a script in Synology Task Manager +# How to schedule a script in Synology Task Scheduler To schedule a script to run on your Synology at boot-up or shut-down follow these steps: From 39c37c9321e7c7582b03ab978a7370139726c575 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 24 Jun 2023 14:21:21 +1000 Subject: [PATCH 081/694] Update how_to_schedule.md --- how_to_schedule.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how_to_schedule.md b/how_to_schedule.md index 2eb596f..be8d2cd 100644 --- a/how_to_schedule.md +++ b/how_to_schedule.md @@ -16,7 +16,7 @@ # How to schedule a script in Synology Task Scheduler - e.g. If you saved the script to a shared folder on volume1 called "scripts" you'd type: **/volume1/scripts/syno_hdd_db.sh** 11. Click **OK** to save the settings. -Here's some screenshots showing what needs to set: +Here's some screenshots showing what needs to be set:

From 3c638a2b3a65a89205b634cbe04cd67a0c2cd31f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 24 Jun 2023 14:52:45 +1000 Subject: [PATCH 082/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 44d087c..1da561a 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -25,5 +25,8 @@ ## All my Synology Scripts - **Plex_Server_Sync** - Sync main Plex server database & metadata to backup Plex server +- **Synology_DSM_reinstall** + - Easily re-install the same DSM version without losing any data or settings + - **ScriptNotify** - DSM 7 package to allow your scripts to send DSM notifications From b5fe91e19c31bfaea6d02b8a191e94ff0c7c874c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:38:24 +1000 Subject: [PATCH 083/694] Create tmp.txt --- dtb/tmp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dtb/tmp.txt diff --git a/dtb/tmp.txt b/dtb/tmp.txt new file mode 100644 index 0000000..d675fa4 --- /dev/null +++ b/dtb/tmp.txt @@ -0,0 +1 @@ +foo bar From dea89c624f1dac4aaec24ebd897555a04bfe8390 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:40:44 +1000 Subject: [PATCH 084/694] Create tmp.txt --- dtb/64570/tmp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dtb/64570/tmp.txt diff --git a/dtb/64570/tmp.txt b/dtb/64570/tmp.txt new file mode 100644 index 0000000..d675fa4 --- /dev/null +++ b/dtb/64570/tmp.txt @@ -0,0 +1 @@ +foo bar From 2dcb0a6dce6a7e9e9818beec0bd7aca75b50377b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:41:09 +1000 Subject: [PATCH 085/694] Add files via upload --- dtb/64570/DS1520+_model.dtb | Bin 0 -> 3617 bytes dtb/64570/DS1522+_model.dtb | Bin 0 -> 4175 bytes dtb/64570/DS1621+_model.dtb | Bin 0 -> 3834 bytes dtb/64570/DS1821+_model.dtb | Bin 0 -> 4420 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/64570/DS1520+_model.dtb create mode 100644 dtb/64570/DS1522+_model.dtb create mode 100644 dtb/64570/DS1621+_model.dtb create mode 100644 dtb/64570/DS1821+_model.dtb diff --git a/dtb/64570/DS1520+_model.dtb b/dtb/64570/DS1520+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..5bce9d2f9169d9bcd84acafddecf237e72476549 GIT binary patch literal 3617 zcmd5nJd22qfrnCp?g3bt8JSPr6B5` z0>U%VCa&@98$c(3kf%w@qUtgbu1^EK$kG9YUmRLyALiZCn!~(bT7Q7~b0A}9zimB% z2@KS&!*UV!3M~GSRx*+(ad^nGXAmhEMi_M5%oTI(%SW*)eEX!3A*RldktE zIc$&O!TVg7Lmg{dro36Kl~RsN$GSdV|4)4daYobF4NHv+>kND853akHti7|q`w4Uv z2nWg`?+?&jAj}E!&cO6Un6$PxRsR{u?+WZMo90uiQgKputmZ=MJH3?B7!1Qe`{zJ^ z72gsEHdVev{!o^sZrqbMbWB#|1!aYN6}zZL)R~5T74~tUoW_0+=EsRWukBgb)%}?Z zyG%viSB)xmu{#U7~`vx|K#BhQtV>dwWpXPhexXqywx&G&^2zKbQm=zo4cS{r#Us(Y`+ zn_qH#L|>eRygGgKVaa1r;$}f7q$FZK4ap%*dB9>K9u}Si@gRYRhYgZ(jsx=UQ1bh} z4;A*7rXbGg8_Dz{#+{V*fa48P>U2Yw_a|?47|TX>;Bztz;)AXmgk*Q`~TRUg19SE926iW5{2cp=e!nv;qe}Ke*_IJ zEd@0#e*s;}6e*%8NHkGIjfD7q^RT^pXW#AW3Pzgs%s1cn`=0aIN7w&-!Pw2O7-PGP z-FQOZTh!m7ev>*iu897N887{EJG(;Ps~CTMQj}Slob>4L(fFFO^q}^H5P>)K{f~P* zuhJO$fCnt-eV_U()IoC{Yv6_KHR_nZM*WMXUP$_)Ii80!e%hOp59}FrzV~qIeM$pr z;2pC2ZCdN>j*p!XuktETS=rq40Ks^c&cY_tW2gH^J?m`w$+@=SVwd7F3EPek)Fs&u(A2b{U8eK z*rtc^;wbOe2J-r|5ZmGtv5OxXX}eu5{HjzOh0)x}I2*acH7Ogzy}b^u_Wi)$^Jw#- zIXlkUOUpHx`>_>jZL_iC;XFzWoW|?o2hpyB-eD{OL^gx-!Y#k*Q}*NNwEAwCn{_O#n+M&8vOasoWe{~`E4yE%W0 zvDe+4$ovEP(K*ay93-`r1rex0o^0bE;+_d;(dM`1E$gsI%#J?AYx4+R&A%KgUA>SQ zixt+;z~^Fx_*{0Z9G;8SbE}i)h}D&iVrBQ|g<@r{n)cl0%dyg{=fw)~LF>l~b>e)x zth#bKE;Ux>n(S(Dtgg&;I20?5bY86V+hiqHH#Uvc?zTU)2NA0_|6}`V2b?|LG5_rw zYhYjL=$z;Ow?^Gkt>A6AQLT*l54;QcZ|~@qcg+7g#`xBMiGwz%%G$jg$&Zyg@gnCX zVun6Y*Ziejr%!ucYI}S7?Uvt2KlJwXyEDg~L4*1iYSz1c7(bdV6k(wOkIn@SyFQ}c z=7VIMtyU+$>uqV0_KDW*k>qURcl~bN@ff`ZX-My_^Yv;~4)YAX?Yibk{U{(8?=8PI z`2Obyd-sL#ELq!4{QOJn=#s3xo8UX01;et|7!IAWJW30@Xdyo-7Xw>ft20S#^aI`h4z-+aBq zt;lPS$K+wd)u_y?ut{f`WO*6Oj2+2ZrDehNLqSz(v8d=FQ7)>}6bfV(o*4Q(j%nxq zAZub*@_R#!@=^u0Oo$RKY8f16p_-q)G%L%7?H}CVWBBKnrNwuwic(3KsyR%L8BT?u zIjJObX9TP2vMHl7Gi0qiAbW$PN=p{YMn+9H$9qVNYt$OrRGQ$y7XvVng}+LeFeRHn ssVFE94;cW8kp3v?z-S%Vuds`SQI!VsG&X|;4Z1QjLYRkfTuY_ce=y%-vj6}9 literal 0 HcmV?d00001 diff --git a/dtb/64570/DS1621+_model.dtb b/dtb/64570/DS1621+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..8c0df6461a0277c161c22e1f18ae5f0dd964199c GIT binary patch literal 3834 zcmd5WG>8ra9I}0PAxVWqQc$FVBAw;4H+L4c*LZzLuBPEP@IUDJ z2T;%=Axb1VDkKmy`?7r(JGq2NSlaVGX1|$lW_H&1Y30ukLN5Ozgsc&=@&VrWpk0G@ z6&gI&2F$;e{o1dkMyKJug#G8!l*Mc~t<2wq{xVnd-o&wO+jCZ3=Rrm04D?YS;vp7} zZ$Ud(8CT`c!u-=BA5(bagL^JO+bIHnz2EQaImC&fRdL_I_zpC!=Ntq4{|%b8 zxzl$ZLkAv|ZQ^$Y)=GZip5A0-N#^mG6;B+5AXXd={K6M~t^1=Gm9~6V<5Td)R${nf z<**pYcOIj=5Qg4gx1+ZZ2J+N6B^ME%L;C|`s4;{sTaLZ$+MO5Dt*x=S4tvYkP{&SS zW1-@axL)Arp$ZSN(n(UyCyeVC+kRv}wAb(ldN5Pw!gtQYzz;@xkG9d$xH4pIxV=Si z1@~=t(}6=;wPU|CSI^1B4b>)NoARCIkAg_T2|rdicV}(GIQ&$y!j@)#EyT;%r2TaS zn{>Xn#IQfh2hVd;47IOa8S>T~oAb5WWO!*`H~Z`V$*(9aXrB6UrEuXH#(Mjk>*^)X zz9S@2R>n6SoyuzhT=Ow)3c8o}RMSVJ?}t#WeJWIi)E~!hY!EUBvwz76Ji@X+u|gz zhf=mJPVyRP;v|s%0jJet=iVxiukvr>q`ntS4%FjhzDtgIo*FqBy$9uS4 z{Dpj-lkm<-#;Gm$ma8?wkwv13Q(aaT3F9w{#m&oDuD{j*_z3k(=ZUbPf~k&r8)jon zYnXV4%+zN1?$veH)PbhEP27)izo~6m;9xfHrjLy#ap`XDA!~ArZQ_kgdkTCA$bO@NiIH%rj z?DNt7O9RFVvbFteli+`+I7(jcf}4@WwEU7{TO3DDoG;H$iCt literal 0 HcmV?d00001 diff --git a/dtb/64570/DS1821+_model.dtb b/dtb/64570/DS1821+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..c90ec426c8f28715833c111fb07f8f048c60df48 GIT binary patch literal 4420 zcmd5=&2G~`5Z(nUD5WY@#epL?RA^=Ar?f~&NTjMbR6>G7B@UKjyNQMEHU0_BnYZ9Q zxbY6~2ndM_5+^t#X7G5OJS(>RXaLMVIWV1Q*h}ng@O5@Ft{zprg7Rb_Ff3LHpXTL))ukx zOe2JanT$u+vK%{cWq1gUMqxR}Fs?rgW8b)M9O577al2(MP?DyuV>?5&M%hRet_WEZ zZf6->&i%C2GhyT6vv^L1Emtnmwn^Vnd+7KAj^mX$wrC1LTqj4#D1#UDT;)aoyfhatSAySoOr}n z$*E~SRqYf-VlhslNN7$T9zs^k5_PMF1gJlEYWE3d^ejwSlAADV&$0?8p7j%FDEz)q z=b^6Gb$1Ycj}hzjc~x4kYh&&D*zp_mb4>34JnfgvBy`lzQzQZp<_hY31n-y7^jQsS zl%G%r?}aDk9^X(3Q)FUs)}OSBc_mY#SF3k-zTOI#8G7}6Rj-h&;|uvZk1q#Mm^1Y1 zc_kzGirlZ$dt;v7cHu_~ahTHEDdtfxwsnVvv7Pz-z#}1Zy?~6oB=uQD_~j~%{V0#& z^2PFadc*>Gdo0F>t_wTwjhBFU>b;i2A!Lk&Q`tE7CdX{oj^RQ%J?ti4nu=j3WT};S z1Hg3h#Iw!=I~~rR>NA#!ncPk?3;y}Q^2{2 Date: Thu, 29 Jun 2023 17:41:23 +1000 Subject: [PATCH 086/694] Delete tmp.txt --- dtb/tmp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dtb/tmp.txt diff --git a/dtb/tmp.txt b/dtb/tmp.txt deleted file mode 100644 index d675fa4..0000000 --- a/dtb/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -foo bar From 7b768840b4b3d2d6ab0b219d03e2d4ecd8971e3e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:41:33 +1000 Subject: [PATCH 087/694] Delete tmp.txt --- dtb/64570/tmp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dtb/64570/tmp.txt diff --git a/dtb/64570/tmp.txt b/dtb/64570/tmp.txt deleted file mode 100644 index d675fa4..0000000 --- a/dtb/64570/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -foo bar From a4c0c644439b33318ef22877fb1f9e88f7200c1f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 20:49:47 +1000 Subject: [PATCH 088/694] Create tmp.txt --- dtb/41890/tmp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dtb/41890/tmp.txt diff --git a/dtb/41890/tmp.txt b/dtb/41890/tmp.txt new file mode 100644 index 0000000..5c9a1f4 --- /dev/null +++ b/dtb/41890/tmp.txt @@ -0,0 +1 @@ +tmp.txt From c080d1329f77111a1697a2d31589c3d653701fb0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 20:50:14 +1000 Subject: [PATCH 089/694] Create tmp.txt --- dtb/42218/tmp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dtb/42218/tmp.txt diff --git a/dtb/42218/tmp.txt b/dtb/42218/tmp.txt new file mode 100644 index 0000000..5c9a1f4 --- /dev/null +++ b/dtb/42218/tmp.txt @@ -0,0 +1 @@ +tmp.txt From 1a3cbf8ee7f6c9490bb94d04a42eb0665e05b395 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 20:50:43 +1000 Subject: [PATCH 090/694] Create tmp.txt --- dtb/42661/tmp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dtb/42661/tmp.txt diff --git a/dtb/42661/tmp.txt b/dtb/42661/tmp.txt new file mode 100644 index 0000000..5c9a1f4 --- /dev/null +++ b/dtb/42661/tmp.txt @@ -0,0 +1 @@ +tmp.txt From 9ec76fb561468d8dae7c66e6d7cc0316ea956455 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 29 Jun 2023 20:51:08 +1000 Subject: [PATCH 091/694] Create tmp.txt --- dtb/42962/tmp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dtb/42962/tmp.txt diff --git a/dtb/42962/tmp.txt b/dtb/42962/tmp.txt new file mode 100644 index 0000000..5c9a1f4 --- /dev/null +++ b/dtb/42962/tmp.txt @@ -0,0 +1 @@ +tmp.txt From 6e037c304e875031c52cf5c31d413156a06668b1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Jun 2023 06:58:59 +1000 Subject: [PATCH 092/694] Delete DS1522+_model.dtb --- dtb/64570/DS1522+_model.dtb | Bin 4175 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/64570/DS1522+_model.dtb diff --git a/dtb/64570/DS1522+_model.dtb b/dtb/64570/DS1522+_model.dtb deleted file mode 100644 index 1e85d733f0f6a8be2cdc32bd00a786a8e083b5ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4175 zcmd5~TRUg19SE926iW5{2cp=e!nv;qe}Ke*_IJ zEd@0#e*s;}6e*%8NHkGIjfD7q^RT^pXW#AW3Pzgs%s1cn`=0aIN7w&-!Pw2O7-PGP z-FQOZTh!m7ev>*iu897N887{EJG(;Ps~CTMQj}Slob>4L(fFFO^q}^H5P>)K{f~P* zuhJO$fCnt-eV_U()IoC{Yv6_KHR_nZM*WMXUP$_)Ii80!e%hOp59}FrzV~qIeM$pr z;2pC2ZCdN>j*p!XuktETS=rq40Ks^c&cY_tW2gH^J?m`w$+@=SVwd7F3EPek)Fs&u(A2b{U8eK z*rtc^;wbOe2J-r|5ZmGtv5OxXX}eu5{HjzOh0)x}I2*acH7Ogzy}b^u_Wi)$^Jw#- zIXlkUOUpHx`>_>jZL_iC;XFzWoW|?o2hpyB-eD{OL^gx-!Y#k*Q}*NNwEAwCn{_O#n+M&8vOasoWe{~`E4yE%W0 zvDe+4$ovEP(K*ay93-`r1rex0o^0bE;+_d;(dM`1E$gsI%#J?AYx4+R&A%KgUA>SQ zixt+;z~^Fx_*{0Z9G;8SbE}i)h}D&iVrBQ|g<@r{n)cl0%dyg{=fw)~LF>l~b>e)x zth#bKE;Ux>n(S(Dtgg&;I20?5bY86V+hiqHH#Uvc?zTU)2NA0_|6}`V2b?|LG5_rw zYhYjL=$z;Ow?^Gkt>A6AQLT*l54;QcZ|~@qcg+7g#`xBMiGwz%%G$jg$&Zyg@gnCX zVun6Y*Ziejr%!ucYI}S7?Uvt2KlJwXyEDg~L4*1iYSz1c7(bdV6k(wOkIn@SyFQ}c z=7VIMtyU+$>uqV0_KDW*k>qURcl~bN@ff`ZX-My_^Yv;~4)YAX?Yibk{U{(8?=8PI z`2Obyd-sL#ELq!4{QOJn=#s3xo8UX01;et|7!IAWJW30@Xdyo-7Xw>ft20S#^aI`h4z-+aBq zt;lPS$K+wd)u_y?ut{f`WO*6Oj2+2ZrDehNLqSz(v8d=FQ7)>}6bfV(o*4Q(j%nxq zAZub*@_R#!@=^u0Oo$RKY8f16p_-q)G%L%7?H}CVWBBKnrNwuwic(3KsyR%L8BT?u zIjJObX9TP2vMHl7Gi0qiAbW$PN=p{YMn+9H$9qVNYt$OrRGQ$y7XvVng}+LeFeRHn ssVFE94;cW8kp3v?z-S%Vuds`SQI!VsG&X|;4Z1QjLYRkfTuY_ce=y%-vj6}9 From 0020b4e9f94c977e5f9bd4612e2e47716153fbf5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:29:44 +1000 Subject: [PATCH 093/694] Delete tmp.txt --- dtb/41890/tmp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dtb/41890/tmp.txt diff --git a/dtb/41890/tmp.txt b/dtb/41890/tmp.txt deleted file mode 100644 index 5c9a1f4..0000000 --- a/dtb/41890/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -tmp.txt From 564738ef0158acdb344b4fb320c63ebd0023a96f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:29:53 +1000 Subject: [PATCH 094/694] Delete tmp.txt --- dtb/42218/tmp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dtb/42218/tmp.txt diff --git a/dtb/42218/tmp.txt b/dtb/42218/tmp.txt deleted file mode 100644 index 5c9a1f4..0000000 --- a/dtb/42218/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -tmp.txt From 508f5a99f5c41455838fae57ef4383f3bda24e63 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:30:03 +1000 Subject: [PATCH 095/694] Delete tmp.txt --- dtb/42661/tmp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dtb/42661/tmp.txt diff --git a/dtb/42661/tmp.txt b/dtb/42661/tmp.txt deleted file mode 100644 index 5c9a1f4..0000000 --- a/dtb/42661/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -tmp.txt From c033ba91dfcb859ca00ef2eb9fea2145c4e22da8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:30:13 +1000 Subject: [PATCH 096/694] Delete tmp.txt --- dtb/42962/tmp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dtb/42962/tmp.txt diff --git a/dtb/42962/tmp.txt b/dtb/42962/tmp.txt deleted file mode 100644 index 5c9a1f4..0000000 --- a/dtb/42962/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -tmp.txt From b269e739c6113bc26a70d8cf8337bef731fabbf8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:30:57 +1000 Subject: [PATCH 097/694] Add files via upload --- dtb/DS1520+_model.dtb | Bin 0 -> 3617 bytes dtb/DS1621+_model.dtb | Bin 0 -> 3834 bytes dtb/DS1821+_model.dtb | Bin 0 -> 4420 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/DS1520+_model.dtb create mode 100644 dtb/DS1621+_model.dtb create mode 100644 dtb/DS1821+_model.dtb diff --git a/dtb/DS1520+_model.dtb b/dtb/DS1520+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..5bce9d2f9169d9bcd84acafddecf237e72476549 GIT binary patch literal 3617 zcmd5nJd22qfrnCp?g3bt8JSPr6B5` z0>U%VCa&@98$c(3kf%w@qUtgbu1^EK$kG9YUmRLyALiZCn!~(bT7Q7~b0A}9zimB% z2@KS&!*UV!3M~GSRx*+(ad^nGXAmhEMi_M5%oTI(%SW*)eEX!3A*RldktE zIc$&O!TVg7Lmg{dro36Kl~RsN$GSdV|4)4daYobF4NHv+>kND853akHti7|q`w4Uv z2nWg`?+?&jAj}E!&cO6Un6$PxRsR{u?+WZMo90uiQgKputmZ=MJH3?B7!1Qe`{zJ^ z72gsEHdVev{!o^sZrqbMbWB#|1!aYN6}zZL)R~5T74~tUoW_0+=EsRWukBgb)%}?Z zyG%viSB)xmu{#U7~`vx|K#BhQtV>dwWpXPhexXqywx&G&^2zKbQm=zo4cS{r#Us(Y`+ zn_qH#L|>eRygGgKVaa1r;$}f7q$FZK4ap%*dB9>K9u}Si@gRYRhYgZ(jsx=UQ1bh} z4;A*7rXbGg8_Dz{#+{V*fa48P>U2Yw_a|?47|TX>;Bztz;)AXmgk*Q`WG>8ra9I}0PAxVWqQc$FVBAw;4H+L4c*LZzLuBPEP@IUDJ z2T;%=Axb1VDkKmy`?7r(JGq2NSlaVGX1|$lW_H&1Y30ukLN5Ozgsc&=@&VrWpk0G@ z6&gI&2F$;e{o1dkMyKJug#G8!l*Mc~t<2wq{xVnd-o&wO+jCZ3=Rrm04D?YS;vp7} zZ$Ud(8CT`c!u-=BA5(bagL^JO+bIHnz2EQaImC&fRdL_I_zpC!=Ntq4{|%b8 zxzl$ZLkAv|ZQ^$Y)=GZip5A0-N#^mG6;B+5AXXd={K6M~t^1=Gm9~6V<5Td)R${nf z<**pYcOIj=5Qg4gx1+ZZ2J+N6B^ME%L;C|`s4;{sTaLZ$+MO5Dt*x=S4tvYkP{&SS zW1-@axL)Arp$ZSN(n(UyCyeVC+kRv}wAb(ldN5Pw!gtQYzz;@xkG9d$xH4pIxV=Si z1@~=t(}6=;wPU|CSI^1B4b>)NoARCIkAg_T2|rdicV}(GIQ&$y!j@)#EyT;%r2TaS zn{>Xn#IQfh2hVd;47IOa8S>T~oAb5WWO!*`H~Z`V$*(9aXrB6UrEuXH#(Mjk>*^)X zz9S@2R>n6SoyuzhT=Ow)3c8o}RMSVJ?}t#WeJWIi)E~!hY!EUBvwz76Ji@X+u|gz zhf=mJPVyRP;v|s%0jJet=iVxiukvr>q`ntS4%FjhzDtgIo*FqBy$9uS4 z{Dpj-lkm<-#;Gm$ma8?wkwv13Q(aaT3F9w{#m&oDuD{j*_z3k(=ZUbPf~k&r8)jon zYnXV4%+zN1?$veH)PbhEP27)izo~6m;9xfHrjLy#ap`XDA!~ArZQ_kgdkTCA$bO@NiIH%rj z?DNt7O9RFVvbFteli+`+I7(jcf}4@WwEU7{TO3DDoG;H$iCt literal 0 HcmV?d00001 diff --git a/dtb/DS1821+_model.dtb b/dtb/DS1821+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..c90ec426c8f28715833c111fb07f8f048c60df48 GIT binary patch literal 4420 zcmd5=&2G~`5Z(nUD5WY@#epL?RA^=Ar?f~&NTjMbR6>G7B@UKjyNQMEHU0_BnYZ9Q zxbY6~2ndM_5+^t#X7G5OJS(>RXaLMVIWV1Q*h}ng@O5@Ft{zprg7Rb_Ff3LHpXTL))ukx zOe2JanT$u+vK%{cWq1gUMqxR}Fs?rgW8b)M9O577al2(MP?DyuV>?5&M%hRet_WEZ zZf6->&i%C2GhyT6vv^L1Emtnmwn^Vnd+7KAj^mX$wrC1LTqj4#D1#UDT;)aoyfhatSAySoOr}n z$*E~SRqYf-VlhslNN7$T9zs^k5_PMF1gJlEYWE3d^ejwSlAADV&$0?8p7j%FDEz)q z=b^6Gb$1Ycj}hzjc~x4kYh&&D*zp_mb4>34JnfgvBy`lzQzQZp<_hY31n-y7^jQsS zl%G%r?}aDk9^X(3Q)FUs)}OSBc_mY#SF3k-zTOI#8G7}6Rj-h&;|uvZk1q#Mm^1Y1 zc_kzGirlZ$dt;v7cHu_~ahTHEDdtfxwsnVvv7Pz-z#}1Zy?~6oB=uQD_~j~%{V0#& z^2PFadc*>Gdo0F>t_wTwjhBFU>b;i2A!Lk&Q`tE7CdX{oj^RQ%J?ti4nu=j3WT};S z1Hg3h#Iw!=I~~rR>NA#!ncPk?3;y}Q^2{2 Date: Fri, 30 Jun 2023 14:31:18 +1000 Subject: [PATCH 098/694] Delete dtb/64570 directory --- dtb/64570/DS1520+_model.dtb | Bin 3617 -> 0 bytes dtb/64570/DS1621+_model.dtb | Bin 3834 -> 0 bytes dtb/64570/DS1821+_model.dtb | Bin 4420 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/64570/DS1520+_model.dtb delete mode 100644 dtb/64570/DS1621+_model.dtb delete mode 100644 dtb/64570/DS1821+_model.dtb diff --git a/dtb/64570/DS1520+_model.dtb b/dtb/64570/DS1520+_model.dtb deleted file mode 100644 index 5bce9d2f9169d9bcd84acafddecf237e72476549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 zcmd5nJd22qfrnCp?g3bt8JSPr6B5` z0>U%VCa&@98$c(3kf%w@qUtgbu1^EK$kG9YUmRLyALiZCn!~(bT7Q7~b0A}9zimB% z2@KS&!*UV!3M~GSRx*+(ad^nGXAmhEMi_M5%oTI(%SW*)eEX!3A*RldktE zIc$&O!TVg7Lmg{dro36Kl~RsN$GSdV|4)4daYobF4NHv+>kND853akHti7|q`w4Uv z2nWg`?+?&jAj}E!&cO6Un6$PxRsR{u?+WZMo90uiQgKputmZ=MJH3?B7!1Qe`{zJ^ z72gsEHdVev{!o^sZrqbMbWB#|1!aYN6}zZL)R~5T74~tUoW_0+=EsRWukBgb)%}?Z zyG%viSB)xmu{#U7~`vx|K#BhQtV>dwWpXPhexXqywx&G&^2zKbQm=zo4cS{r#Us(Y`+ zn_qH#L|>eRygGgKVaa1r;$}f7q$FZK4ap%*dB9>K9u}Si@gRYRhYgZ(jsx=UQ1bh} z4;A*7rXbGg8_Dz{#+{V*fa48P>U2Yw_a|?47|TX>;Bztz;)AXmgk*Q`WG>8ra9I}0PAxVWqQc$FVBAw;4H+L4c*LZzLuBPEP@IUDJ z2T;%=Axb1VDkKmy`?7r(JGq2NSlaVGX1|$lW_H&1Y30ukLN5Ozgsc&=@&VrWpk0G@ z6&gI&2F$;e{o1dkMyKJug#G8!l*Mc~t<2wq{xVnd-o&wO+jCZ3=Rrm04D?YS;vp7} zZ$Ud(8CT`c!u-=BA5(bagL^JO+bIHnz2EQaImC&fRdL_I_zpC!=Ntq4{|%b8 zxzl$ZLkAv|ZQ^$Y)=GZip5A0-N#^mG6;B+5AXXd={K6M~t^1=Gm9~6V<5Td)R${nf z<**pYcOIj=5Qg4gx1+ZZ2J+N6B^ME%L;C|`s4;{sTaLZ$+MO5Dt*x=S4tvYkP{&SS zW1-@axL)Arp$ZSN(n(UyCyeVC+kRv}wAb(ldN5Pw!gtQYzz;@xkG9d$xH4pIxV=Si z1@~=t(}6=;wPU|CSI^1B4b>)NoARCIkAg_T2|rdicV}(GIQ&$y!j@)#EyT;%r2TaS zn{>Xn#IQfh2hVd;47IOa8S>T~oAb5WWO!*`H~Z`V$*(9aXrB6UrEuXH#(Mjk>*^)X zz9S@2R>n6SoyuzhT=Ow)3c8o}RMSVJ?}t#WeJWIi)E~!hY!EUBvwz76Ji@X+u|gz zhf=mJPVyRP;v|s%0jJet=iVxiukvr>q`ntS4%FjhzDtgIo*FqBy$9uS4 z{Dpj-lkm<-#;Gm$ma8?wkwv13Q(aaT3F9w{#m&oDuD{j*_z3k(=ZUbPf~k&r8)jon zYnXV4%+zN1?$veH)PbhEP27)izo~6m;9xfHrjLy#ap`XDA!~ArZQ_kgdkTCA$bO@NiIH%rj z?DNt7O9RFVvbFteli+`+I7(jcf}4@WwEU7{TO3DDoG;H$iCt diff --git a/dtb/64570/DS1821+_model.dtb b/dtb/64570/DS1821+_model.dtb deleted file mode 100644 index c90ec426c8f28715833c111fb07f8f048c60df48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4420 zcmd5=&2G~`5Z(nUD5WY@#epL?RA^=Ar?f~&NTjMbR6>G7B@UKjyNQMEHU0_BnYZ9Q zxbY6~2ndM_5+^t#X7G5OJS(>RXaLMVIWV1Q*h}ng@O5@Ft{zprg7Rb_Ff3LHpXTL))ukx zOe2JanT$u+vK%{cWq1gUMqxR}Fs?rgW8b)M9O577al2(MP?DyuV>?5&M%hRet_WEZ zZf6->&i%C2GhyT6vv^L1Emtnmwn^Vnd+7KAj^mX$wrC1LTqj4#D1#UDT;)aoyfhatSAySoOr}n z$*E~SRqYf-VlhslNN7$T9zs^k5_PMF1gJlEYWE3d^ejwSlAADV&$0?8p7j%FDEz)q z=b^6Gb$1Ycj}hzjc~x4kYh&&D*zp_mb4>34JnfgvBy`lzQzQZp<_hY31n-y7^jQsS zl%G%r?}aDk9^X(3Q)FUs)}OSBc_mY#SF3k-zTOI#8G7}6Rj-h&;|uvZk1q#Mm^1Y1 zc_kzGirlZ$dt;v7cHu_~ahTHEDdtfxwsnVvv7Pz-z#}1Zy?~6oB=uQD_~j~%{V0#& z^2PFadc*>Gdo0F>t_wTwjhBFU>b;i2A!Lk&Q`tE7CdX{oj^RQ%J?ti4nu=j3WT};S z1Hg3h#Iw!=I~~rR>NA#!ncPk?3;y}Q^2{2 Date: Fri, 30 Jun 2023 21:48:59 +1000 Subject: [PATCH 099/694] Update CHANGES.txt --- CHANGES.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index fed379a..8106a8e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,10 @@ +v3.1.57 +- Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. +- Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. +- Fixed bugs where the calculated amount of installed memory could be incorrect: + - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 + - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 + v3.0.56 - Minor bug fix for checking amount of installed memory. From ada7eff0e0b678805264850a86c897d1402887ad Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Jun 2023 21:52:12 +1000 Subject: [PATCH 100/694] Update syno_hdd_db.sh v3.1.57 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. - Fixed bugs where the calculated amount of installed memory could be incorrect: - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 --- syno_hdd_db.sh | 166 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 139 insertions(+), 27 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 2a4b545..2fb2cf4 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -26,11 +26,20 @@ # It's also parsed and checked and probably in some cases it could be more critical to patch that one instead. # # Solve issue of --restore option restoring files that were backed up with older DSM version. +# Change how synoinfo.conf is backed up and restored to prevent issue #73 # DONE -# Minor bug fix for checking amount of installed memory. +# Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. +# +# Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. +# +# Fixed bugs where the calculated amount of installed memory could be incorrect: +# - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 +# - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 # # +# Minor bug fix for checking amount of installed memory. +# # Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. # # Added -i, --immutable option to enable immutable snapshots on models older than '20 series running DSM 7.2. @@ -69,7 +78,6 @@ # https://www.youtube.com/watch?v=cLGi8sPLkLY # https://community.synology.com/enu/forum/1/post/159537 # -# # Added --restore info to --help # # Updated restore option to download the latest db files from Synology @@ -188,7 +196,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.0.56" +scriptver="v3.1.57" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -210,6 +218,7 @@ Yellow='\e[0;33m' #Purple='\e[0;35m' Cyan='\e[0;36m' #White='\e[0;37m' +#White='\e[0;37m' Error='\e[41m' Off='\e[0m' @@ -441,7 +450,7 @@ scriptpath=$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd ) if ! printf "%s\n%s\n" "$tag" "$scriptver" | - sort --check --version-sort &> /dev/null ; then + sort --check --version-sort >/dev/null ; then echo -e "\n${Cyan}There is a newer version of this script available.${Off}" echo -e "Current version: ${scriptver}\nLatest version: $tag" if [[ -f $scriptpath/$script-$shorttag.tar.gz ]]; then @@ -557,16 +566,18 @@ fi dbpath=/var/lib/disk-compatibility/ synoinfo="/etc.defaults/synoinfo.conf" +adapter_cards="/usr/syno/etc.defaults/adapter_cards.conf" +modeldtb="/etc.defaults/model.dtb" if [[ $restore == "yes" ]]; then dbbakfiles=($(find $dbpath -maxdepth 1 \( -name "*.db.new.bak" -o -name "*.db.bak" \))) echo - if [[ ${#dbbakfiles[@]} -gt "0" ]] || [[ -f ${synoinfo}.bak ]]; then + if [[ ${#dbbakfiles[@]} -gt "0" ]] || [[ -f ${synoinfo}.bak ]] ||\ + [[ -f ${modeldtb}.bak ]] || [[ -f ${adapter_cards}.bak ]] ; then # Restore synoinfo.conf from backup if [[ -f ${synoinfo}.bak ]]; then - #if mv "${synoinfo}.bak" "${synoinfo}"; then if cp -p "${synoinfo}.bak" "${synoinfo}"; then echo -e "Restored $(basename -- "$synoinfo")\n" else @@ -575,10 +586,29 @@ if [[ $restore == "yes" ]]; then fi fi + # Restore adapter_cards.conf from backup + if [[ -f ${adapter_cards}.bak ]]; then + if cp -p "${adapter_cards}.bak" "${adapter_cards}"; then + echo -e "Restored $(basename -- "$adapter_cards")\n" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore adapter_cards.conf!\n" + fi + fi + + # Restore modeldtb from backup + if [[ -f ${modeldtb}.bak ]]; then + if cp -p "${modeldtb}.bak" "${modeldtb}"; then + echo -e "Restored $(basename -- "$modeldtb")\n" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore model.dtb!\n" + fi + fi + # Restore .db files from backups for f in "${!dbbakfiles[@]}"; do replaceme="${dbbakfiles[f]%.bak}" # Remove .bak - #if mv "${dbbakfiles[f]}" "$replaceme"; then if cp -p "${dbbakfiles[f]}" "$replaceme"; then echo "Restored $(basename -- "$replaceme")" else @@ -1121,10 +1151,16 @@ done #------------------------------------------------------------------------------ # Enable unsupported Synology M2 PCIe cards +# DS1821+, DS1621+ and DS1520+ also need edited device tree blob file +# /etc.defaults/model.dtb + enable_card(){ - if [[ -f $1 ]] && [[ -n $2 ]]; then + # $1 is the file + # $2 is the section + # $3 is the card model and mode + if [[ -f $1 ]] && [[ -n $2 ]] && [[ -n $3 ]]; then # Check if section exists - if ! grep '^\['"$2"'\]$' "$1"; then + if ! grep '^\['"$2"'\]$' "$1" >/dev/null; then echo -e "Section [$2] not found in $(basename -- "$1")!" >&2 return fi @@ -1132,38 +1168,115 @@ enable_card(){ val=$(get_section_key_value "$1" "$2" "$modelname") if [[ $val != "yes" ]]; then if set_section_key_value "$1" "$2" "$modelname" yes; then - echo -e "Enabled $1 for $modelname" >&2 + echo -e "Enabled ${Yellow}$3${Off} for ${Cyan}$modelname${Off}" >&2 + else + echo -e "${Error}ERROR 5${Off} Failed to enable $3 for ${modelname}!" >&2 + fi + else + echo -e "${Yellow}$3${Off} already enabled for ${Cyan}$modelname${Off}" >&2 + fi + fi +} + +check_modeldtb(){ + if [[ -f /etc.defaults/model.dtb ]]; then + if ! grep --text "$1" /etc.defaults/model.dtb >/dev/null; then + if [[ $modelname == "DS1821+" ]] ||\ + [[ $modelname == "DS1621+" ]] ||\ + [[ $modelname == "DS1520+" ]]; + then + echo "" >&2 + if [[ -f ./dtb/${modelname}_model.dtb ]]; then + # Edited device tree blob exists with script + blob="./dtb/${modelname}_model.dtb" + else + # Download edited device tree blob model.dtb from github + if cd /var/services/tmp; then + echo -e "Downloading ${modelname}_model.dtb" >&2 + repo=https://github.com/007revad/Synology_HDD_db + url=${repo}/raw/main/dtb/${modelname}_model.dtb + curl -LJO -m 30 --connect-timeout 5 "$url" + echo "" >&2 + else + echo -e "${Error}ERROR ${Off} /var/services/tmp does not exist!" >&2 + fi + + # Check we actually downloaded the file + if [[ -f /var/services/tmp/${modelname}_model.dtb ]]; then + blob="/var/services/tmp/${modelname}_model.dtb" + else + echo -e "${Error}ERROR ${Off} Failed to download ${modelname}_model.dtb!" >&2 + fi + fi + if [[ -f $blob ]]; then + # Backup model.dtb + if ! backupdb "/etc.defaults/model.dtb"; then + echo -e "${Error}ERROR ${Off} Failed to backup /etc.defaults/model.dtb!" >&2 + else + # Move and rename downloaded model.dtb + if mv "$blob" "/etc.defaults/model.dtb"; then + echo -e "Enabled ${Yellow}$1${Off} in ${Cyan}model.dtb${Off}" >&2 + else + echo -e "${Error}ERROR ${Off} Failed to add support for ${1}" >&2 + fi + + # Fix permissions if needed + octal=$(stat -c "%a %n" "/etc.defaults/model.dtb" | cut -d" " -f1) + if [[ ! $octal -eq 644 ]]; then + chmod 644 "/etc.defaults/model.dtb" + fi + fi + else + #echo -e "${Error}ERROR ${Off} Missing file ${modelname}_model.dtb" >&2 + echo -e "${Error}ERROR ${Off} Missing file $blob" >&2 + fi else - echo -e "${Error}ERROR 5${Off} Failed to enable $1 for ${modelname}!" >&2 + echo -e "\n${Cyan}Contact 007revad to get an edited model.dtb file for your model.${Off}" >&2 fi else - echo -e "$1 already enabled for $modelname" >&2 + echo -e "${Yellow}$1${Off} already enabled in ${Cyan}model.dtb${Off}" >&2 fi fi } -for c in "${!m2cards[@]}"; do - echo "" +for c in "${m2cards[@]}"; do + #echo "" m2cardconf="/usr/syno/etc.defaults/adapter_cards.conf" case "$c" in E10M20-T1) - enable_card "$m2cardconf" E10M20-T1_sup_nvme - enable_card "$m2cardconf" E10M20-T1_sup_sata + backupdb "$m2cardconf" + echo "" + enable_card "$m2cardconf" E10M20-T1_sup_nic "E10M20-T1 NIC" + enable_card "$m2cardconf" E10M20-T1_sup_nvme "E10M20-T1 NVMe" + enable_card "$m2cardconf" E10M20-T1_sup_sata "E10M20-T1 SATA" + check_modeldtb "$c" ;; M2D20) - enable_card "$m2cardconf" M2D20_sup_nvme + backupdb "$m2cardconf" + echo "" + enable_card "$m2cardconf" M2D20_sup_nvme "M2D20 NVMe" + check_modeldtb "$c" ;; M2D18) - enable_card "$m2cardconf" M2D18_sup_nvme - enable_card "$m2cardconf" M2D18_sup_sata + backupdb "$m2cardconf" + echo "" + enable_card "$m2cardconf" M2D18_sup_nvme "M2D18 NVMe" + enable_card "$m2cardconf" M2D18_sup_sata "M2D18 SATA" + check_modeldtb "$c" ;; M2D17) - enable_card "$m2cardconf" M2D17_sup_sata + backupdb "$m2cardconf" + echo "" + enable_card "$m2cardconf" M2D17_sup_sata "M2D17 SATA" + ;; + *) + echo "Unknown M2 card type: $c" ;; esac done + #------------------------------------------------------------------------------ # Edit /etc.defaults/synoinfo.conf @@ -1232,23 +1345,25 @@ fi if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo if [[ $ram == "yes" ]]; then # Get total amount of installed memory - IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory | grep "[Ss]ize") # GitHub issue #86, 87 + #IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory | grep "[Ss]ize") # GitHub issue #86, 87 + IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory |\ + grep -E "[Ss]ize: [0-9]+ [MG]{1}[B]{1}$") # GitHub issue #86, 87, 106 if [[ ${#array[@]} -gt "0" ]]; then num="0" while [[ $num -lt "${#array[@]}" ]]; do check=$(printf %s "${array[num]}" | awk '{print $1}') if [[ ${check,,} == "size:" ]]; then - #ramsize=$(printf %s "${array[num]}" | cut -d" " -f2) ramsize=$(printf %s "${array[num]}" | awk '{print $2}') # GitHub issue #86, 87 bytes=$(printf %s "${array[num]}" | awk '{print $3}') # GitHub issue #86, 87 if [[ $ramsize =~ ^[0-9]+$ ]]; then # Check $ramsize is numeric # GitHub issue #86, 87 + if [[ $bytes == "GB" ]]; then # DSM 7.2 dmidecode returned GB + ramsize=$((ramsize * 1024)) # Convert to MB # GitHub issue #107 + fi if [[ $ramtotal ]]; then ramtotal=$((ramtotal +ramsize)) else ramtotal="$ramsize" fi - #else - # echo -e "\n${Error}ERROR${Off} Memory size is not numeric: '$ramsize'" fi fi num=$((num +1)) @@ -1257,9 +1372,6 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo # Set mem_max_mb to the amount of installed memory setting="$(get_key_value $synoinfo mem_max_mb)" if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric - if [[ $bytes == "GB" ]]; then # DSM 7.2 dmidecode returns GB - ramtotal=$((ramtotal * 1024)) # Convert to MB - fi if [[ $ramtotal -gt $setting ]]; then synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" # Check we changed mem_max_mb From 7c9e9a3305225e09d16bc595bfd6dc7138a45a55 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 00:19:36 +1000 Subject: [PATCH 101/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 8106a8e..93903c2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.1.57 +v3.1.58 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. - Fixed bugs where the calculated amount of installed memory could be incorrect: From 586229c1b3c098be24f70afca6793fa08797c0ca Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 00:20:39 +1000 Subject: [PATCH 102/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 2fb2cf4..3ca5152 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -196,7 +196,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.57" +scriptver="v3.1.58" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From 0f42a72c8ae0c8104eba87a22ad7d076f690bb68 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 10:33:48 +1000 Subject: [PATCH 103/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 93903c2..ef166bd 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.1.58 +v3.1.59 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. - Fixed bugs where the calculated amount of installed memory could be incorrect: From 8c59c82c58edd66d42f3a4e6e886d2e89a0dcd66 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 10:41:40 +1000 Subject: [PATCH 104/694] Update syno_hdd_db.sh v3.1.59 --- syno_hdd_db.sh | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 3ca5152..4b5e21d 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -196,7 +196,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.58" +scriptver="v3.1.59" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -218,7 +218,6 @@ Yellow='\e[0;33m' #Purple='\e[0;35m' Cyan='\e[0;36m' #White='\e[0;37m' -#White='\e[0;37m' Error='\e[41m' Off='\e[0m' @@ -552,6 +551,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | syslog_set warn "/tmp/$script-$shorttag.tar.gz not found" fi fi + cd "$scriptpath" || echo -e "${Error}ERROR ${Off} Failed to cd to script location!" else echo -e "${Error}ERROR ${Off} Failed to cd to /tmp!" syslog_set warn "$script update failed to cd to /tmp" @@ -1179,6 +1179,7 @@ enable_card(){ } check_modeldtb(){ + # $1 is E10M20-T1 or M2D20 or M2D18 or M2D17 if [[ -f /etc.defaults/model.dtb ]]; then if ! grep --text "$1" /etc.defaults/model.dtb >/dev/null; then if [[ $modelname == "DS1821+" ]] ||\ @@ -1187,8 +1188,11 @@ check_modeldtb(){ then echo "" >&2 if [[ -f ./dtb/${modelname}_model.dtb ]]; then - # Edited device tree blob exists with script + # Edited device tree blob exists in dtb folder with script blob="./dtb/${modelname}_model.dtb" + elif [[ -f ./${modelname}_model.dtb ]]; then + # Edited device tree blob exists with script + blob="./${modelname}_model.dtb" else # Download edited device tree blob model.dtb from github if cd /var/services/tmp; then @@ -1197,10 +1201,11 @@ check_modeldtb(){ url=${repo}/raw/main/dtb/${modelname}_model.dtb curl -LJO -m 30 --connect-timeout 5 "$url" echo "" >&2 + cd "$scriptpath" || echo -e "${Error}ERROR ${Off} Failed to cd to script location!" else echo -e "${Error}ERROR ${Off} /var/services/tmp does not exist!" >&2 fi - + # Check we actually downloaded the file if [[ -f /var/services/tmp/${modelname}_model.dtb ]]; then blob="/var/services/tmp/${modelname}_model.dtb" @@ -1372,24 +1377,24 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo # Set mem_max_mb to the amount of installed memory setting="$(get_key_value $synoinfo mem_max_mb)" if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric - if [[ $ramtotal -gt $setting ]]; then + if [[ $ramtotal -gt "$setting" ]]; then synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" # Check we changed mem_max_mb setting="$(get_key_value $synoinfo mem_max_mb)" - if [[ $setting == "$ramtotal" ]]; then + if [[ $ramtotal == "$setting" ]]; then #echo -e "\nSet max memory to $ramtotal MB." ramgb=$((ramtotal / 1024)) echo -e "\nSet max memory to $ramtotal GB." else echo -e "\n${Error}ERROR${Off} Failed to change max memory!" fi - elif [[ $setting == "$ramtotal" ]]; then + elif [[ $ramtotal == "$setting" ]]; then #echo -e "\nMax memory already set to $ramtotal MB." ramgb=$((ramtotal / 1024)) echo -e "\nMax memory already set to $ramgb GB." - else [[ $setting -lt "$ramtotal" ]] - #echo -e "\nMax memory is set to $ramtotal MB." - ramgb=$((ramtotal / 1024)) + else [[ $ramtotal -lt "$setting" ]] + #echo -e "\nMax memory is set to $setting MB." + ramgb=$((setting / 1024)) echo -e "\nMax memory is set to $ramgb GB." fi else From f219b9697d485b3f40565e780ce204ab74fb2a1c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 11:34:40 +1000 Subject: [PATCH 105/694] Add files via upload --- dtb/RS1221+_model.dtb | Bin 0 -> 3900 bytes dtb/RS1221RP+_model.dtb | Bin 0 -> 3904 bytes dtb/RS822+_model.dtb | Bin 0 -> 3617 bytes dtb/RS822RP+_model.dtb | Bin 0 -> 3617 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/RS1221+_model.dtb create mode 100644 dtb/RS1221RP+_model.dtb create mode 100644 dtb/RS822+_model.dtb create mode 100644 dtb/RS822RP+_model.dtb diff --git a/dtb/RS1221+_model.dtb b/dtb/RS1221+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..31e72417e8ba107fcc44d1a2ba6c1347da6198a7 GIT binary patch literal 3900 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 literal 0 HcmV?d00001 From 0a8774c97945ca08e2380b03628436789eaec080 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 11:35:03 +1000 Subject: [PATCH 106/694] Add files via upload --- dtb/RS1221+_model.dtb | Bin 0 -> 3900 bytes dtb/RS1221RP+_model.dtb | Bin 0 -> 3904 bytes dtb/RS822+_model.dtb | Bin 0 -> 3617 bytes dtb/RS822RP+_model.dtb | Bin 0 -> 3617 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/RS1221+_model.dtb create mode 100644 dtb/RS1221RP+_model.dtb create mode 100644 dtb/RS822+_model.dtb create mode 100644 dtb/RS822RP+_model.dtb diff --git a/dtb/RS1221+_model.dtb b/dtb/RS1221+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..31e72417e8ba107fcc44d1a2ba6c1347da6198a7 GIT binary patch literal 3900 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 literal 0 HcmV?d00001 From 811ebc3d86dd5852220cec69f80075a28693dc81 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 12:58:49 +1000 Subject: [PATCH 107/694] Update syno_hdd_db.sh v3.1.59 --- syno_hdd_db.sh | 68 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 4b5e21d..3d0b6ec 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,6 +30,7 @@ # DONE # Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. +# Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ with older DSM version. # # Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. # @@ -37,6 +38,8 @@ # - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 # - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 # +# Fixed bug displaying the max memory setting if total installed memory was less than the max memory. Issue #107 +# # # Minor bug fix for checking amount of installed memory. # @@ -477,28 +480,28 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | url="https://github.com/$repo/archive/refs/tags/$tag.tar.gz" if ! curl -LJO -m 30 --connect-timeout 5 "$url"; then - echo -e "${Error}ERROR ${Off} Failed to download"\ + echo -e "${Error}ERROR${Off} Failed to download"\ "$script-$shorttag.tar.gz!" syslog_set warn "$script $tag failed to download" else if [[ -f /tmp/$script-$shorttag.tar.gz ]]; then # Extract tar file to /tmp/ if ! tar -xf "/tmp/$script-$shorttag.tar.gz" -C "/tmp"; then - echo -e "${Error}ERROR ${Off} Failed to"\ + echo -e "${Error}ERROR${Off} Failed to"\ "extract $script-$shorttag.tar.gz!" syslog_set warn "$script failed to extract $script-$shorttag.tar.gz!" else # Copy new script sh files to script location if ! cp -p "/tmp/$script-$shorttag/"*.sh "$scriptpath"; then copyerr=1 - echo -e "${Error}ERROR ${Off} Failed to copy"\ + echo -e "${Error}ERROR${Off} Failed to copy"\ "$script-$shorttag .sh file(s) to:\n $scriptpath" syslog_set warn "$script failed to copy $tag to script location" else # Set permissions on script sh files if ! chmod 744 "$scriptpath/"*.sh ; then permerr=1 - echo -e "${Error}ERROR ${Off} Failed to set permissions on:" + echo -e "${Error}ERROR${Off} Failed to set permissions on:" echo "$scriptpath *.sh file(s)" syslog_set warn "$script failed to set permissions on $tag" fi @@ -507,27 +510,27 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | # Copy new CHANGES.txt file to script location if ! cp -p "/tmp/$script-$shorttag/CHANGES.txt" "$scriptpath"; then if [[ $autoupdate != "yes" ]]; then copyerr=1; fi - echo -e "${Error}ERROR ${Off} Failed to copy"\ + echo -e "${Error}ERROR${Off} Failed to copy"\ "$script-$shorttag/CHANGES.txt to:\n $scriptpath" else # Set permissions on CHANGES.txt if ! chmod 744 "$scriptpath/CHANGES.txt"; then if [[ $autoupdate != "yes" ]]; then permerr=1; fi - echo -e "${Error}ERROR ${Off} Failed to set permissions on:" + echo -e "${Error}ERROR${Off} Failed to set permissions on:" echo "$scriptpath/CHANGES.txt" fi fi # Delete downloaded .tar.gz file if ! rm "/tmp/$script-$shorttag.tar.gz"; then - echo -e "${Error}ERROR ${Off} Failed to delete"\ + echo -e "${Error}ERROR${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag.tar.gz!" syslog_set warn "$script update failed to delete tmp files" fi # Delete extracted tmp files if ! rm -r "/tmp/$script-$shorttag"; then - echo -e "${Error}ERROR ${Off} Failed to delete"\ + echo -e "${Error}ERROR${Off} Failed to delete"\ "downloaded /tmp/$script-$shorttag!" syslog_set warn "$script update failed to delete tmp files" fi @@ -545,15 +548,15 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | fi fi else - echo -e "${Error}ERROR ${Off}"\ + echo -e "${Error}ERROR${Off}"\ "/tmp/$script-$shorttag.tar.gz not found!" #ls /tmp | grep "$script" # debug syslog_set warn "/tmp/$script-$shorttag.tar.gz not found" fi fi - cd "$scriptpath" || echo -e "${Error}ERROR ${Off} Failed to cd to script location!" + cd "$scriptpath" || echo -e "${Error}ERROR${Off} Failed to cd to script location!" else - echo -e "${Error}ERROR ${Off} Failed to cd to /tmp!" + echo -e "${Error}ERROR${Off} Failed to cd to /tmp!" syslog_set warn "$script update failed to cd to /tmp" fi fi @@ -971,14 +974,12 @@ backupdb(){ for i in "${!db1list[@]}"; do backupdb "${db1list[i]}" ||{ ding - echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db1list[i]}")!" exit 5 } done for i in "${!db2list[@]}"; do backupdb "${db2list[i]}" ||{ ding - echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${db2list[i]}")!" exit 5 # maybe don't exit for .db.new file } done @@ -1153,6 +1154,8 @@ done # DS1821+, DS1621+ and DS1520+ also need edited device tree blob file # /etc.defaults/model.dtb +# RS822RP+, RS822+, RS1221RP+ and RS1221+ with DSM older than 7.2 need +# device tree blob file from DSM 7.2 to support M2D18 enable_card(){ # $1 is the file @@ -1170,7 +1173,7 @@ enable_card(){ if set_section_key_value "$1" "$2" "$modelname" yes; then echo -e "Enabled ${Yellow}$3${Off} for ${Cyan}$modelname${Off}" >&2 else - echo -e "${Error}ERROR 5${Off} Failed to enable $3 for ${modelname}!" >&2 + echo -e "${Error}ERROR 9${Off} Failed to enable $3 for ${modelname}!" >&2 fi else echo -e "${Yellow}$3${Off} already enabled for ${Cyan}$modelname${Off}" >&2 @@ -1182,9 +1185,10 @@ check_modeldtb(){ # $1 is E10M20-T1 or M2D20 or M2D18 or M2D17 if [[ -f /etc.defaults/model.dtb ]]; then if ! grep --text "$1" /etc.defaults/model.dtb >/dev/null; then - if [[ $modelname == "DS1821+" ]] ||\ - [[ $modelname == "DS1621+" ]] ||\ - [[ $modelname == "DS1520+" ]]; + if [[ $modelname == "DS1821+" ]] || [[ $modelname == "DS1621+" ]] ||\ + [[ $modelname == "DS1520+" ]] || [[ $modelname == "RS822RP+" ]] ||\ + [[ $modelname == "RS822+" ]] || [[ $modelname == "RS1221RP+" ]] ||\ + [[ $modelname == "RS1221+" ]]; then echo "" >&2 if [[ -f ./dtb/${modelname}_model.dtb ]]; then @@ -1201,28 +1205,28 @@ check_modeldtb(){ url=${repo}/raw/main/dtb/${modelname}_model.dtb curl -LJO -m 30 --connect-timeout 5 "$url" echo "" >&2 - cd "$scriptpath" || echo -e "${Error}ERROR ${Off} Failed to cd to script location!" + cd "$scriptpath" || echo -e "${Error}ERROR${Off} Failed to cd to script location!" else - echo -e "${Error}ERROR ${Off} /var/services/tmp does not exist!" >&2 + echo -e "${Error}ERROR${Off} /var/services/tmp does not exist!" >&2 fi # Check we actually downloaded the file if [[ -f /var/services/tmp/${modelname}_model.dtb ]]; then blob="/var/services/tmp/${modelname}_model.dtb" else - echo -e "${Error}ERROR ${Off} Failed to download ${modelname}_model.dtb!" >&2 + echo -e "${Error}ERROR${Off} Failed to download ${modelname}_model.dtb!" >&2 fi fi if [[ -f $blob ]]; then # Backup model.dtb if ! backupdb "/etc.defaults/model.dtb"; then - echo -e "${Error}ERROR ${Off} Failed to backup /etc.defaults/model.dtb!" >&2 + echo -e "${Error}ERROR${Off} Failed to backup /etc.defaults/model.dtb!" >&2 else # Move and rename downloaded model.dtb if mv "$blob" "/etc.defaults/model.dtb"; then echo -e "Enabled ${Yellow}$1${Off} in ${Cyan}model.dtb${Off}" >&2 else - echo -e "${Error}ERROR ${Off} Failed to add support for ${1}" >&2 + echo -e "${Error}ERROR${Off} Failed to add support for ${1}" >&2 fi # Fix permissions if needed @@ -1232,8 +1236,8 @@ check_modeldtb(){ fi fi else - #echo -e "${Error}ERROR ${Off} Missing file ${modelname}_model.dtb" >&2 - echo -e "${Error}ERROR ${Off} Missing file $blob" >&2 + #echo -e "${Error}ERROR${Off} Missing file ${modelname}_model.dtb" >&2 + echo -e "${Error}ERROR${Off} Missing file $blob" >&2 fi else echo -e "\n${Cyan}Contact 007revad to get an edited model.dtb file for your model.${Off}" >&2 @@ -1376,6 +1380,7 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo fi # Set mem_max_mb to the amount of installed memory setting="$(get_key_value $synoinfo mem_max_mb)" + settingbak="$(get_key_value ${synoinfo}.bak mem_max_mb)" # GitHub issue #107 if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric if [[ $ramtotal -gt "$setting" ]]; then synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" @@ -1388,6 +1393,21 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo else echo -e "\n${Error}ERROR${Off} Failed to change max memory!" fi + + elif [[ $setting -gt "$ramtotal" ]] && [[ $setting -gt "$settingbak" ]]; # GitHub issue #107 + then + # Fix setting is greater than both ramtotal and default in syninfo.conf.bak + synosetkeyvalue "$synoinfo" mem_max_mb "$settingbak" + # Check we restored mem_max_mb + setting="$(get_key_value $synoinfo mem_max_mb)" + if [[ $settingbak == "$setting" ]]; then + #echo -e "\nSet max memory to $ramtotal MB." + ramgb=$((ramtotal / 1024)) + echo -e "\nRestored max memory to $ramtotal GB." + else + echo -e "\n${Error}ERROR${Off} Failed to restore max memory!" + fi + elif [[ $ramtotal == "$setting" ]]; then #echo -e "\nMax memory already set to $ramtotal MB." ramgb=$((ramtotal / 1024)) From 9f78eb70521890c1121c4daa38a340e3ab60430c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 1 Jul 2023 12:59:07 +1000 Subject: [PATCH 108/694] Update CHANGES.txt v3.1.59 --- CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ef166bd..8cfb684 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,9 +1,11 @@ v3.1.59 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. +- Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ for older DSM versions. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. - Fixed bugs where the calculated amount of installed memory could be incorrect: - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 +- Fixed bug displaying the max memory setting if total installed memory was less than the max memory. Issue #107 v3.0.56 - Minor bug fix for checking amount of installed memory. From 5411a7c9933622b5186942e4804d83ced6cc8ad0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 2 Jul 2023 07:04:27 +1000 Subject: [PATCH 109/694] Delete RS1221RP+_model.dtb --- dtb/RS1221RP+_model.dtb | Bin 3904 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/RS1221RP+_model.dtb diff --git a/dtb/RS1221RP+_model.dtb b/dtb/RS1221RP+_model.dtb deleted file mode 100644 index 68290e1baae0bcfb185919c87952c5a05c9c4695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 zcmd5<-D=c86rT8l)>5kU%1iI0+LC0qe}Yi7MZ748deOU(O{Uvml8KXK?Oyv9zK7sj z=p%^WjUWi#i|5Q=l3kPSmM$2W&CHoIXU_MXGiS12R{s1XWObhqvP;OyFL>XFb_d#R zXz*AsK>kVg8^4wsU4{1&_Fs)t7PH~FCcg{)0N_9?uj4y zXg8pt4eRA`-vOfVLHljES7ENg&Cm2AD@!sjk6E$rpb28d(ZDZ!(bxWd7o*DmA8LFB z-qJ$#2`)2L_yaxRw~C`h@;nUu;8d^CK3dwYq`S**e;&Jn!z1@# z{(MT@P%SdPDef%)G>8N$nLjnmy-DBTj9IsouJEOuueop;pEO?=@JZ)tM+~S#Phe zYQjX^R$zYJwjbHf=5}>@Oq~+Bq|de$)6g4oN>iC&D2H6L`gj+3Fsb4o;)1%2`{_`g zyeVD9H|h%gCMJ<(i^ODdaTX?(@8`lKDK>S`YGM+zmw;)fEl!5ZS(s#Lm%Pu4)0T|2 zvE9TZEG-ff?rym6%DwH%Pm!lxxwlj43foOg0`VnaYCTVe%UN+!-y{Zq7pA>VOoE+7 zV#3{xpA&IfuGa`h773#}fvKr0i-h5;87C3NOTg56p3t`OvlEjn5=OTZlPnS~m_)=E ziK(mZHMy5X;(VB7kuaDjUP4~Rxc(xB1h~MxgZ~$d%`AxM#C-?f@%ru(i6VS0^Fd9G zSffFiV{*cSyyBY2@Lq>zxPUdP%nKd-hI-~~2$8m_N_#c$R`Xg%?kg>|?F$@t@7vpG zV42#tU(IW7mI9V!ei02~N)i^*n2adTBbE|zG3Qy7mKj{!tjwk*9_agHDL)NEh}t{K zK|QB$m2v_MdN@^#Gdd~rLqCI$k!f+rX`V}Qkg(k2bO<(sl2h*__Vd$!PYoC= Date: Sun, 2 Jul 2023 07:04:35 +1000 Subject: [PATCH 110/694] Delete RS822RP+_model.dtb --- dtb/RS822RP+_model.dtb | Bin 3617 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/RS822RP+_model.dtb diff --git a/dtb/RS822RP+_model.dtb b/dtb/RS822RP+_model.dtb deleted file mode 100644 index c5983dd8fca4908cb46d0dcab2e78ceef8ba34c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 zcmd5|6UR3RZfzGjHDey+8Bj&EC&j&;BOl_M3!| z143?n1Mho4cYt02f`@(u{LkHR`G;H^!}mv4w-Vm?M6Aa!{%tTfF#bKvUxfG9 zK-YmB_M^wU2?UN0>aUCAWmxOu&?ixeHdVt-sqFm(AqXvtsj$M0qd(ueS?}L>VUF>+ z7(0yAty~rZ{XdH_*$5-*FZ;2(5eCM&g!3R_M=9I>)Td-LuXjPW&#O#W1&TK0vPyX- zbRJSmXuYV0dyRYY17kbv9d>{}Fmis!ef-gwJQLYG>O>!D#P#VO!`0yW zsx%Kuoo^v`RLrx&Mdj;f5c6c!H#{Fd1zG3I`h0B^SLajA*A;w@(jCSL<#I#IG~g<#`Yg=Kt0gcf&K_KaSr$PwZFm~O@9DCUHoIU z;;*7!cC1$R05ss9Q!5VXqFlNAA25cwx()Ly)yhb&BHo%@z42%80Zm^zSNk9hPnXxR zT)o@NI(doBgEvaYFBver(&xJ#kc{_$K@EIA1v7CDHL%qN|D4SxE96QagIe`{CfRW( z-^sORIuIjtF>Q@^KkgI#80PnYx-$qm;h1&yA0^xFyhO}!wEFe5Uym~0u18vD_pOWV zI)I3Ij@@qE$rNeEA;kO3cN_ie!=uB8j3t5X{04cNhd`HfL*K;QLrt&O4bD)snaf3y z$@sbD@ZnpWR@!FUX0kVVj|qTteCVn4OLj7ezI3(&MsUf=La(LO%Kd_V1&sY62I3&y z$W+w`TTDwyDwWHUETlGts)@TqOjFct1DA|yo3k7Uq!g!~KhJZh>ZekJxRGCYW>zV~ zwVVMbYqjLZr7-jJm!?WtztReAIsCm*t>v?(P~^eU!$X4K?qyLwA+DGkW$bZrLhu}M zd)i16PZepjvMN)hXFHcTMB$-wX=P^nIo=>n-Jxpq0a>+x4`5Tw@cz#cc_!<0l`$bk oT5e3n)$y@+-MNdW2>l`=YYILuazAKc&~Lssfpd}PS{g(C1sU@nqW}N^ From 8ace580a4bf746d7d64e41fef9ab347c25de8861 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 2 Jul 2023 07:05:20 +1000 Subject: [PATCH 111/694] Add files via upload --- dtb/RS1221rp+_model.dtb | Bin 0 -> 3904 bytes dtb/RS822rp+_model.dtb | Bin 0 -> 3617 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/RS1221rp+_model.dtb create mode 100644 dtb/RS822rp+_model.dtb diff --git a/dtb/RS1221rp+_model.dtb b/dtb/RS1221rp+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..68290e1baae0bcfb185919c87952c5a05c9c4695 GIT binary patch literal 3904 zcmd5<-D=c86rT8l)>5kU%1iI0+LC0qe}Yi7MZ748deOU(O{Uvml8KXK?Oyv9zK7sj z=p%^WjUWi#i|5Q=l3kPSmM$2W&CHoIXU_MXGiS12R{s1XWObhqvP;OyFL>XFb_d#R zXz*AsK>kVg8^4wsU4{1&_Fs)t7PH~FCcg{)0N_9?uj4y zXg8pt4eRA`-vOfVLHljES7ENg&Cm2AD@!sjk6E$rpb28d(ZDZ!(bxWd7o*DmA8LFB z-qJ$#2`)2L_yaxRw~C`h@;nUu;8d^CK3dwYq`S**e;&Jn!z1@# z{(MT@P%SdPDef%)G>8N$nLjnmy-DBTj9IsouJEOuueop;pEO?=@JZ)tM+~S#Phe zYQjX^R$zYJwjbHf=5}>@Oq~+Bq|de$)6g4oN>iC&D2H6L`gj+3Fsb4o;)1%2`{_`g zyeVD9H|h%gCMJ<(i^ODdaTX?(@8`lKDK>S`YGM+zmw;)fEl!5ZS(s#Lm%Pu4)0T|2 zvE9TZEG-ff?rym6%DwH%Pm!lxxwlj43foOg0`VnaYCTVe%UN+!-y{Zq7pA>VOoE+7 zV#3{xpA&IfuGa`h773#}fvKr0i-h5;87C3NOTg56p3t`OvlEjn5=OTZlPnS~m_)=E ziK(mZHMy5X;(VB7kuaDjUP4~Rxc(xB1h~MxgZ~$d%`AxM#C-?f@%ru(i6VS0^Fd9G zSffFiV{*cSyyBY2@Lq>zxPUdP%nKd-hI-~~2$8m_N_#c$R`Xg%?kg>|?F$@t@7vpG zV42#tU(IW7mI9V!ei02~N)i^*n2adTBbE|zG3Qy7mKj{!tjwk*9_agHDL)NEh}t{K zK|QB$m2v_MdN@^#Gdd~rLqCI$k!f+rX`V}Qkg(k2bO<(sl2h*__Vd$!PYoC=|6UR3RZfzGjHDey+8Bj&EC&j&;BOl_M3!| z143?n1Mho4cYt02f`@(u{LkHR`G;H^!}mv4w-Vm?M6Aa!{%tTfF#bKvUxfG9 zK-YmB_M^wU2?UN0>aUCAWmxOu&?ixeHdVt-sqFm(AqXvtsj$M0qd(ueS?}L>VUF>+ z7(0yAty~rZ{XdH_*$5-*FZ;2(5eCM&g!3R_M=9I>)Td-LuXjPW&#O#W1&TK0vPyX- zbRJSmXuYV0dyRYY17kbv9d>{}Fmis!ef-gwJQLYG>O>!D#P#VO!`0yW zsx%Kuoo^v`RLrx&Mdj;f5c6c!H#{Fd1zG3I`h0B^SLajA*A;w@(jCSL<#I#IG~g<#`Yg=Kt0gcf&K_KaSr$PwZFm~O@9DCUHoIU z;;*7!cC1$R05ss9Q!5VXqFlNAA25cwx()Ly)yhb&BHo%@z42%80Zm^zSNk9hPnXxR zT)o@NI(doBgEvaYFBver(&xJ#kc{_$K@EIA1v7CDHL%qN|D4SxE96QagIe`{CfRW( z-^sORIuIjtF>Q@^KkgI#80PnYx-$qm;h1&yA0^xFyhO}!wEFe5Uym~0u18vD_pOWV zI)I3Ij@@qE$rNeEA;kO3cN_ie!=uB8j3t5X{04cNhd`HfL*K;QLrt&O4bD)snaf3y z$@sbD@ZnpWR@!FUX0kVVj|qTteCVn4OLj7ezI3(&MsUf=La(LO%Kd_V1&sY62I3&y z$W+w`TTDwyDwWHUETlGts)@TqOjFct1DA|yo3k7Uq!g!~KhJZh>ZekJxRGCYW>zV~ zwVVMbYqjLZr7-jJm!?WtztReAIsCm*t>v?(P~^eU!$X4K?qyLwA+DGkW$bZrLhu}M zd)i16PZepjvMN)hXFHcTMB$-wX=P^nIo=>n-Jxpq0a>+x4`5Tw@cz#cc_!<0l`$bk oT5e3n)$y@+-MNdW2>l`=YYILuazAKc&~Lssfpd}PS{g(C1sU@nqW}N^ literal 0 HcmV?d00001 From 4ab7cfd54475032e35509b45eb33f3bf0e640759 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 3 Jul 2023 18:21:40 +1000 Subject: [PATCH 112/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 3d0b6ec..9d4d682 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -40,6 +40,8 @@ # # Fixed bug displaying the max memory setting if total installed memory was less than the max memory. Issue #107 # +# Fixed bug where sata1 drive firmware version was wrong if there was a sata10 drive. +# # # Minor bug fix for checking amount of installed memory. # @@ -199,7 +201,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.59" +scriptver="v3.1.60" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -692,9 +694,9 @@ getdriveinfo(){ #fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space device="/dev/$(basename -- "$1")" - #fwrev=$(syno_hdd_util --ssd_detect | grep "$device" | awk '{print $2}') # GitHub issue #86, 87 + #fwrev=$(syno_hdd_util --ssd_detect | grep "$device " | awk '{print $2}') # GitHub issue #86, 87 # Account for SSD drives with spaces in their model name/number - fwrev=$(syno_hdd_util --ssd_detect | grep "$device" | awk '{print $(NF-3)}') # GitHub issue #86, 87 + fwrev=$(syno_hdd_util --ssd_detect | grep "$device " | awk '{print $(NF-3)}') # GitHub issue #86, 87 if [[ $hdmodel ]] && [[ $fwrev ]]; then hdlist+=("${hdmodel},${fwrev}") @@ -1186,8 +1188,8 @@ check_modeldtb(){ if [[ -f /etc.defaults/model.dtb ]]; then if ! grep --text "$1" /etc.defaults/model.dtb >/dev/null; then if [[ $modelname == "DS1821+" ]] || [[ $modelname == "DS1621+" ]] ||\ - [[ $modelname == "DS1520+" ]] || [[ $modelname == "RS822RP+" ]] ||\ - [[ $modelname == "RS822+" ]] || [[ $modelname == "RS1221RP+" ]] ||\ + [[ $modelname == "DS1520+" ]] || [[ $modelname == "RS822rp+" ]] ||\ + [[ $modelname == "RS822+" ]] || [[ $modelname == "RS1221rp+" ]] ||\ [[ $modelname == "RS1221+" ]]; then echo "" >&2 From 397661644fe005f4a4f59b26269c89c8fcb9aaee Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 3 Jul 2023 18:22:28 +1000 Subject: [PATCH 113/694] Update CHANGES.txt --- CHANGES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 8cfb684..307f2de 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.1.59 +v3.1.56 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. - Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ for older DSM versions. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. @@ -6,6 +6,7 @@ v3.1.59 - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 - Fixed bug displaying the max memory setting if total installed memory was less than the max memory. Issue #107 +- Fixed bug where sata1 drive firmware version was wrong if there was a sata10 drive. v3.0.56 - Minor bug fix for checking amount of installed memory. From fb947f0799d4050a35aa762fa6679300f5a2de57 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 3 Jul 2023 18:22:46 +1000 Subject: [PATCH 114/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 307f2de..f4af1b5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.1.56 +v3.1.60 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. - Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ for older DSM versions. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. From f28e866280f04ad52de84ab14f0e08939d2b57ec Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Jul 2023 10:50:28 +1000 Subject: [PATCH 115/694] Add files via upload --- dtb/RS2423+_model.dtb | Bin 0 -> 9166 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/RS2423+_model.dtb diff --git a/dtb/RS2423+_model.dtb b/dtb/RS2423+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..680ca92c81b337ffa1463b4ff192854fe01e8eb5 GIT binary patch literal 9166 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 Date: Wed, 5 Jul 2023 09:13:25 +0200 Subject: [PATCH 116/694] Updated wording --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a55cb8..b685a8a 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ #### What the script does: * Optionally disable DSM's "support_disk_compatibility". * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. -* Optionally enables M2D20, M2D18, M2D17 and E10M20-T1 on Synology NAS that don't officially support them. +* Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Optionally enables immutable snapshots on models older than '20 series running DSM 7.2. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. From 29a2075eb1d4ea7026d00c57ecade44ff6ce4260 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Jul 2023 21:52:31 +1000 Subject: [PATCH 117/694] Add files via upload --- dtb/DS1823+_model.dtb | Bin 0 -> 5762 bytes dtb/DS2422+_model.dtb | Bin 0 -> 4923 bytes dtb/RS2421+_model.dtb | Bin 0 -> 5871 bytes dtb/RS2421RP+_model.dtb | Bin 0 -> 6225 bytes dtb/RS2821RP+_model.dtb | Bin 0 -> 6918 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/DS1823+_model.dtb create mode 100644 dtb/DS2422+_model.dtb create mode 100644 dtb/RS2421+_model.dtb create mode 100644 dtb/RS2421RP+_model.dtb create mode 100644 dtb/RS2821RP+_model.dtb diff --git a/dtb/DS1823+_model.dtb b/dtb/DS1823+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..c04a562ca0adce991e9452d6b13b816ecddf1627 GIT binary patch literal 5762 zcmdT|y^rHW6dwb}aeJHqaRO1$(13tl+0G{HQXSHs&`NA|AR$p$6MHtXusuGH6Lu>k zL_tAw{{e`ang$`!P*YNXgb*MaDr!!=_h!aliL=>LB6OA}9zVa&-+S|BoF8x8|C_Pr zK4FXxW5A985mE)fXn#-=%4C&>(?<)kHY;L&hMOOGLe(>2K{-MUsr}6%stn2 z1Mk2eoT=A{3uPaJf%Z_J)%C)Z7f}!wcY%f%(w~I!5)9;j#0)FH56@4)z~?J4-YJWj zfID7Dy9$G+aahP4Nkl_EGZ@w`K7S75Z5USXS1|vz@%$ake}my1y+8EcfC*g4+ZX>+ z@UD(OIU&70gNEF)umIt?i%asrKa;^K4_Ub@=pVT^$(jqK?6(bXa-3 z*M49Y){h0_w0deC!%OLC)&lu*+jCERclTWl>&o0b3zq8K2+vJHur&Ed{UC%AH0fbZ zHcy-Ngn9kbb@$xY-2?oA8ToB%;UA@Xfb0yMGzI6#I#PUa(r8?WIrLlSab>%g&ck(}-Q;B|CfpmjIzdh+ zjvK)9qU*ltdV9lq1=alyv2FBb=Vf^O9cXA1uy;V~&L8F(S&tj@_h3#wCn5?ag%BAK z;6m9Q;0qBp8buF!`550Bu;X#_VjR(|03y+Q0#|R9-wN`zY^AYkAf4e>i ztqtKZ`rrD8*?ZQ)&;UVyl5#+M4 zUrmsd{xd~yPk>ym%K6S;=Dp4NGW%wmTxGxaO!L6@@qF1id%-uaJwsLdZQnVL&VpLL zI;%9~tNp20J`dv+_GvLwUT13DaFaRn@l0XRaAEzT%>?crz^KltAY(DL>v8Vywsh*% zQRi+xsNc8kYE6B1U%l8aDX==1*sb1M9v!dd?6ZsiU#yIGzmCTNJQnN@>-S_g_QL?6 zz19Bab3T6SNM>B8O`|fql{kCU;j!{!bD+c2%@H`V-Y-Pj#7)A^B%kun=sUXyWb@EM`#*(6}*Xj57fBphVWS3;L)0GVNm4?g` z{ETfK0qVhVEtF}_%Xpj!mdZ#ZY%U5F%Z%ZsKz|<6SDwn_Y?i}Upq%AwfdVTb;pdt@ zjUw1yJ`x46D{`VpBx`C{DUxwvkw_{-CU~jG(Kav`Ds7wR><-~mNJxyCgb-m`AK30s#EaLv+F{6UZV0sF0$49CIbue-vCg3jhEB literal 0 HcmV?d00001 diff --git a/dtb/DS2422+_model.dtb b/dtb/DS2422+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..aa85b59eefecb9e149e7d509c24540276b2449b3 GIT binary patch literal 4923 zcmdT|&2G~`5Z(nUD5XGEap1@emA10o1PVw9iB^b1PjKkXa%?xTu)W4Vp*iywyazYl z0UiM%aY5n)XT;2`*LL05ZIb#xq>cAy_M2~JXS|bqUH$uuvGu2nv0cX2{=oA-v^8kA zp}~j0gyCn|Kk?1;(PelpWB>Ie6uuZvD)V=szmnwh=2+J>%`|$3@t`7e1^TED@em8g zccI;=jH~iXF#jTrGZ&ut!97=@9R{8qiwLI*93T2s+z&7Ydy4gs(EnB$e}ew^e0&X_ zU!Wm2V(`5~-7pO3$^A_>qu)xKony6$M?qvJzDS?zgu#7pV5JuImEAvRRPy@?V_dtG zw-Q70I4_3UkIxcg2SzYHClB<2!YMI&tr%6`H`~&m2}5x>Y0JZzFs9q`s1*bCsdH+! z1+oY}O+Kw-OtK`(X}=nXvf*M=oF|;w$w4E+oDsTo)@EP3*zy8T{|$etv51d zh;vikt%H1-cdo7lurbYZEig>mik&?57!Sum_5E=R_WstiZEaKA#V_c=jPw!c<19%W z+p3$$@T+d&yX})?MCjU-GSlcn+k5Z@BSB?b(uo5*_>}WWwSN1 zJvvEwmX&kfshRs_e+y�imnCu^*W3{Stk{(qk@66&H0(`RftxoaTCSu&`IF+Lt-3B(3|5Kq-68_-vN;IK#e6J@Y& ze5P;Fl)_ZLDb|g0UCBtj5~)dVwI*uNOR5y+6ured%3xczMG#r3H}G8+2*>r=*o_lU zgbe?vF_Xv(v&bCAB8yJXm>_RW!#{nVH3UTNKIP?}}ldz3Q*1^e^?wNnVFW?XG zJK!fEBrZsZ19!yCIJ28g<7~I22c)j#jXm~!o~J#@m!&^Hg}C}l2=PFOD<9!`6WS$c z7oow=dIt1N_hD~$sswZzPq0G;s>^F1`si+FJS0ovEf z_!IQMmE+U!{0t4T5yN`1<+#p$=xKhF?r6WM?rN8rtSrsEJdwo{hcK)p?)!yLeU|q- zji&PbD96X(iEWDE(#(D_Q2xCbD+^&T|EwInR*b6c&AO~Egwd?a+Cmu3x@g~;Y>GVW zC$lb)P4L?*7$L?iZt~3--&LQ+y8Lo~FFJ z40H9oW5#LT9OWL_b#fLR<=(74j&hH4(Ase9P1nBrN~a8+7pB}>p2@w)u~T3y%3Mob zFYr}ZUVFkC?xfYb`vUO(w(WcN9s2?PK@TXCJJu3;9tM7}%{&wN7*}6~ZMeNfa48-( z-E~)s(W*DfK0R|%H!PVfmaVki|Dv;_udl^)E}8b|>~9A#c~bkb;^&pRKcE(~&X#M* z{^l52$d?nDI7SX26W?nsK3uKq19@VMThcEc7LgkINu?mfyX_?KE$3VnYP%urhU2X5 zmiDn~IxNBbE!%!%JNJ6i?3vu}WLLzdeUm8kr1FOYolQuGI@iJ~?i@7MwLwO*U^y;kzObcQ$}$0TwmjRY)d@SiQj>Y#(3<&*Hn~sAfquJJFugE;R2w;l#~7V z59g15sq02gqtCmrXL)6JVNau+2eN0d+w(H1;5*Kpvb+;5ck-&~oMs!*SzWqMqxAp@CcG8SSaJ+Z0DCIpNT Hg9zd;N)Y#q literal 0 HcmV?d00001 diff --git a/dtb/RS2421RP+_model.dtb b/dtb/RS2421RP+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..4b7d333a9f52fbd5be743d699ab9c77a2d8b5e1c GIT binary patch literal 6225 zcmeHLzmMER6dng65<-BhV4_^`KR(iWLZ{B?Ky*Km5Z~gPtfB$6c zrH>e6w-|fzL->6ik6Zeep?yUeeRLT3 zz8^^yPQpNnH(Pd(LmSsbOvHN%1m~jO3hJ?q^MDiC;qQC3Y%=)8586BdvR~$jo?pqmEbvR1Seslc!zhVmY94#cs}9R{ZSgdu`S-qm!@uU= z!Y^o1w&VQ*>v=yYl_qg=VCO9OSzP@n9KxM!gG=XOFT4|K8iRfV_tu?LhN+q4S#BnF zkBZNMetd1`vzfH!b9|8Gw3GVYZte3dzR04 zj4NW(xc-*e-19NwX&%{Q#M8<1 zRPjuXCXwJ0-s4;|5;mMon90%sZSm3WEqA#ItqG8_>3K@L-OOC)!}0`A=}2 zR2I|5W-%Tv$E}TCS0lOBZ9h{T>(WvdvuEAKING3GPIxKeI-eF9D|wm~>@brm=M}>j zz>yMp)re>=c_Y>}5!lDaT7QtHaArTtB$%u0Q)6601S1@(k44ti#c3>{NL^Q_GE+*c z1tF|hTGg7B;7uLLY@VwHsC-cLZE0387_reC1_ogwD^2K{dhG4F5ae`(0@oNLhk$`JEj zh5pxunD;jHzcIwTkD-r#MPiD2G#Q3vNNvQ3>;Fo9@n7rz;h3McjqHrGPGaV&b${FYA^QO3?`PQ)-pecLNzkSo^Ylo zS^W<39F+NE*S+iBaS!khv_M-`>&{>1DX44GO*$R%i6!=KcX~)J_Bcb&$X1 zx^KDOU4LFV)jaZPRWE5g3Zx3B6J1HT9^7#UufP-Z&>gpuUBpM;>xpmIhOhE(2fk;! z@zF)LC%!!!K3H1cy*u#Xy9(RU5?{I`pBFx;ot5}-pX$Izxz!V&HUD^Br^A0M;!BtN zp7^Z!2d-J^zZLPN7l-r0w}tr9uHF-$wLVZU<$OncZ*=D$UAlVWv*zCx;;Ub#K+$<& z+(L}?%UXYo);ifjob}6Ke~i{#tj@2FTwHP1dHSnJ?^y4j<9XuguP(hYT5Dz-vDR;v zy)jzzaT~GLUyXWWwC3YRXJ2%>7vxgGcfvd7^+9yp`>c7!Yt!Cb(`l~48|h@9H+6E& zY=V<>t*Mi9d=s6#pOVfzO5(;n8}Gg5-b^kgxmhu+i3#UqI4kh*fFEMyyYlPMX5Tt6 zhy95%uKGSzH6Hz`;&O;wAKVk{8UApQfN2DjD# literal 0 HcmV?d00001 From 0d5cd30427f4cb661cd6f4e9f4da4d433f2b9abe Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Jul 2023 21:57:55 +1000 Subject: [PATCH 118/694] Add files via upload --- dtb/RS1221RP+_model.dtb | Bin 0 -> 3904 bytes dtb/RS822RP+_model.dtb | Bin 0 -> 3617 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/RS1221RP+_model.dtb create mode 100644 dtb/RS822RP+_model.dtb diff --git a/dtb/RS1221RP+_model.dtb b/dtb/RS1221RP+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..68290e1baae0bcfb185919c87952c5a05c9c4695 GIT binary patch literal 3904 zcmd5<-D=c86rT8l)>5kU%1iI0+LC0qe}Yi7MZ748deOU(O{Uvml8KXK?Oyv9zK7sj z=p%^WjUWi#i|5Q=l3kPSmM$2W&CHoIXU_MXGiS12R{s1XWObhqvP;OyFL>XFb_d#R zXz*AsK>kVg8^4wsU4{1&_Fs)t7PH~FCcg{)0N_9?uj4y zXg8pt4eRA`-vOfVLHljES7ENg&Cm2AD@!sjk6E$rpb28d(ZDZ!(bxWd7o*DmA8LFB z-qJ$#2`)2L_yaxRw~C`h@;nUu;8d^CK3dwYq`S**e;&Jn!z1@# z{(MT@P%SdPDef%)G>8N$nLjnmy-DBTj9IsouJEOuueop;pEO?=@JZ)tM+~S#Phe zYQjX^R$zYJwjbHf=5}>@Oq~+Bq|de$)6g4oN>iC&D2H6L`gj+3Fsb4o;)1%2`{_`g zyeVD9H|h%gCMJ<(i^ODdaTX?(@8`lKDK>S`YGM+zmw;)fEl!5ZS(s#Lm%Pu4)0T|2 zvE9TZEG-ff?rym6%DwH%Pm!lxxwlj43foOg0`VnaYCTVe%UN+!-y{Zq7pA>VOoE+7 zV#3{xpA&IfuGa`h773#}fvKr0i-h5;87C3NOTg56p3t`OvlEjn5=OTZlPnS~m_)=E ziK(mZHMy5X;(VB7kuaDjUP4~Rxc(xB1h~MxgZ~$d%`AxM#C-?f@%ru(i6VS0^Fd9G zSffFiV{*cSyyBY2@Lq>zxPUdP%nKd-hI-~~2$8m_N_#c$R`Xg%?kg>|?F$@t@7vpG zV42#tU(IW7mI9V!ei02~N)i^*n2adTBbE|zG3Qy7mKj{!tjwk*9_agHDL)NEh}t{K zK|QB$m2v_MdN@^#Gdd~rLqCI$k!f+rX`V}Qkg(k2bO<(sl2h*__Vd$!PYoC=|6UR3RZfzGjHDey+8Bj&EC&j&;BOl_M3!| z143?n1Mho4cYt02f`@(u{LkHR`G;H^!}mv4w-Vm?M6Aa!{%tTfF#bKvUxfG9 zK-YmB_M^wU2?UN0>aUCAWmxOu&?ixeHdVt-sqFm(AqXvtsj$M0qd(ueS?}L>VUF>+ z7(0yAty~rZ{XdH_*$5-*FZ;2(5eCM&g!3R_M=9I>)Td-LuXjPW&#O#W1&TK0vPyX- zbRJSmXuYV0dyRYY17kbv9d>{}Fmis!ef-gwJQLYG>O>!D#P#VO!`0yW zsx%Kuoo^v`RLrx&Mdj;f5c6c!H#{Fd1zG3I`h0B^SLajA*A;w@(jCSL<#I#IG~g<#`Yg=Kt0gcf&K_KaSr$PwZFm~O@9DCUHoIU z;;*7!cC1$R05ss9Q!5VXqFlNAA25cwx()Ly)yhb&BHo%@z42%80Zm^zSNk9hPnXxR zT)o@NI(doBgEvaYFBver(&xJ#kc{_$K@EIA1v7CDHL%qN|D4SxE96QagIe`{CfRW( z-^sORIuIjtF>Q@^KkgI#80PnYx-$qm;h1&yA0^xFyhO}!wEFe5Uym~0u18vD_pOWV zI)I3Ij@@qE$rNeEA;kO3cN_ie!=uB8j3t5X{04cNhd`HfL*K;QLrt&O4bD)snaf3y z$@sbD@ZnpWR@!FUX0kVVj|qTteCVn4OLj7ezI3(&MsUf=La(LO%Kd_V1&sY62I3&y z$W+w`TTDwyDwWHUETlGts)@TqOjFct1DA|yo3k7Uq!g!~KhJZh>ZekJxRGCYW>zV~ zwVVMbYqjLZr7-jJm!?WtztReAIsCm*t>v?(P~^eU!$X4K?qyLwA+DGkW$bZrLhu}M zd)i16PZepjvMN)hXFHcTMB$-wX=P^nIo=>n-Jxpq0a>+x4`5Tw@cz#cc_!<0l`$bk oT5e3n)$y@+-MNdW2>l`=YYILuazAKc&~Lssfpd}PS{g(C1sU@nqW}N^ literal 0 HcmV?d00001 From 5aa9fdc3b15d90a5702fffa80fd50a663e0971b8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Jul 2023 21:58:17 +1000 Subject: [PATCH 119/694] Delete RS1221rp+_model.dtb --- dtb/RS1221rp+_model.dtb | Bin 3904 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/RS1221rp+_model.dtb diff --git a/dtb/RS1221rp+_model.dtb b/dtb/RS1221rp+_model.dtb deleted file mode 100644 index 68290e1baae0bcfb185919c87952c5a05c9c4695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 zcmd5<-D=c86rT8l)>5kU%1iI0+LC0qe}Yi7MZ748deOU(O{Uvml8KXK?Oyv9zK7sj z=p%^WjUWi#i|5Q=l3kPSmM$2W&CHoIXU_MXGiS12R{s1XWObhqvP;OyFL>XFb_d#R zXz*AsK>kVg8^4wsU4{1&_Fs)t7PH~FCcg{)0N_9?uj4y zXg8pt4eRA`-vOfVLHljES7ENg&Cm2AD@!sjk6E$rpb28d(ZDZ!(bxWd7o*DmA8LFB z-qJ$#2`)2L_yaxRw~C`h@;nUu;8d^CK3dwYq`S**e;&Jn!z1@# z{(MT@P%SdPDef%)G>8N$nLjnmy-DBTj9IsouJEOuueop;pEO?=@JZ)tM+~S#Phe zYQjX^R$zYJwjbHf=5}>@Oq~+Bq|de$)6g4oN>iC&D2H6L`gj+3Fsb4o;)1%2`{_`g zyeVD9H|h%gCMJ<(i^ODdaTX?(@8`lKDK>S`YGM+zmw;)fEl!5ZS(s#Lm%Pu4)0T|2 zvE9TZEG-ff?rym6%DwH%Pm!lxxwlj43foOg0`VnaYCTVe%UN+!-y{Zq7pA>VOoE+7 zV#3{xpA&IfuGa`h773#}fvKr0i-h5;87C3NOTg56p3t`OvlEjn5=OTZlPnS~m_)=E ziK(mZHMy5X;(VB7kuaDjUP4~Rxc(xB1h~MxgZ~$d%`AxM#C-?f@%ru(i6VS0^Fd9G zSffFiV{*cSyyBY2@Lq>zxPUdP%nKd-hI-~~2$8m_N_#c$R`Xg%?kg>|?F$@t@7vpG zV42#tU(IW7mI9V!ei02~N)i^*n2adTBbE|zG3Qy7mKj{!tjwk*9_agHDL)NEh}t{K zK|QB$m2v_MdN@^#Gdd~rLqCI$k!f+rX`V}Qkg(k2bO<(sl2h*__Vd$!PYoC= Date: Wed, 5 Jul 2023 21:58:30 +1000 Subject: [PATCH 120/694] Delete RS822rp+_model.dtb --- dtb/RS822rp+_model.dtb | Bin 3617 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/RS822rp+_model.dtb diff --git a/dtb/RS822rp+_model.dtb b/dtb/RS822rp+_model.dtb deleted file mode 100644 index c5983dd8fca4908cb46d0dcab2e78ceef8ba34c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 zcmd5|6UR3RZfzGjHDey+8Bj&EC&j&;BOl_M3!| z143?n1Mho4cYt02f`@(u{LkHR`G;H^!}mv4w-Vm?M6Aa!{%tTfF#bKvUxfG9 zK-YmB_M^wU2?UN0>aUCAWmxOu&?ixeHdVt-sqFm(AqXvtsj$M0qd(ueS?}L>VUF>+ z7(0yAty~rZ{XdH_*$5-*FZ;2(5eCM&g!3R_M=9I>)Td-LuXjPW&#O#W1&TK0vPyX- zbRJSmXuYV0dyRYY17kbv9d>{}Fmis!ef-gwJQLYG>O>!D#P#VO!`0yW zsx%Kuoo^v`RLrx&Mdj;f5c6c!H#{Fd1zG3I`h0B^SLajA*A;w@(jCSL<#I#IG~g<#`Yg=Kt0gcf&K_KaSr$PwZFm~O@9DCUHoIU z;;*7!cC1$R05ss9Q!5VXqFlNAA25cwx()Ly)yhb&BHo%@z42%80Zm^zSNk9hPnXxR zT)o@NI(doBgEvaYFBver(&xJ#kc{_$K@EIA1v7CDHL%qN|D4SxE96QagIe`{CfRW( z-^sORIuIjtF>Q@^KkgI#80PnYx-$qm;h1&yA0^xFyhO}!wEFe5Uym~0u18vD_pOWV zI)I3Ij@@qE$rNeEA;kO3cN_ie!=uB8j3t5X{04cNhd`HfL*K;QLrt&O4bD)snaf3y z$@sbD@ZnpWR@!FUX0kVVj|qTteCVn4OLj7ezI3(&MsUf=La(LO%Kd_V1&sY62I3&y z$W+w`TTDwyDwWHUETlGts)@TqOjFct1DA|yo3k7Uq!g!~KhJZh>ZekJxRGCYW>zV~ zwVVMbYqjLZr7-jJm!?WtztReAIsCm*t>v?(P~^eU!$X4K?qyLwA+DGkW$bZrLhu}M zd)i16PZepjvMN)hXFHcTMB$-wX=P^nIo=>n-Jxpq0a>+x4`5Tw@cz#cc_!<0l`$bk oT5e3n)$y@+-MNdW2>l`=YYILuazAKc&~Lssfpd}PS{g(C1sU@nqW}N^ From cdffb91ab23c98120e5d13c69e29096d5927a76f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 6 Jul 2023 22:08:57 +1000 Subject: [PATCH 121/694] Add files via upload --- dtb/DS1823+_model.dtb | Bin 0 -> 5762 bytes dtb/DS2422+_model.dtb | Bin 0 -> 4923 bytes dtb/RS2421+_model.dtb | Bin 0 -> 5871 bytes dtb/RS2421RP+_model.dtb | Bin 0 -> 6225 bytes dtb/RS2423+_model.dtb | Bin 0 -> 9166 bytes dtb/RS2821RP+_model.dtb | Bin 0 -> 6918 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dtb/DS1823+_model.dtb create mode 100644 dtb/DS2422+_model.dtb create mode 100644 dtb/RS2421+_model.dtb create mode 100644 dtb/RS2421RP+_model.dtb create mode 100644 dtb/RS2423+_model.dtb create mode 100644 dtb/RS2821RP+_model.dtb diff --git a/dtb/DS1823+_model.dtb b/dtb/DS1823+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..c04a562ca0adce991e9452d6b13b816ecddf1627 GIT binary patch literal 5762 zcmdT|y^rHW6dwb}aeJHqaRO1$(13tl+0G{HQXSHs&`NA|AR$p$6MHtXusuGH6Lu>k zL_tAw{{e`ang$`!P*YNXgb*MaDr!!=_h!aliL=>LB6OA}9zVa&-+S|BoF8x8|C_Pr zK4FXxW5A985mE)fXn#-=%4C&>(?<)kHY;L&hMOOGLe(>2K{-MUsr}6%stn2 z1Mk2eoT=A{3uPaJf%Z_J)%C)Z7f}!wcY%f%(w~I!5)9;j#0)FH56@4)z~?J4-YJWj zfID7Dy9$G+aahP4Nkl_EGZ@w`K7S75Z5USXS1|vz@%$ake}my1y+8EcfC*g4+ZX>+ z@UD(OIU&70gNEF)umIt?i%asrKa;^K4_Ub@=pVT^$(jqK?6(bXa-3 z*M49Y){h0_w0deC!%OLC)&lu*+jCERclTWl>&o0b3zq8K2+vJHur&Ed{UC%AH0fbZ zHcy-Ngn9kbb@$xY-2?oA8ToB%;UA@Xfb0yMGzI6#I#PUa(r8?WIrLlSab>%g&ck(}-Q;B|CfpmjIzdh+ zjvK)9qU*ltdV9lq1=alyv2FBb=Vf^O9cXA1uy;V~&L8F(S&tj@_h3#wCn5?ag%BAK z;6m9Q;0qBp8buF!`550Bu;X#_VjR(|03y+Q0#|R9-wN`zY^AYkAf4e>i ztqtKZ`rrD8*?ZQ)&;UVyl5#+M4 zUrmsd{xd~yPk>ym%K6S;=Dp4NGW%wmTxGxaO!L6@@qF1id%-uaJwsLdZQnVL&VpLL zI;%9~tNp20J`dv+_GvLwUT13DaFaRn@l0XRaAEzT%>?crz^KltAY(DL>v8Vywsh*% zQRi+xsNc8kYE6B1U%l8aDX==1*sb1M9v!dd?6ZsiU#yIGzmCTNJQnN@>-S_g_QL?6 zz19Bab3T6SNM>B8O`|fql{kCU;j!{!bD+c2%@H`V-Y-Pj#7)A^B%kun=sUXyWb@EM`#*(6}*Xj57fBphVWS3;L)0GVNm4?g` z{ETfK0qVhVEtF}_%Xpj!mdZ#ZY%U5F%Z%ZsKz|<6SDwn_Y?i}Upq%AwfdVTb;pdt@ zjUw1yJ`x46D{`VpBx`C{DUxwvkw_{-CU~jG(Kav`Ds7wR><-~mNJxyCgb-m`AK30s#EaLv+F{6UZV0sF0$49CIbue-vCg3jhEB literal 0 HcmV?d00001 diff --git a/dtb/DS2422+_model.dtb b/dtb/DS2422+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..aa85b59eefecb9e149e7d509c24540276b2449b3 GIT binary patch literal 4923 zcmdT|&2G~`5Z(nUD5XGEap1@emA10o1PVw9iB^b1PjKkXa%?xTu)W4Vp*iywyazYl z0UiM%aY5n)XT;2`*LL05ZIb#xq>cAy_M2~JXS|bqUH$uuvGu2nv0cX2{=oA-v^8kA zp}~j0gyCn|Kk?1;(PelpWB>Ie6uuZvD)V=szmnwh=2+J>%`|$3@t`7e1^TED@em8g zccI;=jH~iXF#jTrGZ&ut!97=@9R{8qiwLI*93T2s+z&7Ydy4gs(EnB$e}ew^e0&X_ zU!Wm2V(`5~-7pO3$^A_>qu)xKony6$M?qvJzDS?zgu#7pV5JuImEAvRRPy@?V_dtG zw-Q70I4_3UkIxcg2SzYHClB<2!YMI&tr%6`H`~&m2}5x>Y0JZzFs9q`s1*bCsdH+! z1+oY}O+Kw-OtK`(X}=nXvf*M=oF|;w$w4E+oDsTo)@EP3*zy8T{|$etv51d zh;vikt%H1-cdo7lurbYZEig>mik&?57!Sum_5E=R_WstiZEaKA#V_c=jPw!c<19%W z+p3$$@T+d&yX})?MCjU-GSlcn+k5Z@BSB?b(uo5*_>}WWwSN1 zJvvEwmX&kfshRs_e+y�imnCu^*W3{Stk{(qk@66&H0(`RftxoaTCSu&`IF+Lt-3B(3|5Kq-68_-vN;IK#e6J@Y& ze5P;Fl)_ZLDb|g0UCBtj5~)dVwI*uNOR5y+6ured%3xczMG#r3H}G8+2*>r=*o_lU zgbe?vF_Xv(v&bCAB8yJXm>_RW!#{nVH3UTNKIP?}}ldz3Q*1^e^?wNnVFW?XG zJK!fEBrZsZ19!yCIJ28g<7~I22c)j#jXm~!o~J#@m!&^Hg}C}l2=PFOD<9!`6WS$c z7oow=dIt1N_hD~$sswZzPq0G;s>^F1`si+FJS0ovEf z_!IQMmE+U!{0t4T5yN`1<+#p$=xKhF?r6WM?rN8rtSrsEJdwo{hcK)p?)!yLeU|q- zji&PbD96X(iEWDE(#(D_Q2xCbD+^&T|EwInR*b6c&AO~Egwd?a+Cmu3x@g~;Y>GVW zC$lb)P4L?*7$L?iZt~3--&LQ+y8Lo~FFJ z40H9oW5#LT9OWL_b#fLR<=(74j&hH4(Ase9P1nBrN~a8+7pB}>p2@w)u~T3y%3Mob zFYr}ZUVFkC?xfYb`vUO(w(WcN9s2?PK@TXCJJu3;9tM7}%{&wN7*}6~ZMeNfa48-( z-E~)s(W*DfK0R|%H!PVfmaVki|Dv;_udl^)E}8b|>~9A#c~bkb;^&pRKcE(~&X#M* z{^l52$d?nDI7SX26W?nsK3uKq19@VMThcEc7LgkINu?mfyX_?KE$3VnYP%urhU2X5 zmiDn~IxNBbE!%!%JNJ6i?3vu}WLLzdeUm8kr1FOYolQuGI@iJ~?i@7MwLwO*U^y;kzObcQ$}$0TwmjRY)d@SiQj>Y#(3<&*Hn~sAfquJJFugE;R2w;l#~7V z59g15sq02gqtCmrXL)6JVNau+2eN0d+w(H1;5*Kpvb+;5ck-&~oMs!*SzWqMqxAp@CcG8SSaJ+Z0DCIpNT Hg9zd;N)Y#q literal 0 HcmV?d00001 diff --git a/dtb/RS2421RP+_model.dtb b/dtb/RS2421RP+_model.dtb new file mode 100644 index 0000000000000000000000000000000000000000..4b7d333a9f52fbd5be743d699ab9c77a2d8b5e1c GIT binary patch literal 6225 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 literal 0 HcmV?d00001 From e03927954f83d2e20fc869c2ea832dda80947f49 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 19 Jul 2023 22:04:17 +1000 Subject: [PATCH 122/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a55cb8..da7b067 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ # Synology HDD db ### Description -Add your SATA or SAS HDDs and SSDs plus SATA and NVMe M.2 drives to your Synology's compatible drive databases, including your M.2 card and Expansion Unit databases. +Add your SATA or SAS HDDs and SSDs plus SATA and NVMe M.2 drives to your Synology's compatible drive databases, including your Synology M.2 PCIe card and Expansion Unit databases. The script works in DSM 7, including DSM 7.2, and DSM 6. From b50b7701fa32941b7a4a684dabbef08be3e6b3c6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 19 Jul 2023 22:51:20 +1000 Subject: [PATCH 123/694] Update my-other-scripts.md --- my-other-scripts.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index 1da561a..de8440a 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -10,11 +10,14 @@ ## All my Synology Scripts - **Synology_M2_volume** - Easily create an M.2 volume on Synology NAS. +- **Synology_enable_M2_card** + - Enable Synology M.2 PCIe cards in Synology NAS that don't officially support them. + - **Synology_enable_Deduplication** - Enable deduplication with non-Synology SSDs and unsupported NAS models. - **Synology_RAID-F1_SHR_switch** - - Easily switch between SHR and RAID F1. + - Easily switch between SHR and RAID Group. - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. From 4aee1db794fdedb9dbcbac8b4356135fde1eac85 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 1 Aug 2023 14:00:02 +1000 Subject: [PATCH 124/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 9d4d682..0fc5edc 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -201,7 +201,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.60" +scriptver="v3.1.61" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From 8d75e84652362480d6135babb9739b54b4811ab9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 1 Aug 2023 14:00:37 +1000 Subject: [PATCH 125/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index f4af1b5..7b6780d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.1.60 +v3.1.61 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. - Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ for older DSM versions. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. From 0688608b80cbee231fb6cf57afd2088f89be55b4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 3 Aug 2023 13:46:13 +1000 Subject: [PATCH 126/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 7b6780d..f9cdd41 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.1.62 +- Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 + v3.1.61 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. - Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ for older DSM versions. From e20d59568c9080f9bfa0a552c5d383ebbcf4cfab Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 3 Aug 2023 13:57:01 +1000 Subject: [PATCH 127/694] Update syno_hdd_db.sh Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 --- syno_hdd_db.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 0fc5edc..321aebc 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,6 +29,8 @@ # Change how synoinfo.conf is backed up and restored to prevent issue #73 # DONE +# Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 +# # Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. # Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ with older DSM version. # @@ -42,7 +44,6 @@ # # Fixed bug where sata1 drive firmware version was wrong if there was a sata10 drive. # -# # Minor bug fix for checking amount of installed memory. # # Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. @@ -201,7 +202,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.61" +scriptver="v3.1.62" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -879,6 +880,10 @@ fi # Expansion units +# Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log +# Otherwise the new /var/log/diskprediction log is only created a midnight. +syno_disk_data_collector record + # Get list of connected expansion units (aka eunit/ebox) path="/var/log/diskprediction" # shellcheck disable=SC2012 From c697cc1df706744336296dbc83b723abc311d0b9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:14:53 +1000 Subject: [PATCH 128/694] Update README.md Removed immutable snapshots --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index da7b067..6b97937 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,6 @@ #### What the script does: * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * Optionally enables M2D20, M2D18, M2D17 and E10M20-T1 on Synology NAS that don't officially support them. -* Optionally enables immutable snapshots on models older than '20 series running DSM 7.2. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). @@ -55,7 +54,6 @@ ### Options when running the script -f, --force Force DSM to not check drive compatibility -r, --ram Disable memory compatibility checking (DSM 7.x only) and set max memory to amount of installed memory -w, --wdda Disable WD WDDA --i, --immutable Enable immutable snapshots on models older than 20-series (DSM 7.2 and newer only) --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater From 3075f1bae2bff071837464f6754edfae91314b42 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:19:11 +1000 Subject: [PATCH 129/694] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 0ecc648..03e68d3 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,6 @@ #### What the script does: * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. -* Optionally enables immutable snapshots on models older than '20 series running DSM 7.2. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). From 2321c910108b8f4f00cbf1f80f657638e7d316fb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:20:06 +1000 Subject: [PATCH 130/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b97937..d8de3b1 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ #### What the script does: * Optionally disable DSM's "support_disk_compatibility". * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. -* Optionally enables M2D20, M2D18, M2D17 and E10M20-T1 on Synology NAS that don't officially support them. +* Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). From b3ec9d89572fa01292292574b62c078386478424 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:21:28 +1000 Subject: [PATCH 131/694] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 03e68d3..d8de3b1 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ #### What the script does: * Optionally disable DSM's "support_disk_compatibility". * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. -* Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. +* Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). @@ -54,7 +54,6 @@ ### Options when running the script -f, --force Force DSM to not check drive compatibility -r, --ram Disable memory compatibility checking (DSM 7.x only) and set max memory to amount of installed memory -w, --wdda Disable WD WDDA --i, --immutable Enable immutable snapshots on models older than 20-series (DSM 7.2 and newer only) --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater From 99369cce97e4d9eef1e32741b51f64ef7b9093bd Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:17:10 +1000 Subject: [PATCH 132/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d8de3b1..339917e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ #### What the script does: * Optionally disable DSM's "support_disk_compatibility". * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. -* Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them +* Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). From 9b7723c2ba826e7b32eceeb4c5f3c9926aed9af4 Mon Sep 17 00:00:00 2001 From: Martin Bjeldbak Madsen Date: Fri, 4 Aug 2023 23:39:20 +1000 Subject: [PATCH 133/694] Fix typo to images/ram_warning.png --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 339917e..3295698 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ #### What the script does: * Adds any missing drives to the Synology's compatible-drive database. * Prevents DSM auto updating the drive database. * Optionally disable DSM's "support_disk_compatibility". -* Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. +* Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). From 031f2688d1a8a141ae1a35aa7b2724530e7ae034 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 5 Aug 2023 06:38:19 +1000 Subject: [PATCH 134/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 339917e..3295698 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ #### What the script does: * Adds any missing drives to the Synology's compatible-drive database. * Prevents DSM auto updating the drive database. * Optionally disable DSM's "support_disk_compatibility". -* Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. +* Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). From bc5e2040421ebc5421921f95c47fc70a42002fbc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 22 Aug 2023 13:49:02 +1000 Subject: [PATCH 135/694] Update README.md --- README.md | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3295698..acb119e 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ ### Download the script ### When to run the script -You would need to re-run the script after a DSM update. If you have DSM set to auto update the best option is to run the script every time the Synology boots, and the best way to do that is to setup a scheduled task to run the the script at boot-up. +You would need to re-run the script after a DSM update. If you have DSM set to auto update the best option is to run the script every time the Synology boots, and the best way to do that is to setup a scheduled task to run the the script at boot-up. **Note:** After you first run the script you may need to reboot the Synology to see the effect of the changes. @@ -101,6 +101,28 @@ ### Running the script via SSH **Donators** -- Thank you to Gummibando on reddit for their donation. -- Thank you to the onimous donors. - +Thank you to the following paypal donators and GitHub sponsors + +- Bogdan-Stefan Rotariu +- Kevin Boatswain +- anschluss-org +- Kyle Reid +- Yemeth +- Nick Dawson +- Patrick Thomas +- Manuel Marquez Corral +- Evrard Franck +- Chad Palmer +- 侯​永政 +- CHEN​HAN-YING +- Eric Wells +- Massimiliano Pesce +- JasonEMartin +- Kevin Boatswain +- Gerrit Klussmann +- Alain Aube +- Robert Kraut +- Charles-Edouard Poisnel +- Oliver Busch +- Gummibando +- The onimous donors From 4003f9fa094282b445f7d0e6a7ae6dfae9a61a69 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 22 Aug 2023 22:14:15 +1000 Subject: [PATCH 136/694] Update CHANGES.txt - Added support to disable unsupported memory warnings on DVA models. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index f9cdd41..f31d7ec 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.1.63 +- Added support to disable unsupported memory warnings on DVA models. + v3.1.62 - Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 From c29ed4101570ed5e58905251b118b4abeb24a82c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 22 Aug 2023 22:22:43 +1000 Subject: [PATCH 137/694] Update syno_hdd_db.sh v3.1.63 - Added support to disable unsupported memory warnings on DVA models. --- syno_hdd_db.sh | 68 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 321aebc..ee7eb1c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,6 +29,8 @@ # Change how synoinfo.conf is backed up and restored to prevent issue #73 # DONE +# Added support to disable unsupported memory warnings on DVA models. +# # Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 # # Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. @@ -202,7 +204,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.62" +scriptver="v3.1.63" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -641,6 +643,14 @@ if [[ $restore == "yes" ]]; then # Update .db files from Synology syno_disk_db_update --update + # Enable SynoMemCheck.service for DVA models + if [[ ${model:0:3} == "dva" ]]; then + memcheck="/usr/lib/systemd/system/SynoMemCheck.service" + if [[ $(synogetkeyvalue "$memcheck" ExecStart) == "/bin/true" ]]; then + synosetkeyvalue "$memcheck" ExecStart /usr/syno/bin/syno_mem_check + fi + fi + if [[ -z $restoreerr ]]; then echo -e "\nRestore successful." fi @@ -1004,6 +1014,7 @@ editcount(){ fi } + editdb7(){ if [[ $1 == "append" ]]; then # model not in db file #if sed -i "s/}}}/}},\"$hdmodel\":{$fwstrng$default/" "$2"; then # append @@ -1255,6 +1266,7 @@ check_modeldtb(){ fi } + for c in "${m2cards[@]}"; do #echo "" m2cardconf="/usr/syno/etc.defaults/adapter_cards.conf" @@ -1330,30 +1342,40 @@ else fi -# Optionally disable "support_memory_compatibility" -smc=support_memory_compatibility -setting="$(get_key_value $synoinfo $smc)" -if [[ $ram == "yes" ]]; then - if [[ $setting == "yes" ]]; then - # Disable support_memory_compatibility - synosetkeyvalue "$synoinfo" "$smc" "no" - setting="$(get_key_value "$synoinfo" $smc)" +# Optionally disable "support_memory_compatibility" (not for DVA models) +if [[ ${model:0:3} != "dva" ]]; then + smc=support_memory_compatibility + setting="$(get_key_value $synoinfo $smc)" + if [[ $ram == "yes" ]]; then + if [[ $setting == "yes" ]]; then + # Disable support_memory_compatibility + synosetkeyvalue "$synoinfo" "$smc" "no" + setting="$(get_key_value "$synoinfo" $smc)" + if [[ $setting == "no" ]]; then + echo -e "\nDisabled support memory compatibility." + fi + elif [[ $setting == "no" ]]; then + echo -e "\nSupport memory compatibility already disabled." + fi + else if [[ $setting == "no" ]]; then - echo -e "\nDisabled support memory compatibility." + # Enable support_memory_compatibility + synosetkeyvalue "$synoinfo" "$smc" "yes" + setting="$(get_key_value "$synoinfo" $smc)" + if [[ $setting == "yes" ]]; then + echo -e "\nRe-enabled support memory compatibility." + fi + elif [[ $setting == "yes" ]]; then + echo -e "\nSupport memory compatibility already enabled." fi - elif [[ $setting == "no" ]]; then - echo -e "\nSupport memory compatibility already disabled." fi -else - if [[ $setting == "no" ]]; then - # Enable support_memory_compatibility - synosetkeyvalue "$synoinfo" "$smc" "yes" - setting="$(get_key_value "$synoinfo" $smc)" - if [[ $setting == "yes" ]]; then - echo -e "\nRe-enabled support memory compatibility." - fi - elif [[ $setting == "yes" ]]; then - echo -e "\nSupport memory compatibility already enabled." +fi + +# Optionally disable SynoMemCheck.service for DVA models +if [[ ${model:0:3} == "dva" ]]; then + memcheck="/usr/lib/systemd/system/SynoMemCheck.service" + if [[ $(synogetkeyvalue "$memcheck" ExecStart) == "/usr/syno/bin/syno_mem_check" ]]; then + synosetkeyvalue "$memcheck" ExecStart /bin/true fi fi @@ -1373,7 +1395,7 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo bytes=$(printf %s "${array[num]}" | awk '{print $3}') # GitHub issue #86, 87 if [[ $ramsize =~ ^[0-9]+$ ]]; then # Check $ramsize is numeric # GitHub issue #86, 87 if [[ $bytes == "GB" ]]; then # DSM 7.2 dmidecode returned GB - ramsize=$((ramsize * 1024)) # Convert to MB # GitHub issue #107 + ramsize=$((ramsize * 1024)) # Convert to MB # GitHub issue #107 fi if [[ $ramtotal ]]; then ramtotal=$((ramtotal +ramsize)) From d36b128111fecf17b2e919e7aa84e929f2bad09c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 22 Aug 2023 22:25:35 +1000 Subject: [PATCH 138/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index f31d7ec..f653629 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.1.63 -- Added support to disable unsupported memory warnings on DVA models. +- Added support to disable unsupported memory warnings on DVA models. #136 v3.1.62 - Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 From cc2c740acba4fd1fd5ed8286f40ce7dbc1181288 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 26 Aug 2023 09:30:44 +1000 Subject: [PATCH 139/694] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index acb119e..9e71b77 100644 --- a/README.md +++ b/README.md @@ -106,9 +106,6 @@ ### Running the script via SSH - Bogdan-Stefan Rotariu - Kevin Boatswain - anschluss-org -- Kyle Reid -- Yemeth -- Nick Dawson - Patrick Thomas - Manuel Marquez Corral - Evrard Franck @@ -125,4 +122,4 @@ ### Running the script via SSH - Charles-Edouard Poisnel - Oliver Busch - Gummibando -- The onimous donors +- All the anonymous donors and private sponsors From d78f466555aec22baaf72623e88c86ecc5830531 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:03:20 +1000 Subject: [PATCH 140/694] Create temp.txt --- bin/temp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 bin/temp.txt diff --git a/bin/temp.txt b/bin/temp.txt new file mode 100644 index 0000000..2d030d7 --- /dev/null +++ b/bin/temp.txt @@ -0,0 +1 @@ +delete me From dcd49c867612d6fbd416262cf6054e6e0b5db9ca Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:03:50 +1000 Subject: [PATCH 141/694] Add files via upload --- bin/dtbpatch | Bin 0 -> 130840 bytes bin/dtc | Bin 0 -> 150200 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/dtbpatch create mode 100644 bin/dtc diff --git a/bin/dtbpatch b/bin/dtbpatch new file mode 100644 index 0000000000000000000000000000000000000000..0f314f2ae480c4c43c8bfcf2cfe2d7c1b08794aa GIT binary patch literal 130840 zcmeFae_&L_)&IW<2}b2dYSB`(8Yx;-!~_xuC>oU2MT4gNu+)O#R|GU9X$XiGD;i>1 zm$lJ?r7hLeQp;m$O?^?VUJ^|-XpTPNn3_dp(nv4=Bf9400YyOl3iUY?6 zN&=?@P7d@XD~rD+hU$TfG7aHkj#Ew=lzN*TzB``elylK-T~O-z{n|n>a^!)mzj?KE*h%^0_RjNo;RlOoXQ1fS1ztvw&Ls+#beGMQ#f*I^~h1$??EUc zK6T0EGXjquxq9KMz03Aq_PH0&`1X$54xVyK{iUL}=pgc>jQo-Et~up%8GnV>er4Pl zI29+6Joz(~zpWL|EjevTzl#d*ny~u#4gD@s!skC{9UBN7mxlWv#yeg9ZP+)`jk%odL~!8{JlQ;pU24Q%KzObf2)r^wLW&c z&ZpfE8Sr%NPGI2E<==y2q|0yevH!qh(wEQo8OO;!<&X2x{~;g0dcbFV13vlR^|9O6 zeC&|nqvs7ia!&NI^Lswyc&3kiZuXJ$n$Ni0=+ob;eC#>ENB=v0+O6@i|5%@X{ncl_ z#C-HD^6~$fKKYG4OUx zfWW99nM%hw`FrsnDZgrHYWYBU`NAdDRpm?T=GNAgmj}uxPoGl0prW>7;o_xr6}8i+ zTvSy^7tb$We9h9j+KRbLCeJ6YVE&@HwdHlSa~Ibw zojgAnyr>{J^)d>NEia$HVnsng!6;LSDvPTYQl+4L+FU6Zr1I$U$<<5Cuc)c0T2j4$ z_OH79vR-QTXv_#2JHL8K&D`3GVA*B!MZ|wD0X?Rb&#$hzpwbiwsxUI3}n162FTpIa=$`&AD{@j|m^B33M5M1)f zge+d6HK)~8GH5+V(HM5BjF1__G%AlfacEL(20 ztgc)dyjJxU2bfe4T>il6iP~T}64Fv<*>F zwV*Ox7lZ!28zTe%N!)0Zj7)VEwpup7ZZa+s3@)EuKCQT1yy%+h+Uw`mE+}8jteaa` z&77IL@RPMe|F6KtQuz~1moZD1VWQgL5*ZW}8&^Jc9`m=NqI_}H(h6e4+^PlTwH5Q` zR?e-OUoo!?Cn)xcR54Apb5TmoB?_>a^-<<>GHL9^=f6p?q4mtEzLIckIH7I?jT`Ez_%yuUojVx_W_DM^yr> z2}|?lVz0`|>iN!eDlR9!*UepASx{77N{}!2x-t&`TvoNHy81d1LVTWEK96;vif~dl zf04RF;e5iIcDY(7SB?MV`UEp%?li}9%NMR#QC?F~yR^EB@vgg}e0jdHv+uIu6a10r z`iKM-H#B^Lc~LZyE*jOu8zJ`lPDs#>1$t%NkRp``#o? z$e%x*<*caOj9S(8pKv*?DGfTSd1{<+-SI!)lE_pgF0qmYr%I&O$y!^XGv3S;|7k9x zpp(3eDDBMUx{Aumnonw4Z-oBiX~E8FO8L@?I%n_nNw+Hn`G{Gtcqxm#acvg%`PIwn zj3rzz>vdi@eX#d)2q>?TN&0iG$}kJLO(A!Z~P_!v9xx!G%i~ z->9}xPhqX|g8CiRdD03^#UiCkj&Q<`TZ^^C0f{Kq_XDL6EsJ9DjzknpwRm`YGhI1qM0)% zUO2hDVC3kLAt@foIj?#gn9l0Eb9i5DXKICWU-;BUZoUPq^ ziL%pg;HKl~z`NwhpA6(5bohMI>+Zap6ZcVp_no|DLl$!r(I=2GK#Qx)n8QiV4KF;1 zyqrLPcxmJJ56X>g-@p(jU3bP^+^A&-PIJ-~o!{kVDJxLmq`$7|%s>fg`Qtucp_2Y- zEHc>aJU?;s@0?}ww{^=ebIQ+j&i`(CH{EiIxfh_5-ZKG_wA;$J?}=Nj{IRA<{qH_2 z{~{~D&B_m1`Ee_MvX$Rqben~GTTKVpMhxo)aE8o30k^C=P`GfO} z9k{+>Op|}|tb7K_`!n3iH@;@5d@G-;BkxbKl`n0(e@d);83XrE$jTR;+&^VjzB`t} z&9w4yQ18ziE1#<%@6RGDABXk+)L8jk<$8ZsSozLWQEru$@3^eyud(t6dQt*`Mk`OEB}jD`QcXnFe^Xb%0JD@FShbexAIG@{4ZJgAuE5lm0xD%pJCVy`OYg1$~Ig1PUzSCZC3smOHPZGUu@;?w(`eW`K?y|cq@OOm4B|4-)7~XXXVGO z{0UZmhn0W6mEURQUtr}2ocJ#>vc$^IvGOmp@^h{HNml+~D?e!E=UMp|TlvGS{7bC- zd@KJlE5F#vFSYVZto$ife#pwd+{*v-Mc;8P2HYJpEJ@TmnpwZNwq_|yWQ zTHsR)q*@?Ue<&vu$^IknDTW$a>N2}pL-jjzp7siL6}beB`sHgi55*iD`~mYOw)HsTCVUCC7Qln(sFf|$k+6(l9nsGM4qN^ zl(bycC2}=gD`~l+O9V81t)vG^y5l1DwhOS6YdD zP2VbMxynl9Y5GP<%N154SJSnU9x3U7rmvOsIg;);qT?@VxvEOEY5FQj%N13kRnt=? zEmu>C7ENC&X}OY0G;8`oNy}AKqDj-^B`sG_iAGJ2lC)esC01$rOi9ZlghY*|he}$m zpb~R5Jw(!S^^_>n^l_4wE2l(>rjL=dTs0-~HJvGGxnfG>Y5Je1IvukhEMWC7Lw- zn55+@Dbc9uha@dmNQqUN9?~8NT+>Ke{}jA4IsC%aq3|1_`hy*1(@Ue-;~NNF(f+?* zEifUDr*|FSmpX?BouCwlV!rkj{^Oc6EiqZIi>l2}Pos zh&FUEtdB_m4TYZzg=6u_O!JV*4#~qm@?-Hq*nV|O-6f%D(Z9lEMJLo^kNCgH4uyAw zA`M3Ju2A^pc-+m*UY?NJn)yXq`89p%O8hNb>PID-I?X&L)7NSJ2b7C62uZ7bfC=w> z)W3D$`W9LrMeE--tsfTa-Rw2gKiSY@WSWN7&`_jdkP)?wUe$MgCMjsD5%e<=G{zIO zGwx~pbx+U*Dk#ecszy*axHHm_W76fCZizGuGwCZdy*<*<&!jKV^tMQYEHCuw98GV< z0&%+PTEMdZ_e7a!v@JdR4P_g&E|!f>I7Y_d940)Xw2tPgeLgR_5mUCIW!YLjYY99( zTOF%065JZv5UP)7gu=niGLZE<__)4C+$7ep0$^kq8YL!&Uz+%&rlVyU+hobpni;LX zlFyGR^TFRj*R|w^&e(~Uh3Z?V8f=OLw}s}nqMj_cq3}!MPyZxh;ewhISzj!K<8sCc zH~kYgKso9~rZlB;E8t?m-O}E!;By&}&Fa>%c=Jf4MjNisc4F~zwbgn}MjINXP_$^# zwP3PZL(xGEYQkvtYqyb;mC49NkAI%ep^Vn9wq3#J zrK?Ua?vrdJZPDhR57f=ZBGO#_O}hhi@1VzPmL9SlbM!cu3IiW$5O#ITvc5CW!ePViz!-QMox5hUa%`g2! zi!^JSv3M)H8LP%*YLtc#h4&@Cqi*>$oI4A@Ky&S1o*dr!ggBHa{A*;DhX35&2gjnI zalcr6CqmjkPu>$^j!?vO_6`cWB^#aAzfVajy2@OHGHwxB`NaDk{kz~k`FN7LXT`p+ zO`J7x_Qb0vmYbzime9?r(c?2U1O%HxPBbvCbmMU8Be}?Uk=BnB3z`=MZ!rySP4Q!MC4KmF(y6F)ny@rPP z8*Fsc7;n@#+hoP!OH8qSRO2s-$KpR?Ep+LT(CynvH3`!X1GJA!9rM=rywNp<-r`u{ zjN1ZnxybC!XUxt=_dLyJz(N|a9xjnEC4n&hbDS(3+!Bg3NM0y9Wy@m{Ih_DGUi~Gw zit#lyb-lXubP7btMYlER!P+KkCbs#Z2q}$J#9jJVe-n>=LnqLIc)R!(24vpL4s)#g zIlN<=HhKm_9*oC=ThIVMHY!DCAZ^MPN2ARm!gUc_sccosn-f=Yib(ohqX~rWg!zh) z>U#TJS#;$(a-ZxYM%jP?{f%;(>4i>_ALj)ER9z?)8fJ+FT|-7CW!v&yu~anJ9E!}K zsv7bPYHOBmQA5RSL zbW6N)N+6INmub{BMNCAV;3b@qIiuBxOC1_B>BBEt!*jH1F?(OA;kALQmxxCbwoa!p z6PieTKra&0go!j5pNhr9!?1%)s`{JS0(Dp8ZR(6V#ne!R5@#c`+Yrkc1u0{h5?)x` zgvck^I0WJc7#jb9tHc@G*ECu~{t%im0P4x#{44AQI?EU&thhunx`oOtd5 z7N>PLiKY{d{u8}ir)|nXLxq{e>1N4{7VVXCRIPE#WPh|@a`fEsGctdT-*hG9E3hoC z0X{pe+UJgoEM<^&7&Ss+XUFR9PxGZJ>)1sntQF;Al9svE&?y~`PFOCvuW2bW z;88Peqh@-WneZpA<>W|=FOgdRklg5mLit?n$<>uAI^kr=tv7PbG+A$;p-fd%#|ay` zCP(DP+o<(Jl^Zn*nxV*1lk1r;sFsYHW_qw+5;kHw$409`PC}%$w4NpYj&HLZWIsns zVxVU_WrxnmO8Sz$Msp?To2k0WbU=?HPS)6bso1bj&9~lwbDGgUEu;!dT8M!&XPj94 z9+kqWB@)~mnQy{V>3-Njbg%)zhWJmH2zs(sXeF`|Ze^7!0U2W*nm5&sPB%Wi6`Zf zAikGL8`isn5NA#*J*^qWU4yM;Jfs;p>c7F=Wc)}o`k9P2G8#1_my9PrBZIX{(}N@} zp(|da>A|F94JYwm)lXU@HX-q;aO)W&cd{1Cqkv`$+3Jxal$84d|9JG@Vi>odvG_rf z?l#-?+yEU9?`!{p*(JHTZ>vRhO}s*k-)&Qr&!Q0uKfX`B|KV03ync@)IQZ$>6^kzt z36Ta?2 z_%yBN1c*p3OtY$@v#gc7X@qHxtD_QM7MF92GPLnzC!$5qUN6eU;)mYq>LO&VYmsIf zGRV~3r?fFA*~WHl!^uhd`B%>oAq_K44|Rd8GFfG&hXzam)5E3k(o|n*D(Wz?_`O=q z1gnttur=BG37?a)>oq5(ht&z~k}1kLioPJTQQIzhXSpax{7Uw)?i_kYKpf2I$;b+Q z8MMYiFOOyMKzuN5wwEQP{g)$c`Ixza;u#3}1|AV^C^dGV0o093%HE9aIw7UU zQNm2(6;;)-Yb-vNMia;BGVJzZywmO^ZMSYnQlm2+=1gUl9kmUM2HLZ?$%GRNKbkU_ z`O=aZg1_>x12HBi84A}L-yCi_(IU3_k;%$aE!P`p&;mx%{f@g9o53^;=R4!B+b}kN z#g#getxrB)2UBxW2J=2MdZs8>n{+GL+0ZgGm=pfunSbEwpVQMw_N}i30^GNSkH3Kr zxJf=?!)$Ff5TFntvC7G3Gjx1cLs& zy_;N|NH)`MpJMSB4t8}-^3FN2L8^>vqdP`0)IU|jIwKK_7h{^lXC?l4PCT!U6b%HC zn;p&WQoYw}GHUia(V{;uHT8dano2Fxvg+VZ54Lh*@pUv{347RdlP!r1 zUm!Vr51DEvN7jA*qTdx~NjnXlGO3)b1tzOQW9NDUrhsvt#qi>%pEb^-Rgtt_s|9x> zhQG8fYo89xz|V@tGghHcV^X2(bbQRl`}sd>CzOpA9jXXM7|Uztt+|`q(|#s{M1$dg|1@Rq8rNA~PT)8pTN9I|ShQi4Oa#;)F7}HB<46dAZHkfXU;bWNh{bP`NEvn_0O{Xwu9s1Erx97N znyk%|6rPQN~6xM^_t`AsKjS^Tr>@p9}uHwof9#}S#!fwNNp-*Wf&pZYA9}(m|1y~~E9-bY? z#LZY7r#F>Uh1W$l({+8jqFehBr~S7?)0FnxQrkbyZvTdq_TL$(?c?>?`90dd+G>B5 z2}*94?j6ebSCSVC?iXJ`wK8XXLpWb7xKD>wOfhiv3w?-+!TqvK&)6@kF7=Er9X77f zVMbE&@xaHIh)%J1g>L-JRxKJeWsYxFQcpIw>8iHARVzF0rFOg0jFl3|dGwDWwm}7u z+-#EC7|HKxGOFIm1q8lqKka?Zh?4B&)85mm!Wr-wJ#i#nHA}W}Z@EzT3Uej?o`?<0 z)M@;!bVsMogx6J*RB792LcDdjdTX@IgmzU#eyh;$26b>_F9Z0iLun|=8fZ= zM!#w|I&gJ=Q?jgQ!~L9wbF|?GDe>4b#-j*R9D8srsZHDOyhhu+s$#PveUBFMrs5PyhM$t_Wv!yqW}sY3MzSa3rJ)Ebn~9lM z8$s%tsQKepoFI?tZr+3B)qj|=EITpmh)#T&;<4afo&R!AJ8<=|?lYayH?};+oM}6Z zEpyc?icY&$I?OIxgK$Hul2KFU_`yo5${SCWUb;s>wT;ob(im4OBIkE#h{7s>T zjgb`n*@8Ky)d|KzhyvQi-;5~jY_|Je$9Ysq&h)dp&-5kuQaneEEHnN7m`GFCnq~$f zRoZhjAv1l8v>NrB>5KM>nrUYG0V7lNcW3%zi=;*FKSX(Nrr(AQ^3}p=XZm;54ti3e zU>V{ZA2``Gpj8oiGm5w~-IS8qcEdCDd60+*OP?Rw<@LFo%t&yrhWWkppvD{g{^n3y zraC#>vZASu?%&j{&3Z%H6Y1Nkr*n53i+8*%c5yEGV(~wbG!yBkVlbUZZEF1k@z2S! z5}v&cCCq4hPu(t4Av3rq<8W$xXxp(e8d8G$Hq(abEl*7(Dc$r6pQjJfva=+nM`pMp zPE`@!M7idro|C7RJTrM-VDcn)O}Wml=}&T42)43c^2Q_<{}+`=8i!|hOOofp3z=~C zGvG(jl4rn)qHg*3I{EV5ecdg3OW;os^_gdv#6GzB%cFy_YR=4bw&9ZlN;r-uSUNs9Z z>#V=&NXD{n-f~l?+;J{j#>62^e>NKVJZ@NT{EE_z`ex<|6_+5u2%BvZwxJqb;~x5nD)Iz$lR)qwv-Qs+>mCMw;3G5s8VMfcIR?RL z#-C|=Unu;-W86V$b5EJct;G+}1u1UI=<>N83A#Yi%0Y?T&&Q8q5pFLu?xfW=Q_XRS zFKBUDvS}n1zgl~&ANvTScc<<{_V7*n!^`%?f=8Hr?0)wRe6R&8^C2>$bKrwJ!okCu z89W?r!ThwpZ(MNy(rn&dY`>Vz^0~pzr8y)xE4Gi(^kFBR*?v0d(70fHxhc@6{dh9W zlJLQ@csRJfK6oUn{pYivZj|>N#bGI&yt7Q`++<$CowBvL<8W-yFs6~`$^#fiSIU*MI?+IaA>FFa*0#Yl2r zEf$y0kr_}rgwHrxkr{i#jd?VU*XVn3l!}J(D9r%r$e!{dF<^*{tRwB77rc?ZNCsJt z$=V~)VX)2)(ZMNRtu4{8rnT`At*TF3L|YcZ=)kA8$STo>x70+}Xf2w^YYUg=$%2BP z-AUsq+Tzj|AH zsTc2s+tdr!TYJq`y|n&wjtnp^5-Z6QcbAV`n-BuIq)Q~d%1tNz{HfpJFXLVB zt#8qCb#6IF&S6j?~_{)Z*e!Tl? z^wZP76m!~b({^+lMOB>&r=lN{8YB9od4qZ2+-L;Igf&Y2H^GH)x6Mue)})(>-Td{o zS+9`IS~SyS@xBwbrCO_~S{j`*+`Q%Y3+_B{iY_IeXC6{=+O2co(4@n~` zJQlx?&+T_oMN}(6rcCEH>HYxI#%4Etx=A;o8h_>4x%RV=Y}v$bmm$>bSbV-Ix{s=& zUWwV44)oN6aMfF>Tb|iGjpmBWsCSXnb|n3es27zTj=s1@e_p|^vcnl{Z+mt+nYzod z#$|zQ=1p4t>Y(m5&G0tkypBK2c%Es)H<#w<#-?YCaYp$BBdyc*g1e10;!7+(4{1GS zo*OfwWy9%^nfEWpe@35@aU(UlM9WI7l8^e8Oo?mX`mJ`-i)$$nP*xW&Vnv^|BbMEA zM@V!`#>%C%EJ-)wCSzrZ7Z>w%L9k}&>r%;mws4egptzT{3cRdR8G6x5XM2g*?rpCz zd%fGoToecA!eb^z;bq6D%o%mMH%$$a>f`^=q&J`K6<*|raHt+*<3!V}Ubx<(+ugm? zyRa9oH<^`e>-_W_-V5i*)P=;^hsxLud?Xj>82Ct_cn6QPyNz2c*eOwWSMUP{nw41W zk-_W4!4K4^FUNmQEUoXzAnY6!strMmFdK>NC%-=4ya-H8iR@`Tmd|a9GEZ6ix;`L12kC3sf zg+0->P>=0M$Xr1pi*k_P3Z+#Cw$ zMrO+%T@`zic*k29y6tkZey<^LpER~dg}Gbi?tVM~?Oe->1%|sjvM_y`(z=FSa73=o zjpF%YXWp^V2as&B=>38CYh(_5f?Mav6bbb7P%nE1J=1OTb(4&PSuBfFb>fH=UUo1% zqm2^+-vkM>CBLa{{_-1GnNeeL%P9?#?U!yGV7Nd$!x!c=8s-} zE{m45!y)1@619R{yokK7Sn>{Y#=Jz+gLH(~YJE$-X=P1r>T$3W2kXGWu&Tz~ zxOW@-qu+>y_%4E66l!J4YH%96OFhDioo+l9^{FsVDmb5?`+IUkyN~vjlygVBJ9n`q zWBWh+Wo)p@&FiJDwY{{p(vs1V+E$*o0_a0R*8n@68eXh$%E^9TY@k-UH?@!zx8#`= zaZC0H<96^6$vsuMYY_P+j4zm!xh3Zj%Da#^Mi{y_r^Au2;HdUyPg!G%10RCfs5ECUxE8C)vzv5nv+V7@6wc zGvn@a@g8b+_jD71hsYhj>~+-ZWAX2k_DULiI=1Y{mXZ?Zu%k{7i4vY2la|N&xu%o^ zDtD)v=Pm?Lg!No&nl&1mv`LplQ_~9mt*snkm_=NAt?ricj)wQ!`q(oKx!e4>h}@OX zrASVQwc(82`ZZXmo8+lz^_p9)md3yDAJ4QmjzžLD_7J0lT=~=9shO7KEq~1#+ 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 W=u~`2yZ@c9>HUXUfq8@XHTZuF*iQlg literal 0 HcmV?d00001 diff --git a/bin/dtc b/bin/dtc new file mode 100644 index 0000000000000000000000000000000000000000..d3da15be20af35dc06c02f88df7275c0b616c5a9 GIT binary patch literal 150200 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

W+b6Xg~?O8j?e)<-OCOeXz{xYOXFRu>n&H*L3 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 HC+huQ28`;Q literal 0 HcmV?d00001 From adbf03c35fdd3a195307f5ed006ee7b1f202d361 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:04:19 +1000 Subject: [PATCH 142/694] Delete temp.txt --- bin/temp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 bin/temp.txt diff --git a/bin/temp.txt b/bin/temp.txt deleted file mode 100644 index 2d030d7..0000000 --- a/bin/temp.txt +++ /dev/null @@ -1 +0,0 @@ -delete me From e87fb4bcbcf8dc063028960c39f7c78c44862d43 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 1 Sep 2023 14:20:36 +1000 Subject: [PATCH 143/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e71b77..0277308 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ ### Running the script via SSH Thank you to the following paypal donators and GitHub sponsors +- Daniel Hofer - Bogdan-Stefan Rotariu - Kevin Boatswain - anschluss-org @@ -115,7 +116,6 @@ ### Running the script via SSH - Eric Wells - Massimiliano Pesce - JasonEMartin -- Kevin Boatswain - Gerrit Klussmann - Alain Aube - Robert Kraut From 60e2c82389c4c3d3befb063f6c65c23c6aaaa080 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 1 Sep 2023 18:58:08 +1000 Subject: [PATCH 144/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0277308..691d186 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ # Synology HDD db [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) +[![committers.top badge](https://user-badge.committers.top/australia/007revad.svg)](https://user-badge.committers.top/australia/007revad) ### Description From e5c45496c776f7cf4bb9fe1312f09b0f75d05d8e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:02:40 +1000 Subject: [PATCH 145/694] Update README.md Added anchor to options section. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 691d186..22764cc 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ ### When to run the script **Note:** After you first run the script you may need to reboot the Synology to see the effect of the changes. -### Options when running the script +### Options when running the script There are optional flags you can use when running the script: ```YAML From 2ef834df7c46bd1151684a9d900d2a901d71562d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:13:55 +1000 Subject: [PATCH 146/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e71b77..8179aaa 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ ### When to run the script **Note:** After you first run the script you may need to reboot the Synology to see the effect of the changes. -### Options when running the script +### Options when running the script There are optional flags you can use when running the script: ```YAML From 69a999d45244e0c58dc4f873eb119609b0a01b2e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:36:12 +1000 Subject: [PATCH 147/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 22764cc..de5d3ba 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ ### When to run the script **Note:** After you first run the script you may need to reboot the Synology to see the effect of the changes. -### Options when running the script +### [Options when running the script](#options) There are optional flags you can use when running the script: ```YAML From 28a0237f97ebf0e11aa722c5160328a4d37b43fb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:51:16 +1000 Subject: [PATCH 148/694] Update how_to_schedule.md --- how_to_schedule.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/how_to_schedule.md b/how_to_schedule.md index be8d2cd..25b6c2b 100644 --- a/how_to_schedule.md +++ b/how_to_schedule.md @@ -13,7 +13,9 @@ # How to schedule a script in Synology Task Scheduler 7. Click **Task Settings**. 8. Optionally you can tick **Send run details by email** and **Send run details only when the script terminates abnormally** then enter your email address. 9. In the box under **User-defined script** type the path to the script. - - e.g. If you saved the script to a shared folder on volume1 called "scripts" you'd type: **/volume1/scripts/syno_hdd_db.sh** + - e.g. If you saved the script to a shared folder on volume1 called "scripts" you'd type: + - **/volume1/scripts/syno_hdd_db.sh -nr --autoupdate=3** + - For information on the options see [Options](readme.md#options) 11. Click **OK** to save the settings. Here's some screenshots showing what needs to be set: From 46636065f91ec5c4dfdc613c74eeb55aaff22728 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:59:19 +1000 Subject: [PATCH 149/694] Update how_to_schedule.md --- how_to_schedule.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how_to_schedule.md b/how_to_schedule.md index 25b6c2b..51b243f 100644 --- a/how_to_schedule.md +++ b/how_to_schedule.md @@ -15,7 +15,7 @@ # How to schedule a script in Synology Task Scheduler 9. In the box under **User-defined script** type the path to the script. - e.g. If you saved the script to a shared folder on volume1 called "scripts" you'd type: - **/volume1/scripts/syno_hdd_db.sh -nr --autoupdate=3** - - For information on the options see [Options](readme.md#options) + - For information on the options see [Options](README.md#options) 11. Click **OK** to save the settings. Here's some screenshots showing what needs to be set: From 9cfd8091189ec89444ada6e7f32d06bbf290ec11 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Sep 2023 13:08:02 +1000 Subject: [PATCH 150/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de5d3ba..22764cc 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ ### When to run the script **Note:** After you first run the script you may need to reboot the Synology to see the effect of the changes. -### [Options when running the script](#options) +### Options when running the script There are optional flags you can use when running the script: ```YAML From 554fb9ae4468a3ce6c7e577a08a874d7cb0f7de6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 10 Sep 2023 12:21:40 +1000 Subject: [PATCH 151/694] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 22764cc..0064425 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ # Synology HDD db [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) [![committers.top badge](https://user-badge.committers.top/australia/007revad.svg)](https://user-badge.committers.top/australia/007revad) + + ### Description From 7fad35f24c4c5e2631ec598711269abd3ccf7664 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 18 Sep 2023 16:13:02 +1000 Subject: [PATCH 152/694] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0064425..8667eca 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,8 @@ ### Running the script via SSH Thank you to the following paypal donators and GitHub sponsors +- John Pham +- Alejandro Bribian Rix - Daniel Hofer - Bogdan-Stefan Rotariu - Kevin Boatswain @@ -125,4 +127,4 @@ ### Running the script via SSH - Charles-Edouard Poisnel - Oliver Busch - Gummibando -- All the anonymous donors and private sponsors +- And the anonymous donors and private sponsors From 6eeea132cb4029bf73b05417806c14f683178e93 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:16:00 +1000 Subject: [PATCH 153/694] Update CHANGES.txt --- CHANGES.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index f653629..77c898c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,10 @@ +v3.1.64 +- Bug fix for script not updating itself if .sh file had been renamed. +- Bug fix for missing executable permissions if .sh file had been renamed. +- Bug fix to prevent update loop if script's .tar.gz file already exists in /tmp. +- Bug fix to prevent update failing if script's temp folder already exists in /tmp. +- Now only copies CHANGES.txt to script location if script is located on a volume, to prevent putting CHANGES.txt on system partition (/usr/bin, /usr/sbin, /root etc.) + v3.1.63 - Added support to disable unsupported memory warnings on DVA models. #136 @@ -9,8 +16,8 @@ v3.1.61 - Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ for older DSM versions. - Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. - Fixed bugs where the calculated amount of installed memory could be incorrect: - - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 - - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 + - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 + - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 - Fixed bug displaying the max memory setting if total installed memory was less than the max memory. Issue #107 - Fixed bug where sata1 drive firmware version was wrong if there was a sata10 drive. @@ -19,7 +26,7 @@ v3.0.56 v3.0.55 - Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. - - You can use a M2D20, M2D18, M2D17 or E10M20-T1 on any model with a PCIe slot (not Mini PCIe). + - You can use a M2D20, M2D18, M2D17 or E10M20-T1 on any model with a PCIe slot (not Mini PCIe). - Now the script reloads itself after updating. - Added -i, --immutable option to enable immutable snapshots on models older than '20 series running DSM 7.2. - Added -w, --wdda option to disable WDDA (to prevent warnings when WD drives have been running more than 3 years). From 5050b62d5565a41ca3744f3a6c393944cdfbc0d8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:17:20 +1000 Subject: [PATCH 154/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 77c898c..450c048 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ v3.1.64 +- Added -e --email option to disable coloured output to make task scheduler emails easier to read. - Bug fix for script not updating itself if .sh file had been renamed. - Bug fix for missing executable permissions if .sh file had been renamed. - Bug fix to prevent update loop if script's .tar.gz file already exists in /tmp. From e3704a7f0334e5ccb67bed239061efc94c5bc227 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:22:08 +1000 Subject: [PATCH 155/694] Update syno_hdd_db.sh v3.1.64 - Added -e --email option to disable coloured output to make task scheduler emails easier to read. - Bug fix for script not updating itself if .sh file had been renamed. - Bug fix for missing executable permissions if .sh file had been renamed. - Bug fix to prevent update loop if script's .tar.gz file already exists in /tmp. - Bug fix to prevent update failing if script's temp folder already exists in /tmp. - Now only copies CHANGES.txt to script location if script is located on a volume, to prevent putting CHANGES.txt on system partition (/usr/bin, /usr/sbin, /root etc.) --- syno_hdd_db.sh | 163 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 109 insertions(+), 54 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index ee7eb1c..563d016 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,6 +29,20 @@ # Change how synoinfo.conf is backed up and restored to prevent issue #73 # DONE +# Bug fix for script not updating itself if .sh file had been renamed. +# +# Bug fix for missing executable permissions if .sh file had been renamed. +# +# Bug fix to prevent update loop if script's .tar.gz file already exists in /tmp. +# +# Bug fix to prevent update failing if script's temp folder already exists in /tmp. +# +# Now only copies CHANGES.txt to script location if script is located on a volume, +# to prevent putting CHANGES.txt on system partition (/usr/bin, /usr/sbin, /root etc.) +# +# Added -e --email option to disable coloured output to make task scheduler emails easier to read. +# +# # Added support to disable unsupported memory warnings on DVA models. # # Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 @@ -204,7 +218,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.63" +scriptver="v3.1.64" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -217,18 +231,6 @@ fi #echo -e "bash version: $(bash --version | head -1 | cut -d' ' -f4)\n" # debug -# Shell Colors -#Black='\e[0;30m' -Red='\e[0;31m' -#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' - ding(){ printf \\a } @@ -249,6 +251,7 @@ Options: -w, --wdda Disable WD WDDA -i, --immutable Enable immutable snapshots on models older than 20-series (DSM 7.2 and newer only). + -e, --email Disable colored text in output scheduler emails. --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before @@ -277,7 +280,7 @@ args=("$@") # Check for flags with getopt if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ - restore,showedits,noupdate,nodbupdate,m2,force,ram,wdda,immutable,autoupdate:,help,version,debug \ + restore,showedits,noupdate,nodbupdate,m2,force,ram,wdda,immutable,email,autoupdate:,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do @@ -307,6 +310,9 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ -w|--wdda) # Disable "support_memory_compatibility" wdda=no ;; + -e|--email) # Disable colour text in task scheduler emails + color=no + ;; --autoupdate) # Auto update script autoupdate=yes if [[ $2 =~ ^[0-9]+$ ]]; then @@ -348,6 +354,23 @@ if [[ $debug == "yes" ]]; then fi +# Shell Colors +if [[ $color != "no" ]]; then + #Black='\e[0;30m' # ${Black} + Red='\e[0;31m' # ${Red} + #Green='\e[0;32m' # ${Green} + Yellow='\e[0;33m' # ${Yellow} + #Blue='\e[0;34m' # ${Blue} + #Purple='\e[0;35m' # ${Purple} + Cyan='\e[0;36m' # ${Cyan} + #White='\e[0;37m' # ${White} + Error='\e[41m' # ${Error} + Off='\e[0m' # ${Off} +else + echo "" # For task scheduler email readability +fi + + # Check script is running as root if [[ $( whoami ) != "root" ]]; then ding @@ -448,16 +471,52 @@ source=${BASH_SOURCE[0]} while [ -L "$source" ]; do # Resolve $source until the file is no longer a symlink scriptpath=$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd ) source=$(readlink "$source") - # If $source was a relative symlink, we need to resolve it + # If $source was a relative symlink, we need to resolve it # relative to the path where the symlink file was located [[ $source != /* ]] && source=$scriptpath/$source done scriptpath=$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd ) +scriptfile=$( basename -- "$source" ) +echo "Running from: ${scriptpath}/$scriptfile" + #echo "Script location: $scriptpath" # debug +#echo "Source: $source" # debug +#echo "Script filename: $scriptfile" # debug + +#echo "tag: $tag" # debug +#echo "scriptver: $scriptver" # debug + + +cleanup_tmp(){ + cleanup_err= + + # Delete downloaded .tar.gz file + if [[ -f "/tmp/$script-$shorttag.tar.gz" ]]; then + if ! rm "/tmp/$script-$shorttag.tar.gz"; then + echo -e "${Error}ERROR${Off} Failed to delete"\ + "downloaded /tmp/$script-$shorttag.tar.gz!" >&2 + cleanup_err=1 + fi + fi + + # Delete extracted tmp files + if [[ -d "/tmp/$script-$shorttag" ]]; then + if ! rm -r "/tmp/$script-$shorttag"; then + echo -e "${Error}ERROR${Off} Failed to delete"\ + "downloaded /tmp/$script-$shorttag!" >&2 + cleanup_err=1 + fi + fi + + # Add warning to DSM log + if [[ -z $cleanup_err ]]; then + syslog_set warn "$script update failed to delete tmp files" + fi +} if ! printf "%s\n%s\n" "$tag" "$scriptver" | - sort --check --version-sort >/dev/null ; then + sort --check=quiet --version-sort >/dev/null ; then echo -e "\n${Cyan}There is a newer version of this script available.${Off}" echo -e "Current version: ${scriptver}\nLatest version: $tag" if [[ -f $scriptpath/$script-$shorttag.tar.gz ]]; then @@ -480,11 +539,14 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "${Cyan}Do you want to download $tag now?${Off} [y/n]" read -r -t 30 reply fi + if [[ ${reply,,} == "y" ]]; then + # Delete previously downloaded .tar.gz file and extracted tmp files + cleanup_tmp + if cd /tmp; then url="https://github.com/$repo/archive/refs/tags/$tag.tar.gz" - if ! curl -LJO -m 30 --connect-timeout 5 "$url"; - then + if ! curl -JLO -m 30 --connect-timeout 5 "$url"; then echo -e "${Error}ERROR${Off} Failed to download"\ "$script-$shorttag.tar.gz!" syslog_set warn "$script $tag failed to download" @@ -496,53 +558,46 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | "extract $script-$shorttag.tar.gz!" syslog_set warn "$script failed to extract $script-$shorttag.tar.gz!" else - # Copy new script sh files to script location - if ! cp -p "/tmp/$script-$shorttag/"*.sh "$scriptpath"; then + # Set permissions on script sh files + if ! chmod a+x "/tmp/$script-$shorttag/"*.sh ; then + permerr=1 + echo -e "${Error}ERROR${Off} Failed to set executable permissions" + syslog_set warn "$script failed to set permissions on $tag" + fi + + # Copy new script sh file to script location + if ! cp -p "/tmp/$script-$shorttag/syno_hdd_db.sh" "${scriptpath}/${scriptfile}"; + then copyerr=1 echo -e "${Error}ERROR${Off} Failed to copy"\ "$script-$shorttag .sh file(s) to:\n $scriptpath" syslog_set warn "$script failed to copy $tag to script location" - else - # Set permissions on script sh files - if ! chmod 744 "$scriptpath/"*.sh ; then - permerr=1 - echo -e "${Error}ERROR${Off} Failed to set permissions on:" - echo "$scriptpath *.sh file(s)" - syslog_set warn "$script failed to set permissions on $tag" - fi fi - # Copy new CHANGES.txt file to script location - if ! cp -p "/tmp/$script-$shorttag/CHANGES.txt" "$scriptpath"; then - if [[ $autoupdate != "yes" ]]; then copyerr=1; fi - echo -e "${Error}ERROR${Off} Failed to copy"\ - "$script-$shorttag/CHANGES.txt to:\n $scriptpath" - else - # Set permissions on CHANGES.txt - if ! chmod 744 "$scriptpath/CHANGES.txt"; then - if [[ $autoupdate != "yes" ]]; then permerr=1; fi - echo -e "${Error}ERROR${Off} Failed to set permissions on:" - echo "$scriptpath/CHANGES.txt" + # Copy new CHANGES.txt file + if [[ $scriptpath =~ /volume* ]]; then + # Copy new CHANGES.txt file to script location + if ! cp -p "/tmp/$script-$shorttag/CHANGES.txt" "$scriptpath"; then + if [[ $autoupdate != "yes" ]]; then copyerr=1; fi + echo -e "${Error}ERROR${Off} Failed to copy"\ + "$script-$shorttag/CHANGES.txt to:\n $scriptpath" + else + # Set permissions on CHANGES.txt + if ! chmod 664 "$scriptpath/CHANGES.txt"; then + if [[ $autoupdate != "yes" ]]; then permerr=1; fi + echo -e "${Error}ERROR${Off} Failed to set permissions on:" + echo "$scriptpath/CHANGES.txt" + fi + changestxt=" and changes.txt" fi fi - # Delete downloaded .tar.gz file - if ! rm "/tmp/$script-$shorttag.tar.gz"; then - echo -e "${Error}ERROR${Off} Failed to delete"\ - "downloaded /tmp/$script-$shorttag.tar.gz!" - syslog_set warn "$script update failed to delete tmp files" - fi - - # Delete extracted tmp files - if ! rm -r "/tmp/$script-$shorttag"; then - echo -e "${Error}ERROR${Off} Failed to delete"\ - "downloaded /tmp/$script-$shorttag!" - syslog_set warn "$script update failed to delete tmp files" - fi + # Delete downloaded .tar.gz file and extracted tmp files + cleanup_tmp # Notify of success (if there were no errors) if [[ $copyerr != 1 ]] && [[ $permerr != 1 ]]; then - echo -e "\n$tag and changes.txt downloaded to: ${scriptpath}\n" + echo -e "\n$tag$changestxt downloaded to: ${scriptpath}\n" syslog_set info "$script successfully updated to $tag" # Reload script @@ -673,7 +728,7 @@ fixdrivemodel(){ # Brands that return "BRAND " and need "BRAND " removed. if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then - #see Smartmontools database in /var/lib/smartmontools/drivedb.db + # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name From d14a280d0455bd037edf6a6bb39648048c9c6506 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:36:11 +1000 Subject: [PATCH 156/694] Update README.md --- README.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 8667eca..eefd6fb 100644 --- a/README.md +++ b/README.md @@ -51,23 +51,26 @@ ### Options when running the script There are optional flags you can use when running the script: ```YAML --s, --showedits Show edits made to _host db and db.new 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 (DSM 7.x only) and set max memory to amount of installed memory --w, --wdda Disable WD WDDA - --restore Undo all changes made by the script - --autoupdate=AGE Auto update script (useful when script is scheduled) - AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater --h, --help Show this help message --v, --version Show the script version + -s, --showedits Show edits made to _host db and db.new 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 (DSM 7.x only), + and sets max memory to the amount of installed memory + -w, --wdda Disable WD WDDA + -i, --immutable Enable immutable snapshots on models older than + 20-series (DSM 7.2 and newer only). + -e, --email Disable colored text in output scheduler emails. + --restore Undo all changes made by the script + --autoupdate=AGE Auto update script (useful when script is scheduled) + AGE is how many days old a release must be before + auto-updating. AGE must be a number: 0 or greater + -h, --help Show this help message + -v, --version Show the script version ``` **Note:** If you have some Synology drives and want to update their firmware run the script **without** --noupdate or -n then do the drive database update from Storage Manager and finally run the script again with your preferred options. -

- ### Scheduling the script in Synology's Task Scheduler See How to schedule a script in Synology Task Scheduler From 07ff8128e6a969500df428e276818f74b0c3096f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:38:42 +1000 Subject: [PATCH 157/694] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index eefd6fb..2cba9f6 100644 --- a/README.md +++ b/README.md @@ -58,8 +58,6 @@ ### Options when running the script -r, --ram Disable memory compatibility checking (DSM 7.x only), and sets max memory to the amount of installed memory -w, --wdda Disable WD WDDA - -i, --immutable Enable immutable snapshots on models older than - 20-series (DSM 7.2 and newer only). -e, --email Disable colored text in output scheduler emails. --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) From 9f17ada97af7519bbaad30dca86ca1f3c36c8275 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 25 Sep 2023 11:35:41 +1000 Subject: [PATCH 158/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2cba9f6..1fa4a14 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Synology HDD db - + [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) [![committers.top badge](https://user-badge.committers.top/australia/007revad.svg)](https://user-badge.committers.top/australia/007revad) From 0cf9012eac2ab6d1adb744b370c7c10f4f04e46b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 7 Oct 2023 07:09:38 +1100 Subject: [PATCH 159/694] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1fa4a14..208bea0 100644 --- a/README.md +++ b/README.md @@ -107,12 +107,16 @@ ### Running the script via SSH Thank you to the following paypal donators and GitHub sponsors +- Harry Bos +- Mark-Philipp Wolfger +- Filip Kraus - John Pham - Alejandro Bribian Rix - Daniel Hofer - Bogdan-Stefan Rotariu - Kevin Boatswain - anschluss-org +- Yemeth - Patrick Thomas - Manuel Marquez Corral - Evrard Franck @@ -127,5 +131,4 @@ ### Running the script via SSH - Robert Kraut - Charles-Edouard Poisnel - Oliver Busch -- Gummibando - And the anonymous donors and private sponsors From fe1b22b028f4ab51f2a83f7c1f96609fe55e53ba Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 8 Oct 2023 20:03:32 +1100 Subject: [PATCH 160/694] Update my-other-scripts.md --- my-other-scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index de8440a..f6ab88f 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -16,7 +16,7 @@ ## All my Synology Scripts - **Synology_enable_Deduplication** - Enable deduplication with non-Synology SSDs and unsupported NAS models. -- **Synology_RAID-F1_SHR_switch** +- **Synology_SHR_switch** - Easily switch between SHR and RAID Group. - **Synology_Config_Backup** From 8600d3520c8917c24c1481fac37614c8f8ef26de Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:11:10 +1100 Subject: [PATCH 161/694] Add files via upload --- bin/DS1821+_synonvme | Bin 0 -> 17241 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/DS1821+_synonvme diff --git a/bin/DS1821+_synonvme b/bin/DS1821+_synonvme new file mode 100644 index 0000000000000000000000000000000000000000..2dc63b55f2cfc20dc364bbc39d2b16105db24799 GIT binary patch literal 17241 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 Date: Wed, 18 Oct 2023 14:12:11 +1100 Subject: [PATCH 162/694] Create temp.txt --- lib/temp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/temp.txt diff --git a/lib/temp.txt b/lib/temp.txt new file mode 100644 index 0000000..2d030d7 --- /dev/null +++ b/lib/temp.txt @@ -0,0 +1 @@ +delete me From eff49cba3dbe0a6feefef24a846b44320680bb15 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 18 Oct 2023 14:12:57 +1100 Subject: [PATCH 163/694] Add files via upload --- lib/DS1821+_libsynonvme.so.1 | Bin 0 -> 54154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/DS1821+_libsynonvme.so.1 diff --git a/lib/DS1821+_libsynonvme.so.1 b/lib/DS1821+_libsynonvme.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..1f97be2d5b43e3d68c45f780d3857d597862d842 GIT binary patch literal 54154 zcmeIb34ByV_CMO$AOh)*BWPUERvQInNmLY2#x!)GBLN~wFbWz%(t${l&U88$T%$>p zHbyfeqqxirZVZ2QM#eR`U;qVoaYq?7u5;UnqN9j1+VA^4Rk!deYt+T`wW^>h{dkT5k}lbiJtRb-f#(zADVvY&|+P z>m>t?^`6o7p3(KpG?NIp%rsqPMJD7kYpVhzritA)>lJ+xto)zUE7bMU?^o?5rvKD~ zYNqCxor!wv-+z1Q;j_)t?F}SPua=9MnmSdEhJv`y#XTQ)J#JIvc(l#MeF7hF<>H>r z2VAG(o{sxK+bB;1p5m*A$H$KpN*_u;tb;m*O$ zYclRLr}o7Ys_XX8Ev_cYuMxOx3nCGxize;4Ae#63YEHrq_3Mf!QMPWwwn z0_g0o;C}!s({*N8>U#9EIp${30{w6>(nE1q;0|cm{yH_2TJr%Zb?zvg-w)|oxX0+c zHJOD>qAni>*l(;zcphxYXIP&9+sEU8n4*zS*QraV$Le&6P8~>(z&#xIBHX-=REcdU z(gNJoxM`2aU3l~SbjML6*QPvp>E&-W-Tvy_AMd>Q^-^LFw z|KRp#n^J~9^XZ<9HqSjZ=k0&M6vC+gv^4`zw!sIP1ED7Ctcji04-Qb^O>zs!vb3Hkf_Fzh1m!@~68#uOIzw z^^6gBm5hFC_lsHSZ*A#)>=oY=AD+Fb^P(%?eJ-oyj_S`J-gaWi;uBY|du+-_oilHq z|F5@JG~fD(=Otg*^H|QUKi&J&wH}Yf9?B0q9H_ z0Dt}f^ved2^JxR%zdJyG=MO;VCCIT~`3%5kCY)D)_wow_`G-kKG9v9GeI|*J$8V0zaD_TYXJJ01Ms_<8rg$53@DvfOUwbxmCt}m~A%$OI$+V#5do}zt-R>d= z$hbO@=XIvYZJ2Gl4qkUCuq{)=J4+N`k>>Lfr28XM?*350w`=@Wn$O)jh`mz7>&^a7 zR)AdH?m;I1mn!%!jenZx)iB$d)e4ZW;g@Rs%s(i=XBz&!$RF}#pp5HJDzV+8<*?hW z0QAee*qz@X65l;hvJzYK>15sC-3(xGnR2*J(^;eGFxKJqK5n6-$M-6M+HB8h{O0Kj zFcp0B%GUfZx=iJJRbu-Be34Fet^)j4^BL0pvQd$6c|e!f$C{4wMwRFKhS!6peEz8N z*JwKTAxrw5noq`Nyl&9=ovT#-VwKo_qxqNM60q@_&fR)^n}Z6`l=JIaZcYYxxISdC zi)(?Vzg`PwFoRTF59@vv-m3DOH2ohnezWe^;TrxYjo&;^;oqean*-(SSMwk+iat5(Zlw_Y5C6xjBfmfM;e6u?|V z=4*Iivx1+e={%?DWa|aw7zT)!5H9l3=e@R(IQ+ZicbzON) z^@ToL(b;q6&Y3^km*2p@MMWN4Lok5<(OAQZh8q8pvWlh4qF6<~ipGF1FHqiqng#jO zrsp;JDr%y|Qczr7>znBdMuF3p`YM(cHP+Yr13`CPrP+*B*I>e;`1zH-x?pwHis`{X zO&p!t%6a7%OatSA6;^m&Q_xpeS>&s!D)u!5+4}72IwI7T*VOncY*hhYjQEV|KrNUk z@&&5PYv%dND{T#R^?~ZTU==$YEU#F`{+3mhSI2tgscu*{+h6I6d%S zC~;9VGpcJShgrTA^UG@*eYRR(ZG%ND9^di;e}%OpMK%6leqEIxu=yuM#R0rIimTj)xP|?N?((;rf_FsRr%|Ebtj*s#%IP7U$B8gTH~v;RaMmZF>uJ$Rn*oq4OA@U zNLM%bD<)4aYiOt_ud9l-TvQ7^%l8!fi=Ylm8ZMNPBaAII#G?VF*q<-TL(&D%NOxtW ztwId}TB>ZUw*~zkeT+M;4C}x_429*vrG)`sRdo|dqhr3tYLzZQT2|%@ z1nT@{81nL9wZBgFzmURMUSWge1HK00sVCNiVqpA54-2D`0TF+oEMS8@_%5hfkzd!~ z3j}?YCk84D(eo9esT|qq~2c18mVspwJhnfX$UJ@s%|AqP>|0NiNg+Xlo2s*Hl#o%S2>+sH%pSC~Ih3 zTnEdr5mM)CiUHW_3{Npyp|S`QDq9%9h(M4~7;q8gPBgfv-baI&w!#CQC58M3syppM zva?T^ULL57Gere5m6UZ9rI;yM+7`Q!Jjv!Y)>Xsa5=@DD21ixAqTVNtOVBy$GkhX= z89vkVEsvI-1?eiCu#T^Hdhu-J^Xq2$YL-{m#cU>8Fx^+vP~8|S(5*lUR{gbAEuk5k zLm6vK@bmzaCi49^CIyL&6~TYasA+6i8l_y|k5dc?Bfp{Kgy;Z>2T-2e^taKfak`ve zr!1rY(m6g~r4p{EIv|=(7gZjFwgNC6Iu?YxTvk~fpaqCUiW$+j&ut7s&zG^|D6bRc zGL41>#F@5&MyCXr7Z3+cfTj98UyUz1hq0`rj@qs(Mww9g{Hi(rpfX4?W`F&PV!y}N zK!2nfAsFKvb@esXiyPppD=|mZme-GO@Q=^2X&C&4kAPDMfZ0R~EBJJ>iB`9~R?u>6 z=-doXaaqpz6Kpft(Xtaz*L*r5_ITonQRqq0rxV6cj6R<@{v^f|$=G*I!p*<@Pd)Lk zdP+r_hTB>aduEM6x@<5~vm{+=Bw-I$l`GmT9b}8$Moy-w|qb{9Sh{yk`>dAG$-q zwUXs|&kMcLWM`Z|K zq8{b%q#l(aJXJl)-`pORA$*p4l)v5{l_A`GM?*+q5C1BD($u5;E$vYm;!}3!wWvou z5uU3aXAgo1db+pHTS4T(wQ5D+H5N=aC6U$#hn)T zPy+O|x<@^b&M*yQvZhC62-iz*0j#sYJqktsuD8Ig?+UvtaJvP++X8o3;Llj#^v~wC zy+=KfAL~2N9TvECf3e2`=X){pGJ4b#=^S7Jk?!tM8N!FFNBO(AM`Z{fp&r%W4`T2G zE%0;;{2&WF(*n=3z_TpygDr5U1%8MHKH383yJ7Rnw!jZFfk-D=;7cv=Tnl`p1@5)L z54XSzE$|~O@KOuhXMr!Wz?~NOQVaY@3%uR}Kgt4cvcO#yc(Vo0J$dt5X@QS2fk-SrhNJ_gc@Z&7_&sgAk%UVjeTj0lA z@ON0?V=eF=3;Zk#+_1pMS>U@Z@I@B*UJKmZlapdS@6#@(S@6>>@Cg=prUjmDfoECZ zITpCn0zbh5A8mn`Tj1Fic$Eb{$pSyo0?)O;OD%A(1umhqE-SRab?7D~r53o}G8OnD z3w)A={!$BkvISmmf&b0|Z?eFrSm4bTxZXmP(v=qYd<%Z31wPdRUu}W^)&l?a@mC4_ zDuG`m@T&xVmB6nO_*DY`f0ux_<@0oJd)gcK*=*jn?qG6cySL@3^es`bL?(WSqR6O^ z@z-%gE}oc|6<4??f@{<}%qO8jc)R3ZWj>ktZplB#JhwE$>m|RLd2U&R*GT?R=DGC{ z?v(uf%yY{j+${OKnP)g2u9y7n%yWw&yh!plGtVuAaG~V?z&y7I!nu;ant5&wgtH}o z1@qhz2s9AAsKl~keE|tTXlK+}{E|J4F$$!Q? zm&W1UKeGQHGVf%*NAmA5e|$p@Gp&%90Y=QBTn`Q87K@n@b(y>O4@&taZRyzq9(&tslTyKuMU z&tRTQwD5Y#Ph*}-u<#nmPhp-*uW+a2Phg%)u5h#Dk7NE6=IbSY6!Tnqg%?Tw5azk$ z3KvTLH_UTM70#9X5azj*3TI0`nR#wihMkiC;cv)u=@ibC{MXEL$rQFp{xjxJXMXoS z8Gq(;neUPOJIuS8-!A!AnV-gdx8$E=eme8(CBK<@Zn1^eNd8gg^O*0H{Qb<&V7^)M zcQZee`FhFU&b*iTMUuan`F!RJCI1KJ&tN`R@>erIi}`HHU%`9<^G?ZM$oy>PGbJBj zeh%|C$)C^sT;_NGAmh(`A@e$gqYexjEAVG)8pW7&?v^dA)!Sa>IHFbfV^(~ATO@e2w`1b8 z^HJ>})If`lKXyAF?iT+a#n0(>chMPnJ2GCWw%IlcyB#BT;Q2{9bz>)tqzm;Uy<0gy zkbZt>Z(h!`sPO`@a=N`8Bc5l~4MJw>Ry>C%!nHV#fEEzHi?hcTG^z7NUNCozH?+@~ zgAsrvPWOi12d_7vrm+k)7etxe66NkvHbL&B!AZy|{!RsdIo%7kIF4vWp|mIT=X*n6 zd)xK|=WO8nGEfhq3fsI8THn^)n7m+1e&}s?7d>^9ZpO((>KMVs6#0JwTe{B{z`wi8 zjtc1eFrY;1jaY{nQ&qSJ6?$Kc%9s5w@rHhUl3WyVWQ;I6?G0`5w(Sa*v!ksXIqF2{ zOXCR9cMzl-AUBR6e38=vnT@>#Xz5<7YcwQ~)14ps#vA%HKlFWm=tXbnyA5~;X>*Ke zb!BptwzawjBjv^Ck@|UStINU1e|ztl-S(`b^+`O>Zu{8L`mj9g3cco7)!p{0#Qy1JDzCIuD|~_K$cj2)%6hV9Lm^{0H*w9@p@HJNyN%RBy$%1)(p!9pi4ffc?Hk zm`c8SP59#7_&-*Z;VABlnlvT zOoodgLoXn(0d0p2fgqE`kXXzPoIX<~M}sRRzx&-?3~zvYavW|_RMy{N;2^*HJxYH4 zXmfV|5>zVPuLM=ElwQY4&e66P+(3Gc)-Ulu32sBDshxvh@|U0Hy6WJf`rz_{jypwW z9>*iYTpOG~&FL=aNLz;<@-Vz@BSBC=BmbL7Brm5s^fnZ;AoMBbpX-2Q+%7~f_4K2W zjWvJQvth>vp&~A!D zn}eKEc@NQUH=aP>tHztmJB|?l-;Y1K{PQl*+wcbf*xhvp;8D}b_&bIGBXN9G z#2;X+JJtAATE>sv!T4PU^l0S~>&nf6xrYja@uQ~&T4@~GxyY&UYbDz4G6Q$Uv2mpV;a1OA~mU{0SkDy_~ zQnnKFePb}1_jY(vBF&SA1V`rVq~*N!6=0mkcj#$A@rN3{??G?fT^vpks0ipWbOSUp zwk)O?M~p;EMj@K+eZaJ%EV9*+aXS!V#MfxB2-eTn1Gn~Kt(akRa`#vmce?^!%k?<+nt4wp`KCwV77?YLqG;E$#f zv18&I(uX8Q?xwy4CvSvY1yI8pfSdwn7WxpFWPz9|U;tLqhyn`8jOUs!N}bTS$=k9e zt@km;GhVp4juE|nR{8?o4=(C^w9)&ls1lcfu}%(Foh*-b(t$SAoN%k@GTdESj_*K& zqg6-jIL{Q!PK;&mbMCH@(y@#O;?TB6)&4=E-J#^yF%vz>T0R`{y$>quZI|G;6$F?` zI}@-FqKVYKTNJ*#xS)O1sem$2EXvv0J3Qvn(DNj3%f3T`hv&DS_D}TLcuqvx_^DDP zQ%(zVx+ygoKlfSmaqjt1y&r9f!#u7mPP?ft8Os;J62}t8Aa;>YFZimX^&x@3J3d# z$MiKE5|imGr+XtyjP_lu@uhJ9(7i2}u&L>p!R-8Ya2P7h$`2jpqF*d_WksE0<1!f1 zXk|w3^W0^S0cxFV>wUEf@o_1r!Y=-}$U2_s=bGa=6bjh#Or-Z-cNfN(n9JfYmqoSZ z1M1c5#yMYDrx@DD+h2G)W;)(ZdjY79hco~AY^d1v%}$RCf$e5*i;?u+X7A*;8b5h= zhdI6_STSw56s^g)s91UQAi8-=c$@_Q=fcNb&Sdgc?8@|NC-2?naiycW3Y1ZbiDpAC z^4`!}c$8S;`ZSK@w=$Af;aLI}*w@-JihrBY@}*2lZKtBl<9N6L)I*;XbX2<1bGkS1 zh>;2^_~h-l)y3btz;I20+-RMj^m4f0W_S_$(k%-*m|-z!8#jL*i6BNPaP1GoKD6AI zhxdohfYc-+|0$jh8bNC#j$+X~p##Pa=#LHvq!VjlJb@HN;A;$}vA;=R_y7d95$n)+ z0?J>F*u+XUEkX9v%IA!E&a=FH*=-SVdJC5W|k0&=+ksGDSeZ^96S7_Y$ zi{y4<+>PB~R0u`6qXvSzu&BhB#_gKiBEzf6iPX^5m^z`KzX$q8YL#(YJh}Z8xxZ<0 zMVef_@jbi!v$C5??&igl8=}YsG`UnE_qeMWVB@d9NU?Vz&}{J(xu=Z&PSh0dXDO_+ zlN3vSk>X9H_;({tg4~q`#oZ|4_%6~E*N|e$FH)RIiVNc@W+;k((-iHR;(Aj22SxC+ za{P7y(1yfQRNEUPYBa^iS&CkFlVaH~QoMr{yZ#l|Ylq_TSWWSKP!tUjb@8-cH%6P8N_IKio8q?L*@AL=tb1kqPl6_E#jnB8iV#ggGWZ8h6wG#-^Cd z5OdQ-$AYz1)aL%rEkY$@;yKp&r4}?*AaxI96ut!uauug>|K$c%BgL$NZZyp|@h_rG z+fQ>D_kXH`ld$aaeFO&edWPF&XJLZ{@fTv)-oYvk>h-pt%91pr6g9o=7csg;?hKX7 zRJqe6w=4_7HnRELwySXq<4{>h=OQw(te!lWSr{*$6^$LNdpehYUJ5hj6o&iRxVg)V zT{Ld(>O$1pwgm+8Cco}zy#m!AWz>#^!jnuz-sCR}tmkpN>L5&4QY~02n4vEe z;#Fv$h>u`C#Q2=bVJ_&%xDg6N{TTVt}BF6W?@FLW9wD~zR!x1e(`(CU=IgBuYRN1z2wB3%m z4Q5aZs3){LKHdWDwv}L4`t=z0Y;*QVmsE#NRvl`s;@Eej{q<}l5S`3ER3L;2mx3EA zLM{}+*!mF|=m@%UALUHZK8fPK9pZ)%ZbIF{^CRb@m)`aQm($(FARo~q8n-=pH2y#e z?*U21S5PPj$}PGY5H$C;JUOWi^tXtf40Q+(Gxw>j?0XQ;r5j&^C+rhnst02T>ZqZR zmcdO&#>T3kK1;&I=&txPrSkXS%%`PQ zk#aR)rj%dAvq;&4wkhE7z1Z)DT&?40oC4X^Chv)IS&Z6APITr=CzH8wLzHv=*;BR!wW`v%;+(!;3!8dqzY z;Wq51cMd4G2YULGTL+X9bX!3e;&T_D9|<1{Er~gCb~mP0Io*+g-wS;`0@W~( zqtRu;c^AN@vW-2oKS)z)pS%dv`}=u0yG#~e6`L&x8ICc<%4{78Jko4?A$xGR6V6!m zyb#h~i<}5t#6aPOr>Jo=iFYTuga_V_?>}i@r)XaWYFf#|283wQpJgaAO+Ue99z`D5 z{g5zYBoNh?p;$TE=*hRW1C{XM%N1Z5JZ3Ox_;XQgSl&4uCOBF9JIJa;hsfQ}ZcX zTs8j`8r4eeSIMe;X)I()S1%Wvwiw5PBg^|Cgf28fL?`EiC4?~u@$50Gt6|*0Sf94~SkI`jCvWucvKnh|U zNlIy5)PphGb6!Pb-p!#DS;F_;)`=Gfq9STHt)SyU7hlK~guXTwgSocuOE+OV=TR=M za`qTcf?^3odN^9ZTY$oRytM2X@pch~;O?3Uq?n+M+fiRyJ?CuCnBBc?rd}_hEITsZ zL9Lh_3JMq;cH2;Fdfq#q|6nNS^e!u+v$JyMW0Z zJ;6VMmQ? zY~#VbmuWvC!2FhNNd>0@r(x+C?WgVA$d^pUl$~e;JH{BU(j*3n2FmLy*H|D zexQ~DCuS_DROJ;bQf{dVqLX^z#bN{6l^w0fLd;N6t2J%YcjbvO9Lrw$=RnzombFI79W%kFi$$ zgNN*|gO$+^n(asX#~#J}*UY&l&-Z|)>fick|MsCYhU+dcaW4Zd`nUJ3SpNoGd&_%0 zeYT>s{}-8Fr}Aw-NKiHKB;M-E%@nsMYjr#dIeG?e{ht9ZP=G}|alD~d5E?XteZBPl z$=HX%z#Ou227P14$Xb-q7=r+tFU)#S#Mi~!jE&I9&=#V%0+t{87$Nu~)aX6TlxOHY z&U(i{5DIT0@Z?SQMs!A|v2)&34RYb}DEGVYYLnC3<~L;UHWt7oI4xB=(uSc0%v#2J zV8C(x2p{k6x)jyPNEXSYf(*R>s62&ufsn#_7{*3&xr&^2cF&_e$(1XtmCp(f-x)`O zv4YSZEUB^YZ=9%U91j|gp$%L3di=rrh)QIvmY$IgdNBBdkQkRhY?xV zUn!vG8$)^3;qJNs^x!}?!%AX0^$>_D`#K&Jl~7;d6NMkT=ci~qrd~!K^EwnS#JCyq z=>;WsS4fdvh76c%13gV$k$oLH8lD@YBW~|^X4g1TWMr$V=Oa;d*09dukcV*~grnyF zB8a_}h&YL5g8)ODB@$_SHRwZ0KuX>>J_SBX;96`bnT3*aUGjn|VaSY<9F!F5lKWK& zhZZFVq2zR3vKl3D#Rqq{^rXR6#ezM=OA_x{_q)85LkQDHoY&+M51r)e&sqdS%3(TM z%jNky<5S2}ZAP^o3f5Hc{eEoLmB3jhTK=gw=WM3y!7tNpoo?4@k4|^%lzSJ%%hah; zr=7Zd4N~LJl<3nPx!-Yn=gLdKUCWPYj@J46L5sdLvLOeumLGbG=X5e1`(vm}(~TXd zh2<3{Sx4)GKo#4i9c1UjvVWjlp++m5;Zsnk=j+gW+&HRZdt%>*u?cL}ex~jAJLC3O zmEDfQE|Q!+_|9-ZOz^i`ROQ=97{PDT1B^%txl<=wcj=+AuFyi4t008AzV|StH|-}O z|E2LG>!iA9$O}LhdlWKjo9!Co%toOGQu63v$OXDE1yh=F-7C`m1Dco<#AMW(Zu535 zbk&CsqfC!zMvbV8NOp6y-#3b-s-x{AA$P9~8)A!I%p{)BS8Siv=*y-66IS&KO59z? zfg+hbA6mg(OpX?+ZHiTM5(0OYq8eCvA~2t1AZToQjl(inhUHvDRNnTW3tJgo%`6OV zSJM3o==trZ!(`toWcy+4j0wU=WCL{D{{x9_&Tk*=-PX+3dChJ=J=DqhbX)UE`~{C7 z4u#0Sd>c_(Y)KyawJ(ipqk6saBG|s}sgwASNw?x5v>iq6E}nLQ7dS3I>N&vFNOV*= zgX__o-gTX;@dti#)}G+lNSe~)g7sbD=b1Qbn+L681-8x1W2mSEfu zfthc#YoRsT3i!V4J7^UcS&I-&1+*)_f%18vpXvFbFM1D#AMu2~VAsw?FEz>wf)e(I z-q9uzF|K=A4ca3Rm7dCQDkoxm_mb%4V+@MxJ)u~gj zDDdfoChKrlx-;LXrj$Ba$g!ZC~99}$>#3bpsAG#wN_I{N5-l- zrP?-b;Tj8sSI5ecz*c&CFa(z$8YFtUM7H8ZMGHbd885x4I$RA|%&3vx$a$%bj5}rkt7F6y zfW^&Y!@z9#aBRzHJ9l>-Al=Rgph9du^`V~9+no?<_|kpm{N?Vto9%aGOpC*x7{$Mb z_+Ov_aP$sv++7=0h5Z#r$0u@hAuBwA3hu6S#mc|(tgMiTVx^FnEkA%Xmt5|yQ-Lls z@588o&NiAXDfA z0=S*g;bCZ28|(koIV)iTWZ=NVy~9mT62zJOo&rA4o-ydT-}>p)!RS0HVeIfv@c! z8Wdg*Bl5`f8+t!4^o{Z9GXVY_Gb?#GTaD;-H=~2@uDy!f(W>1J(CM9r`5`ao<8UJ? z%*LK<7vFtF+sfGM78V~t4b|jQG^q?XoP~znUAK$KGhSAR?;(-ef{o?>q!|7oW)siE zHStGPvpCvB8mqLt6bT=X1~|^{u9MM7j4VXANLBh8m5evg$MAjdg2pUJ+}*XpBriMw z`9y{MG?CX4`BdTjD2*Q={+uFVdxWp zIP2GGk^Gt%gXIFFb%%?%@N)6~7JixU}un#*B)8gvMu9T||>%$8cSCtl}LJjj{sjmzs4|th4Fxf zo7k*ttFkNEuhQqk_hCP74e;ZXilILAod@g8^W*E_T|%271iG}gSDTLJ&KvP!d(fvr z7;6BDe)mMZeB0f15MUw$h^0sIGz5JR12Hl|H>bPzAI4RXw3b7k^>54$F8_R8Dz|Mv zj_x)=%Xh{zKU|o{@~s|b;TVHO6sIk`@w-YIf84bOB&xiQx@Wu{t*&NpN3+S6jb~t0 z0*j^F3qn1P1Bc$v>?p+Zf^lj)hY+^ikA*y$puDyV_@L9pI? zl8Lbw&B7P8m7)}1hMlHgeWp*Ms1SC7YQnqKzf9HdR>uJcXCT(nl<@+zs?+Gj#=Gi+ zyhJ}bjnZ#*t%l}U>^qm>%b!{YXnYt7f2H`~Sr*Lv!f4JO#pugm6g!GXqIK}w+Jjzk zOLGkvq(hFrQdX`8N@bi2ZoGKOMTZkTYx0zFGK7dgZrmx+7t8Lh$w0xenS_%jL7*7h zfX?novBFf2=V;X7cO8&FI2qw5^36aFpJuL8;tmj82X3$*GD{2iuTU)|UZIA!$sHMa zr@?xURphp#Tn<0X)a`pFf9q&nlm0LDzq_CQZ#7PaUc`=#9D#Nq*5@$L=6DN3 z=q@@HK&d|efm#+ZP%o@v;7di6h>9QiexyrIcQb&PZ@=ewYZx1s^zccCU2{t_V% z;>cf++a(+OmD_wM8mP_&Rfw+yr$!DFg~_$jLzLd5k7cP-uF!$4=rZkQRDX1zGJb+O zf$kS4Qu>sRc`RcK;!ruq@C*FD_(VVaK4q*`bZ-D%lj1U=XpVOaN~oJ^M3mMkE6F$j zFgfRO8*t!@4x!0oNWy>n0q1Sv2IM;QisQWvvek-o94d)f^Lz)XV{DW)DqRA>XK6zu zcm!nVHoq;r6`oHJ8N7~IJ=UCbZvnOr=2InVb#e5uTM>uqTFYE zE!x*Kg&#}DVqz6CfZow@{KTm5M76F6F8#gqVIUXnXT~mgIB@!#C^Pp09p4c}50#Ri zlF;s={qVaZpQlfaL~OPTj>p#|Wbx?9Z(ef5rcX0F4m(h0)X+P|Y*fdN@I(j^2RU#? zHTu2a^JppB?ucuUQ@uYGHH5$37x8Xk#Dge+V#t(T;_f=q)Me7Vk9Z2jM*c17? zd^2D4U%r)p!}lO;jIrPOv+)ssriAek*K?R~Uge|{7ax^oksCw?P4I#Fp*ImE>0k%} z1I#V-HH>T1XGd^3kUP6=kBYPqH0+c!Ry3YPXah(%SAwA7d4db^k@FbFN~`dw0-;RC z5eSX=V!!R|!8#f$!~-`lh~>s94u*C-eS(jOCZd;WJ>7N=vAC@L9?{Ji$CKe$z@s9a ze{GORXDq(RsX_3Dj~CD#1UjFLQ9+G_I8Xsgh~rct4wgv92DF9fW*W59jBd_@q>WcV zbsH;zlsa{L6KEj5X$4uM0qA&9VO%7fZZlGl_e|dBX!{y<8QfffiYjdR0>g>0WfO9= z=9>`wF}V31!U5C>E>u`LxH(i~4P^+lv+;Co_s35Vy^#Y(R$mOgxmo58=vEW^FftUmo97n9v?rE%Pb{g3^A1 z2?ez>zyjgC)ltu(Ai=)tGgh}r$8&-E^W*<;|NZ_E!+?Glg;T+g>@%o%>?8P*#POKN zIqq1n3ck`HAsLU0sor2GJWtK<)^RrcXq6Uy5KLYT^wbOxK|J=f(5I?NJXVV=z`N9{UPZ;>c%e^76_Td`ES+Z#*^(4G6z4&=AP))O`|a%lC=#-d`XE z>XQSsHQ_0!B<_guo^oA@@!s3ieG+^UB99*6YDKfchs1m9jxytsdw?DO3&&dK2X_}5 z0CyS1arp0!Ht{baz90C;SCEaw8$2#+J$~TfH=5W)pp9X^hysB3jrU@11DwqUXAs|HI^A6lA$)rTagppM#m9Q16y8K6D)j0m^3}#< zG>^`z@t1gsU$}-|>#r9$W@dIoPRhQDUt37u-gu^t2=lo|Dt+TbXk2!`bgYaW3vC|7 z;BnJuneGryqoqLX@m;NzuBuPRbD_7G87cSM(XH4x71Q_9T^cE19>&S;QWYS85HKyF z<49mhMG!d`MXK5hP$7hlPaD(0n~opl_d*8lulk_|)m?TTbZx5J^K`e*FuRRyK;yaf z(&@$RsV+Hy>c(_O0Z68wepe*)o6B&pd^dU;>-WOwdSoa%p!=QAAA!gPdK51sh*}WE z+NhZRiNWoC*(mvko`-)n9&SS45Dznkz`e8Y4my7qkH2E_pu`%olb*H=ZOI;BRlcL{ zCHjwgkby5l+<_qSIf#sUh}T3OS1BJ<@O!I}u*AIxei1?=oVgk+9v$n#C2lkFMWBwh zBf0U1(5#deTkJYazEj7q2~7M6!ZBJfo;bAWXnT&4RY%5tM=%)jGv-BXj+pl`V3E&F z(M>%sxlwU0!eU{?cma(e*ewAyGuYh^^N#WH-($fpHU`bDyqgY3*;+druPC7^ksjGZfs}=+<6u zs%t=Z`o7F`(1FFkfjixak%xvkbzEs28tsVe=lvUF#qg9PYY9)stMIf5(7yY5xjHWW zS7KZm0c}iL3&8>ha=k>w7rW}?f>NATW<+}Z-@q4kMHgAZQ9lHTX{74t=rrQ)LX4{% zyePTEUFh83fMVEm*TnxT%ovg-99>7`*Fal-aZ&m8xIkhXc(Lr`y^qO2O(sH4g3*8%!4=Emq z7R@PB_&_(&^9N9>qR%AVy6!$FKWq1+U(3CM8pi8rB0NO6YX%}LWB~s5-P4!9w=k~Y zuPD3_I;rHR74fkn`-#xu!4CJ3d3}R!nH#Si(EWsXZ0K+HgyBTDC z1m^U33^bm{_d{>6qW2wKq)F*|>1M7Lf5t~BqVg%pE49+`+NDS(UQ42^BF2RvCL_D! zhs1d8OSDbFe;13_t_ERISjKD0wiDyEF($!NAhc-wH5knb9}=&PL{3fU`=C2|f9@nS z6OHfQI>w4W4$Uh3=Yik*((KSzYI`tBGGi?&z`lBsD9qc4d8gVSR1!$B5hdedg&9PI zVq6TQ@Wpi1U;i(R#n10Itschtb(cB6#%(pN#3aeCrL6{a%&hLvS29tBp2rt^G86Os zVY6^>udA7E8xv|h@-|MqFA(_+F7cbuh`fhGN+8}cV>_4`N6ibC7j($J!Kqk^K}ByJ z^Sv=XsNt5F>_!u5 zJ3{Vw3W-Pp61MwyXz5XUQR@+hmY%n)EV2HSwpAqRW~m3BCg5HFnMqRj9r6kBn8 z+Kl3Dfa5@M^o1Y#ez9wjaU1x?Y=0b-JmGuvN6`E>^qs92bHi=oWn`ga>iGvkWzI$g zehpd9`q&ByLvh@AU#z}Ie;(dzfbY@QpyM>BNf-k;WqAq|QmQ3)4IO1gzduL$k3t8W&%*x|#u^ zE6oP$ViCwkql~AG{UCREXWOAs@25XZ$07kHs7xI#prsLcKr&XNLfnVxM2w+XK1}~D z(W%ej6mj^uaT5{0OV2dU0aqNHE7*eCZK;F)s$mhT5^$`-tZmMsH=zzWdKK zp2CRexdXEN+re=i&{102c1+h0q75y}7uo7V^?bC=T{Gzfmx26H9h(t~UEn)`ANQg9 zLFD!lbW-iV{LGL~9f;rIirKj+@87cNFR1B-nV}iiGAlFo(Ei zoVpnvMiTz}e6Kz#)*KszQ*|2e&YVQF;{=T-VILmdc~rjA9Es9^U|GB z8!za~Fn#MN#qJ2OtA0PX5M$y7A2JLaQ4x7KLq^j>Hh};pb`jE5D6P^wvokwoc3gtjGTb-t(Tn zpzVr(<4oIF>~COlKTZq=KNJ}E4d`&7MSp3K<0oeuuEz)?bbuw@2_|~qtLmiip#vhPLtm z;yBTO#xagZ?%`)5RhxFDwtSMrcUK?%Nyb=xpdWi->h8k4L1|qCZertH5|vjwDCX?y zeO&WH`NBuCM!s1Cop>d~?8E|c$KR($rR(sOiP_wGB~F=zBE3#m2!GJKV*Qx zhcHtkF54x^)C0kV@jIvtKZa^N)QkN({#;?I{E$xL39yCHJhr%n=Z$GJVEh2Hw_=au zkW+)UjEc9>_!#1qbBD$9D-ObM$B5I>96rFGx|Yr2N0V@v9Z%dZc3Kt#Xq+K$rOQsG z*FBgW>Z!uad!TVQlp(Z*pC%vOvNsYuIf2>PG~DQKOWO3O|9lg<>CdQ`XX|}QormN| zpdYiqKx~}bkW>A*1I_f_VH}2jSiZQE^$pmCbfQ0f7~S3$L1TOSc<$?@8c7&LhJ~x- zSL@?9dnbU)EdJhsWfdmvf};%#7w|*VNQ{x-0w%D@ScSne?Njz^2iRgac{odcA+`x_ zAFROF7!7bu6dS$(+yNx`mr63%dIvH&JKZh+Npk#o3uVdOcQx>iwh=PZK9w1hr@Lz* zDscS4UQBNM2Tk<&L&}e#=aF9VC-SSaUm6n;yr9V&@Y4Mqma z(#4tvv%YEnAcei^f3V-&LH11UakLhK^riWl?0cBL;NV+5Z0`=@p@9_=j8%Y)$)Eh@ z>Z<@N7N5bGhF749j)Md(FZ6+wLSiFN5eh+2fC5V8hX64;QSa>Y!l$FAk$OvPJa8;_ zoiP8y26%8p{881wIYCV%dOY?m1s8uD=bEflX zAqZ_TI#Ac5j%vMKv~d^531?(B-b8uu-v%&F#AEv;<6iJgX~Ww>;HBtBp>lCF+l;Bm zTLgX|l&n-X*Uynp;xVtte!2Netkz#si`TzaS33L?e#H9?{Dx z8_`wFao;_`)Tjkv=+$KY0D^o_F$}0&dXb%|A~(*10D1O2?zcvoK>)wsih(3Y*b&Lu z1=-96P-Jr?c!0>-kyu1@4bZ_z@3lrU1gzz6Yz36AGsvGuhFRy@j1vKJca?*h)P}IP zGZ+hP0?jhe%;{Fjcq*$(rDotNc^AtM=^EWA(gI9FV|e7d#?NGog9k>teDIAp+@yX! zx2ltl&Wn2B<-I7zcQq9`5uYl=HnmHp!M!hu}2AX-~2Z;hJ&Q>m5fc}V7NM-gp#*4lg;Ku#2XQefq^fOCh6k2u;61s9x4EMLA!yqegPVkL)_4}yxLEf=Cu{uv)? zu*o!O(h+(avjn&w1@1*!lYwY*&^nd^-M0$P^C_{8XCzA~2I$^1T$QRP$^5PW^O z{NhedcM&8IGbeY~72pRFc@Yg7+29e44L|!lNZHZ)1c*exchGdM0iB#~2$E;zR-=+h zPEk@?WS}#p=Y%goePba;%HlAi`;%IkUZf_yj@P{{pL;ES8~+Fd6%=po_$j@UZ{3_; zd@eh>01hl0A<1FrFboo|%iE6QfL|IXY55jlJaED#c$xgHjOdv9(P85XCE`|oQl0ax z=ooYl-&=!2Xz0q#kOX>v7&R=zSam(Noy>MxwxkzK-q*NF4gVzgwc!$(IoiS$U&~Wo z%kV3?TU*$HA;Cv@U6dhaH}3&ThG9fvBQAzO%~{vo^&H448Quw(QF;zVjd!f?u@#v> z7NBly_>4<|CE6;%4tk1oz zT7No5t_H1e0P;4jgHWWy=m(t27CirY{eN2mb<1mgWz`L3k~TC{j<2wdYM3&r(wSdZ z;SU6S6+vfxd7!-37xV>eKb3AO#^58g3dts1vo+L{<>hmUsK}? zm}tURRdt}Yth}zWticzkF0UyI_{u2>T&n&IwCW7{ol!b-=Fj#;iTMMn@0HaJ%gSo~ zl|Hj;LR+BAeRY+-fbMb8iaLLdf5{5lsH2-q?NYKt!31BhVtl2qs=To#*f62KqPmQA z{eiOT%7*b^ze?4J=L?c_Dl}&u#>(lhf*>?gzU5^QoNiiGE2&#n=f9xNSvWo4*-+yT zI)f|feOz~1`|GP@k4afjs_QuF!D@e-_XWy>jR7A3qej`> z%b~U+yCO8_OUyfqmj-<3M@^-z&=;tHsg*DBIZGN~UZcim7gX6iw5pQ2>R^L&9t^^o zKMNcLeRVdkzac1v&guTzT3Aqn0bATLmkkx{VOWi8XVs;rtpZ)E zWA~1tN)^PYhI+!2*LT%Ia$xmn`vB zmM!+doBGNs8*0lM>oI%z##58P;e_SofeC>|HKoeDTK3=6j!q0xzovSzRQ(^+PaGEr z975-$=&Vy#hnT=0z&OHiM#0=9Snwb`K%}5u^H?XG@^Z|T80=*}XJH8jOYk)zR1-A{ z_-f0m>A%Wqs;lCCenRxY;6sZ}w@B-Y1tt@Mwe`~3acps1eWRKwrIldJEox1TI(ryK z+2R$P9x>U=B(j*pFkw`~adoE47o}BhW(pV=)r|Jr-x#D9s`b_SVX>H@RFJZy#=jU& z$-j(~0R+X0%5dno5no)O{I-=JxNhx&%NpT=twm~HY^e9e&*D)Lh;%Bdef6AbM0upf z_{!j7EiKN!WKTK+W~%E@rw)v8YPVsug8mABO&P-g8)j!;S-=mtj>MwaHpGV&<%sZX zz9v=QhKU#QwbhqT`Hi-a*WK5~d5TF|2P?HWML^8sNqNbQqX07?B zeZ}IDs>-0u+T*b)+Lts-(Idz+xI(u8T3S#2aFI}G6`sN=RyXKqMK`DM3Lyh$UL&SH zCootAVUHOP3#*DA{4xu5XbOusuD+h#Aqu#Q_RKnytCnJX$NHt>5sq_p6{dIbM*ZQ5 zk~$e2nEi^$rwWoagDaE^2k@q4G8ht^OUMng9#`d4vBJ12+qmTlQ-cr&GcxC;+9w(9 zxjBM#3L4c3X9o!WLPDmRU%=TP8iDpSDMco#v0P1z*R)OFNup;>&$BAU(u!bh9D!Ir zIj2Qgs8p4NkxDEmP#EoVH*Lls({s11c-8#nz%kS15=T#QRx}1wZA55eoWEsT zvAkj|HlEPiO21Rsjt>qa-=+4*VGn?ynwXyO4KL(sz@X^#bz5F0zOjXYTzN= zdkyv)3BNWH8J&uMP5nC1MYNm44nQcMfwa*Kk@9|Ivn>}hjb+lO4{~A ze{p`BzfYR}2>3+Wv;n)Wgg**8NR3U{iyjL2W|Sk%+JgE>Cn4=d%HOlf#sLHVE>|hi z(ig!eQtwNV$abXb-atQbpr-3R)Wch{rSC@~JCLULp#A+J52V>hyFQ3S79w5wAr3wv zP5&qoxfki`kAa6x+N@8&C(ve!LwR!EC=MAx^p8>h>V!exT8z?`X0DTd@iqBU>A_(K67wO%L zdoS?MCN$5U*^*o?6qnl5ZBBq*z|u0pEHt5EJ9T8F zSuH6ZyR&JCJ!`r>(``?m23+>(Fvy{_1u{o!n_@i`J#(6BjxE^6;;uyfHL!(T(gELBCIhb}Wu|?#)J}d5ExV=V z8ADG33cuZ151V;Fw|foouVlL|sWa_sP-(j}`JExs9O|LDGlrgqdM^Nf5^QS-Y-~V& z3+z2dCO_GSUDh9ldg-vq@w(kU{q@+hlUq=Ax}~Qx)qt{}1*pFl^?%Fy`S#3flA$tJ zQnoFr$pO_#FiVr+>t)-;Y_A>d;h7iv-U*lsFuo3EAFfIEMrkawkbp!mSfBO`6-DedQpxeNxL{k9|?{>qG350Kq5%1EZ=&%`;T^ z8V(;+2w!CK)d~8e0jmLQ>LA5eNAjFRUD!S><-;U<&#)@{_F>h(kk;t(UrLjoP8ccE zekkw9!BZCA-IU|mc7{c-oXImyjmq1ym8GJCp98-X_>aH`QnuGopZk~5OnaBJz}`6~ zWoeRq^_Vm5YsM7W*Nw@yugBdvCb<;igEI6HUveF=rvZB!u%`jLhS+leEC#Sd1LqLf zn1Fc+fxaOc>Sk+0JqZ=rwhyrRAT}2m1!$oVuqwdjY8YFU2HYkslb5+duMl{psOvHD zN{E*aXr5+o_RtlHRTV3VVpxWXb5L=fuE=I_!oXGxf4LrWQHX-~+MAP-FA_gQ{jNuu z3ooDVVp+@=z($rw{f}p8P4w9fV<`pdI@G%r^&Z#yeQk1{J*$KIeGPrlm1!7`mO&6g zT5{(Qd$vd1kwvkS7u(mR&9bjgTY}ULG`5e6el?Xkjk61XB4Cz%O=|KY;g{KB+%A+i zqkIu;?7z~R?MJ5E4v*N6im*F!aelcNbXVfM$__%rpM(EYI(2$srRl`G6L`6Q?t`~j z;pGcS^7#Vr_5$x6@(GLnMg8u|g+{qkc9GZVebiZa<#@VaFU_|_B3Izq28Y{{oZL*u zQ;2LX%DzF_hvedyY^pgWWzV3WmkZ~eRiN34kCAG$y!-fJ&N~J6b>Mz`Zpy9TKF%Wx z-;~=wL8t4!NaQ9woAOP7y8*wj8-8Ig ztf%=n%!6Zs1N1F90OV;vo(AM;K=uJSxd6ao082EG6yPi3F&hZ<57AIJP|tuF_pRsy zY(9w11xA5php;)CMYbvpoMELU(4onNCd}mTjG@WX5@B9xH?hkVx{X4#JJW3AJOJmR z;d7C?(E*5+<57c{arMKI$d!0j<3T%{H5Bt2q7(wv9JmU2HpHA_kK!YyGhUcscR~<4 zQg9EgwT~{eXP+yEuHvZ|P;V*f;dn;$s)4`w81Q<){hTa+Nk=)pYjRSaO0uuZIn%yA zr^w!wlW*_Fy(TAlWxoUL9f|>7mjlm>y9;-Bj*r-I(K*EcmS`Y+r2<+pn*eMCVj&Pq zf#^YPL4=wrnr?Cc;l~prKR&?bquyL#6lfj^n*$j6CMUu-{BMjFp}IKfX1sMV9@C$UM0OERVjXLo zmz`X14e|1Z*4rl)+H=p9z(r!E$5Fov^?L`XkBF8LsR|MERJ+B{hi~v$-yMmZ_utz4 z`Z4h5_Ac0aH|+fx*!y&IZ8?AOO9R|6Sh#{CTL?U=OJk4c^lU@?Ft8b}J5#o{p= z2wXBmL)}1~g(2u$(FfRk5St5(0?iI#b2N)=RT^+xX%UKHo@v5N{$_E?k7tA$*SE(N zx`{$GJ5x77>Dw-bTnn(KYuXx#45t15H+Hsta!OOOeaGZ8?LCu=?8fAL`)=IZCl4H7 zT>$K9z@7$dIMm5C#6Aj9p}z881%6pwu+?#?MvZvpGU6;IC7?9LTu8&6B| z)<-T2P<0Nf&eK&%P{c3mtQYLCC#M4lopVwP(#npiW<Rik^Ubq$yCJ>Y{ z9@$QMuS6o(=s3~3cI5I63|Q$UpJAUg$DVt(I2FW*%#6B+Ps$4IS+nfUGJ6*60K$~LfEwVAek~H=zxYA>xR&b= zYYdAOS<9fA_VrFoIL?dg&p3;*(yhRAaxP-p>G3hGcW6E^W&mR;Fc`9briN`amhZqu-8(LdMj8@#vjWouHT&q zc%t($=64hq0{1E4dZMv1;`D1%^0*H5avh36xN?w(>(H6@!sHw5rE~3zO6{e{Tmo;} zcTGBDX!14o(%JS!mG)A%y>PxfFOuh_Xs;XX-T7uDvPsKS$Gp;BUbH>E?!`*v@qQbb zIkeQiGHJHGGiec0Hzs2xShDUewaC@1RwV#brUAWf;3s@$4V&R|)(ofnO!?|BM7an5f#hN2lgId^gv6xXk>^Z<2GJqIb#W4e2>WM+n*wSrrY&~rMYjp z6z{coVardhm6|{EozZkn(2PqM$MV7!xVm~&qMNa;*7b+$Vx6_&gDSa7`NcFY6Fyoq zZt|V233KVk%WUr_Y`ZYOS_>kg^Jcrdb^cy0nD2FdBrE;Dcs--XCy|AdvlV29PUq{i zN~ghxiqZq@0VI{j3qdvrP|N7Xw}r^o2@WS!2?>3p45>2$eHuhi)c zI$f*NhjqGDr*G=?Q=RV7>7WyI`#L>Frzh)lhEC_}v`VMTb$X>vZ_w#loj$D7tvY>E zr=RL{k4^`jsN2`+F*-e2r!#aqU#C?%U9QtBb;_T@=e1U+59@TRPT$n&r#juE(?NV$ zf$Kn>9;4Hfbvi?*^L1LK)8#t7Ql~fQbgfPw*6CKAzNynsb-G8VgS7uTP^ZV}^kki` z`B3pU(BEBms*;E9Q0enJ{ijYp*XbaQcbHDc>hyG-&eLg?PA}5wN}b-Q({(z1NT;vs fG<~gV|683Oa+k^ Date: Wed, 18 Oct 2023 14:13:17 +1100 Subject: [PATCH 164/694] Delete lib/temp.txt --- lib/temp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 lib/temp.txt diff --git a/lib/temp.txt b/lib/temp.txt deleted file mode 100644 index 2d030d7..0000000 --- a/lib/temp.txt +++ /dev/null @@ -1 +0,0 @@ -delete me From 2c128f0c0d35b17b1e6448cb915122b730bbd282 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 21 Oct 2023 06:16:05 +1100 Subject: [PATCH 165/694] Update syno_hdd_db.sh Bug fix for NVMe drives with / in the model name for non-device tree Synology models. --- syno_hdd_db.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 563d016..df629a9 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,6 +29,8 @@ # Change how synoinfo.conf is backed up and restored to prevent issue #73 # DONE +# Bug fix for NVMe drives with / in the model name for non-device tree Synology models. +# # Bug fix for script not updating itself if .sh file had been renamed. # # Bug fix for missing executable permissions if .sh file had been renamed. @@ -218,7 +220,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.64" +scriptver="v3.1.65" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -1159,7 +1161,8 @@ updatedb(){ # example: # {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, #if sed -i "s/$startstring/$startstring$string/" "$2"; then - if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then + #if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then + if sed -i "s/$startstring/$startstring${string//\//\\/}/" "$2"; then echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" else ding From a4a5c08e72a9b69880fda3ccfdeab1eaa8b5a995 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 21 Oct 2023 06:19:13 +1100 Subject: [PATCH 166/694] Update CHANGES.txt Bug fix for NVMe drives with / in the model name for non-device tree Synology models. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 450c048..1f885da 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.1.65 +- Bug fix for NVMe drives with / in the model name for non-device tree Synology models. + v3.1.64 - Added -e --email option to disable coloured output to make task scheduler emails easier to read. - Bug fix for script not updating itself if .sh file had been renamed. From dfc5d1e299a371a610d7675411f9dee9cc85c45a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 21 Oct 2023 06:23:31 +1100 Subject: [PATCH 167/694] Update CHANGES.txt --- CHANGES.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 1f885da..b427d11 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.1.65 -- Bug fix for NVMe drives with / in the model name for non-device tree Synology models. +- Bug fix for NVMe drives with / in the model name for non-device tree Synology models. Issue #154 v3.1.64 - Added -e --email option to disable coloured output to make task scheduler emails easier to read. @@ -13,7 +13,7 @@ v3.1.63 - Added support to disable unsupported memory warnings on DVA models. #136 v3.1.62 -- Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 +- Fixed bug where newly connected expansion units weren't found until up to 24 hours later. Issue #124 v3.1.61 - Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. From 59b8c273be28787ccca443d01a099436b575f57f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 28 Oct 2023 16:54:44 +1100 Subject: [PATCH 168/694] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 208bea0..2df73a1 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,12 @@ ### Running the script via SSH Thank you to the following paypal donators and GitHub sponsors +- Mir Hekmat +- Joseph Skup +- Dirk Kurfuerst +- Gareth Locke +- Rory de Ruijter +- Nathan O'Farrell - Harry Bos - Mark-Philipp Wolfger - Filip Kraus From d07dbba7fb2d5b47402abb60a03d2647bf957621 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Oct 2023 19:13:46 +1100 Subject: [PATCH 169/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2df73a1..1bb2e28 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ ### Running the script via SSH Thank you to the following paypal donators and GitHub sponsors +- Peter Weißflog - Mir Hekmat - Joseph Skup - Dirk Kurfuerst From c061489ca663f36b68995a98797e948e1cf31159 Mon Sep 17 00:00:00 2001 From: 007revad Date: Wed, 1 Nov 2023 15:41:13 +1100 Subject: [PATCH 170/694] Add execute permissions --- bin/dtc | Bin 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bin/dtc diff --git a/bin/dtc b/bin/dtc old mode 100644 new mode 100755 From 37a430014ffc33e9e9f4fa8d679655a292d5ea4f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 2 Nov 2023 12:49:50 +1100 Subject: [PATCH 171/694] Add files via upload --- lib/DS1823xs+_libsynonvme.so.1 | Bin 0 -> 54154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/DS1823xs+_libsynonvme.so.1 diff --git a/lib/DS1823xs+_libsynonvme.so.1 b/lib/DS1823xs+_libsynonvme.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..1f97be2d5b43e3d68c45f780d3857d597862d842 GIT binary patch literal 54154 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 fG<~gV|683Oa+k^ Date: Thu, 2 Nov 2023 12:51:27 +1100 Subject: [PATCH 172/694] Add files via upload --- bin/DS1823xs+_synonvme | Bin 0 -> 17241 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/DS1823xs+_synonvme diff --git a/bin/DS1823xs+_synonvme b/bin/DS1823xs+_synonvme new file mode 100644 index 0000000000000000000000000000000000000000..2dc63b55f2cfc20dc364bbc39d2b16105db24799 GIT binary patch literal 17241 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 Date: Thu, 2 Nov 2023 13:05:10 +1100 Subject: [PATCH 173/694] Delete bin/dtbpatch --- bin/dtbpatch | Bin 130840 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/dtbpatch diff --git a/bin/dtbpatch b/bin/dtbpatch deleted file mode 100644 index 0f314f2ae480c4c43c8bfcf2cfe2d7c1b08794aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130840 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žLD_7J0lT=~=9shO7KEq~1#+ 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 W=u~`2yZ@c9>HUXUfq8@XHTZuF*iQlg From e262638700ef3b863a0a19106d702b21e70264ea Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 2 Nov 2023 13:06:45 +1100 Subject: [PATCH 174/694] Delete dtb/DS1823+_model.dtb --- dtb/DS1823+_model.dtb | Bin 5762 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/DS1823+_model.dtb diff --git a/dtb/DS1823+_model.dtb b/dtb/DS1823+_model.dtb deleted file mode 100644 index c04a562ca0adce991e9452d6b13b816ecddf1627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5762 zcmdT|y^rHW6dwb}aeJHqaRO1$(13tl+0G{HQXSHs&`NA|AR$p$6MHtXusuGH6Lu>k zL_tAw{{e`ang$`!P*YNXgb*MaDr!!=_h!aliL=>LB6OA}9zVa&-+S|BoF8x8|C_Pr zK4FXxW5A985mE)fXn#-=%4C&>(?<)kHY;L&hMOOGLe(>2K{-MUsr}6%stn2 z1Mk2eoT=A{3uPaJf%Z_J)%C)Z7f}!wcY%f%(w~I!5)9;j#0)FH56@4)z~?J4-YJWj zfID7Dy9$G+aahP4Nkl_EGZ@w`K7S75Z5USXS1|vz@%$ake}my1y+8EcfC*g4+ZX>+ z@UD(OIU&70gNEF)umIt?i%asrKa;^K4_Ub@=pVT^$(jqK?6(bXa-3 z*M49Y){h0_w0deC!%OLC)&lu*+jCERclTWl>&o0b3zq8K2+vJHur&Ed{UC%AH0fbZ zHcy-Ngn9kbb@$xY-2?oA8ToB%;UA@Xfb0yMGzI6#I#PUa(r8?WIrLlSab>%g&ck(}-Q;B|CfpmjIzdh+ zjvK)9qU*ltdV9lq1=alyv2FBb=Vf^O9cXA1uy;V~&L8F(S&tj@_h3#wCn5?ag%BAK z;6m9Q;0qBp8buF!`550Bu;X#_VjR(|03y+Q0#|R9-wN`zY^AYkAf4e>i ztqtKZ`rrD8*?ZQ)&;UVyl5#+M4 zUrmsd{xd~yPk>ym%K6S;=Dp4NGW%wmTxGxaO!L6@@qF1id%-uaJwsLdZQnVL&VpLL zI;%9~tNp20J`dv+_GvLwUT13DaFaRn@l0XRaAEzT%>?crz^KltAY(DL>v8Vywsh*% zQRi+xsNc8kYE6B1U%l8aDX==1*sb1M9v!dd?6ZsiU#yIGzmCTNJQnN@>-S_g_QL?6 zz19Bab3T6SNM>B8O`|fql{kCU;j!{!bD+c2%@H`V-Y-Pj#7)A^B%kun=sUXyWb@EM`#*(6}*Xj57fBphVWS3;L)0GVNm4?g` z{ETfK0qVhVEtF}_%Xpj!mdZ#ZY%U5F%Z%ZsKz|<6SDwn_Y?i}Upq%AwfdVTb;pdt@ zjUw1yJ`x46D{`VpBx`C{DUxwvkw_{-CU~jG(Kav`Ds7wR><-~mNJxyCgb-m`AK30s#EaLv+F{6UZV0sF0$49CIbue-vCg3jhEB From ebc92a6d9b478151473f6c92676b20085af8ced6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:32:53 +1100 Subject: [PATCH 175/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1bb2e28..63af5f6 100644 --- a/README.md +++ b/README.md @@ -105,8 +105,9 @@ ### Running the script via SSH **Donators** -Thank you to the following paypal donators and GitHub sponsors +Thank you to the following PayPal donators and GitHub sponsors +- Andrew Tapp - Peter Weißflog - Mir Hekmat - Joseph Skup From 926707f4911c6b7179fe85e239a50f0cf3541796 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 7 Nov 2023 11:43:56 +1100 Subject: [PATCH 176/694] Add files via upload --- bin/64570_synonvme | Bin 0 -> 17241 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/64570_synonvme diff --git a/bin/64570_synonvme b/bin/64570_synonvme new file mode 100644 index 0000000000000000000000000000000000000000..2dc63b55f2cfc20dc364bbc39d2b16105db24799 GIT binary patch literal 17241 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 Date: Tue, 7 Nov 2023 11:44:33 +1100 Subject: [PATCH 177/694] Add files via upload --- lib/64570_libsynonvme.so.1 | Bin 0 -> 54154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/64570_libsynonvme.so.1 diff --git a/lib/64570_libsynonvme.so.1 b/lib/64570_libsynonvme.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..1f97be2d5b43e3d68c45f780d3857d597862d842 GIT binary patch literal 54154 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 fG<~gV|683Oa+k^ Date: Fri, 10 Nov 2023 20:51:22 +1100 Subject: [PATCH 178/694] Update CHANGES.txt v3.2.66 - Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using DSM 7.2 Update 2, Update 3, 7.2.1 and 7.2.1 Update 1. - Fixed bug where memory was shown in MB but with GB unit. --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index b427d11..0aa3746 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.2.66 +- Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using DSM 7.2 Update 2, Update 3, 7.2.1 and 7.2.1 Update 1. +- Fixed bug where memory was shown in MB but with GB unit. + v3.1.65 - Bug fix for NVMe drives with / in the model name for non-device tree Synology models. Issue #154 From cc23770b3fc577db088b230306f147f5dc3d3e1e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 10 Nov 2023 21:00:57 +1100 Subject: [PATCH 179/694] Update syno_hdd_db.sh v3.2.66 - Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using DSM 7.2 Update 2, Update 3, 7.2.1 and 7.2.1 Update 1. - Fixed bug where memory was shown in MB but with GB unit. - Removed -i, --immutable option. --- syno_hdd_db.sh | 347 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 279 insertions(+), 68 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index df629a9..a3bccbb 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,11 @@ # Change how synoinfo.conf is backed up and restored to prevent issue #73 # DONE -# Bug fix for NVMe drives with / in the model name for non-device tree Synology models. +# Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree, +# and are using DSM 7.2 Update 2, Update 3, 7.2.1 and 7.2.1 Update 1. +# +# Fixed bug where memory was shown in MB but with GB unit. +# # # Bug fix for script not updating itself if .sh file had been renamed. # @@ -54,6 +58,8 @@ # # Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. # +# Enable NVMe drive use for models that do not have NVMe drives enabled. +# # Fixed bugs where the calculated amount of installed memory could be incorrect: # - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 # - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 @@ -220,7 +226,7 @@ # Optionally disable "support_disk_compatibility". -scriptver="v3.1.65" +scriptver="v3.2.66" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -251,8 +257,6 @@ Options: -r, --ram Disable memory compatibility checking (DSM 7.x only), and sets max memory to the amount of installed memory -w, --wdda Disable WD WDDA - -i, --immutable Enable immutable snapshots on models older than - 20-series (DSM 7.2 and newer only). -e, --email Disable colored text in output scheduler emails. --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) @@ -307,7 +311,7 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ ram=yes ;; -i|--immutable) # Enable "support_worm" (immutable snapshots) - immutable=yes + immutable=yes # Does not work for models without support_worm=yes already ;; -w|--wdda) # Disable "support_memory_compatibility" wdda=no @@ -791,6 +795,7 @@ getm2info(){ getcardmodel(){ # Get M.2 card model (if M.2 drives found) # $1 is /dev/nvme0n1 etc + isinm2card="" if [[ ${#nvmelist[@]} -gt "0" ]]; then cardmodel=$(synodisk --m2-card-model-get "$1") if [[ $cardmodel =~ M2D[0-9][0-9] ]]; then @@ -802,6 +807,7 @@ getcardmodel(){ m2carddblist+=("${model}_${cardmodel,,}.db") # M.2 card's db file fi m2cardlist+=("$cardmodel") # M.2 card + isinm2card="yes" elif [[ $cardmodel =~ E[0-9][0-9]+M.+ ]]; then # Ethernet + M2 adaptor card if [[ -f "${model}_${cardmodel,,}${version}.db" ]]; then @@ -811,13 +817,16 @@ getcardmodel(){ m2carddblist+=("${model}_${cardmodel,,}.db") # M.2 card's db file fi m2cardlist+=("$cardmodel") # M.2 card + isinm2card="yes" fi fi } m2_pool_support(){ - if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 - echo 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support + if [[ $isinm2card != "yes" ]]; then + if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 + echo 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support + fi fi } @@ -1161,8 +1170,7 @@ updatedb(){ # example: # {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, #if sed -i "s/$startstring/$startstring$string/" "$2"; then - #if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then - if sed -i "s/$startstring/$startstring${string//\//\\/}/" "$2"; then + if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" else ding @@ -1257,69 +1265,241 @@ enable_card(){ fi } + +dts_m2_card(){ +# $1 is the card model +# $2 is the dts file + +# Remove last }; so we can append to dts file +sed -i '/^};/d' "$2" + +# Append PCIe M.2 card node to dts file +if [[ $1 == E10M20-T1 ]] || [[ $1 == M2D20 ]]; then + cat >> "$2" <> "$2" <; + }; + + nvme { + pcie_postfix = "00.0,04.0,00.0"; + port_type = "ssdcache"; + }; + }; + + m2_card@2 { + + ahci { + pcie_postfix = "00.0,03.0,00.0"; + ata_port = <0x01>; + }; + + nvme { + pcie_postfix = "00.0,05.0,00.0"; + port_type = "ssdcache"; + }; + }; + }; +}; +EOM2D18 + +fi +} + + +download_dtc(){ + # Download dtc from github + echo "Downloading dtc" >&2 + if cd /var/services/tmp; then + url="https://github.com/${repo}/raw/main/bin/dtc" + #if curl -kLJO -m 30 --connect-timeout 5 "$url"; then + if curl -kLO -m 30 --connect-timeout 5 "$url"; then + mv /var/services/tmp/dtc /usr/sbin/dtc + chmod 755 /usr/sbin/dtc + fi + else + echo -e "${Error}ERROR${Off} Failed to cd to /var/services/tmp!" >&2 + fi +} + + +edit_dts(){ + +#set -x # debug + + # $1 is M.2 card model + # Edit model.dts if needed + if ! grep "$1" "$dtb_file" >/dev/null; then + dts_m2_card "$1" "$dts_file" + #echo "Added $1 to model${hwrev}.dtb" >&2 + echo -e "Added ${Yellow}$1${Off} to ${Cyan}model${hwrev}.dtb${Off}" >&2 +# else + #echo "$1 already exists in model${hwrev}.dtb" >&2 +# echo -e "${Yellow}$1${Off} already exists in ${Cyan}model${hwrev}.dtb${Off}" >&2 + fi + +#set +x # debug + +} + + +set_pwr_limit(){ + if ! grep "$pwr_limit" "$dts_file" >/dev/null; then + # Save current power_limit + pwr_lmt_old=$(grep power_limit "$dts_file" | cut -d\" -f2) + + # Find line to insert power_limit + pwrlim_line=$(awk '! NF { print NR }' "$dts_file" | head -n 2 | tail -n 1) + + power_limit=" power_limit = \"$pwr_limit\";" + #echo "$power_limit" >&2 # debug + + if grep power_limit "$dts_file" >/dev/null; then + filehead=$(head -n $((pwrlim_line -2)) "$dts_file") + else + filehead=$(head -n $((pwrlim_line -1)) "$dts_file") + fi + #echo "$filehead" >&2 # debug + + filetail=$(tail -n +$((pwrlim_line +1)) "$dts_file") + #echo "$filetail" >&2 # debug + + echo "$filehead" > "$dts_file" + echo -e "$power_limit\n" >> "$dts_file" + echo "$filetail" >> "$dts_file" + + # Show result + echo -e "Updated power limit in ${Cyan}model${hwrev}.dtb${Off}" >&2 + echo " Old power_limit $pwr_lmt_old" >&2 + echo " New power_limit $pwr_limit" >&2 + fi +} + + check_modeldtb(){ # $1 is E10M20-T1 or M2D20 or M2D18 or M2D17 - if [[ -f /etc.defaults/model.dtb ]]; then - if ! grep --text "$1" /etc.defaults/model.dtb >/dev/null; then - if [[ $modelname == "DS1821+" ]] || [[ $modelname == "DS1621+" ]] ||\ - [[ $modelname == "DS1520+" ]] || [[ $modelname == "RS822rp+" ]] ||\ - [[ $modelname == "RS822+" ]] || [[ $modelname == "RS1221rp+" ]] ||\ - [[ $modelname == "RS1221+" ]]; - then - echo "" >&2 - if [[ -f ./dtb/${modelname}_model.dtb ]]; then - # Edited device tree blob exists in dtb folder with script - blob="./dtb/${modelname}_model.dtb" - elif [[ -f ./${modelname}_model.dtb ]]; then - # Edited device tree blob exists with script - blob="./${modelname}_model.dtb" - else - # Download edited device tree blob model.dtb from github - if cd /var/services/tmp; then - echo -e "Downloading ${modelname}_model.dtb" >&2 - repo=https://github.com/007revad/Synology_HDD_db - url=${repo}/raw/main/dtb/${modelname}_model.dtb - curl -LJO -m 30 --connect-timeout 5 "$url" - echo "" >&2 - cd "$scriptpath" || echo -e "${Error}ERROR${Off} Failed to cd to script location!" - else - echo -e "${Error}ERROR${Off} /var/services/tmp does not exist!" >&2 - fi + if [[ -f /etc.defaults/model.dtb ]]; then # Is device tree model + # Get syn_hw_revision, r1 or r2 etc (or just a linefeed if not a revision) + hwrevision=$(cat /proc/sys/kernel/syno_hw_revision) + + # If syno_hw_revision is r1 or r2 it's a real Synology, + # and I need to edit model_rN.dtb instead of model.dtb + if [[ $hwrevision =~ r[0-9] ]]; then + #echo "hwrevision: $hwrevision" >&2 # debug + hwrev="_$hwrevision" + fi - # Check we actually downloaded the file - if [[ -f /var/services/tmp/${modelname}_model.dtb ]]; then - blob="/var/services/tmp/${modelname}_model.dtb" - else - echo -e "${Error}ERROR${Off} Failed to download ${modelname}_model.dtb!" >&2 - fi - fi - if [[ -f $blob ]]; then - # Backup model.dtb - if ! backupdb "/etc.defaults/model.dtb"; then - echo -e "${Error}ERROR${Off} Failed to backup /etc.defaults/model.dtb!" >&2 - else - # Move and rename downloaded model.dtb - if mv "$blob" "/etc.defaults/model.dtb"; then - echo -e "Enabled ${Yellow}$1${Off} in ${Cyan}model.dtb${Off}" >&2 - else - echo -e "${Error}ERROR${Off} Failed to add support for ${1}" >&2 - fi - # Fix permissions if needed - octal=$(stat -c "%a %n" "/etc.defaults/model.dtb" | cut -d" " -f1) - if [[ ! $octal -eq 644 ]]; then - chmod 644 "/etc.defaults/model.dtb" - fi - fi - else - #echo -e "${Error}ERROR${Off} Missing file ${modelname}_model.dtb" >&2 - echo -e "${Error}ERROR${Off} Missing file $blob" >&2 + dtb_file="/etc.defaults/model${hwrev}.dtb" + dts_file="/etc.defaults/model${hwrev}.dts" + dtb2_file="/etc/model${hwrev}.dtb" + + + # NVMe power_limit + if grep power_limit /run/model.dtb >/dev/null; then + + if [ -f /sys/firmware/devicetree/base/power_limit ]; then + pwrval=$(cat /sys/firmware/devicetree/base/power_limit | cut -d"," -f1) + # Check pwrval is float or numeric + if [[ ! $pwrval =~ ^[0-9]+([.][0-9]+)?$ ]]; then + pwrval="100" fi else - echo -e "\n${Cyan}Contact 007revad to get an edited model.dtb file for your model.${Off}" >&2 + pwrval="100" + fi + + pwr_limit="" + nvme_drives=$(ls /sys/class/nvme | wc -w) + for i in $(seq 0 $((nvme_drives -1))); do + [ "$i" -eq 0 ] && pwr_limit="$pwrval" || pwr_limit="${pwr_limit},$pwrval" + done + + #echo "power_limit $pwr_limit" >&2 # debug + fi + + # Check power_limit and adapter card already in model.dtb + if grep "$pwr_limit" "$dtb_file" >/dev/null && grep "$1" "$dtb_file" >/dev/null + then + echo -e "${Yellow}$1${Off} already exists in ${Cyan}model${hwrev}.dtb${Off}" >&2 + return + fi + + + # Check if dtc exists and is executable + if [[ ! -x /usr/sbin/dtc ]]; then + if [[ -f ./bin/dtc ]]; then + cp -f ./bin/dtc /usr/sbin/dtc + chmod 755 /usr/sbin/dtc + else + download_dtc fi + fi + + # Check again if dtc exists and is executable + if [[ -x /usr/sbin/dtc ]]; then + + # Backup model.dtb + if ! backupdb "$dtb_file"; then + echo -e "${Error}ERROR${Off} Failed to backup ${dtb_file}!" >&2 + fi + + # Output model.dtb to model.dts + dtc -q -I dtb -O dts -o "$dts_file" "$dtb_file" # -q Suppress warnings + chmod 644 "$dts_file" + + # Edit model.dts + #edit_dts "E10M20-T1" # test + #edit_dts "M2D20" # test + #edit_dts "M2D18" # test + edit_dts "$1" + + [[ -n $pwr_limit ]] && set_pwr_limit + + # Compile model.dts to model.dtb + dtc -q -I dts -O dtb -o "$dtb_file" "$dts_file" # -q Suppress warnings + + # Set owner and permissions for model.dtb + chmod a+r "$dtb_file" + chown root:root "$dtb_file" + cp -pu "$dtb_file" "$dtb2_file" # Copy dtb file to /etc + + # Delete model.dts + rm "$dts_file" else - echo -e "${Yellow}$1${Off} already enabled in ${Cyan}model.dtb${Off}" >&2 + echo -e "${Error}ERROR${Off} Missing /usr/sbin/dtc or not executable!" >&2 fi fi } @@ -1334,7 +1514,7 @@ for c in "${m2cards[@]}"; do echo "" enable_card "$m2cardconf" E10M20-T1_sup_nic "E10M20-T1 NIC" enable_card "$m2cardconf" E10M20-T1_sup_nvme "E10M20-T1 NVMe" - enable_card "$m2cardconf" E10M20-T1_sup_sata "E10M20-T1 SATA" + #enable_card "$m2cardconf" E10M20-T1_sup_sata "E10M20-T1 SATA" check_modeldtb "$c" ;; M2D20) @@ -1429,7 +1609,7 @@ if [[ ${model:0:3} != "dva" ]]; then fi fi -# Optionally disable SynoMemCheck.service for DVA models +# Disable SynoMemCheck.service for DVA models if [[ ${model:0:3} == "dva" ]]; then memcheck="/usr/lib/systemd/system/SynoMemCheck.service" if [[ $(synogetkeyvalue "$memcheck" ExecStart) == "/usr/syno/bin/syno_mem_check" ]]; then @@ -1476,7 +1656,7 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo if [[ $ramtotal == "$setting" ]]; then #echo -e "\nSet max memory to $ramtotal MB." ramgb=$((ramtotal / 1024)) - echo -e "\nSet max memory to $ramtotal GB." + echo -e "\nSet max memory to $ramgb GB." else echo -e "\n${Error}ERROR${Off} Failed to change max memory!" fi @@ -1490,7 +1670,7 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo if [[ $settingbak == "$setting" ]]; then #echo -e "\nSet max memory to $ramtotal MB." ramgb=$((ramtotal / 1024)) - echo -e "\nRestored max memory to $ramtotal GB." + echo -e "\nRestored max memory to $ramgb GB." else echo -e "\n${Error}ERROR${Off} Failed to restore max memory!" fi @@ -1511,6 +1691,37 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo fi + +# Enable nvme support This probably should be before we look for NVMe drives. +# But it probably also needs a reboot after we change it. +if [[ $m2 != "no" ]]; then + # Check if nvme support is enabled + setting="$(get_key_value $synoinfo supportnvme)" + enabled="" + if [[ ! $setting ]]; then + # Add supportnvme="yes" + synosetkeyvalue "$synoinfo" supportnvme "yes" + enabled="yes" + elif [[ $setting == "no" ]]; then + # Change supportnvme="no" to "yes" + synosetkeyvalue "$synoinfo" supportnvme "yes" + enabled="yes" + elif [[ $setting == "yes" ]]; then + echo -e "\nNVMe support already enabled." + fi + + # Check if we enabled nvme support + setting="$(get_key_value $synoinfo supportnvme)" + if [[ $enabled == "yes" ]]; then + if [[ $setting == "yes" ]]; then + echo -e "\nEnabled NVMe support." + else + echo -e "\n${Error}ERROR${Off} Failed to enable NVMe support!" + fi + fi +fi + + # Enable m2 volume support if [[ $m2 != "no" ]]; then if [[ $m2exists == "yes" ]]; then From ab2bb13c80d1312dbbb7e3afe5c266ad4b5433fc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 10 Nov 2023 21:52:02 +1100 Subject: [PATCH 180/694] Update CHANGES.txt --- CHANGES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 0aa3746..fc4b478 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,7 @@ v3.2.66 - Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using DSM 7.2 Update 2, Update 3, 7.2.1 and 7.2.1 Update 1. -- Fixed bug where memory was shown in MB but with GB unit. +- Fixed bug where memory was shown in MB but with GB unit. +- Removed -i, --immutable option. v3.1.65 - Bug fix for NVMe drives with / in the model name for non-device tree Synology models. Issue #154 From 1d26a47c44fcd27b88161be412e6279eb5c82b57 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 10 Nov 2023 22:25:53 +1100 Subject: [PATCH 181/694] Update CHANGES.txt Removed 7.2.1 support --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index fc4b478..80319c5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.2.66 -- Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using DSM 7.2 Update 2, Update 3, 7.2.1 and 7.2.1 Update 1. +- Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using DSM 7.2 Update 2 and Update 3. - Fixed bug where memory was shown in MB but with GB unit. - Removed -i, --immutable option. From 07495d953b00bec753a28669c5989dd5963fa518 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 13 Nov 2023 07:02:52 +1100 Subject: [PATCH 182/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a3bccbb..c3b581e 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -749,10 +749,8 @@ fixdrivemodel(){ getdriveinfo(){ # $1 is /sys/block/sata1 etc - - # Skip USB drives usb=$(grep "$(basename -- "$1")" /proc/mounts | grep "[Uu][Ss][Bb]" | cut -d" " -f1-2) - if [[ ! $usb ]]; then + if [[ ! $usb ]]; then # Skip USB drives # Get drive model hdmodel=$(cat "$1/device/model") From 7a0f5b688792bdc1fd6f664b034573b2a8c4be19 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 15:47:36 +1100 Subject: [PATCH 183/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c3b581e..e2b8314 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -239,11 +239,11 @@ fi #echo -e "bash version: $(bash --version | head -1 | cut -d' ' -f4)\n" # debug -ding(){ +ding(){ printf \\a } -usage(){ +usage(){ cat < /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support @@ -1013,7 +1013,7 @@ fi # Don't check .db.new as new installs don't have a .db.new file -getdbtype(){ +getdbtype(){ # Detect drive db type if grep -F '{"disk_compatbility_info":' "$1" >/dev/null; then # DSM 7 drive db files start with {"disk_compatbility_info": @@ -1029,7 +1029,7 @@ getdbtype(){ } -backupdb(){ +backupdb(){ # Backup database file if needed if [[ ! -f "$1.bak" ]]; then if [[ $(basename "$1") == "synoinfo.conf" ]]; then @@ -1069,7 +1069,7 @@ done #------------------------------------------------------------------------------ # Edit db files -editcount(){ +editcount(){ # Count drives added to host db files if [[ $1 =~ .*\.db$ ]]; then db1Edits=$((db1Edits +1)) @@ -1079,7 +1079,7 @@ editcount(){ } -editdb7(){ +editdb7(){ if [[ $1 == "append" ]]; then # model not in db file #if sed -i "s/}}}/}},\"$hdmodel\":{$fwstrng$default/" "$2"; then # append if sed -i "s/}}}/}},\"${hdmodel//\//\\/}\":{$fwstrng$default/" "$2"; then # append @@ -1114,7 +1114,7 @@ editdb7(){ } -updatedb(){ +updatedb(){ hdmodel=$(printf "%s" "$1" | cut -d"," -f 1) fwrev=$(printf "%s" "$1" | cut -d"," -f 2) @@ -1239,7 +1239,7 @@ done # RS822RP+, RS822+, RS1221RP+ and RS1221+ with DSM older than 7.2 need # device tree blob file from DSM 7.2 to support M2D18 -enable_card(){ +enable_card(){ # $1 is the file # $2 is the section # $3 is the card model and mode @@ -1264,7 +1264,7 @@ enable_card(){ } -dts_m2_card(){ +dts_m2_card(){ # $1 is the card model # $2 is the dts file @@ -1338,7 +1338,7 @@ fi } -download_dtc(){ +download_dtc(){ # Download dtc from github echo "Downloading dtc" >&2 if cd /var/services/tmp; then @@ -1354,7 +1354,7 @@ download_dtc(){ } -edit_dts(){ +edit_dts(){ #set -x # debug @@ -1374,7 +1374,7 @@ edit_dts(){ } -set_pwr_limit(){ +set_pwr_limit(){ if ! grep "$pwr_limit" "$dts_file" >/dev/null; then # Save current power_limit pwr_lmt_old=$(grep power_limit "$dts_file" | cut -d\" -f2) @@ -1407,7 +1407,7 @@ set_pwr_limit(){ } -check_modeldtb(){ +check_modeldtb(){ # $1 is E10M20-T1 or M2D20 or M2D18 or M2D17 if [[ -f /etc.defaults/model.dtb ]]; then # Is device tree model # Get syn_hw_revision, r1 or r2 etc (or just a linefeed if not a revision) From d86afe7e4f9562142f0b5f0b3e070b4115aca1e6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:36:10 +1100 Subject: [PATCH 184/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e2b8314..df82798 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -745,7 +745,7 @@ fixdrivemodel(){ hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name fi -} +} getdriveinfo(){ # $1 is /sys/block/sata1 etc From 8c82cb3e90bb26130d7780dfccfb1df7bf58c909 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:37:36 +1100 Subject: [PATCH 185/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index df82798..eebd781 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -726,7 +726,8 @@ fi # Get list of installed SATA, SAS and M.2 NVMe/SATA drives, # PCIe M.2 cards and connected Expansion Units. -fixdrivemodel(){ +fixdrivemodel() +{ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') From 8a7255c9a547221fc82e50f332ba1104439ab0ea Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:38:12 +1100 Subject: [PATCH 186/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index eebd781..93d9ec9 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -726,8 +726,8 @@ fi # Get list of installed SATA, SAS and M.2 NVMe/SATA drives, # PCIe M.2 cards and connected Expansion Units. -fixdrivemodel() -{ +fixdrivemodel(){ + echo # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') From 26a20a10297e9504e3cea8407ea6480c14525ee9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:38:52 +1100 Subject: [PATCH 187/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 93d9ec9..76edd5f 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -727,7 +727,6 @@ fi # PCIe M.2 cards and connected Expansion Units. fixdrivemodel(){ - echo # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') @@ -746,7 +745,8 @@ fixdrivemodel(){ hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name fi -} +} + getdriveinfo(){ # $1 is /sys/block/sata1 etc From ab8a84b4b997ce3b9efb96e073af72e72fc1aff2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:45:19 +1100 Subject: [PATCH 188/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 76edd5f..399700a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -727,12 +727,10 @@ fi # PCIe M.2 cards and connected Expansion Units. fixdrivemodel(){ - # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi - # Brands that return "BRAND " and need "BRAND " removed. if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name From 62314ada6671e5aefd61e021a4fa2e829de96704 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:46:29 +1100 Subject: [PATCH 189/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 399700a..da6fa49 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -727,12 +727,14 @@ fi # PCIe M.2 cards and connected Expansion Units. fixdrivemodel(){ + # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi + # Brands that return "BRAND " and need "BRAND " removed. if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then - # See Smartmontools database in /var/lib/smartmontools/drivedb.db + # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name @@ -745,7 +747,6 @@ fixdrivemodel(){ fi } - getdriveinfo(){ # $1 is /sys/block/sata1 etc usb=$(grep "$(basename -- "$1")" /proc/mounts | grep "[Uu][Ss][Bb]" | cut -d" " -f1-2) From 2ba6330f6421ef94dce6eee9f97f3d97e0752521 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:47:20 +1100 Subject: [PATCH 190/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index da6fa49..bb906c5 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -726,26 +726,6 @@ fi # Get list of installed SATA, SAS and M.2 NVMe/SATA drives, # PCIe M.2 cards and connected Expansion Units. -fixdrivemodel(){ - # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 =~ MZ.*" 00Y" ]]; then - hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') - fi - - # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then - # See Smartmontools database in /var/lib/smartmontools/drivedb.db - hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name - hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name - hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name - - # Old drive brands - hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name - hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name - hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name - hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name - fi -} getdriveinfo(){ # $1 is /sys/block/sata1 etc From b5914a4fdc4612f41dd5fcc799e711bc3af263ea Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:51:23 +1100 Subject: [PATCH 191/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index bb906c5..da6fa49 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -726,6 +726,26 @@ fi # Get list of installed SATA, SAS and M.2 NVMe/SATA drives, # PCIe M.2 cards and connected Expansion Units. +fixdrivemodel(){ + # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 + if [[ $1 =~ MZ.*" 00Y" ]]; then + hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') + fi + + # Brands that return "BRAND " and need "BRAND " removed. + if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + # See Smartmontools database in /var/lib/smartmontools/drivedb.db + hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name + hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name + hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name + + # Old drive brands + hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name + hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name + hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name + hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name + fi +} getdriveinfo(){ # $1 is /sys/block/sata1 etc From d2afbaae54e4be1dff044d35d47a5f20791b1e3b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:51:49 +1100 Subject: [PATCH 192/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index da6fa49..eda7f5c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1,4 +1,28 @@ #!/usr/bin/env bash + +fixdrivemodel(){ + # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 + if [[ $1 =~ MZ.*" 00Y" ]]; then + hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') + fi + + # Brands that return "BRAND " and need "BRAND " removed. + if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + # See Smartmontools database in /var/lib/smartmontools/drivedb.db + hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name + hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name + hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name + + # Old drive brands + hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name + hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name + hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name + hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name + fi +} + + + # shellcheck disable=SC1083,SC2054,SC2121,SC2207 #-------------------------------------------------------------------------------------------------- # Github: https://github.com/007revad/Synology_HDD_db From bd38a2fa12cff4d37dcfd14eb0c4f62d91dbf7ea Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:52:45 +1100 Subject: [PATCH 193/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index eda7f5c..94fce8c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -fixdrivemodel(){ +TEST_fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') From 358d0acff1bd1cdb3987ff83a72598ff2ab837f9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:54:28 +1100 Subject: [PATCH 194/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 94fce8c..d8a96d3 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1,28 +1,4 @@ #!/usr/bin/env bash - -TEST_fixdrivemodel(){ - # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 =~ MZ.*" 00Y" ]]; then - hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') - fi - - # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then - # See Smartmontools database in /var/lib/smartmontools/drivedb.db - hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name - hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name - hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name - - # Old drive brands - hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name - hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name - hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name - hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name - fi -} - - - # shellcheck disable=SC1083,SC2054,SC2121,SC2207 #-------------------------------------------------------------------------------------------------- # Github: https://github.com/007revad/Synology_HDD_db @@ -751,19 +727,13 @@ fi # PCIe M.2 cards and connected Expansion Units. fixdrivemodel(){ - # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi - - # Brands that return "BRAND " and need "BRAND " removed. if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then - # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name - - # Old drive brands hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name From b9a0379afe0849f159b1beb43860a2f6b5728dd1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:55:19 +1100 Subject: [PATCH 195/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index d8a96d3..941f026 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -731,13 +731,7 @@ fixdrivemodel(){ hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then - hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name - hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name - hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name - hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name - hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name - hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name - hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name + echo fi } From f71e8a2674172bd5030600d24b54e580aa0d6ad0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:56:11 +1100 Subject: [PATCH 196/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 941f026..7f4d96a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,10 +728,10 @@ fi fixdrivemodel(){ if [[ $1 =~ MZ.*" 00Y" ]]; then - hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') + echo fi if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then - echo + echo fi } From f78468f447697005f7bbbdf0b8dcde1fb3e4e893 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:56:40 +1100 Subject: [PATCH 197/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 7f4d96a..932ac52 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -729,8 +729,8 @@ fi fixdrivemodel(){ if [[ $1 =~ MZ.*" 00Y" ]]; then echo - fi - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + #fi + #if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then echo fi } From 8fe84e5adb045bcbcd40d684202c6619b2dd354b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:57:28 +1100 Subject: [PATCH 198/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 932ac52..6665713 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -727,10 +727,10 @@ fi # PCIe M.2 cards and connected Expansion Units. fixdrivemodel(){ - if [[ $1 =~ MZ.*" 00Y" ]]; then + if [[ $1 ]]; then echo - #fi - #if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + fi + if [[ $1 ]]; then echo fi } From 215806eaac18fe702ee6411f358ee84fcaabf89a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:58:24 +1100 Subject: [PATCH 199/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 6665713..9ad3b43 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -727,11 +727,24 @@ fi # PCIe M.2 cards and connected Expansion Units. fixdrivemodel(){ + # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 +# if [[ $1 =~ MZ.*" 00Y" ]]; then if [[ $1 ]]; then - echo + hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi - if [[ $1 ]]; then - echo + + # Brands that return "BRAND " and need "BRAND " removed. + if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + # See Smartmontools database in /var/lib/smartmontools/drivedb.db + hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name + hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name + hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name + + # Old drive brands + hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name + hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name + hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name + hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name fi } From d28d28802a5f451ff6480a48dcf33f5e95b86f1e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 18:59:38 +1100 Subject: [PATCH 200/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 9ad3b43..d0bc36c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,13 +728,12 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 -# if [[ $1 =~ MZ.*" 00Y" ]]; then - if [[ $1 ]]; then + if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + if [[ $1 ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From 55de717f8365748941d87bbcabf14437a80415ea Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:00:10 +1100 Subject: [PATCH 201/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index d0bc36c..59f0559 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,7 +728,7 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 =~ MZ.*" 00Y" ]]; then + if [[ $1 ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi From 5f065e4fbc38e2c514976fb72b1a9ca73514df2b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:00:43 +1100 Subject: [PATCH 202/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 59f0559..47c4503 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -733,7 +733,7 @@ fixdrivemodel(){ fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 ]]; then + if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From 0cb726f168d298d831bb5b8b8c938ec09991cf92 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:01:24 +1100 Subject: [PATCH 203/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 47c4503..90394e6 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,12 +728,12 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 ]]; then + if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + if [[ $1 ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name @@ -745,6 +745,7 @@ fixdrivemodel(){ hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name fi + fi } getdriveinfo(){ From a1a8590912c6e1527a8afbc9f47a11258058420b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:01:55 +1100 Subject: [PATCH 204/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 90394e6..d0bc36c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -745,7 +745,6 @@ fixdrivemodel(){ hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name fi - fi } getdriveinfo(){ From 74c465e1a9cd18cfee9a14125a80ff3a188bac61 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:02:32 +1100 Subject: [PATCH 205/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index d0bc36c..47c4503 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,12 +728,12 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 =~ MZ.*" 00Y" ]]; then + if [[ $1 ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 ]]; then + if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From 40507530b8be0b7c8ae5b3ba92c8eb620c85f522 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:03:03 +1100 Subject: [PATCH 206/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 47c4503..59f0559 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -733,7 +733,7 @@ fixdrivemodel(){ fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + if [[ $1 ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From 558b3ad2446332109e98d83024c00ec721f43af0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:08:24 +1100 Subject: [PATCH 207/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 59f0559..0d8cd0e 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,12 +728,14 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 ]]; then + if [[ $1 =~ MZ.*" 00Y" ]]; + then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 ]]; then + if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; + then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From e2c7c7eb3b14ac38b745590fea77567f8e28714b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:08:55 +1100 Subject: [PATCH 208/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 0d8cd0e..6554a50 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,14 +728,12 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 =~ MZ.*" 00Y" ]]; - then + if [[ $1 =~ MZ.*" 00Y" ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; - then + if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From c2bdf8b46720ec1be44ef8ab149496587196e144 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:11:06 +1100 Subject: [PATCH 209/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 6554a50..5a07c32 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,12 +728,12 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 =~ MZ.*" 00Y" ]]; then + if [[ $1 =~ MZ.* 00Y ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}" ".* ]]; then + if [[ $1 =~ ^[A-Za-z]{1,7} .* ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From 707c82f006053e75420c9a7e53ff0e17a7332d30 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:20:53 +1100 Subject: [PATCH 210/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5a07c32..263ea4a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -728,12 +728,12 @@ fi fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 - if [[ $1 =~ MZ.* 00Y ]]; then + if [[ $1 =~ MZ.*' 00Y' ]]; then hdmodel=$(printf "%s" "$1" | sed 's/ 00Y.*//') fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7} .* ]]; then + if [[ $1 =~ ^[A-Za-z]{1,7}' '.* ]]; then # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name From f39eac58e83034495eb5364da609487ab916ce85 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 18 Nov 2023 08:05:54 +1100 Subject: [PATCH 211/694] Create Depreciated.txt These model.dtb files are no longer needed. --- dtb/Depreciated.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 dtb/Depreciated.txt diff --git a/dtb/Depreciated.txt b/dtb/Depreciated.txt new file mode 100644 index 0000000..4bbd93a --- /dev/null +++ b/dtb/Depreciated.txt @@ -0,0 +1 @@ +These model.dtb files are no longer needed. From 0d0ae9bf83e4dda83741cbfc171d833850f344a2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 18 Nov 2023 08:06:09 +1100 Subject: [PATCH 212/694] Rename Depreciated.txt to _Depreciated.txt --- dtb/{Depreciated.txt => _Depreciated.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dtb/{Depreciated.txt => _Depreciated.txt} (100%) diff --git a/dtb/Depreciated.txt b/dtb/_Depreciated.txt similarity index 100% rename from dtb/Depreciated.txt rename to dtb/_Depreciated.txt From 30808c43a3209c81093a415e7a19d9eb4561cf92 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 18 Nov 2023 08:06:42 +1100 Subject: [PATCH 213/694] Rename _Depreciated.txt to All_Depreciated.txt --- dtb/{_Depreciated.txt => All_Depreciated.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dtb/{_Depreciated.txt => All_Depreciated.txt} (100%) diff --git a/dtb/_Depreciated.txt b/dtb/All_Depreciated.txt similarity index 100% rename from dtb/_Depreciated.txt rename to dtb/All_Depreciated.txt From dc8d0283bf3191417761b043da84099df69969d2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 20 Nov 2023 00:32:40 +1100 Subject: [PATCH 214/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 63af5f6..c4f6b49 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ ### Running the script via SSH Thank you to the following PayPal donators and GitHub sponsors +- Mir Hekmat - Andrew Tapp - Peter Weißflog - Mir Hekmat From 85d4644eecf5e94dbb00083015c853170bcc1c51 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 21 Nov 2023 05:04:16 +1100 Subject: [PATCH 215/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c4f6b49..750d2b8 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ ### Running the script via SSH Thank you to the following PayPal donators and GitHub sponsors +- bcollins - Mir Hekmat - Andrew Tapp - Peter Weißflog From 25897a9711e822489c92e3532834a3cd42ced3e6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 21 Nov 2023 11:18:23 +1100 Subject: [PATCH 216/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 750d2b8..f3ceace 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ ### Running the script via SSH Thank you to the following PayPal donators and GitHub sponsors +- Angel Scandinavia - bcollins - Mir Hekmat - Andrew Tapp From b97d1095b1f4fe0667c5f999bac62c03b94191f5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:11:09 +1100 Subject: [PATCH 217/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f3ceace..c3f61e1 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ ### Running the script via SSH Thank you to the following PayPal donators and GitHub sponsors +- Kleissner Investments - Angel Scandinavia - bcollins - Mir Hekmat From a8254f290e6674f2391af647ed00528a6e7865f6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 07:17:18 +1100 Subject: [PATCH 218/694] Add files via upload --- bin/bc | Bin 0 -> 84960 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/bc diff --git a/bin/bc b/bin/bc new file mode 100644 index 0000000000000000000000000000000000000000..64b3cc9202030b52441e6e1785753434fdff5917 GIT binary patch literal 84960 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 literal 0 HcmV?d00001 From 37ff5b603722eb0eef1c589cf0a5caa1bd0b21af Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 07:17:46 +1100 Subject: [PATCH 219/694] Add files via upload --- bin/bc | Bin 0 -> 84960 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/bc diff --git a/bin/bc b/bin/bc new file mode 100644 index 0000000000000000000000000000000000000000..64b3cc9202030b52441e6e1785753434fdff5917 GIT binary patch literal 84960 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 literal 0 HcmV?d00001 From 11cf742117843b204ff94559dd0605fec314c82e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 07:46:16 +1100 Subject: [PATCH 220/694] Add files via upload --- bin/64570_synonvme | Bin 0 -> 17241 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/64570_synonvme diff --git a/bin/64570_synonvme b/bin/64570_synonvme new file mode 100644 index 0000000000000000000000000000000000000000..2dc63b55f2cfc20dc364bbc39d2b16105db24799 GIT binary patch literal 17241 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 Date: Thu, 23 Nov 2023 07:46:43 +1100 Subject: [PATCH 221/694] Create tmp.txt --- lib/tmp.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/tmp.txt diff --git a/lib/tmp.txt b/lib/tmp.txt new file mode 100644 index 0000000..2d030d7 --- /dev/null +++ b/lib/tmp.txt @@ -0,0 +1 @@ +delete me From 644c444b4ed2944941f5b937e78bc3cf77c88685 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 07:47:00 +1100 Subject: [PATCH 222/694] Add files via upload --- lib/64570_libsynonvme.so.1 | Bin 0 -> 54154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/64570_libsynonvme.so.1 diff --git a/lib/64570_libsynonvme.so.1 b/lib/64570_libsynonvme.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..1f97be2d5b43e3d68c45f780d3857d597862d842 GIT binary patch literal 54154 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 fG<~gV|683Oa+k^ Date: Thu, 23 Nov 2023 07:47:19 +1100 Subject: [PATCH 223/694] Delete lib/tmp.txt --- lib/tmp.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 lib/tmp.txt diff --git a/lib/tmp.txt b/lib/tmp.txt deleted file mode 100644 index 2d030d7..0000000 --- a/lib/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -delete me From 598ad7a622e36525504f0f9296bcf5d8dc0bca1b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 07:47:45 +1100 Subject: [PATCH 224/694] Delete bin/dtbpatch --- bin/dtbpatch | Bin 130840 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/dtbpatch diff --git a/bin/dtbpatch b/bin/dtbpatch deleted file mode 100644 index 0f314f2ae480c4c43c8bfcf2cfe2d7c1b08794aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130840 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žLD_7J0lT=~=9shO7KEq~1#+ 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 W=u~`2yZ@c9>HUXUfq8@XHTZuF*iQlg From 4c12b1feddf97aab72a92c0197213eb49c0a0aea Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:51:12 +1100 Subject: [PATCH 225/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c3f61e1..755aaea 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ ### Running the script via SSH Thank you to the following PayPal donators and GitHub sponsors +- Neil Tapp - Kleissner Investments - Angel Scandinavia - bcollins From 3281870dd6a1e7e0bbf923be658b1a7885354ade Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:52:01 +1100 Subject: [PATCH 226/694] Update README.md --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 208bea0..085dec6 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,19 @@ ### Running the script via SSH Thank you to the following paypal donators and GitHub sponsors +- Neil Tapp +- Kleissner Investments +- Angel Scandinavia +- bcollins +- Mir Hekmat +- Andrew Tapp +- Peter Weißflog +- Mir Hekmat +- Joseph Skup +- Dirk Kurfuerst +- Gareth Locke +- Rory de Ruijter +- Nathan O'Farrell - Harry Bos - Mark-Philipp Wolfger - Filip Kraus From d8f178701060ab7994fd09069bed9f5f852c44a0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 21:17:59 +1100 Subject: [PATCH 227/694] Update README.md --- README.md | 54 ++++++++++++++---------------------------------------- 1 file changed, 14 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 755aaea..c01f41b 100644 --- a/README.md +++ b/README.md @@ -105,43 +105,17 @@ ### Running the script via SSH **Donators** -Thank you to the following PayPal donators and GitHub sponsors - -- Neil Tapp -- Kleissner Investments -- Angel Scandinavia -- bcollins -- Mir Hekmat -- Andrew Tapp -- Peter Weißflog -- Mir Hekmat -- Joseph Skup -- Dirk Kurfuerst -- Gareth Locke -- Rory de Ruijter -- Nathan O'Farrell -- Harry Bos -- Mark-Philipp Wolfger -- Filip Kraus -- John Pham -- Alejandro Bribian Rix -- Daniel Hofer -- Bogdan-Stefan Rotariu -- Kevin Boatswain -- anschluss-org -- Yemeth -- Patrick Thomas -- Manuel Marquez Corral -- Evrard Franck -- Chad Palmer -- 侯​永政 -- CHEN​HAN-YING -- Eric Wells -- Massimiliano Pesce -- JasonEMartin -- Gerrit Klussmann -- Alain Aube -- Robert Kraut -- Charles-Edouard Poisnel -- Oliver Busch -- And the anonymous donors and private sponsors +Thank you to the following PayPal donators, GitHub sponsors and hardware donators + +| | | | | +|--------------------|--------------------|----------------------|----------------------| +| Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | +| bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | +| Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | +| Rory de Ruijter | Nathan O'Farrell | Harry Bos | Mark-Philipp Wolfger | +| Filip Kraus | John Pham | Alejandro Bribian Rix | Daniel Hofer | +| Bogdan-Stefan Rotariu | Kevin Boatswain | anschluss-org | Yemeth | +| Patrick Thomas | Manuel Marquez Corral | Evrard Franck | Chad Palmer | +| 侯​永政 | CHEN​HAN-YING | Eric Wells | Massimiliano Pesce | +| JasonEMartin | Gerrit Klussmann | Alain Aube | Robert Kraut | +| Charles-Edouard Poisnel | Oliver Busch | anonymous donors | private sponsors | From e6bccd05ba3d5bbd7f81b4cbbf7f6840b0c51a9e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 21:18:41 +1100 Subject: [PATCH 228/694] Update README.md --- README.md | 50 ++++++++++++-------------------------------------- 1 file changed, 12 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 085dec6..b51b269 100644 --- a/README.md +++ b/README.md @@ -107,41 +107,15 @@ ### Running the script via SSH Thank you to the following paypal donators and GitHub sponsors -- Neil Tapp -- Kleissner Investments -- Angel Scandinavia -- bcollins -- Mir Hekmat -- Andrew Tapp -- Peter Weißflog -- Mir Hekmat -- Joseph Skup -- Dirk Kurfuerst -- Gareth Locke -- Rory de Ruijter -- Nathan O'Farrell -- Harry Bos -- Mark-Philipp Wolfger -- Filip Kraus -- John Pham -- Alejandro Bribian Rix -- Daniel Hofer -- Bogdan-Stefan Rotariu -- Kevin Boatswain -- anschluss-org -- Yemeth -- Patrick Thomas -- Manuel Marquez Corral -- Evrard Franck -- Chad Palmer -- 侯​永政 -- CHEN​HAN-YING -- Eric Wells -- Massimiliano Pesce -- JasonEMartin -- Gerrit Klussmann -- Alain Aube -- Robert Kraut -- Charles-Edouard Poisnel -- Oliver Busch -- And the anonymous donors and private sponsors +| | | | | +|--------------------|--------------------|----------------------|----------------------| +| Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | +| bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | +| Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | +| Rory de Ruijter | Nathan O'Farrell | Harry Bos | Mark-Philipp Wolfger | +| Filip Kraus | John Pham | Alejandro Bribian Rix | Daniel Hofer | +| Bogdan-Stefan Rotariu | Kevin Boatswain | anschluss-org | Yemeth | +| Patrick Thomas | Manuel Marquez Corral | Evrard Franck | Chad Palmer | +| 侯​永政 | CHEN​HAN-YING | Eric Wells | Massimiliano Pesce | +| JasonEMartin | Gerrit Klussmann | Alain Aube | Robert Kraut | +| Charles-Edouard Poisnel | Oliver Busch | anonymous donors | private sponsors | From 85c2ae442e2b88cd12f8a5d04826b7d00410b0ee Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Nov 2023 21:20:22 +1100 Subject: [PATCH 229/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b51b269..c01f41b 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ ### Running the script via SSH **Donators** -Thank you to the following paypal donators and GitHub sponsors +Thank you to the following PayPal donators, GitHub sponsors and hardware donators | | | | | |--------------------|--------------------|----------------------|----------------------| From b9383b838adbb32cf7821ff7745716608141995f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 25 Nov 2023 16:20:22 +1100 Subject: [PATCH 230/694] Update syno_hdd_db.sh v3.2.67 - Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree, - and are using DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. - Now edits model.dtb instead of downloading a pre-edited version. - Fix for Unknown vendor causing "Unsupported firmware version" warning. Issue #161 - Now supports NVMe drives that show as Unknown brand in storage manager: Issue #161 - ADATA, Corsair, Gigabyte, HS/MAXIO, MSI, Netac, Phison, PNY - SK Hynix, Solidigm, SPCC/Lexar, TEAMGROUP, UMIS, ZHITAI - Fixed bug where memory was shown in MB but with GB unit. --- syno_hdd_db.sh | 505 ++++++++++++++++--------------------------------- 1 file changed, 162 insertions(+), 343 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 263ea4a..aff7000 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -4,12 +4,6 @@ # Github: https://github.com/007revad/Synology_HDD_db # Script verified at https://www.shellcheck.net/ # -# Easiest solution: -# Edit /etc.defaults/synoinfo.conf and change support_disk_compatibility="yes" to "no" and reboot. -# Then all drives can be used without error messages. -# -# But lets do this the proper way by adding our drive models to the appropriate .db file. -# # To run in task manager as root (manually or scheduled): # /volume1/scripts/syno_hdd_db.sh # replace /volume1/scripts/ with path to script # @@ -21,212 +15,22 @@ # sudo -i /volume1/scripts/syno_hdd_db.sh -force -showedits #-------------------------------------------------------------------------------------------------- -# TODO -# 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. -# -# Solve issue of --restore option restoring files that were backed up with older DSM version. -# Change how synoinfo.conf is backed up and restored to prevent issue #73 - -# DONE +# CHANGES # Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree, -# and are using DSM 7.2 Update 2, Update 3, 7.2.1 and 7.2.1 Update 1. -# -# Fixed bug where memory was shown in MB but with GB unit. -# -# -# Bug fix for script not updating itself if .sh file had been renamed. -# -# Bug fix for missing executable permissions if .sh file had been renamed. -# -# Bug fix to prevent update loop if script's .tar.gz file already exists in /tmp. -# -# Bug fix to prevent update failing if script's temp folder already exists in /tmp. -# -# Now only copies CHANGES.txt to script location if script is located on a volume, -# to prevent putting CHANGES.txt on system partition (/usr/bin, /usr/sbin, /root etc.) -# -# Added -e --email option to disable coloured output to make task scheduler emails easier to read. -# -# -# Added support to disable unsupported memory warnings on DVA models. -# -# Fixed bug where newly connected expansion units weren't found until up to 24 hours later. #124 -# -# Added enabling E10M20-T1, M2D20 and M2D18 for DS1821+, DS1621+ and DS1520+. -# Added enabling M2D18 for RS822RP+, RS822+, RS1221RP+ and RS1221+ with older DSM version. -# -# Fixed enabling E10M20-T1, M2D20 and M2D18 cards in models that don't officially support them. -# -# Enable NVMe drive use for models that do not have NVMe drives enabled. -# -# Fixed bugs where the calculated amount of installed memory could be incorrect: -# - If last memory socket was empty an invalid unit of bytes could be used. Issue #106 -# - When dmidecode returned MB for one ram module and GB for another ram module. Issue #107 -# -# Fixed bug displaying the max memory setting if total installed memory was less than the max memory. Issue #107 -# -# Fixed bug where sata1 drive firmware version was wrong if there was a sata10 drive. -# -# Minor bug fix for checking amount of installed memory. -# -# Now enables any installed Synology M.2 PCIe cards for models that don't officially support them. -# -# Added -i, --immutable option to enable immutable snapshots on models older than '20 series running DSM 7.2. -# -# Changed help to show that -r, --ram also sets max memory to the amount of installed memory. -# -# Changed the "No M.2 cards found" to "No M.2 PCIe cards found" to make it clearer. -# -# Added "You may need to reboot" message when NVMe drives were detected. -# -# Fixed HDD/SSD firmware versions always being 4 characters long (for DSM 7.2 and 6.2.4 Update 7). -# -# Fixed detecting the amount of installed memory (for DSM 7.2 which now reports GB instead of MB). -# -# Fixed USB drives sometimes being detected as internal drives (for DSM 7.2). -# -# Fixed error if /run/synostorage/disks/nvme0n1/m2_pool_support doesn't exist yet (for DSM 7.2). -# -# Fixed drive db update still being disabled in /etc/synoinfo.conf after script run without -n or --noupdate option. -# -# Fixed drive db update still being disabled in /etc/synoinfo.conf after script run with --restore option. -# -# Fixed permissions on restored files being incorrect after script run with --restore option. -# -# Fixed permissions on backup files. -# -# Now skips checking the amount of installed memory in DSM 6 (because it was never working). -# -# Now the script reloads itself after updating. -# -# Added --autoupdate=AGE option to auto update synology_hdd_db x days after new version released. -# Autoupdate logs update success or errors to DSM system log. -# -# Added -w, --wdda option to disable WDDA -# https://kb.synology.com/en-us/DSM/tutorial/Which_Synology_NAS_supports_WDDA -# https://www.youtube.com/watch?v=cLGi8sPLkLY -# https://community.synology.com/enu/forum/1/post/159537 -# -# Added --restore info to --help -# -# Updated restore option to download the latest db files from Synology -# -# Now warns you if you try to run it in sh with "sh scriptname.sh" -# -# Fixed DSM 6 bug where the drives were being duplicated in the .db files each time the script was run. -# -# Fixed DSM 6 bug where the .db files were being duplicated as .dbr each time the db files were edited. -# -# Fixed bug where expansion units ending in RP or II were not detected. -# -# Added a --restore option to undo all changes. -# -# Now looks for and edits both v7 and non-v7 db files to solve issue #11 for RS '21 models running DSM 6.2.4. -# This will also ensure the script still works if: -# Synology append different numbers to the db file names in DSM 8 etc. -# The detected NAS model name does not match the .db files' model name. -# -# Now backs up the .db.new files (as well as the .db files). -# -# Now shows max memory in GB instead of MB. -# -# Now shows status of "Support disk compatibility" setting even if it wasn't changed. -# -# Now shows status of "Support memory compatibility" setting even if it wasn't changed. -# -# Improved shell output when editing max memory setting. -# -# Changed method of checking if drive is a USB drive to prevent ignoring internal drives on RS models. -# -# Changed to not run "synostgdisk --check-all-disks-compatibility" in DSM 6.2.3 (which has no synostgdisk). -# -# Now edits max supported memory to match the amount of memory installed, if greater than the current max memory setting. -# -# Now allows creating M.2 storage pool and volume all from Storage Manager -# -# Now always shows your drive entries in the host db file if -s or --showedits used, -# instead of only db file was edited during that run. -# -# Changed to show usage if invalid long option used instead of continuing. -# -# Fixed bug inserting firmware version for already existing model. -# -# Changed to add drives' firmware version to the db files (to support data deduplication). -# See https://github.com/007revad/Synology_enable_Deduplication -# -# Changed to be able to edit existing drive entries in the db files to add the firmware version. -# -# Now supports editing db files that don't currently have any drives listed. -# -# Fixed bug where the --noupdate option was coded as --nodbupdate. Now either will work. -# -# Fixed bug in re-enable drive db updates -# -# Fixed "download new version" failing if script was run via symlink or ./ -# -# Changed to show if no M.2 cards were found, if M.2 drives were found. -# -# Changed latest version check to download to /tmp and extract files to the script's location, -# replacing the existing .sh and readme.txt files. -# -# Added a timeouts when checking for newer script version in case github is down or slow. -# -# Added option to disable incompatible memory notifications. -# -# Now finds your expansion units' model numbers and adds your drives to their db files. -# -# Now adds your M.2 drives to your M.2 PCI cards db files (M2Dxx and E10M20-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 removal of " 00Y" from end of Samsung/Lenovo SSDs to fix issue #13. -# -# Fixed bug where removable drives were being detected and added to drive database. -# -# Fixed bug where "M.2 volume support already enabled" message appeared when NAS had no M.2 drives. -# -# Added check that M.2 volume support is enabled (on supported models). -# -# Added support for M.2 SATA drives. -# -# Can now skip processing M.2 drives by running script with the -m2 flag. -# -# Changed method of getting drive and firmware version so script is faster and easier to maintain. -# - No longer using smartctl or hdparm. -# -# Changed SAS drive firmware version detection to support SAS drives that hdparm doesn't work with. -# -# Removed error message and aborting if *.db.new not found (clean DSM installs don't have a *.db.new). -# -# Force DSM to check disk compatibility so reboot not needed (DSM 6 may still need a reboot). -# -# Fixed DSM 6 issue when DSM 6 has the old db file format. -# -# Add support for SAS drives. -# -# Get HDD/SSD/SAS drive model number with smartctl instead of hdparm. +# and are using DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. # -# Check if there is a newer script version available. +# Now edits model.dtb instead of downloading a pre-edited version. # -# Add support for NVMe drives. +# Fix for Unknown vendor causing "Unsupported firmware version" warning. Issue #161 # -# Prevent DSM auto updating the drive database. +# Now supports NVMe drives that show as Unknown brand in storage manager: Issue #161 +# - ADATA, Corsair, Gigabyte, HS/MAXIO, MSI, Netac, Phison, PNY +# - SK Hynix, Solidigm, SPCC/Lexar, TEAMGROUP, UMIS, ZHITAI # -# Optionally disable "support_disk_compatibility". +# Fixed bug where memory was shown in MB but with GB unit. -scriptver="v3.2.66" +scriptver="v3.2.67" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -310,9 +114,6 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ -r|--ram) # Disable "support_memory_compatibility" ram=yes ;; - -i|--immutable) # Enable "support_worm" (immutable snapshots) - immutable=yes # Does not work for models without support_worm=yes already - ;; -w|--wdda) # Disable "support_memory_compatibility" wdda=no ;; @@ -391,11 +192,6 @@ if [[ $dsm -gt "6" ]]; then fi # Get Synology model - -# This doesn't work for drives migrated from different model -#model=$(find /var/lib/disk-compatibility -regextype egrep -regex ".*host(_v7)?\.db$" |\ -# cut -d"/" -f5 | cut -d"_" -f1 | uniq) - model=$(cat /proc/sys/kernel/syno_hw_version) modelname="$model" @@ -430,6 +226,13 @@ elif [[ $model =~ '-j'$ ]]; then # GitHub issue #2 echo -e "\nUsing model: $model" fi + +# Get StorageManager version +storagemgrver=$(synopkg version StorageManager) +# Show StorageManager version +if [[ $storagemgrver ]]; then echo -e "StorageManager $storagemgrver\n"; fi + + # Show options used echo "Using options: ${args[*]}" @@ -726,6 +529,68 @@ fi # Get list of installed SATA, SAS and M.2 NVMe/SATA drives, # PCIe M.2 cards and connected Expansion Units. +vendor_from_id(){ + # Vendor ids missing in /usr/syno/etc.defaults/pci_vendor_ids.conf + # $1 is vendor id + # https://devicehunt.com/all-pci-vendors + vendor="" + case "${1,,}" in + 0x10ec) vendor=TEAMGROUP ;; + 0x025e) vendor=Solidigm ;; + 0x1458) vendor=Gigabyte ;; + 0x1462) vendor=MSI ;; + 0x196e) vendor=PNY ;; + 0x1987) vendor=Phison ;; + 0x1b1c) vendor=Corsair ;; + 0x1c5c) vendor="SK Hynix" ;; + 0x1cc4) vendor=UMIS ;; + 0x1cfa) vendor=Corsair ;; # Memory only? + 0x1d97) vendor=SPCC/Lexar ;; # 2 brands with same vid + 0x1dbe) vendor=ADATA ;; + 0x1e49) vendor=ZHITAI ;; + 0x1e4b) vendor=HS/MAXIO ;; # 2 brands with same vid + 0x1f40) vendor=Netac ;; + *) + echo -e "\n${Error}WARNING{OFF} No vendor found for id $1" >&2 + echo -e "Contact 007revad to get your drive added.\n" >&2 + ;; + esac +} + +set_vendor(){ + # Add missing vendors to /usr/syno/etc.defaults/pci_vendor_ids.conf + if [[ $vendor ]]; then + if ! grep "$vid" "$vidfile" >/dev/null; then + synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" + val=$(synogetkeyvalue "$vidfile" "${vid,,}") + if [[ $val == "${vendor}" ]]; then + echo "Added $vendor to pci_vendor_ids" >&2 + else + echo "Failed to add $vendor to pci_vendor_ids!" >&2 + fi + fi + if ! grep "$vid" "$vidfile2" >/dev/null; then + synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" + fi + fi +} + +get_vid(){ + # $1 is /dev/nvme0n1 etc + if [[ $1 ]]; then + vid=$(nvme id-ctrl "$1" | grep -E ^vid | awk '{print $NF}') + if [[ $vid ]]; then + val=$(synogetkeyvalue "$vidfile" "${vid,,}") + if [[ -z $val ]]; then + vendor_from_id "$vid" && set_vendor + fi + fi + fi +} + +vidfile="/usr/syno/etc.defaults/pci_vendor_ids.conf" +vidfile2="/usr/syno/etc/pci_vendor_ids.conf" + fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*' 00Y' ]]; then @@ -733,8 +598,8 @@ fixdrivemodel(){ fi # Brands that return "BRAND " and need "BRAND " removed. - if [[ $1 =~ ^[A-Za-z]{1,7}' '.* ]]; then - # See Smartmontools database in /var/lib/smartmontools/drivedb.db + if [[ $1 =~ ^[A-Za-z]{3,7}' '.* ]]; then + # See Smartmontools database in /var/lib/smartmontools/drivedb.db hdmodel=${hdmodel#"WDC "} # Remove "WDC " from start of model name hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name @@ -743,14 +608,18 @@ fixdrivemodel(){ hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name + elif [[ $1 =~ ^'APPLE HDD '.* ]]; then + # Old drive brands hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name fi } getdriveinfo(){ # $1 is /sys/block/sata1 etc + + # Skip USB drives usb=$(grep "$(basename -- "$1")" /proc/mounts | grep "[Uu][Ss][Bb]" | cut -d" " -f1-2) - if [[ ! $usb ]]; then # Skip USB drives + if [[ ! $usb ]]; then # Get drive model hdmodel=$(cat "$1/device/model") @@ -821,6 +690,7 @@ getcardmodel(){ } m2_pool_support(){ + # M.2 drives in M2 adaptor card do not support storage pools if [[ $isinm2card != "yes" ]]; then if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 echo 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support @@ -846,6 +716,11 @@ for d in /sys/block/*; do nvme*) if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then if [[ $m2 != "no" ]]; then + # Fix unknown vendor id if needed. GitHub issue #161 + # "Failed to get disk vendor" from synonvme --vendor-get + # causes "Unsupported firmware version" warning. + get_vid "/dev/$(basename -- "${d}")" + getm2info "$d" "nvme" # Get M.2 card model if in M.2 card getcardmodel "/dev/$(basename -- "${d}")" @@ -1139,17 +1014,18 @@ updatedb(){ default="$default":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true}]}}} if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then - # Replace "disk_compatbility_info":{} with "disk_compatbility_info":{"WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}}} + # Replace "disk_compatbility_info":{} with + # "disk_compatbility_info":{"WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}}} #echo "Edit empty db file:" # debug editdb7 "empty" "$2" elif grep '"'"$hdmodel"'":' "$2" >/dev/null; then - # Replace "WD40PURX-64GVNY0":{ with "WD40PURX-64GVNY0":{"80.00A80":{ ... }}}, + # Replace "WD40PURX-64GVNY0":{ with "WD40PURX-64GVNY0":{"80.00A80":{ ... }}}, #echo "Insert firmware version:" # debug editdb7 "insert" "$2" else - # Add "WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}} + # Add "WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}} #echo "Append drive and firmware:" # debug editdb7 "append" "$2" fi @@ -1168,7 +1044,8 @@ updatedb(){ # example: # {"success":1,"list":[{"model":"WD60EFRX-68MYMN1","firmware":"82.00A82","rec_intvl":[1]}, #if sed -i "s/$startstring/$startstring$string/" "$2"; then - if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then + #if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then + if sed -i "s/$startstring/$startstring${string//\//\\/}/" "$2"; then echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" else ding @@ -1234,11 +1111,6 @@ done #------------------------------------------------------------------------------ # Enable unsupported Synology M2 PCIe cards -# DS1821+, DS1621+ and DS1520+ also need edited device tree blob file -# /etc.defaults/model.dtb -# RS822RP+, RS822+, RS1221RP+ and RS1221+ with DSM older than 7.2 need -# device tree blob file from DSM 7.2 to support M2D18 - enable_card(){ # $1 is the file # $2 is the section @@ -1278,6 +1150,7 @@ if [[ $1 == E10M20-T1 ]] || [[ $1 == M2D20 ]]; then $1 { compatible = "Synology"; model = "synology_${1,,}"; + power_limit = "14.85,14.85"; m2_card@1 { @@ -1304,6 +1177,7 @@ elif [[ $1 == M2D18 ]]; then M2D18 { compatible = "Synology"; model = "synology_m2d18"; + power_limit = "9.9,9.9"; m2_card@1 { @@ -1338,26 +1212,58 @@ fi } -download_dtc(){ - # Download dtc from github - echo "Downloading dtc" >&2 - if cd /var/services/tmp; then - url="https://github.com/${repo}/raw/main/bin/dtc" - #if curl -kLJO -m 30 --connect-timeout 5 "$url"; then - if curl -kLO -m 30 --connect-timeout 5 "$url"; then - mv /var/services/tmp/dtc /usr/sbin/dtc - chmod 755 /usr/sbin/dtc - fi +install_binfile(){ + # install_binfile + # example: + # file_url="https://raw.githubusercontent.com/${repo}/main/bin/dtc" + # install_binfile dtc "$file_url" /usr/bin/bc a+x bin/dtc + + if [[ -f "${scriptpath}/$5" ]]; then + binfile="${scriptpath}/$5" + echo -e "\nInstalling ${1}" + elif [[ -f "${scriptpath}/$(basename -- "$5")" ]]; then + binfile="${scriptpath}/$(basename -- "$5")" + echo -e "\nInstalling ${1}" else - echo -e "${Error}ERROR${Off} Failed to cd to /var/services/tmp!" >&2 - fi -} + # Download binfile + if [[ $autoupdate == "yes" ]]; then + reply=y + else + echo -e "\nNeed to download ${1}" + echo -e "${Cyan}Do you want to download ${1}?${Off} [y/n]" + read -r -t 30 reply + fi + if [[ ${reply,,} == "y" ]]; then + echo -e "\nDownloading ${1}" + if ! curl -kLO -m 30 --connect-timeout 5 "$2" -o "/tmp/$1"; then + echo -e "${Error}ERROR${Off} Failed to download ${1}!" + return + fi + binfile="/tmp/${1}" + printf "Downloaded md5: " + md5sum -b "$binfile" | awk '{print $1}' -edit_dts(){ + md5=$(md5sum -b "$binfile" | awk '{print $1}') + if [[ $md5 != "$6" ]]; then + echo "Expected md5: $6" + echo -e "${Error}ERROR${Off} Downloaded $1 md5 hash does not match!" + exit 1 + fi + else + echo -e "${Error}ERROR${Off} Cannot add M2 PCIe card without ${1}!" + exit 1 + fi + fi -#set -x # debug + # Set binfile executable + chmod "$4" "$binfile" + # Copy binfile to destination + cp -p "$binfile" "$3" +} + +edit_dts(){ # $1 is M.2 card model # Edit model.dts if needed if ! grep "$1" "$dtb_file" >/dev/null; then @@ -1368,42 +1274,6 @@ edit_dts(){ #echo "$1 already exists in model${hwrev}.dtb" >&2 # echo -e "${Yellow}$1${Off} already exists in ${Cyan}model${hwrev}.dtb${Off}" >&2 fi - -#set +x # debug - -} - - -set_pwr_limit(){ - if ! grep "$pwr_limit" "$dts_file" >/dev/null; then - # Save current power_limit - pwr_lmt_old=$(grep power_limit "$dts_file" | cut -d\" -f2) - - # Find line to insert power_limit - pwrlim_line=$(awk '! NF { print NR }' "$dts_file" | head -n 2 | tail -n 1) - - power_limit=" power_limit = \"$pwr_limit\";" - #echo "$power_limit" >&2 # debug - - if grep power_limit "$dts_file" >/dev/null; then - filehead=$(head -n $((pwrlim_line -2)) "$dts_file") - else - filehead=$(head -n $((pwrlim_line -1)) "$dts_file") - fi - #echo "$filehead" >&2 # debug - - filetail=$(tail -n +$((pwrlim_line +1)) "$dts_file") - #echo "$filetail" >&2 # debug - - echo "$filehead" > "$dts_file" - echo -e "$power_limit\n" >> "$dts_file" - echo "$filetail" >> "$dts_file" - - # Show result - echo -e "Updated power limit in ${Cyan}model${hwrev}.dtb${Off}" >&2 - echo " Old power_limit $pwr_lmt_old" >&2 - echo " New power_limit $pwr_limit" >&2 - fi } @@ -1416,54 +1286,21 @@ check_modeldtb(){ # If syno_hw_revision is r1 or r2 it's a real Synology, # and I need to edit model_rN.dtb instead of model.dtb if [[ $hwrevision =~ r[0-9] ]]; then - #echo "hwrevision: $hwrevision" >&2 # debug + #echo "hwrevision: $hwrevision" # debug hwrev="_$hwrevision" fi - dtb_file="/etc.defaults/model${hwrev}.dtb" dts_file="/etc.defaults/model${hwrev}.dts" dtb2_file="/etc/model${hwrev}.dtb" - - # NVMe power_limit - if grep power_limit /run/model.dtb >/dev/null; then - - if [ -f /sys/firmware/devicetree/base/power_limit ]; then - pwrval=$(cat /sys/firmware/devicetree/base/power_limit | cut -d"," -f1) - # Check pwrval is float or numeric - if [[ ! $pwrval =~ ^[0-9]+([.][0-9]+)?$ ]]; then - pwrval="100" - fi - else - pwrval="100" - fi - - pwr_limit="" - nvme_drives=$(ls /sys/class/nvme | wc -w) - for i in $(seq 0 $((nvme_drives -1))); do - [ "$i" -eq 0 ] && pwr_limit="$pwrval" || pwr_limit="${pwr_limit},$pwrval" - done - - #echo "power_limit $pwr_limit" >&2 # debug - fi - - # Check power_limit and adapter card already in model.dtb - if grep "$pwr_limit" "$dtb_file" >/dev/null && grep "$1" "$dtb_file" >/dev/null - then - echo -e "${Yellow}$1${Off} already exists in ${Cyan}model${hwrev}.dtb${Off}" >&2 - return - fi - - # Check if dtc exists and is executable - if [[ ! -x /usr/sbin/dtc ]]; then - if [[ -f ./bin/dtc ]]; then - cp -f ./bin/dtc /usr/sbin/dtc - chmod 755 /usr/sbin/dtc - else - download_dtc - fi + if [[ ! -x $(which dtc) ]]; then + md5hash="01381dabbe86e13a2f4a8017b5552918" + branch="main" + file_url="https://raw.githubusercontent.com/${repo}/${branch}/bin/dtc" + # install_binfile + install_binfile dtc "$file_url" /usr/sbin/dtc "a+x" bin/dtc "$md5hash" fi # Check again if dtc exists and is executable @@ -1479,13 +1316,8 @@ check_modeldtb(){ chmod 644 "$dts_file" # Edit model.dts - #edit_dts "E10M20-T1" # test - #edit_dts "M2D20" # test - #edit_dts "M2D18" # test edit_dts "$1" - [[ -n $pwr_limit ]] && set_pwr_limit - # Compile model.dts to model.dtb dtc -q -I dts -O dtb -o "$dtb_file" "$dts_file" # -q Suppress warnings @@ -1493,9 +1325,6 @@ check_modeldtb(){ chmod a+r "$dtb_file" chown root:root "$dtb_file" cp -pu "$dtb_file" "$dtb2_file" # Copy dtb file to /etc - - # Delete model.dts - rm "$dts_file" else echo -e "${Error}ERROR${Off} Missing /usr/sbin/dtc or not executable!" >&2 fi @@ -1506,6 +1335,7 @@ check_modeldtb(){ for c in "${m2cards[@]}"; do #echo "" m2cardconf="/usr/syno/etc.defaults/adapter_cards.conf" + m2card2conf="/usr/syno/etc/adapter_cards.conf" case "$c" in E10M20-T1) backupdb "$m2cardconf" @@ -1513,12 +1343,16 @@ for c in "${m2cards[@]}"; do enable_card "$m2cardconf" E10M20-T1_sup_nic "E10M20-T1 NIC" enable_card "$m2cardconf" E10M20-T1_sup_nvme "E10M20-T1 NVMe" #enable_card "$m2cardconf" E10M20-T1_sup_sata "E10M20-T1 SATA" + enable_card "$m2card2conf" E10M20-T1_sup_nic "E10M20-T1 NIC" + enable_card "$m2card2conf" E10M20-T1_sup_nvme "E10M20-T1 NVMe" + #enable_card "$m2card2conf" E10M20-T1_sup_sata "E10M20-T1 SATA" check_modeldtb "$c" ;; M2D20) backupdb "$m2cardconf" echo "" enable_card "$m2cardconf" M2D20_sup_nvme "M2D20 NVMe" + enable_card "$m2card2conf" M2D20_sup_nvme "M2D20 NVMe" check_modeldtb "$c" ;; M2D18) @@ -1526,12 +1360,15 @@ for c in "${m2cards[@]}"; do echo "" enable_card "$m2cardconf" M2D18_sup_nvme "M2D18 NVMe" enable_card "$m2cardconf" M2D18_sup_sata "M2D18 SATA" + enable_card "$m2card2conf" M2D18_sup_nvme "M2D18 NVMe" + enable_card "$m2card2conf" M2D18_sup_sata "M2D18 SATA" check_modeldtb "$c" ;; M2D17) backupdb "$m2cardconf" echo "" enable_card "$m2cardconf" M2D17_sup_sata "M2D17 SATA" + enable_card "$m2card2conf" M2D17_sup_sata "M2D17 SATA" ;; *) echo "Unknown M2 card type: $c" @@ -1689,9 +1526,7 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo fi - -# Enable nvme support This probably should be before we look for NVMe drives. -# But it probably also needs a reboot after we change it. +# Enable nvme support if [[ $m2 != "no" ]]; then # Check if nvme support is enabled setting="$(get_key_value $synoinfo supportnvme)" @@ -1817,22 +1652,6 @@ if [[ $wdda == "no" ]]; then fi -# Optionally enable "support_worm" (immutable snapshots) -setting="$(get_key_value $synoinfo support_worm)" -if [[ $immutable == "yes" ]]; then - if [[ $setting != "yes" ]]; then - # Disable support_memory_compatibility - synosetkeyvalue "$synoinfo" support_worm "yes" - setting="$(get_key_value "$synoinfo" support_worm)" - if [[ $setting == "yes" ]]; then - echo -e "\nEnabled Immutable Snapshots." - fi - elif [[ $setting == "no" ]]; then - echo -e "\nImmutable Snapshots already enabled." - fi -fi - - #------------------------------------------------------------------------------ # Finished From 8248e4cc851d3c2715570f9cf6763730be443fa6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 25 Nov 2023 16:23:10 +1100 Subject: [PATCH 231/694] Update CHANGES.txt --- CHANGES.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 80319c5..93c8fa7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,14 @@ -v3.2.66 -- Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using DSM 7.2 Update 2 and Update 3. +v3.2.67-RC +- Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using: + - DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. +- Now edits model.dtb instead of downloading a pre-edited version. +- Fix for Unknown vendor causing "Unsupported firmware version" warning. Issue #161 +- Now supports NVMe drives that show as Unknown brand in storage manager: Issue #161 + - ADATA, Corsair, Gigabyte, HS/MAXIO, MSI, Netac, Phison, PNY + - SK Hynix, Solidigm, SPCC/Lexar, TEAMGROUP, UMIS, ZHITAI - Fixed bug where memory was shown in MB but with GB unit. - Removed -i, --immutable option. +- Minor bug fixes. v3.1.65 - Bug fix for NVMe drives with / in the model name for non-device tree Synology models. Issue #154 From 430d5a0653e97db049195f7c5e710eb30b1a0b90 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 26 Nov 2023 04:21:42 +1100 Subject: [PATCH 232/694] Delete bin/bc --- bin/bc | Bin 84960 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/bc diff --git a/bin/bc b/bin/bc deleted file mode 100644 index 64b3cc9202030b52441e6e1785753434fdff5917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84960 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 From 9aa22be5eb88e775eb4d4d84cc512375bd7f9242 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 26 Nov 2023 04:21:55 +1100 Subject: [PATCH 233/694] Delete bin/DS1823xs+_synonvme --- bin/DS1823xs+_synonvme | Bin 17241 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/DS1823xs+_synonvme diff --git a/bin/DS1823xs+_synonvme b/bin/DS1823xs+_synonvme deleted file mode 100644 index 2dc63b55f2cfc20dc364bbc39d2b16105db24799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17241 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 Date: Sun, 26 Nov 2023 04:22:06 +1100 Subject: [PATCH 234/694] Delete bin/DS1821+_synonvme --- bin/DS1821+_synonvme | Bin 17241 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/DS1821+_synonvme diff --git a/bin/DS1821+_synonvme b/bin/DS1821+_synonvme deleted file mode 100644 index 2dc63b55f2cfc20dc364bbc39d2b16105db24799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17241 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 Date: Sun, 26 Nov 2023 04:22:32 +1100 Subject: [PATCH 235/694] Delete lib/DS1823xs+_libsynonvme.so.1 --- lib/DS1823xs+_libsynonvme.so.1 | Bin 54154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/DS1823xs+_libsynonvme.so.1 diff --git a/lib/DS1823xs+_libsynonvme.so.1 b/lib/DS1823xs+_libsynonvme.so.1 deleted file mode 100644 index 1f97be2d5b43e3d68c45f780d3857d597862d842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54154 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 fG<~gV|683Oa+k^ Date: Sun, 26 Nov 2023 04:22:43 +1100 Subject: [PATCH 236/694] Delete lib/DS1821+_libsynonvme.so.1 --- lib/DS1821+_libsynonvme.so.1 | Bin 54154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/DS1821+_libsynonvme.so.1 diff --git a/lib/DS1821+_libsynonvme.so.1 b/lib/DS1821+_libsynonvme.so.1 deleted file mode 100644 index 1f97be2d5b43e3d68c45f780d3857d597862d842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54154 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 fG<~gV|683Oa+k^ Date: Sun, 26 Nov 2023 04:23:08 +1100 Subject: [PATCH 237/694] Delete lib/64570_libsynonvme.so.1 --- lib/64570_libsynonvme.so.1 | Bin 54154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/64570_libsynonvme.so.1 diff --git a/lib/64570_libsynonvme.so.1 b/lib/64570_libsynonvme.so.1 deleted file mode 100644 index 1f97be2d5b43e3d68c45f780d3857d597862d842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54154 zcmeIb34ByV_CMO$AOh)*BWPUERvQInNmLY2#x!)GBLN~wFbWz%(t${l&U88$T%$>p zHbyfeqqxirZVZ2QM#eR`U;qVoaYq?7u5;UnqN9j1+VA^4Rk!deYt+T`wW^>h{dkT5k}lbiJtRb-f#(zADVvY&|+P z>m>t?^`6o7p3(KpG?NIp%rsqPMJD7kYpVhzritA)>lJ+xto)zUE7bMU?^o?5rvKD~ zYNqCxor!wv-+z1Q;j_)t?F}SPua=9MnmSdEhJv`y#XTQ)J#JIvc(l#MeF7hF<>H>r z2VAG(o{sxK+bB;1p5m*A$H$KpN*_u;tb;m*O$ zYclRLr}o7Ys_XX8Ev_cYuMxOx3nCGxize;4Ae#63YEHrq_3Mf!QMPWwwn z0_g0o;C}!s({*N8>U#9EIp${30{w6>(nE1q;0|cm{yH_2TJr%Zb?zvg-w)|oxX0+c zHJOD>qAni>*l(;zcphxYXIP&9+sEU8n4*zS*QraV$Le&6P8~>(z&#xIBHX-=REcdU z(gNJoxM`2aU3l~SbjML6*QPvp>E&-W-Tvy_AMd>Q^-^LFw z|KRp#n^J~9^XZ<9HqSjZ=k0&M6vC+gv^4`zw!sIP1ED7Ctcji04-Qb^O>zs!vb3Hkf_Fzh1m!@~68#uOIzw z^^6gBm5hFC_lsHSZ*A#)>=oY=AD+Fb^P(%?eJ-oyj_S`J-gaWi;uBY|du+-_oilHq z|F5@JG~fD(=Otg*^H|QUKi&J&wH}Yf9?B0q9H_ z0Dt}f^ved2^JxR%zdJyG=MO;VCCIT~`3%5kCY)D)_wow_`G-kKG9v9GeI|*J$8V0zaD_TYXJJ01Ms_<8rg$53@DvfOUwbxmCt}m~A%$OI$+V#5do}zt-R>d= z$hbO@=XIvYZJ2Gl4qkUCuq{)=J4+N`k>>Lfr28XM?*350w`=@Wn$O)jh`mz7>&^a7 zR)AdH?m;I1mn!%!jenZx)iB$d)e4ZW;g@Rs%s(i=XBz&!$RF}#pp5HJDzV+8<*?hW z0QAee*qz@X65l;hvJzYK>15sC-3(xGnR2*J(^;eGFxKJqK5n6-$M-6M+HB8h{O0Kj zFcp0B%GUfZx=iJJRbu-Be34Fet^)j4^BL0pvQd$6c|e!f$C{4wMwRFKhS!6peEz8N z*JwKTAxrw5noq`Nyl&9=ovT#-VwKo_qxqNM60q@_&fR)^n}Z6`l=JIaZcYYxxISdC zi)(?Vzg`PwFoRTF59@vv-m3DOH2ohnezWe^;TrxYjo&;^;oqean*-(SSMwk+iat5(Zlw_Y5C6xjBfmfM;e6u?|V z=4*Iivx1+e={%?DWa|aw7zT)!5H9l3=e@R(IQ+ZicbzON) z^@ToL(b;q6&Y3^km*2p@MMWN4Lok5<(OAQZh8q8pvWlh4qF6<~ipGF1FHqiqng#jO zrsp;JDr%y|Qczr7>znBdMuF3p`YM(cHP+Yr13`CPrP+*B*I>e;`1zH-x?pwHis`{X zO&p!t%6a7%OatSA6;^m&Q_xpeS>&s!D)u!5+4}72IwI7T*VOncY*hhYjQEV|KrNUk z@&&5PYv%dND{T#R^?~ZTU==$YEU#F`{+3mhSI2tgscu*{+h6I6d%S zC~;9VGpcJShgrTA^UG@*eYRR(ZG%ND9^di;e}%OpMK%6leqEIxu=yuM#R0rIimTj)xP|?N?((;rf_FsRr%|Ebtj*s#%IP7U$B8gTH~v;RaMmZF>uJ$Rn*oq4OA@U zNLM%bD<)4aYiOt_ud9l-TvQ7^%l8!fi=Ylm8ZMNPBaAII#G?VF*q<-TL(&D%NOxtW ztwId}TB>ZUw*~zkeT+M;4C}x_429*vrG)`sRdo|dqhr3tYLzZQT2|%@ z1nT@{81nL9wZBgFzmURMUSWge1HK00sVCNiVqpA54-2D`0TF+oEMS8@_%5hfkzd!~ z3j}?YCk84D(eo9esT|qq~2c18mVspwJhnfX$UJ@s%|AqP>|0NiNg+Xlo2s*Hl#o%S2>+sH%pSC~Ih3 zTnEdr5mM)CiUHW_3{Npyp|S`QDq9%9h(M4~7;q8gPBgfv-baI&w!#CQC58M3syppM zva?T^ULL57Gere5m6UZ9rI;yM+7`Q!Jjv!Y)>Xsa5=@DD21ixAqTVNtOVBy$GkhX= z89vkVEsvI-1?eiCu#T^Hdhu-J^Xq2$YL-{m#cU>8Fx^+vP~8|S(5*lUR{gbAEuk5k zLm6vK@bmzaCi49^CIyL&6~TYasA+6i8l_y|k5dc?Bfp{Kgy;Z>2T-2e^taKfak`ve zr!1rY(m6g~r4p{EIv|=(7gZjFwgNC6Iu?YxTvk~fpaqCUiW$+j&ut7s&zG^|D6bRc zGL41>#F@5&MyCXr7Z3+cfTj98UyUz1hq0`rj@qs(Mww9g{Hi(rpfX4?W`F&PV!y}N zK!2nfAsFKvb@esXiyPppD=|mZme-GO@Q=^2X&C&4kAPDMfZ0R~EBJJ>iB`9~R?u>6 z=-doXaaqpz6Kpft(Xtaz*L*r5_ITonQRqq0rxV6cj6R<@{v^f|$=G*I!p*<@Pd)Lk zdP+r_hTB>aduEM6x@<5~vm{+=Bw-I$l`GmT9b}8$Moy-w|qb{9Sh{yk`>dAG$-q zwUXs|&kMcLWM`Z|K zq8{b%q#l(aJXJl)-`pORA$*p4l)v5{l_A`GM?*+q5C1BD($u5;E$vYm;!}3!wWvou z5uU3aXAgo1db+pHTS4T(wQ5D+H5N=aC6U$#hn)T zPy+O|x<@^b&M*yQvZhC62-iz*0j#sYJqktsuD8Ig?+UvtaJvP++X8o3;Llj#^v~wC zy+=KfAL~2N9TvECf3e2`=X){pGJ4b#=^S7Jk?!tM8N!FFNBO(AM`Z{fp&r%W4`T2G zE%0;;{2&WF(*n=3z_TpygDr5U1%8MHKH383yJ7Rnw!jZFfk-D=;7cv=Tnl`p1@5)L z54XSzE$|~O@KOuhXMr!Wz?~NOQVaY@3%uR}Kgt4cvcO#yc(Vo0J$dt5X@QS2fk-SrhNJ_gc@Z&7_&sgAk%UVjeTj0lA z@ON0?V=eF=3;Zk#+_1pMS>U@Z@I@B*UJKmZlapdS@6#@(S@6>>@Cg=prUjmDfoECZ zITpCn0zbh5A8mn`Tj1Fic$Eb{$pSyo0?)O;OD%A(1umhqE-SRab?7D~r53o}G8OnD z3w)A={!$BkvISmmf&b0|Z?eFrSm4bTxZXmP(v=qYd<%Z31wPdRUu}W^)&l?a@mC4_ zDuG`m@T&xVmB6nO_*DY`f0ux_<@0oJd)gcK*=*jn?qG6cySL@3^es`bL?(WSqR6O^ z@z-%gE}oc|6<4??f@{<}%qO8jc)R3ZWj>ktZplB#JhwE$>m|RLd2U&R*GT?R=DGC{ z?v(uf%yY{j+${OKnP)g2u9y7n%yWw&yh!plGtVuAaG~V?z&y7I!nu;ant5&wgtH}o z1@qhz2s9AAsKl~keE|tTXlK+}{E|J4F$$!Q? zm&W1UKeGQHGVf%*NAmA5e|$p@Gp&%90Y=QBTn`Q87K@n@b(y>O4@&taZRyzq9(&tslTyKuMU z&tRTQwD5Y#Ph*}-u<#nmPhp-*uW+a2Phg%)u5h#Dk7NE6=IbSY6!Tnqg%?Tw5azk$ z3KvTLH_UTM70#9X5azj*3TI0`nR#wihMkiC;cv)u=@ibC{MXEL$rQFp{xjxJXMXoS z8Gq(;neUPOJIuS8-!A!AnV-gdx8$E=eme8(CBK<@Zn1^eNd8gg^O*0H{Qb<&V7^)M zcQZee`FhFU&b*iTMUuan`F!RJCI1KJ&tN`R@>erIi}`HHU%`9<^G?ZM$oy>PGbJBj zeh%|C$)C^sT;_NGAmh(`A@e$gqYexjEAVG)8pW7&?v^dA)!Sa>IHFbfV^(~ATO@e2w`1b8 z^HJ>})If`lKXyAF?iT+a#n0(>chMPnJ2GCWw%IlcyB#BT;Q2{9bz>)tqzm;Uy<0gy zkbZt>Z(h!`sPO`@a=N`8Bc5l~4MJw>Ry>C%!nHV#fEEzHi?hcTG^z7NUNCozH?+@~ zgAsrvPWOi12d_7vrm+k)7etxe66NkvHbL&B!AZy|{!RsdIo%7kIF4vWp|mIT=X*n6 zd)xK|=WO8nGEfhq3fsI8THn^)n7m+1e&}s?7d>^9ZpO((>KMVs6#0JwTe{B{z`wi8 zjtc1eFrY;1jaY{nQ&qSJ6?$Kc%9s5w@rHhUl3WyVWQ;I6?G0`5w(Sa*v!ksXIqF2{ zOXCR9cMzl-AUBR6e38=vnT@>#Xz5<7YcwQ~)14ps#vA%HKlFWm=tXbnyA5~;X>*Ke zb!BptwzawjBjv^Ck@|UStINU1e|ztl-S(`b^+`O>Zu{8L`mj9g3cco7)!p{0#Qy1JDzCIuD|~_K$cj2)%6hV9Lm^{0H*w9@p@HJNyN%RBy$%1)(p!9pi4ffc?Hk zm`c8SP59#7_&-*Z;VABlnlvT zOoodgLoXn(0d0p2fgqE`kXXzPoIX<~M}sRRzx&-?3~zvYavW|_RMy{N;2^*HJxYH4 zXmfV|5>zVPuLM=ElwQY4&e66P+(3Gc)-Ulu32sBDshxvh@|U0Hy6WJf`rz_{jypwW z9>*iYTpOG~&FL=aNLz;<@-Vz@BSBC=BmbL7Brm5s^fnZ;AoMBbpX-2Q+%7~f_4K2W zjWvJQvth>vp&~A!D zn}eKEc@NQUH=aP>tHztmJB|?l-;Y1K{PQl*+wcbf*xhvp;8D}b_&bIGBXN9G z#2;X+JJtAATE>sv!T4PU^l0S~>&nf6xrYja@uQ~&T4@~GxyY&UYbDz4G6Q$Uv2mpV;a1OA~mU{0SkDy_~ zQnnKFePb}1_jY(vBF&SA1V`rVq~*N!6=0mkcj#$A@rN3{??G?fT^vpks0ipWbOSUp zwk)O?M~p;EMj@K+eZaJ%EV9*+aXS!V#MfxB2-eTn1Gn~Kt(akRa`#vmce?^!%k?<+nt4wp`KCwV77?YLqG;E$#f zv18&I(uX8Q?xwy4CvSvY1yI8pfSdwn7WxpFWPz9|U;tLqhyn`8jOUs!N}bTS$=k9e zt@km;GhVp4juE|nR{8?o4=(C^w9)&ls1lcfu}%(Foh*-b(t$SAoN%k@GTdESj_*K& zqg6-jIL{Q!PK;&mbMCH@(y@#O;?TB6)&4=E-J#^yF%vz>T0R`{y$>quZI|G;6$F?` zI}@-FqKVYKTNJ*#xS)O1sem$2EXvv0J3Qvn(DNj3%f3T`hv&DS_D}TLcuqvx_^DDP zQ%(zVx+ygoKlfSmaqjt1y&r9f!#u7mPP?ft8Os;J62}t8Aa;>YFZimX^&x@3J3d# z$MiKE5|imGr+XtyjP_lu@uhJ9(7i2}u&L>p!R-8Ya2P7h$`2jpqF*d_WksE0<1!f1 zXk|w3^W0^S0cxFV>wUEf@o_1r!Y=-}$U2_s=bGa=6bjh#Or-Z-cNfN(n9JfYmqoSZ z1M1c5#yMYDrx@DD+h2G)W;)(ZdjY79hco~AY^d1v%}$RCf$e5*i;?u+X7A*;8b5h= zhdI6_STSw56s^g)s91UQAi8-=c$@_Q=fcNb&Sdgc?8@|NC-2?naiycW3Y1ZbiDpAC z^4`!}c$8S;`ZSK@w=$Af;aLI}*w@-JihrBY@}*2lZKtBl<9N6L)I*;XbX2<1bGkS1 zh>;2^_~h-l)y3btz;I20+-RMj^m4f0W_S_$(k%-*m|-z!8#jL*i6BNPaP1GoKD6AI zhxdohfYc-+|0$jh8bNC#j$+X~p##Pa=#LHvq!VjlJb@HN;A;$}vA;=R_y7d95$n)+ z0?J>F*u+XUEkX9v%IA!E&a=FH*=-SVdJC5W|k0&=+ksGDSeZ^96S7_Y$ zi{y4<+>PB~R0u`6qXvSzu&BhB#_gKiBEzf6iPX^5m^z`KzX$q8YL#(YJh}Z8xxZ<0 zMVef_@jbi!v$C5??&igl8=}YsG`UnE_qeMWVB@d9NU?Vz&}{J(xu=Z&PSh0dXDO_+ zlN3vSk>X9H_;({tg4~q`#oZ|4_%6~E*N|e$FH)RIiVNc@W+;k((-iHR;(Aj22SxC+ za{P7y(1yfQRNEUPYBa^iS&CkFlVaH~QoMr{yZ#l|Ylq_TSWWSKP!tUjb@8-cH%6P8N_IKio8q?L*@AL=tb1kqPl6_E#jnB8iV#ggGWZ8h6wG#-^Cd z5OdQ-$AYz1)aL%rEkY$@;yKp&r4}?*AaxI96ut!uauug>|K$c%BgL$NZZyp|@h_rG z+fQ>D_kXH`ld$aaeFO&edWPF&XJLZ{@fTv)-oYvk>h-pt%91pr6g9o=7csg;?hKX7 zRJqe6w=4_7HnRELwySXq<4{>h=OQw(te!lWSr{*$6^$LNdpehYUJ5hj6o&iRxVg)V zT{Ld(>O$1pwgm+8Cco}zy#m!AWz>#^!jnuz-sCR}tmkpN>L5&4QY~02n4vEe z;#Fv$h>u`C#Q2=bVJ_&%xDg6N{TTVt}BF6W?@FLW9wD~zR!x1e(`(CU=IgBuYRN1z2wB3%m z4Q5aZs3){LKHdWDwv}L4`t=z0Y;*QVmsE#NRvl`s;@Eej{q<}l5S`3ER3L;2mx3EA zLM{}+*!mF|=m@%UALUHZK8fPK9pZ)%ZbIF{^CRb@m)`aQm($(FARo~q8n-=pH2y#e z?*U21S5PPj$}PGY5H$C;JUOWi^tXtf40Q+(Gxw>j?0XQ;r5j&^C+rhnst02T>ZqZR zmcdO&#>T3kK1;&I=&txPrSkXS%%`PQ zk#aR)rj%dAvq;&4wkhE7z1Z)DT&?40oC4X^Chv)IS&Z6APITr=CzH8wLzHv=*;BR!wW`v%;+(!;3!8dqzY z;Wq51cMd4G2YULGTL+X9bX!3e;&T_D9|<1{Er~gCb~mP0Io*+g-wS;`0@W~( zqtRu;c^AN@vW-2oKS)z)pS%dv`}=u0yG#~e6`L&x8ICc<%4{78Jko4?A$xGR6V6!m zyb#h~i<}5t#6aPOr>Jo=iFYTuga_V_?>}i@r)XaWYFf#|283wQpJgaAO+Ue99z`D5 z{g5zYBoNh?p;$TE=*hRW1C{XM%N1Z5JZ3Ox_;XQgSl&4uCOBF9JIJa;hsfQ}ZcX zTs8j`8r4eeSIMe;X)I()S1%Wvwiw5PBg^|Cgf28fL?`EiC4?~u@$50Gt6|*0Sf94~SkI`jCvWucvKnh|U zNlIy5)PphGb6!Pb-p!#DS;F_;)`=Gfq9STHt)SyU7hlK~guXTwgSocuOE+OV=TR=M za`qTcf?^3odN^9ZTY$oRytM2X@pch~;O?3Uq?n+M+fiRyJ?CuCnBBc?rd}_hEITsZ zL9Lh_3JMq;cH2;Fdfq#q|6nNS^e!u+v$JyMW0Z zJ;6VMmQ? zY~#VbmuWvC!2FhNNd>0@r(x+C?WgVA$d^pUl$~e;JH{BU(j*3n2FmLy*H|D zexQ~DCuS_DROJ;bQf{dVqLX^z#bN{6l^w0fLd;N6t2J%YcjbvO9Lrw$=RnzombFI79W%kFi$$ zgNN*|gO$+^n(asX#~#J}*UY&l&-Z|)>fick|MsCYhU+dcaW4Zd`nUJ3SpNoGd&_%0 zeYT>s{}-8Fr}Aw-NKiHKB;M-E%@nsMYjr#dIeG?e{ht9ZP=G}|alD~d5E?XteZBPl z$=HX%z#Ou227P14$Xb-q7=r+tFU)#S#Mi~!jE&I9&=#V%0+t{87$Nu~)aX6TlxOHY z&U(i{5DIT0@Z?SQMs!A|v2)&34RYb}DEGVYYLnC3<~L;UHWt7oI4xB=(uSc0%v#2J zV8C(x2p{k6x)jyPNEXSYf(*R>s62&ufsn#_7{*3&xr&^2cF&_e$(1XtmCp(f-x)`O zv4YSZEUB^YZ=9%U91j|gp$%L3di=rrh)QIvmY$IgdNBBdkQkRhY?xV zUn!vG8$)^3;qJNs^x!}?!%AX0^$>_D`#K&Jl~7;d6NMkT=ci~qrd~!K^EwnS#JCyq z=>;WsS4fdvh76c%13gV$k$oLH8lD@YBW~|^X4g1TWMr$V=Oa;d*09dukcV*~grnyF zB8a_}h&YL5g8)ODB@$_SHRwZ0KuX>>J_SBX;96`bnT3*aUGjn|VaSY<9F!F5lKWK& zhZZFVq2zR3vKl3D#Rqq{^rXR6#ezM=OA_x{_q)85LkQDHoY&+M51r)e&sqdS%3(TM z%jNky<5S2}ZAP^o3f5Hc{eEoLmB3jhTK=gw=WM3y!7tNpoo?4@k4|^%lzSJ%%hah; zr=7Zd4N~LJl<3nPx!-Yn=gLdKUCWPYj@J46L5sdLvLOeumLGbG=X5e1`(vm}(~TXd zh2<3{Sx4)GKo#4i9c1UjvVWjlp++m5;Zsnk=j+gW+&HRZdt%>*u?cL}ex~jAJLC3O zmEDfQE|Q!+_|9-ZOz^i`ROQ=97{PDT1B^%txl<=wcj=+AuFyi4t008AzV|StH|-}O z|E2LG>!iA9$O}LhdlWKjo9!Co%toOGQu63v$OXDE1yh=F-7C`m1Dco<#AMW(Zu535 zbk&CsqfC!zMvbV8NOp6y-#3b-s-x{AA$P9~8)A!I%p{)BS8Siv=*y-66IS&KO59z? zfg+hbA6mg(OpX?+ZHiTM5(0OYq8eCvA~2t1AZToQjl(inhUHvDRNnTW3tJgo%`6OV zSJM3o==trZ!(`toWcy+4j0wU=WCL{D{{x9_&Tk*=-PX+3dChJ=J=DqhbX)UE`~{C7 z4u#0Sd>c_(Y)KyawJ(ipqk6saBG|s}sgwASNw?x5v>iq6E}nLQ7dS3I>N&vFNOV*= zgX__o-gTX;@dti#)}G+lNSe~)g7sbD=b1Qbn+L681-8x1W2mSEfu zfthc#YoRsT3i!V4J7^UcS&I-&1+*)_f%18vpXvFbFM1D#AMu2~VAsw?FEz>wf)e(I z-q9uzF|K=A4ca3Rm7dCQDkoxm_mb%4V+@MxJ)u~gj zDDdfoChKrlx-;LXrj$Ba$g!ZC~99}$>#3bpsAG#wN_I{N5-l- zrP?-b;Tj8sSI5ecz*c&CFa(z$8YFtUM7H8ZMGHbd885x4I$RA|%&3vx$a$%bj5}rkt7F6y zfW^&Y!@z9#aBRzHJ9l>-Al=Rgph9du^`V~9+no?<_|kpm{N?Vto9%aGOpC*x7{$Mb z_+Ov_aP$sv++7=0h5Z#r$0u@hAuBwA3hu6S#mc|(tgMiTVx^FnEkA%Xmt5|yQ-Lls z@588o&NiAXDfA z0=S*g;bCZ28|(koIV)iTWZ=NVy~9mT62zJOo&rA4o-ydT-}>p)!RS0HVeIfv@c! z8Wdg*Bl5`f8+t!4^o{Z9GXVY_Gb?#GTaD;-H=~2@uDy!f(W>1J(CM9r`5`ao<8UJ? z%*LK<7vFtF+sfGM78V~t4b|jQG^q?XoP~znUAK$KGhSAR?;(-ef{o?>q!|7oW)siE zHStGPvpCvB8mqLt6bT=X1~|^{u9MM7j4VXANLBh8m5evg$MAjdg2pUJ+}*XpBriMw z`9y{MG?CX4`BdTjD2*Q={+uFVdxWp zIP2GGk^Gt%gXIFFb%%?%@N)6~7JixU}un#*B)8gvMu9T||>%$8cSCtl}LJjj{sjmzs4|th4Fxf zo7k*ttFkNEuhQqk_hCP74e;ZXilILAod@g8^W*E_T|%271iG}gSDTLJ&KvP!d(fvr z7;6BDe)mMZeB0f15MUw$h^0sIGz5JR12Hl|H>bPzAI4RXw3b7k^>54$F8_R8Dz|Mv zj_x)=%Xh{zKU|o{@~s|b;TVHO6sIk`@w-YIf84bOB&xiQx@Wu{t*&NpN3+S6jb~t0 z0*j^F3qn1P1Bc$v>?p+Zf^lj)hY+^ikA*y$puDyV_@L9pI? zl8Lbw&B7P8m7)}1hMlHgeWp*Ms1SC7YQnqKzf9HdR>uJcXCT(nl<@+zs?+Gj#=Gi+ zyhJ}bjnZ#*t%l}U>^qm>%b!{YXnYt7f2H`~Sr*Lv!f4JO#pugm6g!GXqIK}w+Jjzk zOLGkvq(hFrQdX`8N@bi2ZoGKOMTZkTYx0zFGK7dgZrmx+7t8Lh$w0xenS_%jL7*7h zfX?novBFf2=V;X7cO8&FI2qw5^36aFpJuL8;tmj82X3$*GD{2iuTU)|UZIA!$sHMa zr@?xURphp#Tn<0X)a`pFf9q&nlm0LDzq_CQZ#7PaUc`=#9D#Nq*5@$L=6DN3 z=q@@HK&d|efm#+ZP%o@v;7di6h>9QiexyrIcQb&PZ@=ewYZx1s^zccCU2{t_V% z;>cf++a(+OmD_wM8mP_&Rfw+yr$!DFg~_$jLzLd5k7cP-uF!$4=rZkQRDX1zGJb+O zf$kS4Qu>sRc`RcK;!ruq@C*FD_(VVaK4q*`bZ-D%lj1U=XpVOaN~oJ^M3mMkE6F$j zFgfRO8*t!@4x!0oNWy>n0q1Sv2IM;QisQWvvek-o94d)f^Lz)XV{DW)DqRA>XK6zu zcm!nVHoq;r6`oHJ8N7~IJ=UCbZvnOr=2InVb#e5uTM>uqTFYE zE!x*Kg&#}DVqz6CfZow@{KTm5M76F6F8#gqVIUXnXT~mgIB@!#C^Pp09p4c}50#Ri zlF;s={qVaZpQlfaL~OPTj>p#|Wbx?9Z(ef5rcX0F4m(h0)X+P|Y*fdN@I(j^2RU#? zHTu2a^JppB?ucuUQ@uYGHH5$37x8Xk#Dge+V#t(T;_f=q)Me7Vk9Z2jM*c17? zd^2D4U%r)p!}lO;jIrPOv+)ssriAek*K?R~Uge|{7ax^oksCw?P4I#Fp*ImE>0k%} z1I#V-HH>T1XGd^3kUP6=kBYPqH0+c!Ry3YPXah(%SAwA7d4db^k@FbFN~`dw0-;RC z5eSX=V!!R|!8#f$!~-`lh~>s94u*C-eS(jOCZd;WJ>7N=vAC@L9?{Ji$CKe$z@s9a ze{GORXDq(RsX_3Dj~CD#1UjFLQ9+G_I8Xsgh~rct4wgv92DF9fW*W59jBd_@q>WcV zbsH;zlsa{L6KEj5X$4uM0qA&9VO%7fZZlGl_e|dBX!{y<8QfffiYjdR0>g>0WfO9= z=9>`wF}V31!U5C>E>u`LxH(i~4P^+lv+;Co_s35Vy^#Y(R$mOgxmo58=vEW^FftUmo97n9v?rE%Pb{g3^A1 z2?ez>zyjgC)ltu(Ai=)tGgh}r$8&-E^W*<;|NZ_E!+?Glg;T+g>@%o%>?8P*#POKN zIqq1n3ck`HAsLU0sor2GJWtK<)^RrcXq6Uy5KLYT^wbOxK|J=f(5I?NJXVV=z`N9{UPZ;>c%e^76_Td`ES+Z#*^(4G6z4&=AP))O`|a%lC=#-d`XE z>XQSsHQ_0!B<_guo^oA@@!s3ieG+^UB99*6YDKfchs1m9jxytsdw?DO3&&dK2X_}5 z0CyS1arp0!Ht{baz90C;SCEaw8$2#+J$~TfH=5W)pp9X^hysB3jrU@11DwqUXAs|HI^A6lA$)rTagppM#m9Q16y8K6D)j0m^3}#< zG>^`z@t1gsU$}-|>#r9$W@dIoPRhQDUt37u-gu^t2=lo|Dt+TbXk2!`bgYaW3vC|7 z;BnJuneGryqoqLX@m;NzuBuPRbD_7G87cSM(XH4x71Q_9T^cE19>&S;QWYS85HKyF z<49mhMG!d`MXK5hP$7hlPaD(0n~opl_d*8lulk_|)m?TTbZx5J^K`e*FuRRyK;yaf z(&@$RsV+Hy>c(_O0Z68wepe*)o6B&pd^dU;>-WOwdSoa%p!=QAAA!gPdK51sh*}WE z+NhZRiNWoC*(mvko`-)n9&SS45Dznkz`e8Y4my7qkH2E_pu`%olb*H=ZOI;BRlcL{ zCHjwgkby5l+<_qSIf#sUh}T3OS1BJ<@O!I}u*AIxei1?=oVgk+9v$n#C2lkFMWBwh zBf0U1(5#deTkJYazEj7q2~7M6!ZBJfo;bAWXnT&4RY%5tM=%)jGv-BXj+pl`V3E&F z(M>%sxlwU0!eU{?cma(e*ewAyGuYh^^N#WH-($fpHU`bDyqgY3*;+druPC7^ksjGZfs}=+<6u zs%t=Z`o7F`(1FFkfjixak%xvkbzEs28tsVe=lvUF#qg9PYY9)stMIf5(7yY5xjHWW zS7KZm0c}iL3&8>ha=k>w7rW}?f>NATW<+}Z-@q4kMHgAZQ9lHTX{74t=rrQ)LX4{% zyePTEUFh83fMVEm*TnxT%ovg-99>7`*Fal-aZ&m8xIkhXc(Lr`y^qO2O(sH4g3*8%!4=Emq z7R@PB_&_(&^9N9>qR%AVy6!$FKWq1+U(3CM8pi8rB0NO6YX%}LWB~s5-P4!9w=k~Y zuPD3_I;rHR74fkn`-#xu!4CJ3d3}R!nH#Si(EWsXZ0K+HgyBTDC z1m^U33^bm{_d{>6qW2wKq)F*|>1M7Lf5t~BqVg%pE49+`+NDS(UQ42^BF2RvCL_D! zhs1d8OSDbFe;13_t_ERISjKD0wiDyEF($!NAhc-wH5knb9}=&PL{3fU`=C2|f9@nS z6OHfQI>w4W4$Uh3=Yik*((KSzYI`tBGGi?&z`lBsD9qc4d8gVSR1!$B5hdedg&9PI zVq6TQ@Wpi1U;i(R#n10Itschtb(cB6#%(pN#3aeCrL6{a%&hLvS29tBp2rt^G86Os zVY6^>udA7E8xv|h@-|MqFA(_+F7cbuh`fhGN+8}cV>_4`N6ibC7j($J!Kqk^K}ByJ z^Sv=XsNt5F>_!u5 zJ3{Vw3W-Pp61MwyXz5XUQR@+hmY%n)EV2HSwpAqRW~m3BCg5HFnMqRj9r6kBn8 z+Kl3Dfa5@M^o1Y#ez9wjaU1x?Y=0b-JmGuvN6`E>^qs92bHi=oWn`ga>iGvkWzI$g zehpd9`q&ByLvh@AU#z}Ie;(dzfbY@QpyM>BNf-k;WqAq|QmQ3)4IO1gzduL$k3t8W&%*x|#u^ zE6oP$ViCwkql~AG{UCREXWOAs@25XZ$07kHs7xI#prsLcKr&XNLfnVxM2w+XK1}~D z(W%ej6mj^uaT5{0OV2dU0aqNHE7*eCZK;F)s$mhT5^$`-tZmMsH=zzWdKK zp2CRexdXEN+re=i&{102c1+h0q75y}7uo7V^?bC=T{Gzfmx26H9h(t~UEn)`ANQg9 zLFD!lbW-iV{LGL~9f;rIirKj+@87cNFR1B-nV}iiGAlFo(Ei zoVpnvMiTz}e6Kz#)*KszQ*|2e&YVQF;{=T-VILmdc~rjA9Es9^U|GB z8!za~Fn#MN#qJ2OtA0PX5M$y7A2JLaQ4x7KLq^j>Hh};pb`jE5D6P^wvokwoc3gtjGTb-t(Tn zpzVr(<4oIF>~COlKTZq=KNJ}E4d`&7MSp3K<0oeuuEz)?bbuw@2_|~qtLmiip#vhPLtm z;yBTO#xagZ?%`)5RhxFDwtSMrcUK?%Nyb=xpdWi->h8k4L1|qCZertH5|vjwDCX?y zeO&WH`NBuCM!s1Cop>d~?8E|c$KR($rR(sOiP_wGB~F=zBE3#m2!GJKV*Qx zhcHtkF54x^)C0kV@jIvtKZa^N)QkN({#;?I{E$xL39yCHJhr%n=Z$GJVEh2Hw_=au zkW+)UjEc9>_!#1qbBD$9D-ObM$B5I>96rFGx|Yr2N0V@v9Z%dZc3Kt#Xq+K$rOQsG z*FBgW>Z!uad!TVQlp(Z*pC%vOvNsYuIf2>PG~DQKOWO3O|9lg<>CdQ`XX|}QormN| zpdYiqKx~}bkW>A*1I_f_VH}2jSiZQE^$pmCbfQ0f7~S3$L1TOSc<$?@8c7&LhJ~x- zSL@?9dnbU)EdJhsWfdmvf};%#7w|*VNQ{x-0w%D@ScSne?Njz^2iRgac{odcA+`x_ zAFROF7!7bu6dS$(+yNx`mr63%dIvH&JKZh+Npk#o3uVdOcQx>iwh=PZK9w1hr@Lz* zDscS4UQBNM2Tk<&L&}e#=aF9VC-SSaUm6n;yr9V&@Y4Mqma z(#4tvv%YEnAcei^f3V-&LH11UakLhK^riWl?0cBL;NV+5Z0`=@p@9_=j8%Y)$)Eh@ z>Z<@N7N5bGhF749j)Md(FZ6+wLSiFN5eh+2fC5V8hX64;QSa>Y!l$FAk$OvPJa8;_ zoiP8y26%8p{881wIYCV%dOY?m1s8uD=bEflX zAqZ_TI#Ac5j%vMKv~d^531?(B-b8uu-v%&F#AEv;<6iJgX~Ww>;HBtBp>lCF+l;Bm zTLgX|l&n-X*Uynp;xVtte!2Netkz#si`TzaS33L?e#H9?{Dx z8_`wFao;_`)Tjkv=+$KY0D^o_F$}0&dXb%|A~(*10D1O2?zcvoK>)wsih(3Y*b&Lu z1=-96P-Jr?c!0>-kyu1@4bZ_z@3lrU1gzz6Yz36AGsvGuhFRy@j1vKJca?*h)P}IP zGZ+hP0?jhe%;{Fjcq*$(rDotNc^AtM=^EWA(gI9FV|e7d#?NGog9k>teDIAp+@yX! zx2ltl&Wn2B<-I7zcQq9`5uYl=HnmHp!M!hu}2AX-~2Z;hJ&Q>m5fc}V7NM-gp#*4lg;Ku#2XQefq^fOCh6k2u;61s9x4EMLA!yqegPVkL)_4}yxLEf=Cu{uv)? zu*o!O(h+(avjn&w1@1*!lYwY*&^nd^-M0$P^C_{8XCzA~2I$^1T$QRP$^5PW^O z{NhedcM&8IGbeY~72pRFc@Yg7+29e44L|!lNZHZ)1c*exchGdM0iB#~2$E;zR-=+h zPEk@?WS}#p=Y%goePba;%HlAi`;%IkUZf_yj@P{{pL;ES8~+Fd6%=po_$j@UZ{3_; zd@eh>01hl0A<1FrFboo|%iE6QfL|IXY55jlJaED#c$xgHjOdv9(P85XCE`|oQl0ax z=ooYl-&=!2Xz0q#kOX>v7&R=zSam(Noy>MxwxkzK-q*NF4gVzgwc!$(IoiS$U&~Wo z%kV3?TU*$HA;Cv@U6dhaH}3&ThG9fvBQAzO%~{vo^&H448Quw(QF;zVjd!f?u@#v> z7NBly_>4<|CE6;%4tk1oz zT7No5t_H1e0P;4jgHWWy=m(t27CirY{eN2mb<1mgWz`L3k~TC{j<2wdYM3&r(wSdZ z;SU6S6+vfxd7!-37xV>eKb3AO#^58g3dts1vo+L{<>hmUsK}? zm}tURRdt}Yth}zWticzkF0UyI_{u2>T&n&IwCW7{ol!b-=Fj#;iTMMn@0HaJ%gSo~ zl|Hj;LR+BAeRY+-fbMb8iaLLdf5{5lsH2-q?NYKt!31BhVtl2qs=To#*f62KqPmQA z{eiOT%7*b^ze?4J=L?c_Dl}&u#>(lhf*>?gzU5^QoNiiGE2&#n=f9xNSvWo4*-+yT zI)f|feOz~1`|GP@k4afjs_QuF!D@e-_XWy>jR7A3qej`> z%b~U+yCO8_OUyfqmj-<3M@^-z&=;tHsg*DBIZGN~UZcim7gX6iw5pQ2>R^L&9t^^o zKMNcLeRVdkzac1v&guTzT3Aqn0bATLmkkx{VOWi8XVs;rtpZ)E zWA~1tN)^PYhI+!2*LT%Ia$xmn`vB zmM!+doBGNs8*0lM>oI%z##58P;e_SofeC>|HKoeDTK3=6j!q0xzovSzRQ(^+PaGEr z975-$=&Vy#hnT=0z&OHiM#0=9Snwb`K%}5u^H?XG@^Z|T80=*}XJH8jOYk)zR1-A{ z_-f0m>A%Wqs;lCCenRxY;6sZ}w@B-Y1tt@Mwe`~3acps1eWRKwrIldJEox1TI(ryK z+2R$P9x>U=B(j*pFkw`~adoE47o}BhW(pV=)r|Jr-x#D9s`b_SVX>H@RFJZy#=jU& z$-j(~0R+X0%5dno5no)O{I-=JxNhx&%NpT=twm~HY^e9e&*D)Lh;%Bdef6AbM0upf z_{!j7EiKN!WKTK+W~%E@rw)v8YPVsug8mABO&P-g8)j!;S-=mtj>MwaHpGV&<%sZX zz9v=QhKU#QwbhqT`Hi-a*WK5~d5TF|2P?HWML^8sNqNbQqX07?B zeZ}IDs>-0u+T*b)+Lts-(Idz+xI(u8T3S#2aFI}G6`sN=RyXKqMK`DM3Lyh$UL&SH zCootAVUHOP3#*DA{4xu5XbOusuD+h#Aqu#Q_RKnytCnJX$NHt>5sq_p6{dIbM*ZQ5 zk~$e2nEi^$rwWoagDaE^2k@q4G8ht^OUMng9#`d4vBJ12+qmTlQ-cr&GcxC;+9w(9 zxjBM#3L4c3X9o!WLPDmRU%=TP8iDpSDMco#v0P1z*R)OFNup;>&$BAU(u!bh9D!Ir zIj2Qgs8p4NkxDEmP#EoVH*Lls({s11c-8#nz%kS15=T#QRx}1wZA55eoWEsT zvAkj|HlEPiO21Rsjt>qa-=+4*VGn?ynwXyO4KL(sz@X^#bz5F0zOjXYTzN= zdkyv)3BNWH8J&uMP5nC1MYNm44nQcMfwa*Kk@9|Ivn>}hjb+lO4{~A ze{p`BzfYR}2>3+Wv;n)Wgg**8NR3U{iyjL2W|Sk%+JgE>Cn4=d%HOlf#sLHVE>|hi z(ig!eQtwNV$abXb-atQbpr-3R)Wch{rSC@~JCLULp#A+J52V>hyFQ3S79w5wAr3wv zP5&qoxfki`kAa6x+N@8&C(ve!LwR!EC=MAx^p8>h>V!exT8z?`X0DTd@iqBU>A_(K67wO%L zdoS?MCN$5U*^*o?6qnl5ZBBq*z|u0pEHt5EJ9T8F zSuH6ZyR&JCJ!`r>(``?m23+>(Fvy{_1u{o!n_@i`J#(6BjxE^6;;uyfHL!(T(gELBCIhb}Wu|?#)J}d5ExV=V z8ADG33cuZ151V;Fw|foouVlL|sWa_sP-(j}`JExs9O|LDGlrgqdM^Nf5^QS-Y-~V& z3+z2dCO_GSUDh9ldg-vq@w(kU{q@+hlUq=Ax}~Qx)qt{}1*pFl^?%Fy`S#3flA$tJ zQnoFr$pO_#FiVr+>t)-;Y_A>d;h7iv-U*lsFuo3EAFfIEMrkawkbp!mSfBO`6-DedQpxeNxL{k9|?{>qG350Kq5%1EZ=&%`;T^ z8V(;+2w!CK)d~8e0jmLQ>LA5eNAjFRUD!S><-;U<&#)@{_F>h(kk;t(UrLjoP8ccE zekkw9!BZCA-IU|mc7{c-oXImyjmq1ym8GJCp98-X_>aH`QnuGopZk~5OnaBJz}`6~ zWoeRq^_Vm5YsM7W*Nw@yugBdvCb<;igEI6HUveF=rvZB!u%`jLhS+leEC#Sd1LqLf zn1Fc+fxaOc>Sk+0JqZ=rwhyrRAT}2m1!$oVuqwdjY8YFU2HYkslb5+duMl{psOvHD zN{E*aXr5+o_RtlHRTV3VVpxWXb5L=fuE=I_!oXGxf4LrWQHX-~+MAP-FA_gQ{jNuu z3ooDVVp+@=z($rw{f}p8P4w9fV<`pdI@G%r^&Z#yeQk1{J*$KIeGPrlm1!7`mO&6g zT5{(Qd$vd1kwvkS7u(mR&9bjgTY}ULG`5e6el?Xkjk61XB4Cz%O=|KY;g{KB+%A+i zqkIu;?7z~R?MJ5E4v*N6im*F!aelcNbXVfM$__%rpM(EYI(2$srRl`G6L`6Q?t`~j z;pGcS^7#Vr_5$x6@(GLnMg8u|g+{qkc9GZVebiZa<#@VaFU_|_B3Izq28Y{{oZL*u zQ;2LX%DzF_hvedyY^pgWWzV3WmkZ~eRiN34kCAG$y!-fJ&N~J6b>Mz`Zpy9TKF%Wx z-;~=wL8t4!NaQ9woAOP7y8*wj8-8Ig ztf%=n%!6Zs1N1F90OV;vo(AM;K=uJSxd6ao082EG6yPi3F&hZ<57AIJP|tuF_pRsy zY(9w11xA5php;)CMYbvpoMELU(4onNCd}mTjG@WX5@B9xH?hkVx{X4#JJW3AJOJmR z;d7C?(E*5+<57c{arMKI$d!0j<3T%{H5Bt2q7(wv9JmU2HpHA_kK!YyGhUcscR~<4 zQg9EgwT~{eXP+yEuHvZ|P;V*f;dn;$s)4`w81Q<){hTa+Nk=)pYjRSaO0uuZIn%yA zr^w!wlW*_Fy(TAlWxoUL9f|>7mjlm>y9;-Bj*r-I(K*EcmS`Y+r2<+pn*eMCVj&Pq zf#^YPL4=wrnr?Cc;l~prKR&?bquyL#6lfj^n*$j6CMUu-{BMjFp}IKfX1sMV9@C$UM0OERVjXLo zmz`X14e|1Z*4rl)+H=p9z(r!E$5Fov^?L`XkBF8LsR|MERJ+B{hi~v$-yMmZ_utz4 z`Z4h5_Ac0aH|+fx*!y&IZ8?AOO9R|6Sh#{CTL?U=OJk4c^lU@?Ft8b}J5#o{p= z2wXBmL)}1~g(2u$(FfRk5St5(0?iI#b2N)=RT^+xX%UKHo@v5N{$_E?k7tA$*SE(N zx`{$GJ5x77>Dw-bTnn(KYuXx#45t15H+Hsta!OOOeaGZ8?LCu=?8fAL`)=IZCl4H7 zT>$K9z@7$dIMm5C#6Aj9p}z881%6pwu+?#?MvZvpGU6;IC7?9LTu8&6B| z)<-T2P<0Nf&eK&%P{c3mtQYLCC#M4lopVwP(#npiW<Rik^Ubq$yCJ>Y{ z9@$QMuS6o(=s3~3cI5I63|Q$UpJAUg$DVt(I2FW*%#6B+Ps$4IS+nfUGJ6*60K$~LfEwVAek~H=zxYA>xR&b= zYYdAOS<9fA_VrFoIL?dg&p3;*(yhRAaxP-p>G3hGcW6E^W&mR;Fc`9briN`amhZqu-8(LdMj8@#vjWouHT&q zc%t($=64hq0{1E4dZMv1;`D1%^0*H5avh36xN?w(>(H6@!sHw5rE~3zO6{e{Tmo;} zcTGBDX!14o(%JS!mG)A%y>PxfFOuh_Xs;XX-T7uDvPsKS$Gp;BUbH>E?!`*v@qQbb zIkeQiGHJHGGiec0Hzs2xShDUewaC@1RwV#brUAWf;3s@$4V&R|)(ofnO!?|BM7an5f#hN2lgId^gv6xXk>^Z<2GJqIb#W4e2>WM+n*wSrrY&~rMYjp z6z{coVardhm6|{EozZkn(2PqM$MV7!xVm~&qMNa;*7b+$Vx6_&gDSa7`NcFY6Fyoq zZt|V233KVk%WUr_Y`ZYOS_>kg^Jcrdb^cy0nD2FdBrE;Dcs--XCy|AdvlV29PUq{i zN~ghxiqZq@0VI{j3qdvrP|N7Xw}r^o2@WS!2?>3p45>2$eHuhi)c zI$f*NhjqGDr*G=?Q=RV7>7WyI`#L>Frzh)lhEC_}v`VMTb$X>vZ_w#loj$D7tvY>E zr=RL{k4^`jsN2`+F*-e2r!#aqU#C?%U9QtBb;_T@=e1U+59@TRPT$n&r#juE(?NV$ zf$Kn>9;4Hfbvi?*^L1LK)8#t7Ql~fQbgfPw*6CKAzNynsb-G8VgS7uTP^ZV}^kki` z`B3pU(BEBms*;E9Q0enJ{ijYp*XbaQcbHDc>hyG-&eLg?PA}5wN}b-Q({(z1NT;vs fG<~gV|683Oa+k^ Date: Sun, 26 Nov 2023 04:23:19 +1100 Subject: [PATCH 238/694] Delete bin/64570_synonvme --- bin/64570_synonvme | Bin 17241 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/64570_synonvme diff --git a/bin/64570_synonvme b/bin/64570_synonvme deleted file mode 100644 index 2dc63b55f2cfc20dc364bbc39d2b16105db24799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17241 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 Date: Sun, 26 Nov 2023 04:23:41 +1100 Subject: [PATCH 239/694] Delete dtb directory --- dtb/All_Depreciated.txt | 1 - dtb/DS1520+_model.dtb | Bin 3617 -> 0 bytes dtb/DS1621+_model.dtb | Bin 3834 -> 0 bytes dtb/DS1821+_model.dtb | Bin 4420 -> 0 bytes dtb/DS2422+_model.dtb | Bin 4923 -> 0 bytes dtb/RS1221+_model.dtb | Bin 3900 -> 0 bytes dtb/RS1221RP+_model.dtb | Bin 3904 -> 0 bytes dtb/RS2421+_model.dtb | Bin 5871 -> 0 bytes dtb/RS2421RP+_model.dtb | Bin 6225 -> 0 bytes dtb/RS2423+_model.dtb | Bin 9166 -> 0 bytes dtb/RS2821RP+_model.dtb | Bin 6918 -> 0 bytes dtb/RS822+_model.dtb | Bin 3617 -> 0 bytes dtb/RS822RP+_model.dtb | Bin 3617 -> 0 bytes 13 files changed, 1 deletion(-) delete mode 100644 dtb/All_Depreciated.txt delete mode 100644 dtb/DS1520+_model.dtb delete mode 100644 dtb/DS1621+_model.dtb delete mode 100644 dtb/DS1821+_model.dtb delete mode 100644 dtb/DS2422+_model.dtb delete mode 100644 dtb/RS1221+_model.dtb delete mode 100644 dtb/RS1221RP+_model.dtb delete mode 100644 dtb/RS2421+_model.dtb delete mode 100644 dtb/RS2421RP+_model.dtb delete mode 100644 dtb/RS2423+_model.dtb delete mode 100644 dtb/RS2821RP+_model.dtb delete mode 100644 dtb/RS822+_model.dtb delete mode 100644 dtb/RS822RP+_model.dtb diff --git a/dtb/All_Depreciated.txt b/dtb/All_Depreciated.txt deleted file mode 100644 index 4bbd93a..0000000 --- a/dtb/All_Depreciated.txt +++ /dev/null @@ -1 +0,0 @@ -These model.dtb files are no longer needed. diff --git a/dtb/DS1520+_model.dtb b/dtb/DS1520+_model.dtb deleted file mode 100644 index 5bce9d2f9169d9bcd84acafddecf237e72476549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 zcmd5nJd22qfrnCp?g3bt8JSPr6B5` z0>U%VCa&@98$c(3kf%w@qUtgbu1^EK$kG9YUmRLyALiZCn!~(bT7Q7~b0A}9zimB% z2@KS&!*UV!3M~GSRx*+(ad^nGXAmhEMi_M5%oTI(%SW*)eEX!3A*RldktE zIc$&O!TVg7Lmg{dro36Kl~RsN$GSdV|4)4daYobF4NHv+>kND853akHti7|q`w4Uv z2nWg`?+?&jAj}E!&cO6Un6$PxRsR{u?+WZMo90uiQgKputmZ=MJH3?B7!1Qe`{zJ^ z72gsEHdVev{!o^sZrqbMbWB#|1!aYN6}zZL)R~5T74~tUoW_0+=EsRWukBgb)%}?Z zyG%viSB)xmu{#U7~`vx|K#BhQtV>dwWpXPhexXqywx&G&^2zKbQm=zo4cS{r#Us(Y`+ zn_qH#L|>eRygGgKVaa1r;$}f7q$FZK4ap%*dB9>K9u}Si@gRYRhYgZ(jsx=UQ1bh} z4;A*7rXbGg8_Dz{#+{V*fa48P>U2Yw_a|?47|TX>;Bztz;)AXmgk*Q`WG>8ra9I}0PAxVWqQc$FVBAw;4H+L4c*LZzLuBPEP@IUDJ z2T;%=Axb1VDkKmy`?7r(JGq2NSlaVGX1|$lW_H&1Y30ukLN5Ozgsc&=@&VrWpk0G@ z6&gI&2F$;e{o1dkMyKJug#G8!l*Mc~t<2wq{xVnd-o&wO+jCZ3=Rrm04D?YS;vp7} zZ$Ud(8CT`c!u-=BA5(bagL^JO+bIHnz2EQaImC&fRdL_I_zpC!=Ntq4{|%b8 zxzl$ZLkAv|ZQ^$Y)=GZip5A0-N#^mG6;B+5AXXd={K6M~t^1=Gm9~6V<5Td)R${nf z<**pYcOIj=5Qg4gx1+ZZ2J+N6B^ME%L;C|`s4;{sTaLZ$+MO5Dt*x=S4tvYkP{&SS zW1-@axL)Arp$ZSN(n(UyCyeVC+kRv}wAb(ldN5Pw!gtQYzz;@xkG9d$xH4pIxV=Si z1@~=t(}6=;wPU|CSI^1B4b>)NoARCIkAg_T2|rdicV}(GIQ&$y!j@)#EyT;%r2TaS zn{>Xn#IQfh2hVd;47IOa8S>T~oAb5WWO!*`H~Z`V$*(9aXrB6UrEuXH#(Mjk>*^)X zz9S@2R>n6SoyuzhT=Ow)3c8o}RMSVJ?}t#WeJWIi)E~!hY!EUBvwz76Ji@X+u|gz zhf=mJPVyRP;v|s%0jJet=iVxiukvr>q`ntS4%FjhzDtgIo*FqBy$9uS4 z{Dpj-lkm<-#;Gm$ma8?wkwv13Q(aaT3F9w{#m&oDuD{j*_z3k(=ZUbPf~k&r8)jon zYnXV4%+zN1?$veH)PbhEP27)izo~6m;9xfHrjLy#ap`XDA!~ArZQ_kgdkTCA$bO@NiIH%rj z?DNt7O9RFVvbFteli+`+I7(jcf}4@WwEU7{TO3DDoG;H$iCt diff --git a/dtb/DS1821+_model.dtb b/dtb/DS1821+_model.dtb deleted file mode 100644 index c90ec426c8f28715833c111fb07f8f048c60df48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4420 zcmd5=&2G~`5Z(nUD5WY@#epL?RA^=Ar?f~&NTjMbR6>G7B@UKjyNQMEHU0_BnYZ9Q zxbY6~2ndM_5+^t#X7G5OJS(>RXaLMVIWV1Q*h}ng@O5@Ft{zprg7Rb_Ff3LHpXTL))ukx zOe2JanT$u+vK%{cWq1gUMqxR}Fs?rgW8b)M9O577al2(MP?DyuV>?5&M%hRet_WEZ zZf6->&i%C2GhyT6vv^L1Emtnmwn^Vnd+7KAj^mX$wrC1LTqj4#D1#UDT;)aoyfhatSAySoOr}n z$*E~SRqYf-VlhslNN7$T9zs^k5_PMF1gJlEYWE3d^ejwSlAADV&$0?8p7j%FDEz)q z=b^6Gb$1Ycj}hzjc~x4kYh&&D*zp_mb4>34JnfgvBy`lzQzQZp<_hY31n-y7^jQsS zl%G%r?}aDk9^X(3Q)FUs)}OSBc_mY#SF3k-zTOI#8G7}6Rj-h&;|uvZk1q#Mm^1Y1 zc_kzGirlZ$dt;v7cHu_~ahTHEDdtfxwsnVvv7Pz-z#}1Zy?~6oB=uQD_~j~%{V0#& z^2PFadc*>Gdo0F>t_wTwjhBFU>b;i2A!Lk&Q`tE7CdX{oj^RQ%J?ti4nu=j3WT};S z1Hg3h#Iw!=I~~rR>NA#!ncPk?3;y}Q^2{2cAy_M2~JXS|bqUH$uuvGu2nv0cX2{=oA-v^8kA zp}~j0gyCn|Kk?1;(PelpWB>Ie6uuZvD)V=szmnwh=2+J>%`|$3@t`7e1^TED@em8g zccI;=jH~iXF#jTrGZ&ut!97=@9R{8qiwLI*93T2s+z&7Ydy4gs(EnB$e}ew^e0&X_ zU!Wm2V(`5~-7pO3$^A_>qu)xKony6$M?qvJzDS?zgu#7pV5JuImEAvRRPy@?V_dtG zw-Q70I4_3UkIxcg2SzYHClB<2!YMI&tr%6`H`~&m2}5x>Y0JZzFs9q`s1*bCsdH+! z1+oY}O+Kw-OtK`(X}=nXvf*M=oF|;w$w4E+oDsTo)@EP3*zy8T{|$etv51d zh;vikt%H1-cdo7lurbYZEig>mik&?57!Sum_5E=R_WstiZEaKA#V_c=jPw!c<19%W z+p3$$@T+d&yX})?MCjU-GSlcn+k5Z@BSB?b(uo5*_>}WWwSN1 zJvvEwmX&kfshRs_e+y�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 Hg9zd;N)Y#q diff --git a/dtb/RS2421RP+_model.dtb b/dtb/RS2421RP+_model.dtb deleted file mode 100644 index 4b7d333a9f52fbd5be743d699ab9c77a2d8b5e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6225 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 diff --git a/dtb/RS822+_model.dtb b/dtb/RS822+_model.dtb deleted file mode 100644 index caf3a9c1fa5c4fc67c49d4fe2a5b96ef3d60f078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 zcmd5DEbKurms0ED2RfR7OI-u&6!JNwo?i-MKj?aZ6^e(%q`d9(NP*0a9}x&0;~ zf&xfZ(BD0snJ1T>hb9dJWz;aQw+>tx7dJ9q?a;@l6x>e33B5xHboA z`nDHB-RFVO9^&Er7SL-z&jBGX@=*@eUI0Qle1BwhE8&e##CiUBRbVt0Q~3w;B(g#dUia zbDjDvAFZ+FvkSQnN?lwr*X#53|EaH{wo=!k95fxQckG3~nAmxItzfVF6$tABACyDh zKR_=5;hrGxCeSlsD>)O%KJ(3RweGe+{5oUr!%0i~ljil$)LkiaKGRax01OY>0DJTf z-UA#K!=AZ4L|LUpJ@cpZjBMB&ly&mU@wP7Km%=irBhyA=-{K?K_Z2!>))B}AT=#O9%=WuUd`zy@R^at?M#XnXn z{wnHa$7*E{Km+bMwc?O2%9XqS0b`h}+c3XUt&HR<;;qTm8-E5L(DbEqwGYzpba@@i z)w{i{lb6^$c%yXuk^#djeZK1f$#@SK)WG*sFcarc16ytI&)ICULay{Ns8!!*k{x&Q zom^|C12IAu)7E(R<37=kVSW#&JAHSQ6OIZ;+>X2y{s|^i9k?)bx7Y;0#5Zxm*;P zjGtQ$AHKzDrERutCVP|jm;gA(hn`BmWG9p8OJ_S^1ecsF^jcc2+%M=?z}O#RAP&-v zOjV7r#k7>9Qn@V2LTXc}nz&2EG)3JuaLK5)Im>}SN^$D>^E`*DekwJH8~KH2W|cBr z%NcO8R!e?d3Nt@{X{waRFOt2t1?x3wsVO?6do#|6UR3RZfzGjHDey+8Bj&EC&j&;BOl_M3!| z143?n1Mho4cYt02f`@(u{LkHR`G;H^!}mv4w-Vm?M6Aa!{%tTfF#bKvUxfG9 zK-YmB_M^wU2?UN0>aUCAWmxOu&?ixeHdVt-sqFm(AqXvtsj$M0qd(ueS?}L>VUF>+ z7(0yAty~rZ{XdH_*$5-*FZ;2(5eCM&g!3R_M=9I>)Td-LuXjPW&#O#W1&TK0vPyX- zbRJSmXuYV0dyRYY17kbv9d>{}Fmis!ef-gwJQLYG>O>!D#P#VO!`0yW zsx%Kuoo^v`RLrx&Mdj;f5c6c!H#{Fd1zG3I`h0B^SLajA*A;w@(jCSL<#I#IG~g<#`Yg=Kt0gcf&K_KaSr$PwZFm~O@9DCUHoIU z;;*7!cC1$R05ss9Q!5VXqFlNAA25cwx()Ly)yhb&BHo%@z42%80Zm^zSNk9hPnXxR zT)o@NI(doBgEvaYFBver(&xJ#kc{_$K@EIA1v7CDHL%qN|D4SxE96QagIe`{CfRW( z-^sORIuIjtF>Q@^KkgI#80PnYx-$qm;h1&yA0^xFyhO}!wEFe5Uym~0u18vD_pOWV zI)I3Ij@@qE$rNeEA;kO3cN_ie!=uB8j3t5X{04cNhd`HfL*K;QLrt&O4bD)snaf3y z$@sbD@ZnpWR@!FUX0kVVj|qTteCVn4OLj7ezI3(&MsUf=La(LO%Kd_V1&sY62I3&y z$W+w`TTDwyDwWHUETlGts)@TqOjFct1DA|yo3k7Uq!g!~KhJZh>ZekJxRGCYW>zV~ zwVVMbYqjLZr7-jJm!?WtztReAIsCm*t>v?(P~^eU!$X4K?qyLwA+DGkW$bZrLhu}M zd)i16PZepjvMN)hXFHcTMB$-wX=P^nIo=>n-Jxpq0a>+x4`5Tw@cz#cc_!<0l`$bk oT5e3n)$y@+-MNdW2>l`=YYILuazAKc&~Lssfpd}PS{g(C1sU@nqW}N^ From e0deaf8926fa7a8e80c383918876ecb4db6a1693 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 27 Nov 2023 19:36:51 +1100 Subject: [PATCH 240/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c01f41b..654df74 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | | Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | From a0a351ebe235fbd1345a737f87987aada6571b33 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 29 Nov 2023 06:44:47 +1100 Subject: [PATCH 241/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 654df74..b7b3805 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | cpharada | +| | | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | | Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | From 870c1941fe7c6e1fe2d5f86d3a2fff4bb9f6391a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 29 Nov 2023 06:45:33 +1100 Subject: [PATCH 242/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c01f41b..b7b3805 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | | Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | From 86f6144febe3cedbc16b9fc056ff039031c44665 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 30 Nov 2023 07:27:22 +1100 Subject: [PATCH 243/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b7b3805..dc54161 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Matthias Pfaff | cpharada | +| | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | | Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | From 77491ea0d91216f2ecef032ddb845f74ee312177 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 30 Nov 2023 07:28:57 +1100 Subject: [PATCH 244/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b7b3805..dc54161 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Matthias Pfaff | cpharada | +| | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | | Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | From a53820d313ff307dcd00f7b0894c432c35d641f9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 30 Nov 2023 15:49:24 +1100 Subject: [PATCH 245/694] Update syno_hdd_db.sh Added M2D17 for devicetree models --- syno_hdd_db.sh | 205 ++++++++++++++++++++++++++++++------------------- 1 file changed, 126 insertions(+), 79 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index aff7000..bb8fb5d 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,7 +30,7 @@ # Fixed bug where memory was shown in MB but with GB unit. -scriptver="v3.2.67" +scriptver="v3.2.68" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -434,19 +434,40 @@ fi #------------------------------------------------------------------------------ -# Restore changes from backups +# Set file variables + +if [[ -f /etc.defaults/model.dtb ]]; then # Is device tree model + # Get syn_hw_revision, r1 or r2 etc (or just a linefeed if not a revision) + hwrevision=$(cat /proc/sys/kernel/syno_hw_revision) + + # If syno_hw_revision is r1 or r2 it's a real Synology, + # and I need to edit model_rN.dtb instead of model.dtb + if [[ $hwrevision =~ r[0-9] ]]; then + #echo "hwrevision: $hwrevision" # debug + hwrev="_$hwrevision" + fi + dtb_file="/etc.defaults/model${hwrev}.dtb" + dtb2_file="/etc/model${hwrev}.dtb" + #dts_file="/etc.defaults/model${hwrev}.dts" + dts_file="/tmp/model${hwrev}.dts" +fi + +adapter_cards="/usr/syno/etc.defaults/adapter_cards.conf" +adapter_cards2="/usr/syno/etc/adapter_cards.conf" dbpath=/var/lib/disk-compatibility/ synoinfo="/etc.defaults/synoinfo.conf" -adapter_cards="/usr/syno/etc.defaults/adapter_cards.conf" -modeldtb="/etc.defaults/model.dtb" + + +#------------------------------------------------------------------------------ +# Restore changes from backups if [[ $restore == "yes" ]]; then dbbakfiles=($(find $dbpath -maxdepth 1 \( -name "*.db.new.bak" -o -name "*.db.bak" \))) echo if [[ ${#dbbakfiles[@]} -gt "0" ]] || [[ -f ${synoinfo}.bak ]] ||\ - [[ -f ${modeldtb}.bak ]] || [[ -f ${adapter_cards}.bak ]] ; then + [[ -f ${dtb_file}.bak ]] || [[ -f ${adapter_cards}.bak ]] ; then # Restore synoinfo.conf from backup if [[ -f ${synoinfo}.bak ]]; then @@ -459,22 +480,40 @@ if [[ $restore == "yes" ]]; then fi # Restore adapter_cards.conf from backup + # /usr/syno/etc.defaults/adapter_cards.conf if [[ -f ${adapter_cards}.bak ]]; then if cp -p "${adapter_cards}.bak" "${adapter_cards}"; then - echo -e "Restored $(basename -- "$adapter_cards")\n" + echo -e "Restored ${adapter_cards}\n" else restoreerr=1 - echo -e "${Error}ERROR${Off} Failed to restore adapter_cards.conf!\n" + echo -e "${Error}ERROR${Off} Failed to restore ${adapter_cards}!\n" + fi + fi + # /usr/syno/etc/adapter_cards.conf + if [[ -f ${adapter_cards2}.bak ]]; then + if cp -p "${adapter_cards2}.bak" "${adapter_cards2}"; then + echo -e "Restored ${adapter_cards2}\n" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore ${adapter_cards2}!\n" fi fi - # Restore modeldtb from backup - if [[ -f ${modeldtb}.bak ]]; then - if cp -p "${modeldtb}.bak" "${modeldtb}"; then - echo -e "Restored $(basename -- "$modeldtb")\n" + # Restore model.dtb from backup + if [[ -f ${dtb_file}.bak ]]; then + # /etc.default/model.dtb + if cp -p "${dtb_file}.bak" "${dtb_file}"; then + echo -e "Restored ${dtb_file}\n" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore ${dtb_file}!\n" + fi + # Restore /etc/model.dtb from /etc.default/model.dtb + if cp -p "${dtb_file}.bak" "${dtb2_file}"; then + echo -e "Restored ${dtb2_file}\n" else restoreerr=1 - echo -e "${Error}ERROR${Off} Failed to restore model.dtb!\n" + echo -e "${Error}ERROR${Off} Failed to restore ${dtb2_file}!\n" fi fi @@ -519,7 +558,7 @@ if [[ $restore == "yes" ]]; then echo -e "\nRestore successful." fi else - echo "Nothing to restore." + echo -e "Nothing to restore." fi exit fi @@ -910,10 +949,15 @@ backupdb(){ if [[ $(basename "$1") == "synoinfo.conf" ]]; then echo "" >&2 # Formatting for stdout fi + if [[ $2 == "long" ]]; then + fname="$1" + else + fname=$(basename -- "${1}") + fi if cp -p "$1" "$1.bak"; then - echo -e "Backed up $(basename -- "${1}")" >&2 + echo -e "Backed up ${fname}" >&2 else - echo -e "${Error}ERROR 5${Off} Failed to backup $(basename -- "${1}")!" >&2 + echo -e "${Error}ERROR 5${Off} Failed to backup ${fname}!" >&2 return 1 fi fi @@ -984,7 +1028,6 @@ editdb7(){ echo -e "\n${Error}ERROR 6c${Off} Failed to update $(basename -- "$2")${Off}" #exit 6 fi - fi } @@ -1015,7 +1058,7 @@ updatedb(){ if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then # Replace "disk_compatbility_info":{} with - # "disk_compatbility_info":{"WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}}} + # "disk_compatbility_info":{"WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}}} #echo "Edit empty db file:" # debug editdb7 "empty" "$2" @@ -1116,16 +1159,29 @@ enable_card(){ # $2 is the section # $3 is the card model and mode if [[ -f $1 ]] && [[ -n $2 ]] && [[ -n $3 ]]; then + backupdb "$adapter_cards" long + backupdb "$adapter_cards2" long + # Check if section exists if ! grep '^\['"$2"'\]$' "$1" >/dev/null; then echo -e "Section [$2] not found in $(basename -- "$1")!" >&2 return fi # Check if already enabled - val=$(get_section_key_value "$1" "$2" "$modelname") + # + # No idea if "cat /proc/sys/kernel/syno_hw_version" returns upper or lower case RP + # "/usr/syno/etc.defaults/adapter_cards.conf" uses lower case rp but upper case RS + # So we'll convert RP to rp when needed. + # + modelrplowercase=${modelname//RP/rp} + val=$(get_section_key_value "$1" "$2" "$modelrplowercase") if [[ $val != "yes" ]]; then - if set_section_key_value "$1" "$2" "$modelname" yes; then + # /usr/syno/etc.defaults/adapter_cards.conf + if set_section_key_value "$1" "$2" "$modelrplowercase" yes; then + # /usr/syno/etc/adapter_cards.conf + set_section_key_value "$adapter_cards2" "$2" "$modelrplowercase" yes echo -e "Enabled ${Yellow}$3${Off} for ${Cyan}$modelname${Off}" >&2 + rebootmsg=yes else echo -e "${Error}ERROR 9${Off} Failed to enable $3 for ${modelname}!" >&2 fi @@ -1135,7 +1191,6 @@ enable_card(){ fi } - dts_m2_card(){ # $1 is the card model # $2 is the dts file @@ -1208,10 +1263,36 @@ elif [[ $1 == M2D18 ]]; then }; EOM2D18 +elif [[ $1 == M2D17 ]]; then + cat >> "$2" <; + }; + }; + + m2_card@2 { + + ahci { + pcie_postfix = "00.0,03.0,00.0"; + ata_port = <0x01>; + }; + }; + }; +}; +EOM2D17 + fi } - install_binfile(){ # install_binfile # example: @@ -1235,7 +1316,7 @@ install_binfile(){ fi if [[ ${reply,,} == "y" ]]; then echo -e "\nDownloading ${1}" - if ! curl -kLO -m 30 --connect-timeout 5 "$2" -o "/tmp/$1"; then + if ! curl -kL -m 30 --connect-timeout 5 "$2" -o "/tmp/$1"; then echo -e "${Error}ERROR${Off} Failed to download ${1}!" return fi @@ -1263,37 +1344,9 @@ install_binfile(){ cp -p "$binfile" "$3" } -edit_dts(){ - # $1 is M.2 card model - # Edit model.dts if needed - if ! grep "$1" "$dtb_file" >/dev/null; then - dts_m2_card "$1" "$dts_file" - #echo "Added $1 to model${hwrev}.dtb" >&2 - echo -e "Added ${Yellow}$1${Off} to ${Cyan}model${hwrev}.dtb${Off}" >&2 -# else - #echo "$1 already exists in model${hwrev}.dtb" >&2 -# echo -e "${Yellow}$1${Off} already exists in ${Cyan}model${hwrev}.dtb${Off}" >&2 - fi -} - - -check_modeldtb(){ +edit_modeldtb(){ # $1 is E10M20-T1 or M2D20 or M2D18 or M2D17 if [[ -f /etc.defaults/model.dtb ]]; then # Is device tree model - # Get syn_hw_revision, r1 or r2 etc (or just a linefeed if not a revision) - hwrevision=$(cat /proc/sys/kernel/syno_hw_revision) - - # If syno_hw_revision is r1 or r2 it's a real Synology, - # and I need to edit model_rN.dtb instead of model.dtb - if [[ $hwrevision =~ r[0-9] ]]; then - #echo "hwrevision: $hwrevision" # debug - hwrev="_$hwrevision" - fi - - dtb_file="/etc.defaults/model${hwrev}.dtb" - dts_file="/etc.defaults/model${hwrev}.dts" - dtb2_file="/etc/model${hwrev}.dtb" - # Check if dtc exists and is executable if [[ ! -x $(which dtc) ]]; then md5hash="01381dabbe86e13a2f4a8017b5552918" @@ -1307,16 +1360,22 @@ check_modeldtb(){ if [[ -x /usr/sbin/dtc ]]; then # Backup model.dtb - if ! backupdb "$dtb_file"; then - echo -e "${Error}ERROR${Off} Failed to backup ${dtb_file}!" >&2 - fi + backupdb "$dtb_file" long # Output model.dtb to model.dts dtc -q -I dtb -O dts -o "$dts_file" "$dtb_file" # -q Suppress warnings chmod 644 "$dts_file" # Edit model.dts - edit_dts "$1" + for c in "${cards[@]}"; do + # Edit model.dts if needed + if ! grep "$c" "$dtb_file" >/dev/null; then + dts_m2_card "$c" "$dts_file" + echo -e "Added ${Yellow}$c${Off} to ${Cyan}model${hwrev}.dtb${Off}" >&2 + else + echo -e "${Yellow}$c${Off} already exists in ${Cyan}model${hwrev}.dtb${Off}" >&2 + fi + done # Compile model.dts to model.dtb dtc -q -I dts -O dtb -o "$dtb_file" "$dts_file" # -q Suppress warnings @@ -1325,6 +1384,7 @@ check_modeldtb(){ chmod a+r "$dtb_file" chown root:root "$dtb_file" cp -pu "$dtb_file" "$dtb2_file" # Copy dtb file to /etc + rebootmsg=yes else echo -e "${Error}ERROR${Off} Missing /usr/sbin/dtc or not executable!" >&2 fi @@ -1333,42 +1393,29 @@ check_modeldtb(){ for c in "${m2cards[@]}"; do - #echo "" - m2cardconf="/usr/syno/etc.defaults/adapter_cards.conf" - m2card2conf="/usr/syno/etc/adapter_cards.conf" case "$c" in E10M20-T1) - backupdb "$m2cardconf" echo "" - enable_card "$m2cardconf" E10M20-T1_sup_nic "E10M20-T1 NIC" - enable_card "$m2cardconf" E10M20-T1_sup_nvme "E10M20-T1 NVMe" - #enable_card "$m2cardconf" E10M20-T1_sup_sata "E10M20-T1 SATA" - enable_card "$m2card2conf" E10M20-T1_sup_nic "E10M20-T1 NIC" - enable_card "$m2card2conf" E10M20-T1_sup_nvme "E10M20-T1 NVMe" - #enable_card "$m2card2conf" E10M20-T1_sup_sata "E10M20-T1 SATA" - check_modeldtb "$c" + enable_card "$adapter_cards" E10M20-T1_sup_nic "E10M20-T1 NIC" + enable_card "$adapter_cards" E10M20-T1_sup_nvme "E10M20-T1 NVMe" + #enable_card "$adapter_cards" E10M20-T1_sup_sata "E10M20-T1 SATA" + cards=(E10M20-T1) && edit_modeldtb ;; M2D20) - backupdb "$m2cardconf" echo "" - enable_card "$m2cardconf" M2D20_sup_nvme "M2D20 NVMe" - enable_card "$m2card2conf" M2D20_sup_nvme "M2D20 NVMe" - check_modeldtb "$c" + enable_card "$adapter_cards" M2D20_sup_nvme "M2D20 NVMe" + cards=(M2D20) && edit_modeldtb ;; M2D18) - backupdb "$m2cardconf" echo "" - enable_card "$m2cardconf" M2D18_sup_nvme "M2D18 NVMe" - enable_card "$m2cardconf" M2D18_sup_sata "M2D18 SATA" - enable_card "$m2card2conf" M2D18_sup_nvme "M2D18 NVMe" - enable_card "$m2card2conf" M2D18_sup_sata "M2D18 SATA" - check_modeldtb "$c" + enable_card "$adapter_cards" M2D18_sup_nvme "M2D18 NVMe" + enable_card "$adapter_cards" M2D18_sup_sata "M2D18 SATA" + cards=(M2D18) && edit_modeldtb ;; M2D17) - backupdb "$m2cardconf" echo "" - enable_card "$m2cardconf" M2D17_sup_sata "M2D17 SATA" - enable_card "$m2card2conf" M2D17_sup_sata "M2D17 SATA" + enable_card "$adapter_cards" M2D17_sup_sata "M2D17 SATA" + cards=(M2D17) && edit_modeldtb ;; *) echo "Unknown M2 card type: $c" From 79dd19149d42c7929d242bc5419cd93089e8fa95 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 30 Nov 2023 15:50:59 +1100 Subject: [PATCH 246/694] Update CHANGES.txt --- CHANGES.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 93c8fa7..08d391b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ -v3.2.67-RC -- Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree and are using: +v3.2.68 +- Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use device tree and are using: - DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. - Now edits model.dtb instead of downloading a pre-edited version. - Fix for Unknown vendor causing "Unsupported firmware version" warning. Issue #161 From 3a264a695b476ef795bd44d9851e9297ab4bc35e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:23:06 +1100 Subject: [PATCH 247/694] Update syno_hdd_db.sh Bug fix to prevent enabling supportnvme and support_m2_pool on models with no M.2 slots or PCIe ports. --- syno_hdd_db.sh | 92 ++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index bb8fb5d..0a892a4 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1574,61 +1574,65 @@ fi # Enable nvme support -if [[ $m2 != "no" ]]; then - # Check if nvme support is enabled - setting="$(get_key_value $synoinfo supportnvme)" - enabled="" - if [[ ! $setting ]]; then - # Add supportnvme="yes" - synosetkeyvalue "$synoinfo" supportnvme "yes" - enabled="yes" - elif [[ $setting == "no" ]]; then - # Change supportnvme="no" to "yes" - synosetkeyvalue "$synoinfo" supportnvme "yes" - enabled="yes" - elif [[ $setting == "yes" ]]; then - echo -e "\nNVMe support already enabled." - fi - - # Check if we enabled nvme support - setting="$(get_key_value $synoinfo supportnvme)" - if [[ $enabled == "yes" ]]; then - if [[ $setting == "yes" ]]; then - echo -e "\nEnabled NVMe support." - else - echo -e "\n${Error}ERROR${Off} Failed to enable NVMe support!" - fi - fi -fi - - -# Enable m2 volume support -if [[ $m2 != "no" ]]; then - if [[ $m2exists == "yes" ]]; then - # Check if m2 volume support is enabled - smp=support_m2_pool - setting="$(get_key_value $synoinfo ${smp})" +if ls /dev | grep nvme >/dev/null ; then + if [[ $m2 != "no" ]]; then + # Check if nvme support is enabled + setting="$(get_key_value $synoinfo supportnvme)" enabled="" if [[ ! $setting ]]; then - # Add support_m2_pool="yes" - #echo 'support_m2_pool="yes"' >> "$synoinfo" - synosetkeyvalue "$synoinfo" "$smp" "yes" + # Add supportnvme="yes" + synosetkeyvalue "$synoinfo" supportnvme "yes" enabled="yes" elif [[ $setting == "no" ]]; then - # Change support_m2_pool="no" to "yes" - synosetkeyvalue "$synoinfo" "$smp" "yes" + # Change supportnvme="no" to "yes" + synosetkeyvalue "$synoinfo" supportnvme "yes" enabled="yes" elif [[ $setting == "yes" ]]; then - echo -e "\nM.2 volume support already enabled." + echo -e "\nNVMe support already enabled." fi - # Check if we enabled m2 volume support - setting="$(get_key_value $synoinfo ${smp})" + # Check if we enabled nvme support + setting="$(get_key_value $synoinfo supportnvme)" if [[ $enabled == "yes" ]]; then if [[ $setting == "yes" ]]; then - echo -e "\nEnabled M.2 volume support." + echo -e "\nEnabled NVMe support." else - echo -e "\n${Error}ERROR${Off} Failed to enable m2 volume support!" + echo -e "\n${Error}ERROR${Off} Failed to enable NVMe support!" + fi + fi + fi +fi + + +# Enable m2 volume support +if ls /dev | grep nv[em] >/dev/null ; then + if [[ $m2 != "no" ]]; then + if [[ $m2exists == "yes" ]]; then + # Check if m2 volume support is enabled + smp=support_m2_pool + setting="$(get_key_value $synoinfo ${smp})" + enabled="" + if [[ ! $setting ]]; then + # Add support_m2_pool="yes" + #echo 'support_m2_pool="yes"' >> "$synoinfo" + synosetkeyvalue "$synoinfo" "$smp" "yes" + enabled="yes" + elif [[ $setting == "no" ]]; then + # Change support_m2_pool="no" to "yes" + synosetkeyvalue "$synoinfo" "$smp" "yes" + 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 + echo -e "\nEnabled M.2 volume support." + else + echo -e "\n${Error}ERROR${Off} Failed to enable m2 volume support!" + fi fi fi fi From 5c2c1d3d7746b9547b0241b9d3e1372807b90896 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 1 Dec 2023 12:59:42 +1100 Subject: [PATCH 248/694] Update syno_hdd_db.sh Bug fix for M.2 drives in adapter cards --- syno_hdd_db.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 0a892a4..509cad5 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,7 +30,7 @@ # Fixed bug where memory was shown in MB but with GB unit. -scriptver="v3.2.68" +scriptver="v3.2.69" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -701,7 +701,6 @@ getm2info(){ getcardmodel(){ # Get M.2 card model (if M.2 drives found) # $1 is /dev/nvme0n1 etc - isinm2card="" if [[ ${#nvmelist[@]} -gt "0" ]]; then cardmodel=$(synodisk --m2-card-model-get "$1") if [[ $cardmodel =~ M2D[0-9][0-9] ]]; then @@ -713,7 +712,6 @@ getcardmodel(){ m2carddblist+=("${model}_${cardmodel,,}.db") # M.2 card's db file fi m2cardlist+=("$cardmodel") # M.2 card - isinm2card="yes" elif [[ $cardmodel =~ E[0-9][0-9]+M.+ ]]; then # Ethernet + M2 adaptor card if [[ -f "${model}_${cardmodel,,}${version}.db" ]]; then @@ -723,17 +721,14 @@ getcardmodel(){ m2carddblist+=("${model}_${cardmodel,,}.db") # M.2 card's db file fi m2cardlist+=("$cardmodel") # M.2 card - isinm2card="yes" fi fi } m2_pool_support(){ # M.2 drives in M2 adaptor card do not support storage pools - if [[ $isinm2card != "yes" ]]; then - if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 - echo 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support - fi + if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 + echo 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support fi } From ac0a3f3439e21cf666a9e50185d8e4d8b85d137f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 1 Dec 2023 13:03:52 +1100 Subject: [PATCH 249/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 509cad5..1833ee3 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -30,7 +30,7 @@ # Fixed bug where memory was shown in MB but with GB unit. -scriptver="v3.2.69" +scriptver="v3.2.68" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From c79056a80c5100ce11855bc82010233fb3f3b896 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Dec 2023 19:37:15 +1100 Subject: [PATCH 250/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 08d391b..4073d58 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,7 @@ v3.2.68 - Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use device tree and are using: - DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. - Now edits model.dtb instead of downloading a pre-edited version. +- Improvements to --restore option. - Fix for Unknown vendor causing "Unsupported firmware version" warning. Issue #161 - Now supports NVMe drives that show as Unknown brand in storage manager: Issue #161 - ADATA, Corsair, Gigabyte, HS/MAXIO, MSI, Netac, Phison, PNY From b2e0b8ce7e7898e672e7c9016fa1dc3f184398f8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Dec 2023 19:44:51 +1100 Subject: [PATCH 251/694] Update syno_hdd_db.sh Improvements to --restore option. --- syno_hdd_db.sh | 62 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 1833ee3..c9e5a62 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -16,8 +16,8 @@ #-------------------------------------------------------------------------------------------------- # CHANGES -# Updated so E10M20-T1, M2D20 and M2D18 now work in models that use device tree, -# and are using DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. +# Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use devicetree +# and are using DSM 7.2 Update 2 or 3, 7.2.1, 7.2.1 Update 1, 2 or 3. # # Now edits model.dtb instead of downloading a pre-edited version. # @@ -28,6 +28,8 @@ # - SK Hynix, Solidigm, SPCC/Lexar, TEAMGROUP, UMIS, ZHITAI # # Fixed bug where memory was shown in MB but with GB unit. +# +# Bug fixes and improvements to --restore option. scriptver="v3.2.68" @@ -463,54 +465,71 @@ synoinfo="/etc.defaults/synoinfo.conf" # Restore changes from backups if [[ $restore == "yes" ]]; then - dbbakfiles=($(find $dbpath -maxdepth 1 \( -name "*.db.new.bak" -o -name "*.db.bak" \))) - echo + dbbaklist=($(find $dbpath -maxdepth 1 \( -name "*.db.new.bak" -o -name "*.db.bak" \))) + # Sort array + IFS=$'\n' + dbbakfiles=($(sort <<<"${dbbaklist[*]}")) + unset IFS + echo "" if [[ ${#dbbakfiles[@]} -gt "0" ]] || [[ -f ${synoinfo}.bak ]] ||\ [[ -f ${dtb_file}.bak ]] || [[ -f ${adapter_cards}.bak ]] ; then # Restore synoinfo.conf from backup if [[ -f ${synoinfo}.bak ]]; then - if cp -p "${synoinfo}.bak" "${synoinfo}"; then - echo -e "Restored $(basename -- "$synoinfo")\n" - else - restoreerr=1 - echo -e "${Error}ERROR${Off} Failed to restore synoinfo.conf!\n" - fi + keyvalues=("support_disk_compatibility" "support_memory_compatibility") + keyvalues+=("mem_max_mb" "supportnvme" "support_m2_pool" "support_wdda") + for v in "${!keyvalues[@]}"; do + defaultval="$(get_key_value ${synoinfo}.bak "${keyvalues[v]}")" + currentval="$(get_key_value ${synoinfo} "${keyvalues[v]}")" + if [[ $currentval != "$defaultval" ]]; then + if synosetkeyvalue "$synoinfo" "${keyvalues[v]}" "$defaultval"; + then + echo "Restored ${keyvalues[v]} = $defaultval" + fi + fi + done fi + # Delete "drive_db_test_url=127.0.0.1" line (and line break) from synoinfo.conf + sed -i "/drive_db_test_url=*/d" "$synoinfo" + sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf + # Restore adapter_cards.conf from backup # /usr/syno/etc.defaults/adapter_cards.conf if [[ -f ${adapter_cards}.bak ]]; then if cp -p "${adapter_cards}.bak" "${adapter_cards}"; then - echo -e "Restored ${adapter_cards}\n" + echo "Restored ${adapter_cards}" else restoreerr=1 echo -e "${Error}ERROR${Off} Failed to restore ${adapter_cards}!\n" fi - fi - # /usr/syno/etc/adapter_cards.conf - if [[ -f ${adapter_cards2}.bak ]]; then - if cp -p "${adapter_cards2}.bak" "${adapter_cards2}"; then - echo -e "Restored ${adapter_cards2}\n" + # /usr/syno/etc/adapter_cards.conf + if cp -p "${adapter_cards}.bak" "${adapter_cards2}"; then + echo -e "Restored ${adapter_cards2}" else restoreerr=1 echo -e "${Error}ERROR${Off} Failed to restore ${adapter_cards2}!\n" fi + + # Make sure they don't lose E10M20-T1 network connection + modelrplowercase=${modelname//RP/rp} + set_section_key_value ${adapter_cards} E10M20-T1_sup_nic "$modelrplowercase" + set_section_key_value ${adapter_cards2} E10M20-T1_sup_nic "$modelrplowercase" fi # Restore model.dtb from backup if [[ -f ${dtb_file}.bak ]]; then # /etc.default/model.dtb if cp -p "${dtb_file}.bak" "${dtb_file}"; then - echo -e "Restored ${dtb_file}\n" + echo "Restored ${dtb_file}" else restoreerr=1 echo -e "${Error}ERROR${Off} Failed to restore ${dtb_file}!\n" fi # Restore /etc/model.dtb from /etc.default/model.dtb if cp -p "${dtb_file}.bak" "${dtb2_file}"; then - echo -e "Restored ${dtb2_file}\n" + echo -e "Restored ${dtb2_file}" else restoreerr=1 echo -e "${Error}ERROR${Off} Failed to restore ${dtb2_file}!\n" @@ -518,6 +537,8 @@ if [[ $restore == "yes" ]]; then fi # Restore .db files from backups + echo "" + # /var/lib/disk-compatibility for f in "${!dbbakfiles[@]}"; do replaceme="${dbbakfiles[f]%.bak}" # Remove .bak if cp -p "${dbbakfiles[f]}" "$replaceme"; then @@ -540,9 +561,6 @@ if [[ $restore == "yes" ]]; then fi done - # Delete "drive_db_test_url=127.0.0.1" line (inc. line break) from /etc/synoinfo.conf - sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf - # Update .db files from Synology syno_disk_db_update --update @@ -558,7 +576,7 @@ if [[ $restore == "yes" ]]; then echo -e "\nRestore successful." fi else - echo -e "Nothing to restore." + echo "Nothing to restore." fi exit fi From de35a3ad5482d84798367c9d63b6152b4eed10da Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Dec 2023 19:46:59 +1100 Subject: [PATCH 252/694] Delete dtb directory --- dtb/DS1520+_model.dtb | Bin 3617 -> 0 bytes dtb/DS1621+_model.dtb | Bin 3834 -> 0 bytes dtb/DS1821+_model.dtb | Bin 4420 -> 0 bytes dtb/DS1823+_model.dtb | Bin 5762 -> 0 bytes dtb/DS2422+_model.dtb | Bin 4923 -> 0 bytes dtb/RS1221+_model.dtb | Bin 3900 -> 0 bytes dtb/RS1221RP+_model.dtb | Bin 3904 -> 0 bytes dtb/RS2421+_model.dtb | Bin 5871 -> 0 bytes dtb/RS2421RP+_model.dtb | Bin 6225 -> 0 bytes dtb/RS2423+_model.dtb | Bin 9166 -> 0 bytes dtb/RS2821RP+_model.dtb | Bin 6918 -> 0 bytes dtb/RS822+_model.dtb | Bin 3617 -> 0 bytes dtb/RS822RP+_model.dtb | Bin 3617 -> 0 bytes 13 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dtb/DS1520+_model.dtb delete mode 100644 dtb/DS1621+_model.dtb delete mode 100644 dtb/DS1821+_model.dtb delete mode 100644 dtb/DS1823+_model.dtb delete mode 100644 dtb/DS2422+_model.dtb delete mode 100644 dtb/RS1221+_model.dtb delete mode 100644 dtb/RS1221RP+_model.dtb delete mode 100644 dtb/RS2421+_model.dtb delete mode 100644 dtb/RS2421RP+_model.dtb delete mode 100644 dtb/RS2423+_model.dtb delete mode 100644 dtb/RS2821RP+_model.dtb delete mode 100644 dtb/RS822+_model.dtb delete mode 100644 dtb/RS822RP+_model.dtb diff --git a/dtb/DS1520+_model.dtb b/dtb/DS1520+_model.dtb deleted file mode 100644 index 5bce9d2f9169d9bcd84acafddecf237e72476549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 zcmd5nJd22qfrnCp?g3bt8JSPr6B5` z0>U%VCa&@98$c(3kf%w@qUtgbu1^EK$kG9YUmRLyALiZCn!~(bT7Q7~b0A}9zimB% z2@KS&!*UV!3M~GSRx*+(ad^nGXAmhEMi_M5%oTI(%SW*)eEX!3A*RldktE zIc$&O!TVg7Lmg{dro36Kl~RsN$GSdV|4)4daYobF4NHv+>kND853akHti7|q`w4Uv z2nWg`?+?&jAj}E!&cO6Un6$PxRsR{u?+WZMo90uiQgKputmZ=MJH3?B7!1Qe`{zJ^ z72gsEHdVev{!o^sZrqbMbWB#|1!aYN6}zZL)R~5T74~tUoW_0+=EsRWukBgb)%}?Z zyG%viSB)xmu{#U7~`vx|K#BhQtV>dwWpXPhexXqywx&G&^2zKbQm=zo4cS{r#Us(Y`+ zn_qH#L|>eRygGgKVaa1r;$}f7q$FZK4ap%*dB9>K9u}Si@gRYRhYgZ(jsx=UQ1bh} z4;A*7rXbGg8_Dz{#+{V*fa48P>U2Yw_a|?47|TX>;Bztz;)AXmgk*Q`WG>8ra9I}0PAxVWqQc$FVBAw;4H+L4c*LZzLuBPEP@IUDJ z2T;%=Axb1VDkKmy`?7r(JGq2NSlaVGX1|$lW_H&1Y30ukLN5Ozgsc&=@&VrWpk0G@ z6&gI&2F$;e{o1dkMyKJug#G8!l*Mc~t<2wq{xVnd-o&wO+jCZ3=Rrm04D?YS;vp7} zZ$Ud(8CT`c!u-=BA5(bagL^JO+bIHnz2EQaImC&fRdL_I_zpC!=Ntq4{|%b8 zxzl$ZLkAv|ZQ^$Y)=GZip5A0-N#^mG6;B+5AXXd={K6M~t^1=Gm9~6V<5Td)R${nf z<**pYcOIj=5Qg4gx1+ZZ2J+N6B^ME%L;C|`s4;{sTaLZ$+MO5Dt*x=S4tvYkP{&SS zW1-@axL)Arp$ZSN(n(UyCyeVC+kRv}wAb(ldN5Pw!gtQYzz;@xkG9d$xH4pIxV=Si z1@~=t(}6=;wPU|CSI^1B4b>)NoARCIkAg_T2|rdicV}(GIQ&$y!j@)#EyT;%r2TaS zn{>Xn#IQfh2hVd;47IOa8S>T~oAb5WWO!*`H~Z`V$*(9aXrB6UrEuXH#(Mjk>*^)X zz9S@2R>n6SoyuzhT=Ow)3c8o}RMSVJ?}t#WeJWIi)E~!hY!EUBvwz76Ji@X+u|gz zhf=mJPVyRP;v|s%0jJet=iVxiukvr>q`ntS4%FjhzDtgIo*FqBy$9uS4 z{Dpj-lkm<-#;Gm$ma8?wkwv13Q(aaT3F9w{#m&oDuD{j*_z3k(=ZUbPf~k&r8)jon zYnXV4%+zN1?$veH)PbhEP27)izo~6m;9xfHrjLy#ap`XDA!~ArZQ_kgdkTCA$bO@NiIH%rj z?DNt7O9RFVvbFteli+`+I7(jcf}4@WwEU7{TO3DDoG;H$iCt diff --git a/dtb/DS1821+_model.dtb b/dtb/DS1821+_model.dtb deleted file mode 100644 index c90ec426c8f28715833c111fb07f8f048c60df48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4420 zcmd5=&2G~`5Z(nUD5WY@#epL?RA^=Ar?f~&NTjMbR6>G7B@UKjyNQMEHU0_BnYZ9Q zxbY6~2ndM_5+^t#X7G5OJS(>RXaLMVIWV1Q*h}ng@O5@Ft{zprg7Rb_Ff3LHpXTL))ukx zOe2JanT$u+vK%{cWq1gUMqxR}Fs?rgW8b)M9O577al2(MP?DyuV>?5&M%hRet_WEZ zZf6->&i%C2GhyT6vv^L1Emtnmwn^Vnd+7KAj^mX$wrC1LTqj4#D1#UDT;)aoyfhatSAySoOr}n z$*E~SRqYf-VlhslNN7$T9zs^k5_PMF1gJlEYWE3d^ejwSlAADV&$0?8p7j%FDEz)q z=b^6Gb$1Ycj}hzjc~x4kYh&&D*zp_mb4>34JnfgvBy`lzQzQZp<_hY31n-y7^jQsS zl%G%r?}aDk9^X(3Q)FUs)}OSBc_mY#SF3k-zTOI#8G7}6Rj-h&;|uvZk1q#Mm^1Y1 zc_kzGirlZ$dt;v7cHu_~ahTHEDdtfxwsnVvv7Pz-z#}1Zy?~6oB=uQD_~j~%{V0#& z^2PFadc*>Gdo0F>t_wTwjhBFU>b;i2A!Lk&Q`tE7CdX{oj^RQ%J?ti4nu=j3WT};S z1Hg3h#Iw!=I~~rR>NA#!ncPk?3;y}Q^2{2k zL_tAw{{e`ang$`!P*YNXgb*MaDr!!=_h!aliL=>LB6OA}9zVa&-+S|BoF8x8|C_Pr zK4FXxW5A985mE)fXn#-=%4C&>(?<)kHY;L&hMOOGLe(>2K{-MUsr}6%stn2 z1Mk2eoT=A{3uPaJf%Z_J)%C)Z7f}!wcY%f%(w~I!5)9;j#0)FH56@4)z~?J4-YJWj zfID7Dy9$G+aahP4Nkl_EGZ@w`K7S75Z5USXS1|vz@%$ake}my1y+8EcfC*g4+ZX>+ z@UD(OIU&70gNEF)umIt?i%asrKa;^K4_Ub@=pVT^$(jqK?6(bXa-3 z*M49Y){h0_w0deC!%OLC)&lu*+jCERclTWl>&o0b3zq8K2+vJHur&Ed{UC%AH0fbZ zHcy-Ngn9kbb@$xY-2?oA8ToB%;UA@Xfb0yMGzI6#I#PUa(r8?WIrLlSab>%g&ck(}-Q;B|CfpmjIzdh+ zjvK)9qU*ltdV9lq1=alyv2FBb=Vf^O9cXA1uy;V~&L8F(S&tj@_h3#wCn5?ag%BAK z;6m9Q;0qBp8buF!`550Bu;X#_VjR(|03y+Q0#|R9-wN`zY^AYkAf4e>i ztqtKZ`rrD8*?ZQ)&;UVyl5#+M4 zUrmsd{xd~yPk>ym%K6S;=Dp4NGW%wmTxGxaO!L6@@qF1id%-uaJwsLdZQnVL&VpLL zI;%9~tNp20J`dv+_GvLwUT13DaFaRn@l0XRaAEzT%>?crz^KltAY(DL>v8Vywsh*% zQRi+xsNc8kYE6B1U%l8aDX==1*sb1M9v!dd?6ZsiU#yIGzmCTNJQnN@>-S_g_QL?6 zz19Bab3T6SNM>B8O`|fql{kCU;j!{!bD+c2%@H`V-Y-Pj#7)A^B%kun=sUXyWb@EM`#*(6}*Xj57fBphVWS3;L)0GVNm4?g` z{ETfK0qVhVEtF}_%Xpj!mdZ#ZY%U5F%Z%ZsKz|<6SDwn_Y?i}Upq%AwfdVTb;pdt@ zjUw1yJ`x46D{`VpBx`C{DUxwvkw_{-CU~jG(Kav`Ds7wR><-~mNJxyCgb-m`AK30s#EaLv+F{6UZV0sF0$49CIbue-vCg3jhEB diff --git a/dtb/DS2422+_model.dtb b/dtb/DS2422+_model.dtb deleted file mode 100644 index aa85b59eefecb9e149e7d509c24540276b2449b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4923 zcmdT|&2G~`5Z(nUD5XGEap1@emA10o1PVw9iB^b1PjKkXa%?xTu)W4Vp*iywyazYl z0UiM%aY5n)XT;2`*LL05ZIb#xq>cAy_M2~JXS|bqUH$uuvGu2nv0cX2{=oA-v^8kA zp}~j0gyCn|Kk?1;(PelpWB>Ie6uuZvD)V=szmnwh=2+J>%`|$3@t`7e1^TED@em8g zccI;=jH~iXF#jTrGZ&ut!97=@9R{8qiwLI*93T2s+z&7Ydy4gs(EnB$e}ew^e0&X_ zU!Wm2V(`5~-7pO3$^A_>qu)xKony6$M?qvJzDS?zgu#7pV5JuImEAvRRPy@?V_dtG zw-Q70I4_3UkIxcg2SzYHClB<2!YMI&tr%6`H`~&m2}5x>Y0JZzFs9q`s1*bCsdH+! z1+oY}O+Kw-OtK`(X}=nXvf*M=oF|;w$w4E+oDsTo)@EP3*zy8T{|$etv51d zh;vikt%H1-cdo7lurbYZEig>mik&?57!Sum_5E=R_WstiZEaKA#V_c=jPw!c<19%W z+p3$$@T+d&yX})?MCjU-GSlcn+k5Z@BSB?b(uo5*_>}WWwSN1 zJvvEwmX&kfshRs_e+y�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 Hg9zd;N)Y#q diff --git a/dtb/RS2421RP+_model.dtb b/dtb/RS2421RP+_model.dtb deleted file mode 100644 index 4b7d333a9f52fbd5be743d699ab9c77a2d8b5e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6225 zcmeHLzmMER6dng65<-BhV4_^`KR(iWLZ{B?Ky*Km5Z~gPtfB$6c zrH>e6w-|fzL->6ik6Zeep?yUeeRLT3 zz8^^yPQpNnH(Pd(LmSsbOvHN%1m~jO3hJ?q^MDiC;qQC3Y%=)8586BdvR~$jo?pqmEbvR1Seslc!zhVmY94#cs}9R{ZSgdu`S-qm!@uU= z!Y^o1w&VQ*>v=yYl_qg=VCO9OSzP@n9KxM!gG=XOFT4|K8iRfV_tu?LhN+q4S#BnF zkBZNMetd1`vzfH!b9|8Gw3GVYZte3dzR04 zj4NW(xc-*e-19NwX&%{Q#M8<1 zRPjuXCXwJ0-s4;|5;mMon90%sZSm3WEqA#ItqG8_>3K@L-OOC)!}0`A=}2 zR2I|5W-%Tv$E}TCS0lOBZ9h{T>(WvdvuEAKING3GPIxKeI-eF9D|wm~>@brm=M}>j zz>yMp)re>=c_Y>}5!lDaT7QtHaArTtB$%u0Q)6601S1@(k44ti#c3>{NL^Q_GE+*c z1tF|hTGg7B;7uLLY@VwHsfNyL{BqT+xC!CmlrFPDS@CDMf`f|DY0NI^ofy!PClm0jDhy_Y+Q zzW`AnQB%?L2T)L_LeL@6AVfnE%1AVb_j@zr9s72i-NPxcG`F7dd%ySnJhtzrv;W+8 zoHu`T9Ot6rync^<-=gsXjpu35@z_(e{*^p${B_mrar!-l^P5L$Hp#|E#`-ICe!5ia z!NI`uyr3xkO@H_fQ-Svh8juG(jrHn&Sj0h6+@UobSU*GK4H}@=L-TLa+LJUe$L~i~ zF%$HQ18Yyy2&YL@WI2|24Hz>TS}x{a(zr%L<9{EdX%J;;Rb&$)t98i}KQiZk(ZtmKZ<-HiJce~(RAID# z87r${ApT7Ze`Sofk6{c~##ldwfhezL%Q=maXLm(mdbJw|_UjygUv+L#j=<%df9#`J zh&(7K_?x705`|S(fPfCozbI}G!^ibDzL650*pRDbLwD4cnzQaYXQ-ZB*tJ0eetMS% z%PjJM-9>X88mnc8i`s6`lLz)PnQ#^!2RVy6)7PQj(R|MOp{^F-auRC3mM)BI#K`Hw zWo(%bqbem~badf@US9{UA*c4IfjJQ|5a&FLbZui&kJU05lVT%%5Kh8k8uWq*nXG4= zl(*-QTCTH5PeU*EDdvn(iUW}br5Mu!9oj#OFxs}FUor++6->kOHY0RnwDr(Atm_eT z#uTIMFeuZY5TOdgO1j~m*TA`3B$bc~u43aFu_$_u=W`mDdUz0vgCr8FGfTSDREuj@ zcBf(-){)Wt=!2nwNB3#R@Q3@pnzP;pzUA$^uVe^tlq%|*eM{m(sz&2wC>^gRa?y}QMKB_l&?Z(YdwTWqaDY!^o4!I$0sB)$gE{mz>mGVz-p1adH5|aE7`bb+JQ%4Bfz}h)*A$J$ z#x;E%*f?kGe2UvkR;g@pC&?(RkPUPC59r+V>4$t(@uSAFB234ESG9~?n!QW|GMaLv zCv0*6qA?(+j$MZwZA(**%pRK@@T@9F>(Z1XGig~lwLd!S(f7Tk9GO)%Ic>i!Bj+Vz zs_E)HkQru^1A5bMHGhXa*rV2TwVVr3*;!T&Xo2B&$kBbD>1sKsEW4a`9)R{?a&%ob zoq_dlE8+I6aPw##q&-qDi7?QmH+wVoaEIlI^%ZU{Cx zz%~80j6HO(tNq3{T^)EkzPGWf8a(i9&rPU_`E!#PcvE7mB%?d^gNPm*^^Mg{52mu~ zNgc_L?q{BN&Rh2`;t!n>n!HBx+@vhyh#r|VPwg{}t8NkySz9g+gk%kjv6M_1o9_fBw>Yar28}^`IgcbIngDp?><(3`PBiye&?>%pD zZgXBil3)84__`;2L+3!koDTOp`lHXkr*qa3J!xDBVLXdrzj_bvjj$V5^-OMZ%ta+0O2e4S2O=PJ07+DB)Vt&WdpRu zziGd0fEN2XlX|k>TK|yUZ~SEgT+V*k04?@&b@XJvwf_5$zifcZ*)JQQ#eP*uGCn=* z0jxgg;~v<|YuN;s^MP!FHXo=h66a_SKCsq7?|Gn}d6x2l-`NKTYD@LVeb9Rz_$%~6 zztsz)!%h0IQ_#D_b)5sQeSg1Y+uyX}`r4nW-_cLKr{NeG^0dECBCqAcrR1q?uyYc5 z(B0_YOUYAP)Dy{rtfl1TQ6gH;ad_{pp2s+(?DttYGRPeFU^FX91`fyp&(HKr{bm0C zmUwiGv@X96HrS0CQ~R{O?$57l8Yx#I+2rEeFk-5C7Rco#eSLx4`a09#y8)Sax%nQ& z{o~5c_I1x|^n9Xs?<;`~UR4mV4bRk8UZsp{e5=s41l}{m`=F?zjdFN?c*zTCsqQiB z-r-QGsP<;_Z$YLH(Dxs-p2LBSUQHNVCI)Q4I2C2nJgkz@L^#td78B<{6lId74ho$A zk%FJ5%REWxlf<~lX1Q~0g}zKp!Xvr9AII`5Fp-zyjv}6tp95T~j&jjn3*#`Sw++Xa z<3g0BT#lw$NgwCNgc;2W5$sLEa)0rqQI=Km$}B9Zfc~>2n^nO$PcmojeJ9)7D@En- zcSPV$!*oWkJ47177xXDR%4TWh$Zu{z8qzC4aEGx}YC`@vT+jEzG$!(^JJ+`zyqc!v z+Ya{HNqp#V-Q`(X?Ikp!1}d$mwigW-Hi;WQC-cLZE0387_reC1_ogwD^2K{dhG4F5ae`(0@oNLhk$`JEj zh5pxunD;jHzcIwTkD-r#MPiD2G#Q3vNNvQ3>;Fo9@n7rz;h3McjqHrGPGaV&b${FYA^QO3?`PQ)-pecLNzkSo^Ylo zS^W<39F+NE*S+iBaS!khv_M-`>&{>1DX44GO*$R%i6!=KcX~)J_Bcb&$X1 zx^KDOU4LFV)jaZPRWE5g3Zx3B6J1HT9^7#UufP-Z&>gpuUBpM;>xpmIhOhE(2fk;! z@zF)LC%!!!K3H1cy*u#Xy9(RU5?{I`pBFx;ot5}-pX$Izxz!V&HUD^Br^A0M;!BtN zp7^Z!2d-J^zZLPN7l-r0w}tr9uHF-$wLVZU<$OncZ*=D$UAlVWv*zCx;;Ub#K+$<& z+(L}?%UXYo);ifjob}6Ke~i{#tj@2FTwHP1dHSnJ?^y4j<9XuguP(hYT5Dz-vDR;v zy)jzzaT~GLUyXWWwC3YRXJ2%>7vxgGcfvd7^+9yp`>c7!Yt!Cb(`l~48|h@9H+6E& zY=V<>t*Mi9d=s6#pOVfzO5(;n8}Gg5-b^kgxmhu+i3#UqI4kh*fFEMyyYlPMX5Tt6 zhy95%uKGSzH6Hz`;&O;wAKVk{8UApQfN2DjD# diff --git a/dtb/RS822+_model.dtb b/dtb/RS822+_model.dtb deleted file mode 100644 index caf3a9c1fa5c4fc67c49d4fe2a5b96ef3d60f078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 zcmd5DEbKurms0ED2RfR7OI-u&6!JNwo?i-MKj?aZ6^e(%q`d9(NP*0a9}x&0;~ zf&xfZ(BD0snJ1T>hb9dJWz;aQw+>tx7dJ9q?a;@l6x>e33B5xHboA z`nDHB-RFVO9^&Er7SL-z&jBGX@=*@eUI0Qle1BwhE8&e##CiUBRbVt0Q~3w;B(g#dUia zbDjDvAFZ+FvkSQnN?lwr*X#53|EaH{wo=!k95fxQckG3~nAmxItzfVF6$tABACyDh zKR_=5;hrGxCeSlsD>)O%KJ(3RweGe+{5oUr!%0i~ljil$)LkiaKGRax01OY>0DJTf z-UA#K!=AZ4L|LUpJ@cpZjBMB&ly&mU@wP7Km%=irBhyA=-{K?K_Z2!>))B}AT=#O9%=WuUd`zy@R^at?M#XnXn z{wnHa$7*E{Km+bMwc?O2%9XqS0b`h}+c3XUt&HR<;;qTm8-E5L(DbEqwGYzpba@@i z)w{i{lb6^$c%yXuk^#djeZK1f$#@SK)WG*sFcarc16ytI&)ICULay{Ns8!!*k{x&Q zom^|C12IAu)7E(R<37=kVSW#&JAHSQ6OIZ;+>X2y{s|^i9k?)bx7Y;0#5Zxm*;P zjGtQ$AHKzDrERutCVP|jm;gA(hn`BmWG9p8OJ_S^1ecsF^jcc2+%M=?z}O#RAP&-v zOjV7r#k7>9Qn@V2LTXc}nz&2EG)3JuaLK5)Im>}SN^$D>^E`*DekwJH8~KH2W|cBr z%NcO8R!e?d3Nt@{X{waRFOt2t1?x3wsVO?6do#|6UR3RZfzGjHDey+8Bj&EC&j&;BOl_M3!| z143?n1Mho4cYt02f`@(u{LkHR`G;H^!}mv4w-Vm?M6Aa!{%tTfF#bKvUxfG9 zK-YmB_M^wU2?UN0>aUCAWmxOu&?ixeHdVt-sqFm(AqXvtsj$M0qd(ueS?}L>VUF>+ z7(0yAty~rZ{XdH_*$5-*FZ;2(5eCM&g!3R_M=9I>)Td-LuXjPW&#O#W1&TK0vPyX- zbRJSmXuYV0dyRYY17kbv9d>{}Fmis!ef-gwJQLYG>O>!D#P#VO!`0yW zsx%Kuoo^v`RLrx&Mdj;f5c6c!H#{Fd1zG3I`h0B^SLajA*A;w@(jCSL<#I#IG~g<#`Yg=Kt0gcf&K_KaSr$PwZFm~O@9DCUHoIU z;;*7!cC1$R05ss9Q!5VXqFlNAA25cwx()Ly)yhb&BHo%@z42%80Zm^zSNk9hPnXxR zT)o@NI(doBgEvaYFBver(&xJ#kc{_$K@EIA1v7CDHL%qN|D4SxE96QagIe`{CfRW( z-^sORIuIjtF>Q@^KkgI#80PnYx-$qm;h1&yA0^xFyhO}!wEFe5Uym~0u18vD_pOWV zI)I3Ij@@qE$rNeEA;kO3cN_ie!=uB8j3t5X{04cNhd`HfL*K;QLrt&O4bD)snaf3y z$@sbD@ZnpWR@!FUX0kVVj|qTteCVn4OLj7ezI3(&MsUf=La(LO%Kd_V1&sY62I3&y z$W+w`TTDwyDwWHUETlGts)@TqOjFct1DA|yo3k7Uq!g!~KhJZh>ZekJxRGCYW>zV~ zwVVMbYqjLZr7-jJm!?WtztReAIsCm*t>v?(P~^eU!$X4K?qyLwA+DGkW$bZrLhu}M zd)i16PZepjvMN)hXFHcTMB$-wX=P^nIo=>n-Jxpq0a>+x4`5Tw@cz#cc_!<0l`$bk oT5e3n)$y@+-MNdW2>l`=YYILuazAKc&~Lssfpd}PS{g(C1sU@nqW}N^ From ebdf38105cfc7da7116066ee25d61495e26ff1d1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 2 Dec 2023 19:53:25 +1100 Subject: [PATCH 253/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 4073d58..e6ee8d2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ v3.2.68 - Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use device tree and are using: - - DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. + - DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. Issue #132, #148 - Now edits model.dtb instead of downloading a pre-edited version. - Improvements to --restore option. - Fix for Unknown vendor causing "Unsupported firmware version" warning. Issue #161 From 861570d116b5bd11270e7d1fd14bd113b0cb5883 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 3 Dec 2023 14:36:22 +1100 Subject: [PATCH 254/694] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index dc54161..2d7bc17 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,8 @@ ### Download the script See How to download the script for the easiest way to download the script. +Do ***NOT*** save the script to a M.2 volume. The M.2 volume won't be available until after the script has run. + ### When to run the script You would need to re-run the script after a DSM update. If you have DSM set to auto update the best option is to run the script every time the Synology boots, and the best way to do that is to setup a scheduled task to run the the script at boot-up. From 7e90269f731808d92b0b7344c586983e9d78d5db Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 3 Dec 2023 14:38:09 +1100 Subject: [PATCH 255/694] Delete lib directory --- lib/64570_libsynonvme.so.1 | Bin 54154 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/64570_libsynonvme.so.1 diff --git a/lib/64570_libsynonvme.so.1 b/lib/64570_libsynonvme.so.1 deleted file mode 100644 index 1f97be2d5b43e3d68c45f780d3857d597862d842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54154 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 fG<~gV|683Oa+k^ Date: Sun, 3 Dec 2023 14:38:25 +1100 Subject: [PATCH 256/694] Delete bin/bc --- bin/bc | Bin 84960 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/bc diff --git a/bin/bc b/bin/bc deleted file mode 100644 index 64b3cc9202030b52441e6e1785753434fdff5917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84960 zcmc$H33wD$)^>M7LD=kwL_t9tTmV7D1!Xas2(68RGHP5IHV8~D(M>?;DhP8I7KUQHnSC7XpXoOPNrb1QTRMv5{0>v5{0bFNhi>~XFRIc?+L1=_yss~=_j_~l#SGCBV1&{d@Cez0Pk zeI3n0e4MM!dj0@9>iOS(@-^alT3%az$job$c9TDG&pf9@B(c6VE6E>;??L!G3V#FecM$$s`y2@1(XABp2JCSB zb;lp8t^@x1;O|iUQTAc@>xsYg&k@M<$6sIkQ9kuyeCbg4_>umfeEMnRj<`C$-w)}o z8t&AM&bpUQI@KB1gYoCX-~JlL%K`Wsh`%2A>w>>S@aM!8lG1j%F@cX$AM`KvVP16c z_VF+A9-KoMZ6?0~z3=EXtz>fkWqTi4IQ(a;*9kSd95yJ;{Je{7YlXugpf&huZQz%; z0WSj|KgzN{kB@>TJ(-b3!v_U*(xMG;Q*XnVuQ*CWk^dlJ86~nKgCRys072)l(JW4U^{*f9l-1 zv#*;34wFMOuA5DEkQ2J`8xxgY@fl+cZHrcSz&49I!v z?D?byQ|6#H3T9vJnKlCoT<4i~!`vC6sh-K9>t>L2!Q@HPX275sH%;|Gv-wwsr%~4_ zv*w_b-kCHnG#R$cnheY4Pjfsncj{EnnPbPCK5EkOgHLc%$DQaVj~_hLbL{-dbB~=f zdCIkuubw*Z*m*b3zHZ9Q8OO|;F>lJT;0fJ0%z7q`xnSHRXgl@l8S_F@=Uy;w6x5x1 z!Q?AvPK63r&$@25R$-DtZ50vqo1_1wQVt~h$}uJz=HyA;PD;J<4aWF*LBSAn<`oCb zn1Nxiorlvc!tT5K0SrsIo-=hmeDDkmn>n8IbX@i??n5^2IOpVxvfwM<5j4;EEVvy| z^jBoTS8MzwS@4%Md_@+#TEkao!EN0xsQp4-A;7uA{p9LS*P04M@f-lhUcozI+4Y#x4bsFB71-%7Q9Zw^RwXXyDR=Zvfw>5+@A%%NW=SQ!KZ8ZkSzF04Ih>Tw>7*d z3*Ns#=@ZO?&(ZMlS@6{wesLDOQNypuf(JRV!Do6Fyh6k0WWnn-d_fjG{~*O@Nf!KK z4X?<8FVXO2S@1dyU!Dce>!J9s$bttod}S7VnTD^=zapntzbB*DA zocRUe>Fc*1Mar%YfGbNCg+C3>b(!<&p9bd|$N3CNgS>6b?&+%Q{FC6s5r_+xZ03 z;Le1!-`uC7sWbG&t9b z&Zi;`?u@-GTb2e-pHD7NgL9qfd{(5vxu$kLE7Rc4I+eJv{|2m(BG`O=j#IkrAoO=V#$4-NDPVamg)8O1Ia6V0GaK8iORgc$< z9TmZU)Jy(!=GmkYRgxdUJeyKtwd9Xy zo=qsRLh?s5&t{ugCi%Y1vneH(Nd92v>4wA{$#-L(O($`MWO8Ne~fu{sfi_$|0DAZ`NSN_ z-@`mZJ#mHPZ)ct%o)|CrTbXBQCyFG06Y~t|#1P5PWuBp&@Js$0<{83?e92$QJVQ6( zk^BVa8M2AS-)R4N%=?*-OTO>XeLT~aAupffz8_=0b9vDGG8oz3IR1jMQDefZh^T1S zU)J$bSdYkPF8E+TAJ0zYzBvZr7d1ZTWq4C)KSbn$R1 zkR0wu1$xitWx(b!W=*hqPj0aJE%3WllxmolA8f7)n#Me2i<`UGB)8k6KznKNWwpkI zfO#iw-kdlekP?VMtI7|WrA#9+VvCo1K#PPyi+Kb zf@!?Kq-fzCNLA9K_R;V%TBLv38=JL=A!g~epc$@@8JiI6`~;&VJAziY-U@6RW7fml z@6#F4g5x2~jM*RVZEiLLdn2WLn|);fc`Rh?DUqh`zNL2|YgPrL-OCjtqZ1IUb~(Z2 zpx;M*y!FlTn9*-AYz0d4CKy*Aw4i6q&V$_>NoUtU%Ua`mIwW~<%=i_G3HI2SaX*2i zEQ%RXCw-!Qd8x;vXe&S)Gahh?dZr0@8X>rm#P$>*CAvf2vSjH-Hb1-DB04M3Xc-$3 zlGL~R>wtTN+zS=+k!lQ@>JlrG;T9G93bD(p!d+FdaS3!y`cSZf1y%`2#-nc}sSyRp zGA7|WQsp&`3ne=q-@^mje0PPYj;@wlc5p>vzP1+{2hEonaful}>-vcqHfZ>X8GmzO zOLR(kA!ko>GeY?wW$w=1lIvJ&JOnInvO}%0jOa1r3{4e`8Gq7Dq5BgE>Q^XW9lf=I zDOS)wz!cGRJA%zF221!0fmzz*@s%wHN-VIG=x7Mj**wj1c6rH(FuuvR)^mzKG|md_ zjE?u3B|G6?tE4Gt-uJrT7{N%O$(us#tdnI`;ji6f=l~{b!I{X(3>qM!#_lIG$OxJr zm@yUa2Ql8Q`{_WdTzS(i+k-%cIWbsj&;1o?IIL65I2nFWb`-8>(M2qBEDa5y5_Co* z9AFxQfovK5@f~UMEN{(SH`>MU%QuQhrASXLFKgmqGNxss?Sg32 z%7LO=w?AgQ2rSwI*-hXF*`35UiKT!dP5~>g@|CSoC|~p^im&WRWH(43iEb14c5J@K zQxVwZz+NEi#Z1@=!XC+l-AS0030p|m4VkcO2%Dl{h@i)gLhFIklikJNs)J}hR#iUR z6M98ycX5R4*U%Z2=PUaolt%u2=209SdLX#6vJO{uXd_x}Pv}h0+XOFF_)ikw41g8? zkTf0_4$KwhAzS8TL38o0=H^QJGkF$7T_Yvv6pUrk`44^SWswNEu;&z3332V8kpj}C zL;@4e2x^V#AodC`w>Op!A2l@rhzM$SB$G7FX%Gwz5q!p2fNG7Q`1UwG2F41rbT7iW z2nyK0{2RE@pJ8M`eT2at_f!Gf;(O6@{6B z%2;3xOJjl6#3`1pAQsrd3}T%MNa_HjKurCr#zv>_3tAH^$3$Mw8ErOBD>efdBG#bE zd%<};${@j8KW6yrzFTjCbC9ousFeaY11rXwc5on2-f3bl8F=`X(lx$*9?zoTFz#e1 zqg=aTfyWamUF`|=P;@bS3UQ144#F$3_R`D3}t8<^iupdjZ(0 z=OgD}61Z&46wD5~qw0-ru-W%=yPVO!jq&1J_Ij2yV{qr~3(FXJBs;f#;m-E?pfQbs z$Xmvd_%5$ne1MLgn2`?vKgnY(BM<4qKA^s#hh^+J0x{3=|7~W**@L`x$IGTgU zjon=J`(YkjylY!>Hd&YTV(yl`9M*hg{SKsMlcAaF^Up_0;y1FH3z@N0+02cUZt;ZL zMP_aB2Fz~~gD{jVOM26s_S@PF(Y~@*F%w6*qw;SrX_d{u@<{1&&!R)5u@4L^hd)?P z-UjJz$}7>@iX(fk@h$xu=JulzZ>bs7Dulcz9PP4hte836WCRA8&%MdCT|I0nDM2VEhZA;ij!#J#%Y0aBky zeO4%TO9?oMfV%)lsRAyuS#$`Bf)=LnF*`q%eEuiQ@h+!SqrNXII(#4qPIJXBq*kX& z`D&D#o6up7L@AKABd@xdqkloC5-ofW0DH|05Oh^4^>EpY3sb^1DGB**(ZQ6k4XZiJ zILndn5!S+Bc&jU+?q`v3Jtdq+34aBFn#8@Piar2|eKL!dp$Nn=0*)eJu`vIs57f`K zjDO+E`BlLV0*sIGotP*jqna#F%JosuEAy5?!(f!9hQjiyiX(V>xB2&4)4=l-d4fUlBP1| zJ0c@r$+!@3CF5aKDHsI+u#XZ(Kl@>+#GYmR8)-5BdjgFQ@ogFJFwLrcb(1LE(Peh7 zV%7u%`=hI&@bRv~DOddwR7&<#gtIay63<7Z9*s;KtAgmLI#=Pll#D0AQV}H^F$3=3 z3g#Szd9#aI4NRDJ4YfI&+B|_>0;}La6)Mg!Ay*hkgkFy@sphbl=i0PL01 zprV&58c#a}mnZ_}6~XsEicJrY;06#l>VyGE)L;%|8K)yDDhx*gF`O%+eTvgWz!ay) z6{oQP*vC-xZ9?62s1O-@aTPAV5MX?PZ_D_EX&RERxcOXeC5qcVAlRQz1-D`3R`4wH zP%%}VRTy$mCm#T=)aa!MUnk*HAOv=t{+$Cr;umcDr23}Bc4R^P5O^r!Bd&*}w-xkW zK<%r@L3LY~q>@cL&}}`f&}I{@kQzRq0Fzv9AIzcqav@j@-`!h0QE)H-aH48Ihu6|P{V<upM%pGI?aD?-{kbaCjKMt5o&-Lb9Ey^W4mwg9OyGV1())b%+yC zW>Ny`cmV7J5H@0%)P$<5E7ExXAxo<>T&*f*xl$DaDo3aGNh9ypifVsHkE>PlDb-dU z?5Os`ccR*Z0N4xATws>#dN)?8E~6k7i+}Iv^dMY?z|0!#o+-C|I}@>gw_7giMGNat zZubW3#C#N`JNyNg@;Oklq#YK>k}QaQIPjHg_T9SQNk{Q%hWuYjbt^D@<(=ql14im=|fQ&bol zqLWxE2y~0rew76=N^t# z!xZN)0I)Zqp{GUl{?Hz{Z@asxf4COr7>j@^op2ZlcMMyj7(e7P{@fO4RFLruFivdh zpiGuYL?iT3z4on&@CujkDMffL35S4CY|XcFJJv_ydvxf`7hZ+uxvH(bhN^vakXG$u zBwW?FWP%<008`O5T1ogG0Q+q;>qI}Wvy3Ml>W4`kxQ~@$<;l0l3g2gy+*fS=RBYC1 z#lJz*0o$itw%>m%7C%6?H?X&0C1ol8T6+}{+7Qsc05(dkpJxceRRGv0Q>|q{R`ns{ z4WbiW5+Vj+5@|XmGy-3XJ4KrMg!(3?0yWZ97(({c(7A~Vkp=H5WVHirIynQmi_1S?+|Bf8#wnUoac$tzYUz(3MWdOc5UFCrEsn#PW-ag^*Ku6j3LhYHgIwj zPCw!-2M&7~Cmz3P=hPI3H7ge_({JVKR=Eq+3l}XaaN@7#YqZKXV=(~yNZ*&gRO;4_yX7%0^p z3tm&K@?2KuC|0|=fmH+i$surHxL*d*U5e;E;2;DL1U*5Ncqp6qEQPkpMf(|BugS1t zB{eb|dqL3qb{C@_7y#Tz=@VS(ebY#KE2bB@B!4DTe;S5IVGMOKZdOc>AX5WO6PKe+ zK*}~qw|64!Qn8sBrHX1;^igI}e^s=KMH@1Ux~ii4P^26(PA1`ncN6!XOx!Q%rnH%B z8TxSDPHJ5b;=aiu?gyRka@;dTYEIe)q{%#NOp4S3NST3zC%HIfQgWV3BO*M>t5sSJ z6op+~?tcdN*kt*|RMi9}MJh(VRNX_G}_{PKq z82q&@-0%$hEn~D#-=Z9e1WfPgnttYFjA%g14P$4w4@!C4#Xv2^3?FjbL&c6_E-T>3 zWv-9Lj+_OwFX-(^GH*=ed!;c|ODTL;N-1XxI<&qxQsc$;?Si#>S9tMrDJO1tR#`C( zAr!tp1wZOZ*Sa`&gbUmq;WJapM|uvgXGb!57Tc-9G!-HC~@H`cyww5Zuu8aEWW&W(nPrt@7$7! z>?pE~^3Jj^y(nhffD}KLaZ6X(!o*$0c}NKt)Dx1t`OFgw9;Qv>I9@E{__UG_x=6`k zs>H8L4gpp>q&IkqR1^D(JB6n3vAM4pw0g4~8_fR#gNocS=BJ~rBY#C29zkEpxp`IE zMm4&3Zd4bWwW+H3(~G)_Fan-6+B|ZzsM5QJOh%;8y1$mHF;vF@n78PVV&B@@3;}<8 zrKNzIFwNrbzciP%wYX95G^DD{s$_Zb@S5;_DOtg63Xy?2F@D&P(gLyIP0@7MG}8+A z%kh;rBg)fu`Con^MTVdX9|6aGg?fXtw&IfFa%URiSo4@4Q5ZBE#tyJeBZ)LzT4CId zL~SnMy(^HyJ%M9=OL<-?^Pa%4I`M?uRT+e|+!H`WjRj3bF62)^0`f1wC2<~N+%l%Z z<%kqt%s2r+Hqb<0wPrXh=5%$}V8WQ_0%*+G4@eBM#BZ25TgE(4%bA61kcb(Lom6S1 z7dVN}fl}F-srQ-c!qi(#b!DoWsr{IGnJJ#+PCUmHPdFqVXNsqw6Av-fjj6ksI)JHi zrg-KyaWhi~GIc#uJl~qQnyDU4O=PM&Q|B|)lc_OG9m3RUO!Z=FC{hUfFx2PbzT-HF z_{)*4Y|runVjj#?XQucVQ^L#Cp-k<c&tB#ufT_iyNp30N{7KKsmV5~->GLN)Zqome&1o=YL z{dio_NTUYiNM!w@MYswxRJ_tpB&MvAI9=8b(+)=lT zn^m$>PR~?PnJSVG31R#sf$oACXJJOkQ}@%$SQ*tY`>Wv-m109-n6!)0o1E zicNrC&h+q2bFT_o1%E`^3an;Peb6*UA#2}&aK;Vx(dM`I-Du}#VAWXbnCnpzDP83W z^#zAsAkxhnr|LX(b)T-3MO2kZjq)OU)kNrVQjxF z@jenU;}f9qV}FMm3V`FZl+l44O`{S;maz`sbjqgc?+)|Uztc22dd1*G0r*izQI>-Gs)<>Uy4l;hW}hm*|9Q$T|VC0AC8YRWt}LK$lWr z3IpR!UIuIm;v6Ptxt(PGm{^VgRmWTIRH1sQ!hYDrj$Yhcyq-0YJZP->^VsNIFOJpV zWDa(>&@MTvE*`#Z;dY442Mq!ewHZDvW^_W19~A7$K|#T9_%_G)lEY#Eeo0_a5A)*z z^%C0+iEkA48z=~xJj+?|Hj{F!6NjfncQdes0ISH4n3%4TJ#c^~P!}n!^DOQqknz~H zAx@8KJC}|M)SKgbB=^@qu8tJQ0gTUKicU7=cGYkUAwg3JdFB$ka4dFDYARIDmg)GP zH^TAjFtR8f2o$KOqhvqP-`M5NGBr}#;PKs=kLlDcNck~G?Gp<~BH6>9{0?Fm4Wk`S z1*4B5`%A&z3N(zJ5{KiS0XGI@aLQ($)d6HFAqeu5-)(LlYkoP_`~jIa!NxQyDB8Fc z-?%OR1aPke8TT90ocZ8RqHY z%%;M#W>)ViV2;K50hh#2&;Zl>c1Pea;-QkrUQBFy20FIO!8susS8Toxzv&h7nNO?v z_B6!OnP%@f4;99s!NJLEn*E+J!)tuEatUFoHK6WK zE;!#T-2wmH4U|`DvlZBZT2Pw;7d)k8(B!cwFpZml2CHwzB{?D;^^NDXmS$kbEu}le z@}9o6n==f*YLysnVz(kCmjrC5-SjUJJc+<#1DhZlPhUJ1bBiU6BIjvy7~ zp_Xp=oL%OCINQQzCppH8Lx0A$--Nqqe2xV2TbM6+7vE@}$gdYLdOxMAboKSGqDu(2 zM~jRky=W&Dxns?tNg&Fk{2o%6z3;_k8Cp<&MhlV$0W4#_AQxPX3#V4bG|BVmS2>z0 z^%xC^8uiX#3W}pUG)`rD_@?co134&Ve393Nt|V2|VX(lp+tMk(!5;R%|+xIK!uKD~$0-;B;)} zNm?KbAs+PLen)qt-TjVV=mOKoXF2*mx$sQ73?@}*g7%HTNIPGvp2aXe-vff-fu_&| zkiE+c%sw9J50Lh)Er{VF^|O{`R>4MI%<-(TCy>NB6MRdY$XVWH$k{kZgW1!ckz~_{ z7ql6caXm?jFhdL>0Tz?xQiOBD#xw<)#EWUHP`P5c5YSHnig1B5D~w~2Sf-jA0?H3- zY%{!l<1h%czvgPgIpZz^WHB~d?1uohN-#?ZG+`{}MYk!OuoVh~7mbi798gn;cs;)6 zkbDAhfDkM4(=03%u%}CWaq&a}wWu*ZPY^1Gr8n$`UGQ_bGagQuh73PS2Tmj4PX-4> zA_A|_l9;{#>68bZXK2iDqmqq1JIx3B;HeDZ6Dt}d8b(SRJ)uK^h=Q2?=Qq(y$LzIl z@ac&~9c1F4G}bwKnB$Ld>WR<4@kt#~ei8-6ih4PCR8qoM>x+ivX0_)eJV?}EIf}_4 zir%>HSM7&9+x|@!ux^Yyl^7}A?wvo#3T%(qIVS7GR_j76ybcs7Cfw;z=LrCG-yRhJ z+aWhI0Onx0vzG%52I|zd69ZC@Zk=aa;CIc&z7jrk24{>CDmv_AMMpSA872=(LACXa zmY97LpVR=KOv7V=y~IyqalIEk>fYd#`g9}1wpD`8EMTi}wGhRkAgUfX~68SSfh~<^@ndJ*OZFoK6L>8%sahZbJ&#t|{mV_=uR1zst`S z)`SCZgFpkf$q;K-#++vWX4kooh45Jc8UmZ^P@c)m4DYn?hz?w$Tk7jAP*h>eKD!nx zBt>oC{tq^ja0i*O=>gvDZYVHjw1bWeaP`2-p&-Uwd8vE%r3xD{PKy$wy1pt#p?Wa! ztmh&KH&!q+;VFD?UC^3?p`Ovzj++j!-8`!uN0Ua>gpzzddOAEnRs}Zv#Ef-1RckC| zDi{smY<Kd?EIC2U2qj&3rbag!M zNY7%h!pyhOOVlqB9zeykJwRkA-iUUR_z}k!5dr^(dbpoVdv5)Mhlbo&Rbe~>sJ#m9 z4NTTE{b$8Qp7SVtmJmxpAkQ19T2dN2D|9rzPY-v7ORfO|x{;m$Oz@SLLlS@`0`!&7 z7r|W%ki~N<_-?h9ih3ZVcZI_FQ72RcRZ-!{yu()_nA!++I8 zeN3U!f7^mq*NK2}#nLjg5I`_`2%LHeaY}&mZm{~xTm~OK%zdb@F}+t!EDt+biEE$| zm`TwE6xQuT=xB9q+S!&6j0^o?Ze5bkDAwWpPt4wVENKD=ZH{ZWa(x_*V_pi5D1Wjq zgc!eqB{It;vrT0zW+2{ZKt5)?i*J4s?{y(Z<74D?Y$Sl0SP!setO68GwzFkCfRq{7 z%0;uW_7`Z(T%>esr!eo$mZ8-4qZdk)kuI=RtXv9KsvcqZ1`AAD!-iVtf9{bx7 z7>!CcV$;fFf5P;bjW7jI<}qEUI=#(IAGZ;8;IUt3`pAuNqsRU$(>*tKWcm@NyKcOU z>3f;RtTN-Yn?`;#;PchE{*M9jhe7%4#)0hr)`)NsDf@I=yXaJ43J@2%T zZvyanP(e>7au3+?`}Nv|sNZAp0o1g5tvCwYcEeS$+zS*P*wL{bOmkoPiSu3K1-Vo~ z*>m%Oy#?4-!4&{nL+9fglrg#B)Eyp8dIhs!8a8q+gC%wm9=3$C9{W+iH)1=*W7i)p z;%@&Dv_O2U3R|HU!s5hS>Vbnp;AWq$R8@B?#)bytmc-b_K75bymHiuB5&LE(YV_;23q!UAbF_FVF2VS0IJQeda1(!+{5~}uu#B&SnvZf zXrShY_N4h>eINJ(r9q>NZ->lVEO%maY4i_ zD4oS|D?9+MXpc6eI>sMI0sBD97^cvoh0|cB-4(7y*d~Udp#Z%f3hg{>zy5wa?1lI3 zPqD+B84n}-!OZW_1UJG|kA2%lnOFRi$g35y8ZXlZhs?qC38I#_;QLsA@Vy6oq2(<^ zx$?i_b|FzuZo%yrjKPV~1%;Z{bZ}S7li1i^^>K*f6HkJ?XyN0;E(5miTf%WD^p_n}66>GW z(5YCUQFEbTy=87ub|WCbS^`pOfY_eL{R+u(O<-It$!@a3GA2ld;aRd8ki;p9_)>x) zqJ&2FSFn>cteCLw3U-K)3+mHBw(|GBmsY+-E^Os9(9gCbtz3=<*5h z&|)B7cuWBgjPJO4WmHRvK*uR)#ss#)m;nTP<{|W$F%fCHK4$O6sFJwB6?cRdH&uz7 znJI4PnG_c~5aP~DiTg~Tne*ieV>g^`|8}s5`vGYs&Z4+HSKLcbht~ZYT@#r8#)^^{ z`bAR8&S=R>H=Hgy*MklkT$7O>NF9PDdLMU$VS}rcltxb{-%#roMdQ_TD{F`hIr zyHAIho4^z;XT&p3XP0vtpjWxV_t(PDBOd0FB241!>wpf2XkllUy5>|+A0>+J{!SF_ z=PKH}rJ|oqfqozKz}GwYa(rcX!3xaCtvQ-aKQX8p#%v(<3}d17*9rygRkv9aL)n1!}Lg!TOa0#Usxm zt<*k~tZOj7DAw0&)-Q0x!Fx=Ar#$k!q|!a|{poVcSJa+B-V+t?b6nm@bkoUe72_Vl zIE43p7+1MWN#=IIQiIFEbXR?~eOQIjo;*7$p1Z$w^nH*#58}F7RvY`CbmHovkqqIT zKnz+#AHoICIWW^=8P{kPbst{siPq#{22W_!Bi`mtO zdmyLlae{kuo49`B-Va>+k?#2VBfd;yJkagCBv~xRlF0xWT}F4G;OH_Fe4d zK&uEeFDY%lEPSASyPNA2&a)S)oE=&VX?&8Rq&et)7b_ay%eb#obtGSC3XvUA3C$6E zNb&-3DVp!Y_Zc^6;K|9;ki9~H(;VPMNo*iA4-R#~_rOqld><2TPbSH3Nc(T-Q0YgN zV2@}7F7D=25q7fb%rKswS8wOI7ySp)ae8*CN;fclGt-uF7>s3h9JAQ8s}1~$l{%># zR70M8E%5?%&Gi+5J;{!4a!KhPf9NNC55(58TYdll$Ar6r3%BbO5kNlQ(nlqH0(&X~ zyE95|=mwK^4-eEV?q~&Sa623baN%xfpttirzXn!LB^SZnlYzSj?^tR8!$!PsDgFv% zh&9ig$5<`dLnkOR{s<;OwSgK3YNLyK>zQfxQONxJ@jcjA-bZ>1Z3A@7maBbw6xtER z(1`~#Z5gj__lp+4GAnoUjY8dt&|1d{vq3fh8cqDSdc=kI>Y5r z4<7ZdX^(>kcT!vWJIfZSq1*WCB)+kVF0#hqEhr^%8ujP%g?(H*Ipw(^zlRQ8y)xc&PO$KmD>8`)Q z|C)w)zD7(cjveQp3Vp;i4R8mdco*|3inm@Z0;F_J8V{f5@wDi-*ApJXt@zrFkd0@o zPX>|uVxA&D(hMS7_SDT1yB5uB683$umCaW^+4Eb$Po7Hug$Cfe<9wbbNu%zF13zg1 zYAlD=#0_CQ2&igeM0h>WMD<^NPKU*<M7AO`z3# zk}i947>&v0Zl5tl6^+(Kx2q!d<~?+8u9mX5cIBq^N1yvW{KSm+bgI^E;#`LIsE2wbh3^{o~aXAulhqvpMaSoeh$hRCeVLdt}bWB!J{_w!wg*bpE zX>|mrQQfOzAw2%c5E>=5A`s_X7rC-)vx0fJqKlD7hEI8(?UZ0lFF@VpZ%!U}2Gt!U zl;IGHx+}a1eb=^%98zE;*Y{D(@!hd`pau=r!7#V2$@Vh$i|g<w61bC7$? zam!f#8Exmb?=)E5`nE6h>cPSIVqg`uffeoL-N@e)vE#?m^ie&4+r153-lG7=nCxt$ zDi97`ZRqhIq{ElVKfngWx!MnhI)jzK>qMZsk!LQG&GIz7bRj8fu#3#v?!^s4&*En+ z!5Hwx9wos6kRcqKY`PYC1d zUOZj1Jc+X-I4_W@{2(g75=<%)gLR3Y3`YA~+f?lDL=Kax<;Y@EH3V37w4rYpZ@;@0 zKpIx3dlHtYS@Mh6lTNHuq_c$7SGGxNPLXp%oOE(J0y0a1>aZRWKC;$0xlPs=ll8bX z{J~+~YHq2+u|zx~4Y6o`pO%Ob`(!ksT;evhYt0(E8gFsH?snosjiAho*mx>-1|~Lu znpJ6!a8y1F2kN&qu0mS&wrhNDDaeo5TuwCPYM*4Od!P~;2T2^-`Z2{#bOc*EnDH?kKs2ZF z9XmF|VtAkdWw{UVD96)#2)Jf#mrIuNm`azn5wo@Frkd&24Uisv{o<(_oiEM#5z_*x+C^{ z)P|X&Tz@#?qqZ=fhlxm#PMcP>0Xsrtt!DF=G|J`ANJdmDe={ zA-Kmy%odBpx>^rAw5p(Kgn^J)q3gRv&+rgWLhG1+2N4FLaonGaFJ8=UEUrQ?1f*nN z=5;uBS%M(DoTM(!c$JfA8-(Xg(;TU81-1}7w5zWBfov*50|_(HgtFcmj^Zh8ngzE~#Vl=s7!9y8u{via;j zV#Z&9&JW*@s*7UAQ~)~xi1*mKsbYW$aeT z2AoqzDpKV)jT4ZtjAK}^+}vbhJoRE=Z3i#U?gvFo<0(PtA_#m-Ahyp{!E*q`0z0U0 z;*a>^QO)dlH#vWZ%fY~*6Um4;=*R11^sQ4zD;k4Vr=T?V#&Z@L;(2~d+3*+aPaZs~`Z^_pJx|8quF;`nKMw5Q2v&cATjw|@1NCu2W(Q8| z>==pu`;G~`gLyN0%y-|{s@iL@eg>-6l>$i-*f=1bWH&WW}J5>^P-+`3a9YF%;H(8+Ve)b5l zdx8{Pl~!=KDi{M0>_#Wtw%xr+{9oApuXq2G-M^r;6}uNanzDN)(rI?%gf>F8AEmd_ zvM{8HOVm4xv5HNFVv}qpVkZsz4RQ#uKRtZubyz3ZN|6DsBA7CQ zXukmfsEn{3&MJ`jD8;|;x? zm_1y0C@?BBF`~Wlm4A4L7~2$hZv&LEp_q87gK{nC-5yZR)|sWNf@XLH_*MLq5?7^l zGVJXgi9ujY%fz5W_Rsc%{uUBd|0KfMx8uWfE#A5=FySndFHiVHrS^Hkgw?1jfvQt} z9FTa>i|LE;~H=^bzluQaKeE{K!KXXylgN%CXfim8le_2)9-xcae^*N^)mD6E2Vr6eR+y<^5@U_%9=!^?L%n*ZvD#>0u3znDAN zo)9pP2PWGwFrRiY5!muu3E1#83VFGbvt1BhY72k9m__ z?2fE1mS<5nM;-4kMB7Z<21PI&HF26E8{=cudbJT!@PNZLFhK_LBN#3i_rX_(Gk?}o zjfOx#M`AoGWoo<6L^Nk zYsP93b5(`cfQw=|hIpfa_Yy!Y{i!PlPv*;@ED~Shx)T87Su%qPPY{qcQ<3^djidgd z9P6LM0thCHbfG!^96;Q<@8{NiZ&mlBfPF#=dn39U)cY}j4y|iVPuBZemQ(L#*u6=f zkWuLuK@-T+m41-@G}hHp^C}d-;4-_l8VX1a&1Mbx$}#1@4E_dafM>rJb;q;WOyUV{ zV+s<9XJ}=#aH^}v9_W#{SBUo0MEhGtu0ymt=JzCT0L2)W;tgtkmBPVeHo*QBNFt(< z*kgcwf{XnpVxNS-MkVB-5?qId`p|gnDD47~uDVyChq(Ty{-A2Lx~_p2SY0m?(=uKV zVxftQC9Ts`Tdl6L6m~uuj;^lTYTK%=Ubj2d_5Q(72sNJ8Mpv?W-0JFQH|=C~4ehVY zX=DS%blx@TP@2?s_03V$_n_27B{YgO`4*%4o@0`~KJx?;iNDe6XyLz1N3T<`&z4v& zMCSsbkbP(fRdTvRHXI53YEQKAeU~N=G|8(Kj!Q7qAs9pg)?uYf@F9)YbvXK8t<~WP zAj+=8d)utTr{JlyI{e{v5=$L!JnMJsuquT;*6-Hgrkb|u@Zt)`SNr#b8JTssopqL0 zhbQv&@z&6*Lp zPW>{p5TG`Q1*t_przj}TNlpQ8yoeFpW%e!SP)tsjjn_A~${jNwKD`K(7y^ULovFBS zZx)4~2j!&o`&=yHIYabu*jfqkNwr0o-tHx%WM4j87G$SnYpXEXRJRIWL*((kIPPBi z7BwV~bx8c#dm(((jXm%E~PVJf#BOMqD`Qqaj~j7r1L8me0nNO)WgkK1NM7Lm^-k zXJIIh;$|zVjz;;`7UiLzDP)=&s-?T6IpxQDu$&T@CkL(OVe{UB!6VC;=`7NBsC0u~ zdN!bv@QQ=-&q2|$2G!jEyKXQJ5iS)u$ElS`6p*SyYK8XQM%}6j?q5*BY7x<>39*Qf zDZP_-*F`!C{*;{T$UCp4ya8Dtn0EpzLe?n`%ij~R5=2e_zDm!VtUHQrgl396XDt_ja&+IWI8j3M0^vayBwP>by$(3s>g3twvp?1L?1=LXW^ ziA#6m6D@|1RZ&t=J47iM1nRJ_;Kdabupgy3pMJkGiA9jcB3h!V^)tDHNIwuYISUD? zgd4GkR$xM;0`P`4w$n478GGwiXYk<9q2NuERzW`0R|GB5Yh3gv+3axQC*S@8zYmba zoB9jib_*-Wi#>w7hlF$`>+tV*Zm}ZpBLZfGuY4W#W)#Uwr|xpe$ACOD=0PsY-EDWE z6UJmAX8*Du^EjI%plN4ROSrS(R*9Mme4l3C$8xu&xO+JG{W!+OBsV94f zu#3i%xzZJd2FQAzOE&4Flu*1cg~7wN*q~~0TJlgJLd~&h5^JF`q$Hk1RdOpL~%>qoQ!?RT<^?rKimDrFTJtxF_M$hxw z|1sm}SNseW+*0l3rurh~71%1Ia*(o&pOHcwvH!c+Z3Y`){T0eceKmT06zssds~WkKy1R^1Ih6C@sYUV>@mLaviU`Q z)nkGe04Zj)2aq4N#l&V+@`*cRSw+#o{s$U3e_Qg4mzA(I`|yZ8X3L$z_!Y{xGy|pHOSggMES&KNRMvj0 zk-)QB_{L@_`W7S*%ZI8bPL~2((Ul?^emJrz=^b6^&E=HtMQKWU60nqXKj&v|o5hn<6pwfL zOWS7~Mf;H{a2c5Dxqi4ki<2ioYtM~*@S5F34-7>PF79nLC-F8#DL_Bs7NBOb#ySx# zi0n|q*lr~e36${E{b$^PDDqP~pzsz%cQh4Rl{hU|U?4-0qT)1p@ncR8DA8#*#p# z5jp0GK45B_nxNCrioR?!cIS5S9Bb#4i{5N%J$MlT8rdB2P%$p zpam_Vh&KQ!N$X#cQ5$rDQyX7ke#P3Dmco$Q*wjjGctZ#AT}r)pW91~^t139oP4!Fh z$gB*1R%I+Gf(CRZVwgRd_zQWd48ov#+m-RE3Q31PvodHKs!=#AS7!)G^S+h?2TR?M zkfjoNtyf0M?OxCCRfcrNx{5L@L%gP^05Rj97yU4YW5_C`;6S9-zTl*`0A>J|>M-HT zQrViIw&>b^xCN3JH_9A&>S*W!T{pIVwDUNyftetXHab_Gc+*4o#T&6l<*{qosGTMR z#*fObQ2IJB^;SZh62PQE+<|1ilT<@e4Yap!hX}5=Lr3tNkCSi5I*^@0Vi4LAvbnyy z`Xc2V;KI@-4_-f5Y60S(TB3$CfOj<{4gjWQ+zHN{brqB&!Dum0&%-3^t-mvexeewo zdhtTFVQr2E7w*I4VKMH~0SO1SjYmN-eA7b1{`}K)DbF!}qlNi5IPTjIK2fJPzonZ+ zMi*$wIfZziKRId{-M|je{a42RZ8CYE?5JDUaUIhV^`V4N35o3Vaa^QrV((ZvgrWVCjK;_j-Qx4 zXt6_`pZF7~@jH-EMf_eYI??a>@Ox)h!+fn_#LkmLT4}z|FKnjo4^zI+$2*7}Ew9Bq zL-{H{c@k87J?yCXApD|KoWm%H7FN4O3*Dj;6zNtJEsO)fesPf?cYvw((?~mwCfc

AwTuilb=iFYebbkQCMn*A(BFF^YNYM)LzrNah*dEf4P zx9NpZ2&jlkK_@Aw;Qrv^j%gKo0-!;#kPn$BT!J1#0LKFQoeRwY)G-=I;&EPs_tKWL zn|P4C*t)rt4jXoR-FmeLu`YSekLF*!4x78~3Fc?P+5QcbsxrPpN`9gHmK|}Do3HhU zYC-d*i{*0v6>^DA$7QT3Ctb&y(FMq1*68;Q2rTgp7`Mzfpk#$_z{J(Q0aL4d17_9x z2883j0i}(x@*%*?1K(KriAW8hglGWs-|}I|2BYQUc`?h2aKYU2OXv%}Sh5-ep(YA~ zC`j^01^y(aNZ#r?`){xdzxTL`m-~r>WpoFj(97ttrGVl03y2ZDpIQX1sIp9+|5&BU zr?MQ+_;i9|cHKfw^SVJ0;?ccD^Z(s1n6E=64(Gi22rsRN(%MS~dbM;fg~cB2r665~ zvwnZ&#qrV?Y$wiU!%?sp7?X(6nwM@<<)^XS@zP^A(@Q%5qL=gywwEB68kQ>!4^C;w zA5u@(@IB$BHGGQdTE^$k^5STCX1a!DkOqv`h|!vc+g16WS?*})0nC}2|6kOe)ip=y z9fK`a!B4a(ZC?+)sL@sQ9eO8vFxT0y+yuu-+^Yt03W74NL9hv=8id3&?t?rdc1vT) zh~FJx202f%+_5_kuv%j{Yv%vf{9IaW8Ferc@8YGYS?2F2Y7c!mXh^S=i(Xz&!v9rHT^=Gd(|N;8bPpYbb^Fc#v(qw&2E$daN7t1Way#>W694_4Eq zGsrfrLw#vC#bE0RVGUC_Rlo^BwP%Q#m%7!(c@vugiZFq|EgEP`a{VKK;5yY4`*1T!M53o#AA)`f+d$ZUS=bh_hLc< zfw(hBhA==Bz@9}~9_)QLDE5L<@W#`0s@!K2BGY)85RxcAxc3P~KQ)ZpwvXl-1*rHm z=o|(8kzTh9TP{U@Jm!#wGgjfer*O8oI62OsCp(aw2zJ4Ag=%Q?+$YQP^d{wU(!!it zwj`6YMXW;dosa;VBwolbp7qOf4N|UFb=bVc4uE2=cZ8jn8tI80UxT!`Dy35cmfZDb z$rf{5o%}dEe|&+PtvIpA?KpXLX9IT{oj0ZPt=E;%tT}NMQi3gkR1ev}pO6h%gh@7j z^u3e7)A-nkHO1#Mq*~yJ1io8Bt?Ky%k8lXmtOmaJn;I774d3KDXOp)MZ^0uRk>QuX zN1;wPV%U`jdn18HFHeH)p=NjOIBu_`;jg|6@ z7!>3HduWza{W_j&M6Ki$$0v(lPx2;Uz4C1Xe4Ea*QS+p?TII= zVkA?78Q88x;=b(vN?dOU^@j8D>mZGCw+ya5#oMY9ksVh+kxF=OwTTnKIDx5ZsggQv z@{QYsJA4Yt<^d?0BB0zHM1=;n4iBvIjSH;e0o-~yzV?@2*|!AhtiUSV7F={XsOsn` z^)^*~j26$A@FW1N4Xhf7yFq~l+$Q7VQiYd|n+B0t4QNmep2d7dp4zDM!K)>OW7C03 zj17KO)((%waBqh!Nd# zeS+MwiJne7DFkZcV1zjiH~jH~4Ut)KJTpVo#UCbdryJWW3YDU=QMUng+sHtC@rNj+ zcfBx!mB7@tSYW$^%@lyx^dO`JO)n2wMj5kgHQqYhv6G)+u;r0>=;1k~YjZo{3(m_j|dqkGGk&4^BQx4QL6u2e0V9+nBc; zYEYz4U7B;CgNYl%r8_;LG5GfS2064!$(p;@l@;eK4x^}VZ9TA> zaL!^Ou~n1efF?r*p1{CJfxf;GRfi=ByC!=M58XjyfH0)+Tn%d)!-YGuA3YPJ|DZMu z{(g_Egz^uBF9QqAJ!AIIa-fe>H*T=I(_B16@LzcuZ#QY(%Qa0cg(ldc;srHrdD+Ic zvg74q<>jTIP+nfywwJr442(N9%7-xjJMVV;`S-m0%{B1uz%~rMtCetaoO?f6)6v<^ z<^CI&mFV4rcrWE2F_+Ry%X^qs(a9>#51PhefSjde5~@hC-m9CiLnQonOG~K2XY+c% zlc)xU5X7q+EU7i&9L{ujkjpGtX^vYx)(or|ZH{{wztD!BA1@%`oQ5x^me@l8z1K*M zxJ+7s_`#)8_4R2#=mv!uvMW`=YA*BLewKaI3bm-j>_?vOa?5Ppwdt-n@f|}Tuzg@) zHSU8gJU}PWB9`OFX`w^vrws63^?JGqDvu0oU)&W}&UlEI%mbaGuuAZdF!36bM?;PD zaXZy{@@)^CKcJiTJzuS69%3SY%3&^Nqm99lfx7t{(ABKFdfK#UX5Fsus(0s@b=6IW zaSE^BA%dRwO(45-n~MCl2+*HKFe!nLp);nuzB@W#a*t>hFJstu)}rdYOt9QpLV|xi zhHSMOgUg-8C+6OG1P_6zhV=&YHqkCQcpM6Q!06JeOAiZ1yDpi9rNDYFDx*VdX7W<_ z4_xeqtDPX0Ng{|jNfd5s0IpU)H8r4`4_#+WETMwXP${_FEo+PgYz86Me7-V2I=Lig zZyBTF28=g0v;>?BDLgn{CkrB3kjo5Ct*>tE4Q6@ZjcQH5r#zM@nW~@CaZy{UfA=3%zXuNqIZlD< ztubz)xNyu+e7zGzx9nI!3(V3AGh7xl?_YpmGsi8_+w`N&D8`m%tE9{dEb-#p$bkFh zPSPNp89^#KJ{O}}a8q?t&hS9lLfq8qmM^;txNHD|bn zN)3Zj6SPtl--}XJL93jWD!rCuh-}o0Ku!?Tk+M~*Q+O#>)NaY|Yqw1Ehe_z<^z7$k z>ZQhh<(;E6K>Cd)6jiynomEk4iLqOaHg$r#Q}eaI!P!@w;Lg{y_6L&3LYl2o|852k zTtovHA!2rvOrrRaainh%hVs_H`e3wVg-pFzu)mu0tq@7rTMEN^EJ33s%UzTo_@D)T zom^0Cc@7N69gL6eQ&G`@tj$2B+>EcXxN%iNCiT`FE`uPhw35FG8=&{f4E`sBziystbl#2u&KaGD;+=0YI;*$KnECQU zFsC7q<>hDLN`xNUBt~G@u`6UDnO=nR>~86;s&r+FFunAu7NtVCj((=Wqoq8sLZ)fU zIZyZ9k0~(>46n}MNaTZv9F^d;&!Qpv<$$NEGy~N>UZpFUK1!v6J|9 zsI)}lzir_uHT)gY?h2y_y&>ug?_b25p3HGI;(poN;?U`AHestyB1wbTb}+!^;ezo_ zu%wA75DE1RzXsh}&G5iZ-#LMuXcwb#;uMu?TjRh1tE})|GD`J{7qOEeYc??1753fF zkp$Zn?{dP0qZ`QJ^(8$xm%~gGmFulno80!mlAY>CgN-c~b)&(C8&uODNMDc^e(8he zf{jJaXKeRAg?O_5TVjb6Q}lZf1f>#?Z@Y8rG!jt65Ro zt#RA`r_-|531slm4`X9XW~pphc7_;JY9lo*a|YDcq~kYVlJ;fZKON1?j9w*;O}9oo z&hwpednLfli7z{#m8b@ZaKXS@&RuI4!kY)aa37L@L% zoH8)50&fuDUd$GFne`z&(k8iRA$WjP=eO4VQY)s=F#1TwDxeE=&xqk{D?@+;K1)kt;QN#Rh%89aY ztgj8c>`e~AHyS$jke-;YU93v+(;9&%2I8G_n-q;+Zq}p$pv{MV+KjhIZ;H~V0dVXjZb|cCn zrDfjGD60fv@dRgp*aM5sfw|+BbBc)SLS?J&^lRy;$DyY!Q?C)W-J&;96bsZadbHhc zbFjuWSS3#c^%N65X&|0BUg?8&C^t{yi9W7^ST)v&RBs)$9kwalF&3!m2)_6c6TB;$ z`p7S+W1GocdNKrR=;7)VC6=>lam8Bmt!*;v#M~-i;NiV0uW|*t(kiq1_Zj0iL@8LW zli3)^C&h#H=DbT&DU*X(&7{GL&2PI6hVaMQ|9@&RA3aEwHx^jW+KQA`VTH;aKB!cI zJ1)H7P6qZvtFkNk>n1jn8dR`4=*F5rb>e0}N4g3A0vX?vP;PT21?*rLby4%es+)hPjVMN-MqL6I>xx@aumu zRyWD&KMvKoHxoxqU^_fe<4x;#1_m1NYI5Igb$e4is5_uIlTPU|IL=^PLWh0WSMCgG zr8@&+iE7>ZJ{MNbc(qP-=NaP_>KJ_TE+nG#3-;a;Nu#sGFWVt4tlVkl`1ENerchO* z@#Ar6yV;1Im|cM$juW#=43y1@7gQwjF0mC@FSoPYnI*PPgZi!B1E8!mZavmZHfGi| z6w}$5J(2GhkQ?o^n%$EfryXj)5i?LQ&=e^8k*9pEuz=OtNtn#H0oHQXpbJ$D`G7$k z89qu7(`wH%(_%j?ZofE1-z2%068 zaMo%#i??Et#w%LCNO#g2v=fxbKzBk$$sbjTDEbW*<+@a3exUMD#wfqd?;+dG3WQd| zZT*=2uC~pR^T>Sm>4Qsfc7W~Ke(z(k+g4@ApzIyD>}4q%I+$$fcR1NyPrad*v6U&F zYh1d;iYM0Fxb>}WAqVy*q7nl`?Q(}3?s0%)vFJfH|NNV%A}WuG(=%b5D-jnrsJF>W zMf&vCzcp?Z=+Q@E$p`8`!0Q^jQDLLDV)hqmFB>3Y!)prraKTow^eLi_uPvB_NQKLU z?4C~~ZIi`qOk*pS>6;`iJtOk@nPDGs4=W>;3zn4;!jZJ9X?8lx2naxyl3zMQCN16;u6Pli2J|5N}ky|mxIV9 z#i2JSyga`n;_!0=J0MPC=Z8iuj^-|YVM%Gy6Y3AVIGV_n5kFp82piZK@z!R>l5QoB zpjPYVK_h-vKQoU*l{evnqO^#NmHmGjrP|0nU-t&m2ENObAR8zI5oz^N=*A1;eaRgR?# zgexC*7PzW>*1X#@{m6Y)+;(uE?O?@c^ig=da%yo4XcfN_qL99fG?!QOosPX^|6K~uJz=Vo&T@BGl7q)Ivf7E6PAb&;(~%8 zUSta)37PDPpd=7v2>}z#Dupa_hvc#;vQLTi3PS zqpojarE=5kM`Z9Bm;dPU$m1r8OzhJ!$%5F{(jPYJQq^{I|NJ>RHZAp|*-~Q<>Hk6d z$m4P{II(a2N=8SuPm$v*-*OgC_$VM>o*($o)ZY87E$K%#Jx@ro4MBACva><3{;4k7 z;LV#lchdE4+%$VTDPrl4#R&cHW;Q;aZzs+g^E^*oM8(;J+GxlBR&SQ{*I&M~-@py_ z5xbjpZMMc8H?x8($08-C)}D_3$e?(OSsfwX_F&H%Fz?JeXE$KAMIZz;kH_)w9#@?H-5DL zT+PqWZY!0~%ly0y=&15PB1<}VPg}0d^LHX=x77?zm5gt-#=W2XT3XLenF!!x(Lcm| zy}gR2wp&CI$0Kgyiay|-k8DKmUsgv<(un2I2J`7>ex_sA{ek|*;3hG$ujr*5Y3kCr z_3|iQVyax>$$yjcnBEVtR(!9=UdU)-l{CKf^0A%Od^b=V5RoPl=x32c#meS;a}pID z!_Bju!H_{ze&V(wi&vX|TG>eGc4_|)sg67yXJ9q|95&Lom={BIit6A(7kJq%;_jMr?WS*>MJMI?EKyMcd^h1 zb)GHt?;=gRT=}2K(4GOBwXm&g_zwndE3<}kyCi#0{(=y86@J)q>ulU>xpzyLJ1n=Z z2RB&myT$)H+>T9=^>z1)lG4BFg^q(n{(^4y2j1q}BXS}|{x`Z$W~cn4bnDAEwkfdJ z8f5hkGvb_h<#;IHPu#nAue#!KebPA7jYf~zl8+LToQIazr?K~P=X8L3R8~x}9E0HV zW)NoVTX6T_z32i~6B6EXD+0oL$S zNRzLDOOiXkPTq83^w}pZ{eWH|qdbQET&k+HQK;E^bmxr6ex%>Z(G;4LT{v%_rgzct zJ?NByl#xEq>DgMp((@6DLbOQXTB_DNJ-cu-={*N7EMucMv${7(xxb+0?d z_(8pH%W-@<`~5RSiF$9zZBe^vZ>j&aMki9l7sz>Oktr*`BH@s+zwbXIfw^dZ zHVkQP#y(mfAD8JpcC}?X=Sv24eI&oxZw;m0vE0fj8#c-gNgHP@)_FXcWpPdq&ZvB{ z{UT>hXYcj$q71DjM=AN8Cu=QkR(8eKS&(9rYRwLAH;4UQm%pjv6Y+Gb z4yEXfu0*z5^Qyn%*LK`2aWQ{3Q+^!gPD>v zu%4HDEc3o~5GqQzvw<_E8<(lU{s-}P%(Ca$-zIt_-Py{Eu1jV(Q|?EJ!^z|b8A9sQ zh_6VE(PyOA@0S13b26daq2!B~J#WQyxJJj+S}^d8YqZX{S1+8g>G|pfGd6utJ->R> zC)M-nwvIj+Hr4#;Tl4pW8|%is&Oe*T+hWgiueK=F99h{B3I|nNFx;U+?eSnV&>Rn~3aXWX zcw0EMTwT%`3dU6|9%yd~L|fFVU^Etrw5!#DXuAkE&HPJ%d>zcRua-#r*tppdMV=XI z55+@)u(>?Y-X4rfIq3_Yu<+T@Sd5*qpc!uq!WnD{wuah+rjX5Oq%+qYLc-@s zs%f@HqRl~Ka#L@vjI;!u@NE)a^5-PaPFcJy6f-+xffYfM%$dP8p?E)~pR3H#F>^_z zBTi0ZOU)&%Xvi!mC|KHWbj6XQCK;5yh81ykBlJ96H!tRtA$_m>84LV z1eTL+vpv$D?j0PRmBm%N>!!KQWNo?1e~qT(IF;tujW_7Z;F}+eGmZSB9n;+`T`h zllGMb&eZNq!YUnJctnt3KLSVv{E;goF|f3nXsuPf{u2dyy(1 zclk+7y|llTI+2r1nQoxlB5|m}>NM`t)al$u0YMsD3;1L;RIN}$RE`>?T6vaB zBps(tB!*MeLQ;7WIzJn~09;EXfEq^0rCtl{#{r~GQG#`;WJ>vb_!aeGGWTL&Dqvj~ zsysDL<*IzO7>{fO#G4^$^m zZ)Q`Ms)?&c0%?5@*Z1)}RRVp1vjB;|4>hq$wc(OW3`mHYJ`sF|nxICiF&HGJ{M6;C zS_ThXWz>A7OjSr5k@6fNo++0B|Mi5J21cIn+etRNrF6esjgQN;`0Z5-bj4JU3L9k z-^FG9%6;X&XO-$=-9!6a?V}#!I!Dci@}UlWq7o@r`%VI%43zr@sv-DXsy;F(TSD_S zB0~<#2{+f)xNRndG)aa=CXJ6Zz#)`tmFHU5xY? zVGbqcP!}k#F2CjxKGh{@kd$um?L@*DCgKTKImKFw|kq zZ-ut*Lu_8h?^PXQjofX@`gD0-*|^858>m$|DuNc4s_p8l+;5>q`qgc;odWeuYUw!I zWFD>bBwEf4o@Ub8#rj^X?xIb9Lv^VCLrwiWbv0M5C--yEN;NIzA@V5grG|F(0PSjl z+C{4#OUqoSuBF8_(AqAfLl*lG#3rnueT39X!i(juMU!H+$Ei+rsalO|v${sLs}1m8 zr!G_5)H=0AZB>`6D^kMmR9BLMo7C0n3+lhr%~**qYHN6hx|0_9CG};}aJ;%(eM_e@ zn^T-8=)Bcnq3&1rlDB;LKJ{&NC?QW` zO~n>JjJq#({5UMm@mTBuDhn$jtAbYSVjl-#1y99(4$&6Wid|&LbtrKQM%LzBSVDmWPw7qnAepZOh`7xUIHzyu+H-GQ`_kmcl#B?k7JB?^WIMihh%6 z7JDG&=Z&|9c$1f74;-I#{fd8geolD7KKg1Ib7k_AyNt(nV2k^!o!sSlJiiRvE)-%t zgf^UXoKBx~8a?|xj2*s??--zvpNwzB=HxOCn83Y&79y6s6dRq(nBXk#c~C^|cx-WA zn!TMs_)&}t#$c&)kTxDWJpoHS4%wOX3&NX=UC*GW@Z%?=2ygg2Miv)CS&1FZgx-gc zV)rC$e>hLUnrCY{lFC8oz_NMAV{h-HM;T6S*i2uWNQ~q@n*M1A9P&I~-xG=3z<$6R ztI+c_{T?J5^hg={sSna5_J?>%T3yTLip5PNtk@HYp<1WI8Bdw?h)(PxSFT+2V34C! zsY2;bSj(1wHmQk3KBZ$I<^O%zeMqHfQ?$_^ZAkvJ-I|iBO`#3fA;e{srMRqoj;CH& zB_n0|*>ouNN90Mp$fwpO5{{4fCKBEGchY02BHgNELKEr#+;wDpNgaH) zdX(h%mWPw7qnAe?+PIXZgzisy3eI-(^q=6h?19rF#U4nBdh5{fq*>BwT~?Z%rz7ow zP`o3PCuh^P^0Al`sJj<1f6*zM#q?>4R-ndJYHBqCHEHT>#}&e% zv(Vx=bhg$g39BTSk|0XRs<}=zH>l=DG!&o;bhfj+j>4K}q$wcQxjfb!4RyrT^iYi4 zt~FPoZ&~+Lbpa}!`&7$Xb)?nQZNt`ai<%dSuvXr_)(j@8F{K-pwcIOZeUO6y!SX~x z@U7sl0^hWscY~j^-9i_5J?+`?7yKSHqau+w5f}ypfE~aefLcx&%>gb1E&*-;22`k4q*0L`I zPN_{Ks(=fCtAV?Kp8)Rw{iY=nD}Z+ZAKQrc0`ckSWJV(K4d7|u55PdukqZQYOMuIP zO~75ilYpf2IY7!wMxj3HsEi>;VQ*!ma|ZXJ+=ucz4V=sBk_m`!&Oi8#*Yad-(^~fw z{8@ivh*L54G#QDR4q4&&v|nuhN9Bqd6xBbkQddWhKx(Vd*5 z`(@h_Phjmuq@3)=(1$e(@#(McN0*YM_O|)6G#VbWbW%qDUes|{ha zkdqcp)^Z)cQyJL{?~#{**U>rt0xm14B1cwCWJO)v@*+?_KxUq@ zjy?d8759OFH5Zf>ntu!;>qOurK<14yuW{0R3hwT}q5rF}%v1*htO~j-NFrP2tkxQZ ztTroU0wVxvStEf_z-U0$MaBX-z&JqaIBTPfc@@^dTD6`4mVR2o`)yogV_9o20ZM^? zRi2K?`Ttv&R0X##NL&0Y<@srCgM|Bcf;a7wujC~)et<8_*AMv6=*|6ow#l-5e>Ijd z=DUCu?vQ%dh^oIBhVRepQ~cU^&Uo2)-uM+F&tv5~q+T|jF@9qF#<+kPfqX^ueIv{F zs<9cl|6|B`x|fahtbVU&Jb8_J$+$`V-uRR8JL68)3_Dr>z8e4U8xOPc{HXdavy|)1NWEJ@0I1p85LuX@tERDV)`RUfD~)qeFp0!}ja8mAbi8b39@V(c<*Gwvb|ULZAY=693vW#bNGC$7&M zcN*Jx-pc(3;|x+{lBS2$-_)N~mT{7Cozc(eZwxd}FiwPWs&Tq8#29Z}Ym6f7Xd@Si z*Bjf7&w-WNh%}|HGP;m;h4#79*bLrgY%7XmSw^cd+XxyhPy;$F zvm0ZnvCufzSYXUE>Wv1Y3IBK0BIAH+)FJMtE@b&O8f(;MQfcXVoMEVOMh4*ga$T3> zlZwZqgQNY%8F~EVp08c<)YI=ARtS6kiIj2ZIW_*|)6r6qPP0`7h%7S~dC?UrJ5W2{=AhaK)>?K;X1 z`BL^J8?dUEVofhsS7{r&0rxuXx)Mu#4Lj@`*@?V{-v%2tvugi2_GmV!p~eR8w`uJD5D>_c9PYXkd`Li=>TYjwCS>}PIcclHachF{N4>sEF)zstJ#E^O-ttnMw`Z%&ce z#M2U1y(O0Wwd;KLARi$okI`FvAJ+zYh^x7;SC7+EJfTDWKs~9R!u3O7563)z41QYu zl>1(+`fK0~>KT0(*XzI-^7#|+ZQ6IC&glknDy~K3^dVw;1FL^PyB;Ra{e*lA_@m}{ zTi-X(JG_HU-=Gcxf1#)7h1~Zv?F0IY-ddX*R39VLI9|K^8d(}2r|Fzt6b_u;@;VKiK z->4VV^Yoa{s$Z*Lsb8vJ(2xGy)}@r=?W{RI$R7H)>3zS+-o`iBDY=(jpL^KH{u+BG zUu94FE9`84Nr&YW9J|&x65Be)9&7lmW50YIcr~Mi4)*%n*_{cp>)y=XO+Z~pySRYb ze;#-~(1>d;R-(6SDIAOO@57cY>h5lxJNnIv6oZ8Gu3g%ROkzFpMy^muC*GPpfut4&;6!hgXOG-oQM)EXJD=acVK_VG9s$i zHu_P0qGLAxGpMK60arlTL@03yT!ls22z(Bgfc3OlpYzy^)e{@|d0+=VH(+aT;^{`L z;ts5zSVXzsg8w!((zp>z_m~=C+(4+CXmz&`?sna#zRQ!i1jIgl4}18OcFEIjZ4IAL zKfqt?p;*N4V-dw3?!g*9jaB?9w(v*T#J%`GgJpajAF+>bVAbBi=f_yMzw-1tcJBc0 zKk@rBzjrnLT`bxM(0dzwjXsQE`vL=u-i%{UGtLCg;OPTw*y+amSiIrA!cVg$S$I7hd#La5@%osiACAM`5(~n+6zq*2c*lTId zr&nmey3C>9uBCsU#2R@Os|H1k2nrY<TR={(2cuQyNU>J6bEdHt-W=(aL*c;|+0+P_Y&pmd z0|$xg=hr1!gvg<4wm}M1H}WoEL!uk+^G6pJN4g`7juC%rAWo`U!@)IXtXUs@Cl->@ zj;}s{ouA(xG3Bg1TP3X|vqh=ju%`Y#Fp4$wVqgJqA#f282d)4%0U;^vsH-h`J zWW~JxG8nC@KV63p+8OdweesK;mZRpP6n;mEonA&w0+E9xu@Q#%fU6l=1#qf zG|k>llEd<{Pinn2(NdrqtPQ%>Xk;b(LJ01NMpi@vE9HQzz8Wv-lve?w5xCGpz-*@( z$%`Lmd*{mKK{ne$t7H##`C9YRU^Jp;M_M|=5%;krl`5GC*)Jwgp{w-6B-+gksq=DJ zU#hw6_=SVnjSMPFXoY@fB9nNw4_#6p!#bv>~2&96!N-!@oNj zUO%tf%PVf7iDAeQYk|pgHmcnoyyDud#0eaX7N|xYNL%j$4sO_% zB(yvb3+9=zpngH8C`pL)M8NiilN^OgOVD*Gwvsa-9$86Bm@^GY9)FqA(z|6!Qc{^l zwGL?*0`jY(o^u*Y{oGF!@nsgl6 zZZF5|x>^%H(<6>%By8iydxRzZ8nqz1x!K`J@mz*OE3vgvGrqQi_vk_>Fy7oIhcRq_ z&WQ9JE-x)$Qk>O2xB|6uxaD$aLT*YhsHL+b9BQT;^$4P?4aU?0`&a|7qKQh~1bJ8j zoxITH9C$D-wp{N)AhV4@osQZKg@%?#cv;Yur{A^HlENIQh^fgT#mH=ORITg`$3t{P zCVi18NaQo-fasp0u#)D;_7I$A;qgj_k_6eOGw7bf1Qu{Ii7(H1xTm6iT{ZY6o* zEZ6snJhP~LiSVKtQh*4Tsrag zNaKi1oMo8K}ivIAh-QIrHb4)%A5V>^f*1FsIF!S6|!MXil5cU{;%Rs~hIcm@>bvy1|?~zk!!CYpI%z6h0}`5{{y0 zIUL4lIp|b6JL`)n-B??sGu&df1sF$0gUvz4lP!AQ)v?ymZO?*ryn%3p(`dTB>$c&H zTg@4*VgT~Y)zJ{OCLXc$tt(y6MQqhuEtrs{mFB#l3_)pxfoA%QM&2C_n#IM1PKcTa zN3YuR%-PjuVUgeO&ok#YRx^g-ZPl9U#@c1Gs~1T=Y z+|X{|#(51h>d&>qTfQQ&c1=g5ooT5pSVYw8F}SD<>k`xPi8t3YJ+IU~ZIwC4>VfRZ zi!K*ADcMYlbLhAA8{5mIJC_FAQe`?gXCZGJGu<7>tK>|OL)brS=9MG%ZPMsio*8I~ zP8!`Z4j$`r!co(N)9fkahM&5>6;~%qpu2;~GD!proXV5V_-H zex&1SZuF0ri0X^P-+y*faaFjo3cpHCo>e3V94ClCq**~{7FE>~3IW3ChYe}PI(V!M zk63wC2YfMqA!18~-(OQ!HM69uz8tQ?s*n(7mR8l1DE>$dY+;L*3-g3n1;Q$-3MVyH zNMbmXaduN>RXuDxwNzF$kae&T&Y<2@Ul;iOY`@ z!6Kl-PWsI9s``>DPI|ifE<)cu=z5*#dX}W7sOo}zk>;ve6fN-;As5|<7SLm%r3$TK zye_wNj4RjHa&vxrc%lAkpWR96pAZfZsR9NVOm9iL+4jyOKq4{ zY?niMmA|Hu5WvVoRAq_h?gf%%rr+ zlIoQDTdeh&thuFmcIB0nmyl3@ffQ;C&)Tie$aS(ul=K1$1h3J8~3Sp?q9jmY~bhs+q;Q z29x=uF0FzQbxM*%Ern7Z{`}ktxyf2BRozobt-9Ertd`=EFjfUsRt=}*iXD}r&r0Md!as`AJy(e@>^#ye%?8WyVz+SBcf)K~u` z(WvNF>TNOgx4fdXxU#}uR$N?JUQ$v~Tv%D=FD)x8lexuW^^9Ag@PMXA5AxV!?zqbGlCm^ zN!L^KFLs=&Bc4{%!zH|s8BNw|QR*mptc~P&_lccGl zpW->KX%UgXhQ>3K>RInc^Th8oFZ!{W(Cc;El1iYt#gS^QJk1NMRaT{2|9Gi%k_NfN zWG5S#)xLA3$g4iRBt7|Ulx=4bEx?loDI6=bu)9hZZWlVJ!F4QzI-PxmbUT#4Wf>_DN=)Jw2i3&w@1<^`0LgrciIkuSXxDaJ_qf_4`6zte z{v5fO(3HX?{noU*pjl^zTcEkQb7lV7?aRW!_VMn6wW@ITBnIN4*7$h6{h{P*FtUa# ztLlt>WunXsv>R_;=gVhY`HeRMdn1@~irKb&{~ycc{vc+ba&6MMnqJ~^B?0N#E0aH4;2 z&ITKaL=O02ANv>JcfoDo(=!r@E#PkrOC%lxFCUXgyawJnj`s=r;GfIB2l)Q+iNqrC z&+~Y90BjWS-T=4(yc_&9_!Y1@fpxIHN_`t_g8LOF5|hCl;0wX8gS)^l`QZl-FM=QZ z7Wfr;E>0vq2A6?{ahQ2Acp^9sJ|BEN_%iShz_)>qDwkPC6L3<-v*oD z%Xx=jGPs4cnJn%Mf9k`kG^$ze7 z)}Xh88(A0L1s=t^@ILUh;Dg{Fg0qk3taVc&Q3zfFo(ujWxC8tlcsn?_g#9A$_zPH@ z1V=7RBo2YM2NH?F9N3O5Pb4b9MXX&e0uN_RbPf0~;G4m(26^uT{GhC7f;Y1McnCbG z4So)L&kVs2o_Z1d;5)!;z!fXe8#o4j4EzZAMet+o=pB4w1ifeRt_ye~xUd7ggLhqm z-oYnE;RoLUehmCB_(gDQ41Vxy;9(pxUlxZS{MXg+gGa7`A6&T(e()mjW8e+o7s1~H ze+-^|8T=ejUk9EDz6ZPr{KVy?AAIGNWaO8gY!4G~5e(;~Z4L^9uL-2$B;9(rnUjd#7ei3{=c;ds}o?X2A5QD=%2;h!oF=!OO8gETr^tQ;cpjU$D~0!7%`5a5fECzC`G$kbyGlpRxjxDP zxEi|Fg(JJwqC;XwpLmeHi7+?HiwRDcxz}fG>$SD_mOktIW^@g48AcIA&e^_m3U&iK zs~m%b1B51_ZE&;u_0AoNW7zRnbShfB|OD}|8mP?=G zrLWUuEC0|JK>w+i?%SgS492emxZRir-EV<*8Z-&#>efEbgMaO z`d;XRpvyNyT>b^gv>kw+eH42CUc65Pz1Yj&p5)JiJ{bTozTAleTJ9ro9goKhW;G%*(vntF8vkg z8FTp7qL+SoQodp=IvRSDmu^=E6F(FBGU)AIy405zONNA*N|<{Hv&UN}rMw^0)l%o9 zjWDws5{aqaFd65#^>!ol2xHL^-m=OVrVC2S`flhQob7non-1S^-F!X`eZm6HL8Q>X z@6z`}|0VPTDfBm8dM5V!cE-NHN})gF(sQ7n$C&spDf9y_eLD0r85{S+-v<5JqtG`( z-^kc`Yl{4huKc^9zYo1MML&hEex8Qj?|k<8Q~2L^`S(MA4f>K4x@8`^2VRB&edUm<~MoGJ-1bvFSSFz z$}8V@nH#^%qkaxO#kTsITzVLK7W12U3V+0OQBnXI??}L z=tG$|?WCV`^`CLQ45xJY9e{p)8}l|V|HWForuRRdc@*?hQut4B`SYOPcyS_ehL_*U zp60KEz7u-Bm)@3?ABO%V=oMaiEJ@!2{X5XNd+EN-I)LQwKIr4ZynFAZhb(>>Gwg+4 zo=(SKc=tn_0c~(f*`MT=eP(}D##~YVOB!bkneiQ$o&){m_C)F!)Au(WxrzMg(7zw) zzMp`s(-0=i4(6LZ)!!}9=Q0o7Bn(a(eAguN5B)pPgDLb2UHV?=hoSdWJ_n$G0zJpe z-)!kmbkv{uac}0kJ@qAd(2JnAr`U*)Ys2fHcQG&ad*z3d^25+S5B(G`-D=)iKU<(* z2R)^)@mU3|%OCo)(7WsJg}xVhRVV8XDe3#Bo4y0kpJBfKLJIv?F1)J)paBpTu7W-S~XZ{X-b~FzEXKOgQyB<4rgIEztMxU|lXH|9zABhyLrG z@TbtxUQYh{Gj6ZDjqiV?@ZaL{=RyA| z^l2&jt9H|02mLQ!#J;7_i(Psc`f+!#?v|4Nv2OaeKp*s_qs)Jx4}dQFId1x`sijr^ z&__bQ$V>MHb^52`cL4et=u3rOla+nFuQqG&wv5^=b8D~Kteh>qr)L#j+h=-K#rnSI zW=*~*tD-uqusSQJCd;hJ8cg__tW5oFg_09k$3u=}^VoGv1IILQOasR>a7+WoG;mA< z$24$E1IILQOasR>a7+W;X@C_peL1xBXJ=07V5aQ)y1@2e2}@raPqHveI{J$14H)a2 zf#R`7=Ga_p-$w*LEo+)wvUDPsDQg^DY>!x%tO;(z9@faJI*?5|b7udMf#;a_6 zt&MN8@m)54$i{nY?C2$@x_dp{ZP#}v-2PfCoKx<*(&$dOHrw%F5A={te(e`>1y zAE(i`r^WyCH2Tgo`U`1vCw;4I$17>{N7DG6@I7Hi4?WQj4YWdJW?Oi=jW^o(X&Yyr zVAE~9#>S7>_>he&PPD?UvGKz;e%i*FC)sjrywS!_+qlok7Jaad7uvYZ#&_Fzzm0PS zS>ZcuyvxQ1Z9M%Hi@wpu`)r(js^!1P#$7gk+QylBgM|GI8*jJqJ{xBbvG~*VIycRu z(9b#a(z5c3%IcaaQ)~H`KvSkvnK``OHO{OkC@m;tDLU51TYmAta#f(eUeKWmc!Mig zz)NZQ@xTgIu%f-Qpe+z7^p(Qu-E$f1d4du<2#SZFhgJ?`T}o1v&gq zf9ha4>m`@dpE~`PBWDD(59n(gey9I+aE0bRlHc~$->(%NIQ(t`?FdX8OaCoNapHIS z$zuGZ3wHRO{@%e(|4tBnrR(o3e5EgS_?`aK!HaA@C;v`32TzACeY5*)_s>p0J=x|@ zPrvQWH=V39arm9_frFj#ffIjv{sT6DjV;g_Z#dW)p9sH`%x40K8K79DZlKIN0XjZHaN~rxU+Zj-6@ozi`e7d^i_-j>VXx zpOQC+-@)I5Bq5#no$$p3 vkH7vh#p2KT2mDgqBqaT8%H{B<6~7KE0WIlidG|>0O|?S&*5l{pbG-jAde_t( From f41aadef7999af5c02e08556d380a63289ee877a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 3 Dec 2023 14:38:35 +1100 Subject: [PATCH 257/694] Delete bin/64570_synonvme --- bin/64570_synonvme | Bin 17241 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/64570_synonvme diff --git a/bin/64570_synonvme b/bin/64570_synonvme deleted file mode 100644 index 2dc63b55f2cfc20dc364bbc39d2b16105db24799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17241 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 Date: Thu, 7 Dec 2023 06:15:20 +1100 Subject: [PATCH 258/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2d7bc17..f4e0bfd 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Mikescher | Matthias Pfaff | cpharada | +| Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | | Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | From 09e35030490008a977511f05054d13380df5d428 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 7 Dec 2023 17:41:16 +1100 Subject: [PATCH 259/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f4e0bfd..af98a36 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | From 26be6106c5433e48e16eade1c2765df142b016b5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 10 Dec 2023 19:02:09 +1100 Subject: [PATCH 260/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index f6ab88f..d0c309f 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -31,5 +31,8 @@ ## All my Synology Scripts - **Synology_DSM_reinstall** - Easily re-install the same DSM version without losing any data or settings +- **Download_Synology_Archive** + - Download all or part of the Synology archive + - **ScriptNotify** - DSM 7 package to allow your scripts to send DSM notifications From b4d00c87e1a558b6e04cea54f9e19c6ad4ee1e1f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 10 Dec 2023 19:09:35 +1100 Subject: [PATCH 261/694] Update my-other-scripts.md --- my-other-scripts.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index d0c309f..d643119 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -31,7 +31,13 @@ ## All my Synology Scripts - **Synology_DSM_reinstall** - Easily re-install the same DSM version without losing any data or settings -- **Download_Synology_Archive** +- **Synology_Cleanup_Coredumps** + - Cleanup memory core dumps from crashed processes + +- **Docker_Autocompose** + - Create .yml files from your docker existing containers + +- **Download_Synology_Archive** - Download all or part of the Synology archive - **ScriptNotify** From 56d6516b4cec616bcbb3431d41d7aec226941653 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 10 Dec 2023 19:11:16 +1100 Subject: [PATCH 262/694] Update my-other-scripts.md --- my-other-scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index d643119..a4bb068 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -5,7 +5,7 @@ ## All my Synology Scripts - **Synology_enable_M2_volume** - Enable creating volumes with non-Synology M.2 drives. - - Enable Health Info for non-Synology NVMe drives. + - Enable Health Info for non-Synology NVMe drives (not in DSM 7.2.1 or later). - **Synology_M2_volume** - Easily create an M.2 volume on Synology NAS. From 62cc7920e42d629fec6433c6471aadf614f1229b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 13 Dec 2023 21:10:57 +1100 Subject: [PATCH 263/694] Update syno_hdd_db.sh Added KIOXIA vendor id --- syno_hdd_db.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c9e5a62..de1eaa7 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -604,6 +604,7 @@ vendor_from_id(){ 0x1cfa) vendor=Corsair ;; # Memory only? 0x1d97) vendor=SPCC/Lexar ;; # 2 brands with same vid 0x1dbe) vendor=ADATA ;; + 0x1e0f) vendor=KIOXIA ;; 0x1e49) vendor=ZHITAI ;; 0x1e4b) vendor=HS/MAXIO ;; # 2 brands with same vid 0x1f40) vendor=Netac ;; From abe7bc694e6942d1eecd6b8b3abcd76e77849015 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 13 Dec 2023 21:12:19 +1100 Subject: [PATCH 264/694] Update CHANGES.txt Added KIOXIA vendor id. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index e6ee8d2..bc5c813 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.2.69 +- Added KIOXIA vendor id. + v3.2.68 - Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use device tree and are using: - DSM 7.2 Update 2 and 3, 7.2.1, 7.2.1 Update 1, 2 and 3. Issue #132, #148 From 17ad9904536b0ae86302dd0e0291d71d8cb0115e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 13 Dec 2023 21:14:26 +1100 Subject: [PATCH 265/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index a4bb068..877bb6f 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -13,6 +13,9 @@ ## All my Synology Scripts - **Synology_enable_M2_card** - Enable Synology M.2 PCIe cards in Synology NAS that don't officially support them. +- **Synology_enable_eunit** + - Enable an unsupported Synology eSATA Expansion Unit models. + - **Synology_enable_Deduplication** - Enable deduplication with non-Synology SSDs and unsupported NAS models. From 3db8456a45bcc0521cfa4daad3cc4f514b4f8d28 Mon Sep 17 00:00:00 2001 From: "John M. Kuchta" Date: Sat, 16 Dec 2023 01:03:21 -0800 Subject: [PATCH 266/694] Fixed scriptver string. Was off by one digit and thus auto-upgrades were failing. --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index de1eaa7..7562aae 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -32,7 +32,7 @@ # Bug fixes and improvements to --restore option. -scriptver="v3.2.68" +scriptver="v3.2.69" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From e4c8b3ea851be5e91ca3f36b2aaab573414b69f0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 16 Dec 2023 22:13:22 +1100 Subject: [PATCH 267/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index bc5c813..81f8909 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,6 @@ v3.2.69 - Added KIOXIA vendor id. +- Bug fix for wrong version number, which caused an update loop. v3.2.68 - Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use device tree and are using: From 7c7a07e845d47228677c4f1f3f6dda7e4dc89375 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 15:51:33 +1100 Subject: [PATCH 268/694] Add files via upload --- syno_hdd_vendor_ids.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 syno_hdd_vendor_ids.txt diff --git a/syno_hdd_vendor_ids.txt b/syno_hdd_vendor_ids.txt new file mode 100644 index 0000000..12bec6b --- /dev/null +++ b/syno_hdd_vendor_ids.txt @@ -0,0 +1,20 @@ +# You can add your drive's vendor id and vendor name here + +0x1dbe="ADATA" +0x0ed1="aigo" +0x1bdc="Apacer" +0x1b1c="Corsair" +0x1cfa="Corsair" +0x1458="Gigabyte" +0x1e0f="KIOXIA" +0x05dc="Lexar" +0x1462="MSI" +0x1f40="Netac" +0x1987="Phison" +0x196e="PNY" +0x1c5c="SK Hynix" +0x025e="Solidigm" +0x10ec="TEAMGROUP" +0x1d79="Transcend" +0x1cc4="UMIS" +0x1e49="ZHITAI" From 66ae3bd54c1b9bf414d4190886b8ecc002a4fb0e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 15:54:43 +1100 Subject: [PATCH 269/694] Update CHANGES.txt v3.3.70 - Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards: - E10M20-T1, M2D20, M2D18 and M2D17 - Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. - Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh --- CHANGES.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 81f8909..be999b5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,10 @@ +v3.3.70 +- Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards: + - E10M20-T1, M2D20, M2D18 and M2D17 +- Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. +- Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. + - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh + v3.2.69 - Added KIOXIA vendor id. - Bug fix for wrong version number, which caused an update loop. From c8cdbf01b6c142fb51b0ee695c37d9af914e55ca Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 15:57:36 +1100 Subject: [PATCH 270/694] Update CHANGES.txt v3.3.70 - Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards: - E10M20-T1, M2D20, M2D18 and M2D17 - Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. - Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh - Now warns if script is located on an M.2 volume. --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index be999b5..e102f32 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,7 @@ v3.3.70 - Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. - Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh +- Now warns if script is located on an M.2 volume. v3.2.69 - Added KIOXIA vendor id. From ade9cc38aee877770c89bce3aafc5eb36a490f06 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 16:02:08 +1100 Subject: [PATCH 271/694] Update syno_hdd_db.sh v3.3.70 - Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards: - E10M20-T1, M2D20, M2D18 and M2D17 - Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. - Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh - Now warns if script is located on an M.2 volume. --- syno_hdd_db.sh | 126 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 104 insertions(+), 22 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 7562aae..060707d 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -16,6 +16,17 @@ #-------------------------------------------------------------------------------------------------- # CHANGES +# Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. +# - E10M20-T1, M2D20, M2D18 and M2D17 +# +# Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. +# +# Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. +# - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh +# +# Now warns if script is located on an M.2 volume. +# +# # Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use devicetree # and are using DSM 7.2 Update 2 or 3, 7.2.1, 7.2.1 Update 1, 2 or 3. # @@ -32,7 +43,7 @@ # Bug fixes and improvements to --restore option. -scriptver="v3.2.69" +scriptver="v3.3.70" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -298,6 +309,14 @@ echo "Running from: ${scriptpath}/$scriptfile" #echo "scriptver: $scriptver" # debug +# Warn if script located on M.2 drive +scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) +result="$(lsblk | grep -B 4 /"$scriptvol" | grep nvme)" +if [[ -n $result ]]; then + echo "${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" +fi + + cleanup_tmp(){ cleanup_err= @@ -459,6 +478,9 @@ adapter_cards="/usr/syno/etc.defaults/adapter_cards.conf" adapter_cards2="/usr/syno/etc/adapter_cards.conf" dbpath=/var/lib/disk-compatibility/ synoinfo="/etc.defaults/synoinfo.conf" +strgmgr="/var/packages/StorageManager/target/ui/storage_panel.js" +vidfile="/usr/syno/etc.defaults/pci_vendor_ids.conf" +vidfile2="/usr/syno/etc/pci_vendor_ids.conf" #------------------------------------------------------------------------------ @@ -536,9 +558,21 @@ if [[ $restore == "yes" ]]; then fi fi - # Restore .db files from backups + # Restore storage_panel.js from backup + strgmgrver="$(synopkg version StorageManager)" + if [[ -f "${strgmgr}.$strgmgrver" ]]; then + if cp -p "${strgmgr}.$strgmgrver" "$strgmgr"; then + echo "Restored $(basename -- "$strgmgr")" + else + restoreerr=1 + echo -e "${Error}ERROR${Off} Failed to restore $(basename -- "$strgmgr")!\n" + fi + else + echo "No backup of $(basename -- "$strgmgr") found." + fi + echo "" - # /var/lib/disk-compatibility + # Restore .db files from backups for f in "${!dbbakfiles[@]}"; do replaceme="${dbbakfiles[f]%.bak}" # Remove .bak if cp -p "${dbbakfiles[f]}" "$replaceme"; then @@ -601,16 +635,33 @@ vendor_from_id(){ 0x1b1c) vendor=Corsair ;; 0x1c5c) vendor="SK Hynix" ;; 0x1cc4) vendor=UMIS ;; - 0x1cfa) vendor=Corsair ;; # Memory only? + 0x1cfa) vendor=Corsair ;; # Memory only? 0x1d97) vendor=SPCC/Lexar ;; # 2 brands with same vid 0x1dbe) vendor=ADATA ;; - 0x1e0f) vendor=KIOXIA ;; + 0x1e0f) vendor=KIOXIA ;; 0x1e49) vendor=ZHITAI ;; - 0x1e4b) vendor=HS/MAXIO ;; # 2 brands with same vid + 0x1e4b) vendor=HS/MAXIO ;; # 2 brands with same vid 0x1f40) vendor=Netac ;; + + 0x1bdc) vendor=Apacer;; + 0x0ed1) vendor=aigo ;; + 0x05dc) vendor=Lexar ;; + 0x1d79) vendor=Transcend;; *) - echo -e "\n${Error}WARNING{OFF} No vendor found for id $1" >&2 - echo -e "Contact 007revad to get your drive added.\n" >&2 + # Get vendor from syno_hdd_vendor.txt + vidlist="$scriptpath/syno_hdd_vendor.txt" + if [[ -r "$vidlist" ]]; then + val=$(synogetkeyvalue "$vidlist" "$1") + if synogetkeyvalue "$vidlist" "$1"; then + vendor="$val" + else + echo -e "\n${Yellow}WARNING{OFF} No vendor found for vid $1" >&2 + echo -e "You can add your drive's vendor to: " + echo "$vidlist" + fi + else + echo -e "\n${Error}ERROR{OFF} $vidlist not found!" >&2 + fi ;; esac } @@ -618,17 +669,20 @@ vendor_from_id(){ set_vendor(){ # Add missing vendors to /usr/syno/etc.defaults/pci_vendor_ids.conf if [[ $vendor ]]; then - if ! grep "$vid" "$vidfile" >/dev/null; then - synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" - val=$(synogetkeyvalue "$vidfile" "${vid,,}") - if [[ $val == "${vendor}" ]]; then - echo "Added $vendor to pci_vendor_ids" >&2 - else - echo "Failed to add $vendor to pci_vendor_ids!" >&2 + # DS1817+, DS1517+, RS1219+, RS818+ don't have pci_vendor_ids.conf + if [[ "$vidfile" ]]; then + if ! grep "$vid" "$vidfile" >/dev/null; then + synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" + val=$(synogetkeyvalue "$vidfile" "${vid,,}") + if [[ $val == "${vendor}" ]]; then + echo "Added $vendor to pci_vendor_ids" >&2 + else + echo "Failed to add $vendor to pci_vendor_ids!" >&2 + fi + fi + if ! grep "$vid" "$vidfile2" >/dev/null; then + synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" fi - fi - if ! grep "$vid" "$vidfile2" >/dev/null; then - synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" fi fi } @@ -646,9 +700,6 @@ get_vid(){ fi } -vidfile="/usr/syno/etc.defaults/pci_vendor_ids.conf" -vidfile2="/usr/syno/etc/pci_vendor_ids.conf" - fixdrivemodel(){ # Remove " 00Y" from end of Samsung/Lenovo SSDs # Github issue #13 if [[ $1 =~ MZ.*' 00Y' ]]; then @@ -1311,7 +1362,7 @@ install_binfile(){ # install_binfile # example: # file_url="https://raw.githubusercontent.com/${repo}/main/bin/dtc" - # install_binfile dtc "$file_url" /usr/bin/bc a+x bin/dtc + # install_binfile dtc "$file_url" /usr/bin/dtc a+x bin/dtc if [[ -f "${scriptpath}/$5" ]]; then binfile="${scriptpath}/$5" @@ -1717,6 +1768,37 @@ if [[ $wdda == "no" ]]; then fi +# Enabled creating pool on drives in M.2 adaptor card +if [[ -f "$strgmgr" ]]; then + # StorageManager package is installed + if [[ ${#m2cards[@]} -gt "0" ]]; then + + if grep 'notSupportM2Pool_addOnCard' "$strgmgr" >/dev/null; then + # Backup storage_panel.js" + strgmgrver="$(synopkg version StorageManager)" + if [[ ! -f "${1}.$strgmgrver" ]]; then + if cp -p "$strgmgr" "${strgmgr}.$strgmgrver"; then + echo -e "Backed up $(basename -- "$strgmgr")" + else + echo -e "${Error}ERROR${Off} Failed to backup $(basename -- "$strgmgr")!" + fi + fi + + sed -i 's/notSupportM2Pool_addOnCard:this.T("disk_info","disk_reason_m2_add_on_card"),//g' "$strgmgr" + sed -i 's/},{isConditionInvalid:0/dev/null; then + echo "Enabled creating pool on drives in M.2 adaptor card." + else + echo -e "${Error}ERROR${Off} Failed to enable creating pool on drives in M.2 adaptor card!" + fi + else + echo "Creating pool in UI on drives in M.2 adaptor card already enabled." + fi + fi +fi + + #------------------------------------------------------------------------------ # Finished From 9c27c66900e9ac3a25e0ae8f8f1fbde3f3980c4c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 16:22:06 +1100 Subject: [PATCH 272/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index af98a36..14978e1 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ #### What the script does: * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. + * Including for M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From 646e63668bf08bffe75eec55edb707bc9996f896 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 16:38:00 +1100 Subject: [PATCH 273/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 14978e1..e5c44d5 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ #### What the script does: * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. - * Including for M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1. + * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From eb7cfe4d4818f7258d2db289809e185279fc4899 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 17:10:05 +1100 Subject: [PATCH 274/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5c44d5..26a747b 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ #### What the script does: * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. - * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1. + * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 (need to run script after each boot). * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From 20615392337a672a2fc198384b3e063197c5b37a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 17:10:35 +1100 Subject: [PATCH 275/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26a747b..e28c682 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ #### What the script does: * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. - * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 (need to run script after each boot). + * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 **(need to run script after each boot)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From dcdd85cc1b673bce053cfcfe6be40ee9ebc3aed3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 17:48:39 +1100 Subject: [PATCH 276/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e28c682..f4cd2f9 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ #### What the script does: * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. - * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 **(need to run script after each boot)**. + * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2.1 and above **(need to run script after each boot)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From 5a3202f87d134f93a50861fdcae5fa4af26023b1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 17:50:22 +1100 Subject: [PATCH 277/694] Update CHANGES.txt --- CHANGES.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index e102f32..f3d3ae0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,8 @@ v3.3.70 - Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards: - - E10M20-T1, M2D20, M2D18 and M2D17 + - E10M20-T1, M2D20, M2D18 and M2D17. + - DSM 7.2.1 and above only. + - Script needs to run after each boot. - Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. - Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh From ab5c4e38f08abdde4fe4fa5716ef6e8b9deaf5a1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 17 Dec 2023 20:18:50 +1100 Subject: [PATCH 278/694] Update syno_hdd_db.sh Formatting fix --- syno_hdd_db.sh | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 060707d..3ded120 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -25,25 +25,9 @@ # - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh # # Now warns if script is located on an M.2 volume. -# -# -# Updated so E10M20-T1, M2D20, M2D18 and M2D17 now work in models that use devicetree -# and are using DSM 7.2 Update 2 or 3, 7.2.1, 7.2.1 Update 1, 2 or 3. -# -# Now edits model.dtb instead of downloading a pre-edited version. -# -# Fix for Unknown vendor causing "Unsupported firmware version" warning. Issue #161 -# -# Now supports NVMe drives that show as Unknown brand in storage manager: Issue #161 -# - ADATA, Corsair, Gigabyte, HS/MAXIO, MSI, Netac, Phison, PNY -# - SK Hynix, Solidigm, SPCC/Lexar, TEAMGROUP, UMIS, ZHITAI -# -# Fixed bug where memory was shown in MB but with GB unit. -# -# Bug fixes and improvements to --restore option. -scriptver="v3.3.70" +scriptver="v3.3.71" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -1776,6 +1760,7 @@ if [[ -f "$strgmgr" ]]; then if grep 'notSupportM2Pool_addOnCard' "$strgmgr" >/dev/null; then # Backup storage_panel.js" strgmgrver="$(synopkg version StorageManager)" + echo "" if [[ ! -f "${1}.$strgmgrver" ]]; then if cp -p "$strgmgr" "${strgmgr}.$strgmgrver"; then echo -e "Backed up $(basename -- "$strgmgr")" @@ -1788,12 +1773,12 @@ if [[ -f "$strgmgr" ]]; then sed -i 's/},{isConditionInvalid:0/dev/null; then - echo "Enabled creating pool on drives in M.2 adaptor card." + echo -e "Enabled creating pool on drives in M.2 adaptor card." else echo -e "${Error}ERROR${Off} Failed to enable creating pool on drives in M.2 adaptor card!" fi else - echo "Creating pool in UI on drives in M.2 adaptor card already enabled." + echo -e "\nCreating pool in UI on drives in M.2 adaptor card already enabled." fi fi fi @@ -1853,6 +1838,4 @@ if [[ $dsm -eq "6" ]] || [[ $rebootmsg == "yes" ]]; then echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." fi - exit - From bfce6e644eaf3d64e4a43411a52aea64eb1fa6ff Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:09:28 +1100 Subject: [PATCH 279/694] Update syno_hdd_db.sh Bugfix for backing up storage_panel --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 3ded120..7e34804 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1761,7 +1761,7 @@ if [[ -f "$strgmgr" ]]; then # Backup storage_panel.js" strgmgrver="$(synopkg version StorageManager)" echo "" - if [[ ! -f "${1}.$strgmgrver" ]]; then + if [[ ! -f "${strgmgr}.$strgmgrver" ]]; then if cp -p "$strgmgr" "${strgmgr}.$strgmgrver"; then echo -e "Backed up $(basename -- "$strgmgr")" else From 9a57ea47f762ae5cb530e34ff2ffdd635bbdc5f8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:23:45 +1100 Subject: [PATCH 280/694] Update CHANGES.txt v3.3.71 - Bug fix for enablings creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index f3d3ae0..23691b5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.3.71 +- Bug fix for enablings creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. +- Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. + v3.3.70 - Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards: - E10M20-T1, M2D20, M2D18 and M2D17. From 084b83b18bf1249895f00adf6543315f074ac1d4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:25:44 +1100 Subject: [PATCH 281/694] Update syno_hdd_db.sh v3.3.71 - Bug fix for enablings creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. --- syno_hdd_db.sh | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 7e34804..4bd703e 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -388,6 +388,27 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | syslog_set warn "$script failed to copy $tag to script location" fi + # Copy new syno_hdd_vendor_ids.txt file + vidstxt="syno_hdd_vendor_ids.txt" + if [[ $scriptpath =~ /volume* ]]; then + if [[ ! -f "$scriptpath/$vidstxt" ]]; then # Don't overwrite file + # Copy new syno_hdd_vendor_ids.txt file to script location + if ! cp -p "/tmp/$script-$shorttag/$vidstxt" "$scriptpath"; then + if [[ $autoupdate != "yes" ]]; then copyerr=1; fi + echo -e "${Error}ERROR${Off} Failed to copy"\ + "$script-$shorttag/$vidstxt to:\n $scriptpath" + else + # Set permissions on CHANGES.txt + if ! chmod 664 "$scriptpath/$vidstxt"; then + if [[ $autoupdate != "yes" ]]; then permerr=1; fi + echo -e "${Error}ERROR${Off} Failed to set permissions on:" + echo "$scriptpath/$vidstxt" + fi + vids_txt=" and syno_hdd_vendor_ids.txt" + fi + fi + fi + # Copy new CHANGES.txt file if [[ $scriptpath =~ /volume* ]]; then # Copy new CHANGES.txt file to script location @@ -411,7 +432,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | # Notify of success (if there were no errors) if [[ $copyerr != 1 ]] && [[ $permerr != 1 ]]; then - echo -e "\n$tag$changestxt downloaded to: ${scriptpath}\n" + echo -e "\n$tag$changestxt$vids_txt downloaded to: ${scriptpath}\n" syslog_set info "$script successfully updated to $tag" # Reload script From d26553b77a046b8f720e4de8077a314e73808471 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:28:31 +1100 Subject: [PATCH 282/694] Update syno_hdd_db.sh v3.3.71 - Bug fix for enablings creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 4bd703e..b743012 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -398,8 +398,8 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "${Error}ERROR${Off} Failed to copy"\ "$script-$shorttag/$vidstxt to:\n $scriptpath" else - # Set permissions on CHANGES.txt - if ! chmod 664 "$scriptpath/$vidstxt"; then + # Set permissions on syno_hdd_vendor_ids.txt + if ! chmod 755 "$scriptpath/$vidstxt"; then if [[ $autoupdate != "yes" ]]; then permerr=1; fi echo -e "${Error}ERROR${Off} Failed to set permissions on:" echo "$scriptpath/$vidstxt" From 7a35bfca9167fec197d34b43cd91105495df5c76 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:31:20 +1100 Subject: [PATCH 283/694] Update syno_hdd_db.sh v3.3.71 - Bug fix for enablings creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index b743012..5525201 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -404,7 +404,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "${Error}ERROR${Off} Failed to set permissions on:" echo "$scriptpath/$vidstxt" fi - vids_txt=" and syno_hdd_vendor_ids.txt" + vids_txt=", syno_hdd_vendor_ids.txt" fi fi fi @@ -423,7 +423,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "${Error}ERROR${Off} Failed to set permissions on:" echo "$scriptpath/CHANGES.txt" fi - changestxt=" and changes.txt" + changestxt=", changes.txt" fi fi From c415d5f40053f09314e6454d44135f00c22b54dd Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:33:52 +1100 Subject: [PATCH 284/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 23691b5..da3c45f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.3.71 -- Bug fix for enablings creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. +- Bug fix for enabling creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. v3.3.70 From 77e372287f6c2ec9edb126a96dffdcda9ee995f9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:36:47 +1100 Subject: [PATCH 285/694] Update syno_hdd_db.sh Bug fix for checking if script located on NVMe drive. --- syno_hdd_db.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5525201..6ba9913 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -295,8 +295,9 @@ echo "Running from: ${scriptpath}/$scriptfile" # Warn if script located on M.2 drive scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) -result="$(lsblk | grep -B 4 /"$scriptvol" | grep nvme)" -if [[ -n $result ]]; then +vg=$(lvdisplay | grep /volume_"${volume#volume}" | cut -d"/" -f3) +md=$(pvdisplay | grep -B 1 "$vg" | grep /dev/ | cut -d"/" -f3) +if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then echo "${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" fi From 0bc9d7739d838c19b67f393625eb4f244f45cff5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:37:05 +1100 Subject: [PATCH 286/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index da3c45f..a6f3d23 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,7 @@ v3.3.71 - Bug fix for enabling creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. +- Bug fix for checking if script located on NVMe drive. v3.3.70 - Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards: From 542d66f1b1d813e1027f9121e52160b4a6f34f87 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 21 Dec 2023 10:12:05 +1100 Subject: [PATCH 287/694] Update syno_hdd_db.sh Bug fix for detecting if script is installed on NVMe drive. --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 6ba9913..e7e8c18 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -295,7 +295,7 @@ echo "Running from: ${scriptpath}/$scriptfile" # Warn if script located on M.2 drive scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) -vg=$(lvdisplay | grep /volume_"${volume#volume}" | cut -d"/" -f3) +vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) md=$(pvdisplay | grep -B 1 "$vg" | grep /dev/ | cut -d"/" -f3) if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then echo "${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" From f836963b6beee2da41c8e243a6f529c5f83eaf51 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 21 Dec 2023 10:12:53 +1100 Subject: [PATCH 288/694] Update syno_hdd_db.sh Bug fix for detecting if script is installed on NVMe drive. --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e7e8c18..cbea2e7 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.3.71" +scriptver="v3.3.72" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From 866e9c741d6eae4f6eecb12ff067ad1a41698ca1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 21 Dec 2023 10:13:27 +1100 Subject: [PATCH 289/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index a6f3d23..b08bdac 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.3.72 +- Bug fix for checking if script located on NVMe drive. + v3.3.71 - Bug fix for enabling creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. From 319eb7f8a25cdaaa017e7457b760a5d88fd7d6ca Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 21 Dec 2023 15:38:21 +1100 Subject: [PATCH 290/694] Update CHANGES.txt --- CHANGES.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index b08bdac..2926d54 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,4 @@ v3.3.72 -- Bug fix for checking if script located on NVMe drive. - -v3.3.71 - Bug fix for enabling creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. - Bug fix for checking if script located on NVMe drive. From 1072f61d61749e14edf40909c788a44f814fddd7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 25 Dec 2023 19:11:21 +1100 Subject: [PATCH 291/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4cd2f9..0f1f55f 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Matthias Gerhardt | +| | | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | From 215cca9cdc3f971d5cb3e61bdfecfa56073e31d2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 27 Dec 2023 06:36:39 +1100 Subject: [PATCH 292/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f1f55f..4e37389 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ ### Running the script via SSH | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Yunhao Zhang | Matthias Gerhardt | +| | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | From e9f2cb5ab1638109fd19fc67215e1d7a9f2144bd Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 27 Dec 2023 07:30:44 +1100 Subject: [PATCH 293/694] Update syno_hdd_db.sh Enabling m2_pool_support was also adding a newline. --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index cbea2e7..f365509 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -804,7 +804,7 @@ getcardmodel(){ m2_pool_support(){ # M.2 drives in M2 adaptor card do not support storage pools if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 - echo 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support + echo -n 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support fi } From d9396f2b6787ea99f66b26c6705ed1ccabb969f0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 27 Dec 2023 07:32:00 +1100 Subject: [PATCH 294/694] Update syno_hdd_db.sh Increment version --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index f365509..bc363a4 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.3.72" +scriptver="v3.3.73" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From 490387840d38b1ae4ed98fb825a12e001382d732 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:16:02 +1100 Subject: [PATCH 295/694] Add files via upload --- images/vendor_vid.png | Bin 0 -> 3567 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/vendor_vid.png diff --git a/images/vendor_vid.png b/images/vendor_vid.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d02600485e3dabcbfe01638e1db96cc3507674 GIT binary patch literal 3567 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 XMBFp-T&!Q;FaYl0YG3=?rQ81kbmULm literal 0 HcmV?d00001 From 24e38f06ff48147ec286862bd078850d1232ef08 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:30:26 +1100 Subject: [PATCH 296/694] Add files via upload --- images/unknown.png | Bin 0 -> 11269 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/unknown.png diff --git a/images/unknown.png b/images/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..11f4fb6187b9cde55bfd3edc9a88079e4c351279 GIT binary patch literal 11269 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 MMf-NyEj0GO07yoKfdBvi literal 0 HcmV?d00001 From f5d353f9758f7d81b6224fb7d39384b14fe41ea0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:33:38 +1100 Subject: [PATCH 297/694] Update README.md Add info about vendors_vids.txt --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 4e37389..b5af62e 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,18 @@ ### Running the script via SSH

+### vendor_ids.txt + +If DSM doesn't know the brand of your NVMe drives they will show up in Storage Manager as Unknown brand, and Unrecognised firmware version. + +

+ +In this case the script will show you the vendor ID and advise you to add it to the syno_hdd_vendor_ids.txt file. + +

+ +
+ **Credits** - The idea for this script came from a comment made by Empyrealist on the Synology subreddit. From 1138fd5af06359eacad7c8d39aacb72aa90a392d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:34:11 +1100 Subject: [PATCH 298/694] Add files via upload --- images/unknown.png | Bin 0 -> 11269 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/unknown.png diff --git a/images/unknown.png b/images/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..11f4fb6187b9cde55bfd3edc9a88079e4c351279 GIT binary patch literal 11269 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 MMf-NyEj0GO07yoKfdBvi literal 0 HcmV?d00001 From 8e1f08044de9bd5d72283cc60c840991ab166265 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:42:29 +1100 Subject: [PATCH 299/694] Delete images/vendor_vid.png --- images/vendor_vid.png | Bin 3567 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/vendor_vid.png diff --git a/images/vendor_vid.png b/images/vendor_vid.png deleted file mode 100644 index c4d02600485e3dabcbfe01638e1db96cc3507674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3567 zcmcgv=U3AS7X6_sI-`)8aU~WE&IlGpf`U?{1V<2pLJ%oZ0v05QkN^Uqgaq3#nvtkT zmm*EN3J8XhpvWK~ASH$#AqgRd5Yh-~u*})Bf53j&{qoK`_kFnUoOj-P_uhANb=3NP z_xAt*Xu+NA-2q@j`g(q0%ZBxMYVVDRb-WR7f660noS$cm;W_V4VJMBfJflmhPRFV> zD$7gC4;|U3zt5uln#N#}r`^S>O`RGB8kZd$Qan80-9yHe^z=a63cl8&RIu#qI9=I* z#2RGboF`n7j-v4KT}-)pxrw0W5Y|*F>x}J=OY}g3TFxm5Xi=#dYicdECIGD1eZ~Ml z@{%1@0|4G{{2ST=lI#J1eb)cKf`u~`42r5W4~Me5$dlV>9R8UDP3|}YKXMkUMVmEK zSskK0(o1gD&jm-t42K^ zd%O8(k0YnHA);;QV6l=!fyPHq^f^R5neuLHK55epeJ^E&yVCcsV()k9&K~meUdvi3 z=3e;%v#}gQoA=)5ds%tdKG38V6g*VC5H)N^44O@F`l15xJG9D}gKkOn;!S|+7u`$( zC`js3sh+rEfZg7$)c5HN+S}Xo;P!zitF*98``;ZS**6hiwvz|2&(8IPRwb5>_8goT zfEa8~cG5AupE)}}@nkx3gh;Ol(%)VCjT>M*@x)#hJ{@oU?Ra8uw~C*r3KmiWtua4P z4Wlv-FJ5~6NPbICZ&5_UoEWB6HU;zx0)M(!&>!5k;Oc^*Nm*X%V_CIlhUQ;v1aJna z!vcGYE|Y9tnBNQPef+@9DHnUJ$`J1CPg}|PiPJ*-GKG2FlS?b;lT5hbF0|K0Xz`<8&v}jPyHgWU&{E#xX3~uuJOIm zl&t~N6+OR@36U~Z*=0>X^@+anaw0~B>|`cV8hKY%8V}8EU#o?H4?a2ZIcU{%EkbYv zQ{EqWp!0y#bOxzs3ADeM8I|8~&ZV0u4Fot>vkw@n zeL*5vjNAPWZ&EbEY(Z)znb^O&I4gt&4#!mNCD(Ps@R< zzit#+b%u@HbZ5=$RY>^o{lfge1LhMi`2^7C8ioaoE}U`wNZ^GRzW>uf|(- z4P3ZK)Epk8xrzLT%vWn?uivDU@!Ty%=b0R51mN74?z2akyhx_%xBx7mT^23rlf90Mn&12sP-m|Oh z4rjt0ou);9&ALEra00O|Kiv`03JX4B>|38AhthslB!!A|qZKPh9~i4RFL#s&v^3Sq zN@(AOP1N*v>g##E{DkSbI+_iO@oaq`^d}0dpufX1%BoVvlkwy`Y#cG}Nkl#?H0$n7 z^3!aBD(?d`iITyq^F#Qgp;Xrk%{#_D-hPZsa$##}Tual#7EnEM9JO*mVmsuRC4f7B zk-F)>JliCD>e>pEG{>eA)&jm^DXsR6KR7h%bfJU;i{IyhqOTHeTyw%39`qZts5v*q zF241w;Qn$-t#=WNAlLxD&quO#&H@N?#} zJggP_>>IcS_gg70EjFuG=VhP}25W!84pBor6CK-ZR3&+i)wQtZ_>9Tx*N-Cq6tVZ4 z^T;}enZ|FlF4#yrz9bdesGno|E~M{QByr!zCOv-onfMOP9tvvA$uKUCQM~?V)h7W4 zR?eXCxioF^;I+mNp{tqU$ctS`vpg)CIP6R622au%Z9_|-jyRM>WfWz=k85LzbG$7~ z$5xBK`KDO-T2DU1lZ7XfvBewJt~>loyroAa(zM3&C!T(G)#`j3{7(mCW1k$~gp)qF zioH8|ujLn4lzv%#0~f>@6n_K@wK_BHV~f$Q!VAD&v0(`Y2{OZ_+SvJiP9ojHv}Nn~ zTMiA6>+-YWyQy zb;xLRv!bU!T4c2QY@1M#bg8y$ZvWVOz2WCwgLdfJo=?h4@vnJJhGSKhFERohO!DEl zLu<>S17^0*({nyyPcxMz0(DJp6pBdqPewy%&g@rm-5iSm_LUh?if*|rXE zO1U$L{ZUk88~iE|#^eB9kqvlyib#9F@0c8JrTk;OeK8n0_XqbfEv)Ko!SWKUA4%!W z7}t_cQbv;s)#~SGPmB7l9d5Xun=YnTG8WUphh0W4xO2o;ApY-S9=Gr=iyNkPTdysn z2Xy%RxcfaTWb^=8w_tjeF=r8IBppq9NAwE)Dp-7*o2LH;EOQm#M`=B5fl*(o&}TC_ z>?~>qWRqGm1nwv|x7)rGwh5TuBH1&2$N4w<*Su2zVDS%y76AMJnKuUjySPHey6Bs^ zh2IDOcQ^mLfc(~UjYhn*55F$*?rBT?YTm_Sk6|hxch2CvD^$xWAlira|wdlesHZ_CIPm?LndM&JOPmspS7#S;C zwtca%C>V@u|6VB!j>jtNcq`ZXJ0>ZEeat3#!~|}5ihe_{#w{|+AxDl#R2JS{Ov&4P z{5-^(o05o%2Y{`4^Rj$p*85q%1<7{FXTjuWQ=2HS1N;+ zm}B@wCTyzTQB^O$oSRhrkp9{v|D~o=0)poAFiWLjup*Si2t8}=pPIM_S7T8=bz)@K%@mJ8ICY69sx3fvMqc4*a;%tCX9QVW zF~A6hQmmrZ**^smeOC}oq950S@T0+cJT-4V43$eT1Cq1%OO;d*gT!cwCeio3p2mvK*i|r%;1aAC~L0S5+ROjXFNK9>wQLp10{)7Jy9Stc~p(Zrw XMBFp-T&!Q;FaYl0YG3=?rQ81kbmULm From d1e9b7cccafe61d0ccada352037f62f2c3d644d8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:43:25 +1100 Subject: [PATCH 300/694] Add files via upload --- images/vendor_ids.png | Bin 0 -> 3608 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/vendor_ids.png diff --git a/images/vendor_ids.png b/images/vendor_ids.png new file mode 100644 index 0000000000000000000000000000000000000000..a0440f30e112ec49e48ed661cb21d11a79c848d3 GIT binary patch literal 3608 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 literal 0 HcmV?d00001 From b10027e8aa8c71ab7279f3a97897c407e35dc21e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:47:32 +1100 Subject: [PATCH 301/694] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b5af62e..e596322 100644 --- a/README.md +++ b/README.md @@ -100,13 +100,15 @@ ### Running the script via SSH ### vendor_ids.txt +If the script does not warn you about a missing vendor id you don't need to edit syno_hdd_vendor_ids.txt + If DSM doesn't know the brand of your NVMe drives they will show up in Storage Manager as Unknown brand, and Unrecognised firmware version.

In this case the script will show you the vendor ID and advise you to add it to the syno_hdd_vendor_ids.txt file. -

+


From 273aad9ba25f3e468859c6c00dc9548510103ced Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:49:42 +1100 Subject: [PATCH 302/694] Update syno_hdd_vendor_ids.txt --- syno_hdd_vendor_ids.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syno_hdd_vendor_ids.txt b/syno_hdd_vendor_ids.txt index 12bec6b..ad91b97 100644 --- a/syno_hdd_vendor_ids.txt +++ b/syno_hdd_vendor_ids.txt @@ -1,4 +1,6 @@ -# You can add your drive's vendor id and vendor name here +# You can add your drive's vendor id and vendor name here. +# +# If the script does not warn you about a missing vendor id you don't need to edit this file. 0x1dbe="ADATA" 0x0ed1="aigo" From c9949ec765e020fe8864e7296219bf01be4a9c9b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:53:18 +1100 Subject: [PATCH 303/694] Update syno_hdd_vendor_ids.txt --- syno_hdd_vendor_ids.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_vendor_ids.txt b/syno_hdd_vendor_ids.txt index ad91b97..44f51d5 100644 --- a/syno_hdd_vendor_ids.txt +++ b/syno_hdd_vendor_ids.txt @@ -1,6 +1,6 @@ # You can add your drive's vendor id and vendor name here. # -# If the script does not warn you about a missing vendor id you don't need to edit this file. +# Only edit this file if the script warns you about a missing vendor id. 0x1dbe="ADATA" 0x0ed1="aigo" From ec475f9f938314bf57d34d4897df00a946e87d50 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:54:24 +1100 Subject: [PATCH 304/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e596322..a925040 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ ### Running the script via SSH ### vendor_ids.txt -If the script does not warn you about a missing vendor id you don't need to edit syno_hdd_vendor_ids.txt +You only need to edit syno_hdd_vendor_ids.txt if the script warns you about a missing vendor id. If DSM doesn't know the brand of your NVMe drives they will show up in Storage Manager as Unknown brand, and Unrecognised firmware version. From c38bbdfcb224484e75688d3d843070a7c5a6deb8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 13:02:57 +1100 Subject: [PATCH 305/694] Update syno_hdd_db.sh Bug fixes for vendor id --- syno_hdd_db.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index bc363a4..57bf7fb 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -21,13 +21,13 @@ # # Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. # -# Now includes syno_hdd_vendor.txt so users can add their NVMe drive's vendor id. -# - syno_hdd_vendor.txt needs to be in the same folder as syno_hdd_db.sh +# Now includes syno_hdd_vendor_ids.txt so users can add their NVMe drive's vendor id. +# - syno_hdd_vendor_ids.txt needs to be in the same folder as syno_hdd_db.sh # # Now warns if script is located on an M.2 volume. -scriptver="v3.3.73" +scriptver="v3.3.74" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -178,7 +178,7 @@ fi # Check script is running as root if [[ $( whoami ) != "root" ]]; then ding - echo -e "${Error}ERROR${Off} This script must be run as root or sudo!" + echo -e "${Error}ERROR${Off} This script must be run as sudo or root!" exit 1 fi @@ -654,16 +654,16 @@ vendor_from_id(){ 0x05dc) vendor=Lexar ;; 0x1d79) vendor=Transcend;; *) - # Get vendor from syno_hdd_vendor.txt - vidlist="$scriptpath/syno_hdd_vendor.txt" + # Get vendor from syno_hdd_vendor_ids.txt + vidlist="$scriptpath/syno_hdd_vendor_ids.txt" if [[ -r "$vidlist" ]]; then val=$(synogetkeyvalue "$vidlist" "$1") - if synogetkeyvalue "$vidlist" "$1"; then + if [[ -n "$val" ]]; then vendor="$val" else - echo -e "\n${Yellow}WARNING{OFF} No vendor found for vid $1" >&2 - echo -e "You can add your drive's vendor to: " - echo "$vidlist" + echo -e "\n${Yellow}WARNING${Off} No vendor found for vid $1" >&2 + echo -e "You can add ${Cyan}$1${Off} and your drive's vendor to: " >&2 + echo "$vidlist" >&2 fi else echo -e "\n${Error}ERROR{OFF} $vidlist not found!" >&2 @@ -681,9 +681,9 @@ set_vendor(){ synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" val=$(synogetkeyvalue "$vidfile" "${vid,,}") if [[ $val == "${vendor}" ]]; then - echo "Added $vendor to pci_vendor_ids" >&2 + echo -e "\nAdded $vendor to pci_vendor_ids" >&2 else - echo "Failed to add $vendor to pci_vendor_ids!" >&2 + echo -e "\nFailed to add $vendor to pci_vendor_ids!" >&2 fi fi if ! grep "$vid" "$vidfile2" >/dev/null; then @@ -1774,7 +1774,7 @@ if [[ $wdda == "no" ]]; then fi -# Enabled creating pool on drives in M.2 adaptor card +# Enable creating pool on drives in M.2 adaptor card if [[ -f "$strgmgr" ]]; then # StorageManager package is installed if [[ ${#m2cards[@]} -gt "0" ]]; then From 4a3abf57890bb86d027d1dfa65b2a5b29a533a62 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 13:04:00 +1100 Subject: [PATCH 306/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 57bf7fb..02bc6fa 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.3.74" +scriptver="v3.3.73" script=Synology_HDD_db repo="007revad/Synology_HDD_db" From d2a15b2980af515a521de7f40b1cf577edfe7427 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Dec 2023 13:04:56 +1100 Subject: [PATCH 307/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 2926d54..da9b842 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.3.73 +- Bug fix for vendor id. + v3.3.72 - Bug fix for enabling creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. - Bug fix for not copying syno_hdd_db_vendors.txt to script location when script updates itself. From f0b44ffbb1501e0a2e80657c5ed49bcb32b7c3eb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 29 Dec 2023 20:41:19 +1100 Subject: [PATCH 308/694] Update syno_hdd_db.sh v3.3.74 - Include smart_test_ignore and smart_attr_ignore in db files. --- syno_hdd_db.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 02bc6fa..34998f2 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.3.73" +scriptver="v3.3.74" script=Synology_HDD_db repo="007revad/Synology_HDD_db" @@ -1121,11 +1121,13 @@ updatedb(){ else fwstrng=\"$fwrev\" fwstrng="$fwstrng":{\"compatibility_interval\":[{\"compatibility\":\"support\",\"not_yet_rolling_status\" - fwstrng="$fwstrng":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true}]}, + fwstrng="$fwstrng":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true, + fwstrng="$fwstrng"\"smart_test_ignore\":false,\"smart_attr_ignore\":false}]}, default=\"default\" default="$default":{\"compatibility_interval\":[{\"compatibility\":\"support\",\"not_yet_rolling_status\" - default="$default":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true}]}}} + default="$default":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true, + default="$default"\"smart_test_ignore\":false,\"smart_attr_ignore\":false}]}}}, if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then # Replace "disk_compatbility_info":{} with From e5775b6cad2c47ec414c2985070e9223c70680ba Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 29 Dec 2023 20:42:00 +1100 Subject: [PATCH 309/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index da9b842..4d0eca5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.3.74 +- Include smart_test_ignore and smart_attr_ignore in db files. + v3.3.73 - Bug fix for vendor id. From 6f5b4f8f395c88a93adeb1b14d722d17b6fe26a5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 30 Dec 2023 12:17:51 +1100 Subject: [PATCH 310/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a925040..27f7ec0 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | +| Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | | bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | From e264668589548cb841a0069239a2c253f3669f4e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 30 Dec 2023 17:21:33 +1100 Subject: [PATCH 311/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 27f7ec0..2cf6b62 100644 --- a/README.md +++ b/README.md @@ -124,8 +124,9 @@ ### vendor_ids.txt Thank you to the following PayPal donators, GitHub sponsors and hardware donators -| | | | | +| | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | From 84989d254f7eabb4d9b079aa40ca7bc13f38808d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 1 Jan 2024 09:09:11 +1100 Subject: [PATCH 312/694] Update README.md Updated donators list --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2cf6b62..82f48fa 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Alec Wilhere | +| | | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | From 903349e82ef6247ea21c440c4192c56f60c4112b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:36:46 +1100 Subject: [PATCH 313/694] Update syno_hdd_db.sh v3.3.75 - Now saves changes.txt as _changes.txt when updating the script. - To not overwrite changes.txt if my other scripts are in the same folder. - Bug fix for detecting if script is located on M.2 drive. - Minor bug fix. --- syno_hdd_db.sh | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 34998f2..a650005 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,9 +27,10 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.3.74" +scriptver="v3.3.75" script=Synology_HDD_db repo="007revad/Synology_HDD_db" +scriptname=syno_hdd_db # Check BASH variable is bash if [ ! "$(basename "$BASH")" = bash ]; then @@ -296,9 +297,9 @@ echo "Running from: ${scriptpath}/$scriptfile" # Warn if script located on M.2 drive scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) -md=$(pvdisplay | grep -B 1 "$vg" | grep /dev/ | cut -d"/" -f3) +md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then - echo "${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" + echo -e "${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" fi @@ -381,7 +382,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | fi # Copy new script sh file to script location - if ! cp -p "/tmp/$script-$shorttag/syno_hdd_db.sh" "${scriptpath}/${scriptfile}"; + if ! cp -p "/tmp/$script-$shorttag/${scriptname}.sh" "${scriptpath}/${scriptfile}"; then copyerr=1 echo -e "${Error}ERROR${Off} Failed to copy"\ @@ -410,10 +411,12 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | fi fi - # Copy new CHANGES.txt file + # Copy new CHANGES.txt file to script location (if script on a volume) if [[ $scriptpath =~ /volume* ]]; then # Copy new CHANGES.txt file to script location - if ! cp -p "/tmp/$script-$shorttag/CHANGES.txt" "$scriptpath"; then + if ! cp -p "/tmp/$script-$shorttag/CHANGES.txt"\ + "${scriptpath}/${scriptname}_CHANGES.txt"; + then if [[ $autoupdate != "yes" ]]; then copyerr=1; fi echo -e "${Error}ERROR${Off} Failed to copy"\ "$script-$shorttag/CHANGES.txt to:\n $scriptpath" @@ -424,7 +427,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "${Error}ERROR${Off} Failed to set permissions on:" echo "$scriptpath/CHANGES.txt" fi - changestxt=", changes.txt" + changestxt=" and changes.txt" fi fi @@ -433,7 +436,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | # Notify of success (if there were no errors) if [[ $copyerr != 1 ]] && [[ $permerr != 1 ]]; then - echo -e "\n$tag$changestxt$vids_txt downloaded to: ${scriptpath}\n" + echo -e "\n$tag ${scriptfile}$vids_txt$changestxt downloaded to: ${scriptpath}\n" syslog_set info "$script successfully updated to $tag" # Reload script From ce812d9b18fc9b7a8f5e7a39090ad5b1a3664c00 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:37:44 +1100 Subject: [PATCH 314/694] Update CHANGES.txt v3.3.75 --- CHANGES.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 4d0eca5..988164e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +v3.3.75 +- Now saves changes.txt as _changes.txt when updating the script. + - To not overwrite changes.txt if my other scripts are in the same folder. +- Bug fix for detecting if script is located on M.2 drive. +- Minor bug fix. + v3.3.74 - Include smart_test_ignore and smart_attr_ignore in db files. From a9986b4cd8cd08edcfa47ff83c9dac5a9660088d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:39:25 +1100 Subject: [PATCH 315/694] Update CHANGES.txt --- CHANGES.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 988164e..a884ae9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,12 +1,10 @@ v3.3.75 +- Include smart_test_ignore and smart_attr_ignore in db files. - Now saves changes.txt as _changes.txt when updating the script. - To not overwrite changes.txt if my other scripts are in the same folder. - Bug fix for detecting if script is located on M.2 drive. - Minor bug fix. -v3.3.74 -- Include smart_test_ignore and smart_attr_ignore in db files. - v3.3.73 - Bug fix for vendor id. From 10efea01fda6f3ff38d5c6b1b8f462152343e197 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 09:09:02 +1100 Subject: [PATCH 316/694] Update CHANGES.txt Bug for fix for when -s or --showedits option was used. --- CHANGES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index a884ae9..228c641 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,8 +1,9 @@ -v3.3.75 +v3.4.76 - Include smart_test_ignore and smart_attr_ignore in db files. - Now saves changes.txt as _changes.txt when updating the script. - To not overwrite changes.txt if my other scripts are in the same folder. - Bug fix for detecting if script is located on M.2 drive. +- Bug fix that caused error when -s or --shoedits option was used. - Minor bug fix. v3.3.73 From e6b14959a4395bf249b1900e39556939b8722923 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 09:16:11 +1100 Subject: [PATCH 317/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 228c641..4ed165e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,7 +3,7 @@ v3.4.76 - Now saves changes.txt as _changes.txt when updating the script. - To not overwrite changes.txt if my other scripts are in the same folder. - Bug fix for detecting if script is located on M.2 drive. -- Bug fix that caused error when -s or --shoedits option was used. +- Bug fix that caused error when -s or --shoedits option was used. Issue #200 - Minor bug fix. v3.3.73 From 421937a1ebb4ecd75930083335687c6762a29f8c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 09:16:58 +1100 Subject: [PATCH 318/694] Update CHANGES.txt - Bug fix for error when -s or --shoedits option was used. Issue #200 --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 4ed165e..7e65d9a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,7 +3,7 @@ v3.4.76 - Now saves changes.txt as _changes.txt when updating the script. - To not overwrite changes.txt if my other scripts are in the same folder. - Bug fix for detecting if script is located on M.2 drive. -- Bug fix that caused error when -s or --shoedits option was used. Issue #200 +- Bug fix for error when -s or --shoedits option was used. Issue #200 - Minor bug fix. v3.3.73 From e045f9005acd12752eb21ff48bc50829470b0a8f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 09:17:13 +1100 Subject: [PATCH 319/694] Update CHANGES.txt - Bug fix for error when -s or --showedits option was used. Issue #200 --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 7e65d9a..37fe6d3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,7 +3,7 @@ v3.4.76 - Now saves changes.txt as _changes.txt when updating the script. - To not overwrite changes.txt if my other scripts are in the same folder. - Bug fix for detecting if script is located on M.2 drive. -- Bug fix for error when -s or --shoedits option was used. Issue #200 +- Bug fix for error when -s or --showedits option was used. Issue #200 - Minor bug fix. v3.3.73 From c3e1f15dba4cde3f45ac59b81263a905c5426c26 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 09:17:27 +1100 Subject: [PATCH 320/694] Update syno_hdd_db.sh - Bug fix for error when -s or --showedits option was used. Issue #200 --- syno_hdd_db.sh | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a650005..7fde39c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.3.75" +scriptver="v3.4.76" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -633,6 +633,7 @@ vendor_from_id(){ # Vendor ids missing in /usr/syno/etc.defaults/pci_vendor_ids.conf # $1 is vendor id # https://devicehunt.com/all-pci-vendors + # https://pci-ids.ucw.cz/ vendor="" case "${1,,}" in 0x10ec) vendor=TEAMGROUP ;; @@ -1130,7 +1131,7 @@ updatedb(){ default=\"default\" default="$default":{\"compatibility_interval\":[{\"compatibility\":\"support\",\"not_yet_rolling_status\" default="$default":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true, - default="$default"\"smart_test_ignore\":false,\"smart_attr_ignore\":false}]}}}, + default="$default"\"smart_test_ignore\":false,\"smart_attr_ignore\":false}]}}} if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then # Replace "disk_compatbility_info":{} with @@ -1176,6 +1177,18 @@ updatedb(){ } +# Fix ,, instead of , bug caused by v3.3.75 +if [[ "${#db1list[@]}" -gt "0" ]]; then + for i in "${!db1list[@]}"; do + sed -i "s/,,/,/" + done +fi +if [[ "${#db2list[@]}" -gt "0" ]]; then + for i in "${!db2list[@]}"; do + sed -i "s/,,/,/" + done +fi + # HDDs and SATA SSDs num="0" while [[ $num -lt "${#hdds[@]}" ]]; do From 4c533cb11a9a44d040d1ca8658ac0f2c88cf48f0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 11:31:52 +1100 Subject: [PATCH 321/694] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 82f48fa..372061d 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,8 @@ ### Scheduling the script in Synology's Task Scheduler ### Running the script via SSH +[How to enable SSH and login to DSM via SSH](https://kb.synology.com/en-global/DSM/tutorial/How_to_login_to_DSM_with_root_permission_via_SSH_Telnet) + You run the script in a shell with sudo -i or as root. ```YAML From 0977d5481951d564af904410d4a47db48e98a8d8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:33:35 +1100 Subject: [PATCH 322/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 37fe6d3..7271186 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.4.76 +v3.4.77 - Include smart_test_ignore and smart_attr_ignore in db files. - Now saves changes.txt as _changes.txt when updating the script. - To not overwrite changes.txt if my other scripts are in the same folder. From 2e8fc173178c89fbd81f89d58a3314929c6b082c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:35:59 +1100 Subject: [PATCH 323/694] Update syno_hdd_db.sh Bug for previous bug fix. Issue #200 --- syno_hdd_db.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 7fde39c..b4c2d14 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.76" +scriptver="v3.4.77" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1180,12 +1180,12 @@ updatedb(){ # Fix ,, instead of , bug caused by v3.3.75 if [[ "${#db1list[@]}" -gt "0" ]]; then for i in "${!db1list[@]}"; do - sed -i "s/,,/,/" + sed -i "s/,,/,/" "${db1list[i]}" done fi if [[ "${#db2list[@]}" -gt "0" ]]; then for i in "${!db2list[@]}"; do - sed -i "s/,,/,/" + sed -i "s/,,/,/" "${db2list[i]}" done fi From 5784d65ace24f432f490808cf2e4153d75ff150c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:45:38 +1100 Subject: [PATCH 324/694] Update syno_hdd_db.sh Add check that script is running on Synology NAS. --- syno_hdd_db.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index b4c2d14..5d708e8 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.77" +scriptver="v3.4.78" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -39,7 +39,13 @@ if [ ! "$(basename "$BASH")" = bash ]; then exit 1 fi -#echo -e "bash version: $(bash --version | head -1 | cut -d' ' -f4)\n" # debug +# Check script is running on a Synology NAS +if ! uname -a | grep -i synology >/dev/null; then + echo "This script is NOT running on a Synology NAS!" + echo "Copy the script to a folder on the Synology" + echo "and run it from there." + exit 1 +fi ding(){ printf \\a From 82939119f8cf5b59404a0de2ae43339404a393ae Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:46:07 +1100 Subject: [PATCH 325/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 7271186..a899ec2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.4.78 +- Added check that script is running on Synology NAS. + v3.4.77 - Include smart_test_ignore and smart_attr_ignore in db files. - Now saves changes.txt as _changes.txt when updating the script. From 85092468f96d9a656f8a1cb16ed568657c598592 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:07:50 +1100 Subject: [PATCH 326/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 372061d..c030c32 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Ez Hosting | Alec Wilhere | +| | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | From 04a2d3915a2671e6b57062fcb591636a05fecfca Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Jan 2024 08:56:09 +1100 Subject: [PATCH 327/694] Update my-other-scripts.md --- my-other-scripts.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index 877bb6f..0375a43 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -13,9 +13,6 @@ ## All my Synology Scripts - **Synology_enable_M2_card** - Enable Synology M.2 PCIe cards in Synology NAS that don't officially support them. -- **Synology_enable_eunit** - - Enable an unsupported Synology eSATA Expansion Unit models. - - **Synology_enable_Deduplication** - Enable deduplication with non-Synology SSDs and unsupported NAS models. @@ -34,6 +31,9 @@ ## All my Synology Scripts - **Synology_DSM_reinstall** - Easily re-install the same DSM version without losing any data or settings +- **Synology_app_mover** + - Easily move Synology packages from one volume to another volume + - **Synology_Cleanup_Coredumps** - Cleanup memory core dumps from crashed processes From 76390760999393e02c711bc81e063da9daedb00e Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Jan 2024 10:49:22 +1100 Subject: [PATCH 328/694] Update dtc --- bin/dtc | Bin 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 bin/dtc diff --git a/bin/dtc b/bin/dtc old mode 100755 new mode 100644 From b1be67bec25eb64fbd8f5439a1ef6d3734b6db3f Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Jan 2024 12:25:26 +1100 Subject: [PATCH 329/694] Update my-other-scripts.md --- my-other-scripts.md | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index 0375a43..a1fe78f 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -1,4 +1,20 @@ -## All my Synology Scripts +## My other scripts + +### Plex scripts + +- **Synology_Plex_Backup** + - A script to backup Plex to a tgz file foror DSM 7 and DSM 6. + - Works for Plex Synology package and Plex in docker. + +- **Asustor_Plex_Backup** + - Backup your Asustor's Plex Media Server settings and database. + +- **Plex_Server_Sync** + - Sync your main Plex server database & metadata to a backup Plex server. + - Works for Synology, Asustor, Linux and supports Plex package or Plex in docker. + + +### Synology scripts - **Synology_HDD_db** - Add your HDD, SSD and NVMe drives to your Synology's compatible drive database. @@ -10,9 +26,15 @@ ## All my Synology Scripts - **Synology_M2_volume** - Easily create an M.2 volume on Synology NAS. +- **Synology_app_mover** + - Easily move Synology packages from one volume to another volume. + - **Synology_enable_M2_card** - Enable Synology M.2 PCIe cards in Synology NAS that don't officially support them. +- **Synology_enable_eunit** + - Enable an unsupported Synology eSATA Expansion Unit models. + - **Synology_enable_Deduplication** - Enable deduplication with non-Synology SSDs and unsupported NAS models. @@ -22,26 +44,17 @@ ## All my Synology Scripts - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. -- **Synology_Plex_Backup** - - A script to backup Plex to a tgz file. For DSM 7 and DSM 6. - -- **Plex_Server_Sync** - - Sync main Plex server database & metadata to backup Plex server - - **Synology_DSM_reinstall** - - Easily re-install the same DSM version without losing any data or settings - -- **Synology_app_mover** - - Easily move Synology packages from one volume to another volume + - Easily re-install the same DSM version without losing any data or settings. - **Synology_Cleanup_Coredumps** - - Cleanup memory core dumps from crashed processes + - Cleanup memory core dumps from crashed processes. - **Docker_Autocompose** - - Create .yml files from your docker existing containers + - Create .yml files from your docker existing containers. - **Download_Synology_Archive** - - Download all or part of the Synology archive + - Download all or part of the Synology archive. - **ScriptNotify** - - DSM 7 package to allow your scripts to send DSM notifications + - DSM 7 package to allow your scripts to send DSM notifications. From 67e726b19e133e39d9e657816a3daa067e8125bf Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:51:34 +1100 Subject: [PATCH 330/694] Update syno_hdd_db.sh Bug fix for chmod failed on changes.txt --- syno_hdd_db.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5d708e8..aa3d342 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.78" +scriptver="v3.4.79" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -160,7 +160,7 @@ fi if [[ $debug == "yes" ]]; then - # set -x + set -x export PS4='`[[ $? == 0 ]] || echo "\e[1;31;40m($?)\e[m\n "`:.$LINENO:' fi @@ -341,13 +341,14 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | sort --check=quiet --version-sort >/dev/null ; then echo -e "\n${Cyan}There is a newer version of this script available.${Off}" echo -e "Current version: ${scriptver}\nLatest version: $tag" - if [[ -f $scriptpath/$script-$shorttag.tar.gz ]]; then + scriptdl="$scriptpath/$script-$shorttag" + if [[ -f ${scriptdl}.tar.gz ]] || [[ -f ${scriptdl}.zip ]]; then # They have the latest version tar.gz downloaded but are using older version - echo "https://github.com/$repo/releases/latest" + echo "You have the latest version downloaded but are using an older version" sleep 10 - elif [[ -d $scriptpath/$script-$shorttag ]]; then + elif [[ -d $scriptdl ]]; then # They have the latest version extracted but are using older version - echo "https://github.com/$repo/releases/latest" + echo "You have the latest version extracted but are using an older version" sleep 10 else if [[ $autoupdate == "yes" ]]; then @@ -428,7 +429,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | "$script-$shorttag/CHANGES.txt to:\n $scriptpath" else # Set permissions on CHANGES.txt - if ! chmod 664 "$scriptpath/CHANGES.txt"; then + if ! chmod 664 "$scriptpath/${scriptname}_CHANGES.txt"; then if [[ $autoupdate != "yes" ]]; then permerr=1; fi echo -e "${Error}ERROR${Off} Failed to set permissions on:" echo "$scriptpath/CHANGES.txt" From 89fd7b3e9b01de7b8c5d48c10150a9fe9e19cd5b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:52:09 +1100 Subject: [PATCH 331/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index a899ec2..adbc584 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.4.79 +- Bug fix for chmod failed on changes.txt + v3.4.78 - Added check that script is running on Synology NAS. From c64e50f77473c912fe8296e47a01fff2dda6b53a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 10 Jan 2024 06:25:29 +1100 Subject: [PATCH 332/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c030c32..8708bc5 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | +| Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | From 13bfcfba74b6b154b7c19b029e1b618071836a25 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 10 Jan 2024 06:28:25 +1100 Subject: [PATCH 333/694] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8708bc5..dd141aa 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ ### Running the script via SSH You run the script in a shell with sudo -i or as root. ```YAML -sudo -i /path-to-script/syno_hdd_db.sh -nr +sudo -i /path-to-script/syno_hdd_db.sh -n ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. @@ -93,7 +93,7 @@ ### Running the script via SSH If you run the script with the --showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. ```YAML -sudo -i /path-to-script/syno_hdd_db.sh -nr --showedits +sudo -i /path-to-script/syno_hdd_db.sh -n --showedits ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. From fd837c3616dbd0e87af3cd6f28dbaf19f515ad2e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 10 Jan 2024 06:29:46 +1100 Subject: [PATCH 334/694] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dd141aa..8708bc5 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ ### Running the script via SSH You run the script in a shell with sudo -i or as root. ```YAML -sudo -i /path-to-script/syno_hdd_db.sh -n +sudo -i /path-to-script/syno_hdd_db.sh -nr ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. @@ -93,7 +93,7 @@ ### Running the script via SSH If you run the script with the --showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. ```YAML -sudo -i /path-to-script/syno_hdd_db.sh -n --showedits +sudo -i /path-to-script/syno_hdd_db.sh -nr --showedits ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. From bc41a282002d8c107c8a3010c3f54f3bf8b15aa7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 10 Jan 2024 07:29:06 +1100 Subject: [PATCH 335/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8708bc5..7b7bd78 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ #### What the script does: * Optionally disable DSM's "support_disk_compatibility". * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. + * DSM only uses the max memory setting when calculating the reserved RAM area size for SSD caches. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. From a998859ffc624cce9264f8be8c51bcda2e2ccc3e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 12 Jan 2024 21:57:47 +1100 Subject: [PATCH 336/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index aa3d342..6b2cb7b 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -381,7 +381,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | "extract $script-$shorttag.tar.gz!" syslog_set warn "$script failed to extract $script-$shorttag.tar.gz!" else - # Set permissions on script sh files + # Set script sh files as executable if ! chmod a+x "/tmp/$script-$shorttag/"*.sh ; then permerr=1 echo -e "${Error}ERROR${Off} Failed to set executable permissions" @@ -393,7 +393,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | then copyerr=1 echo -e "${Error}ERROR${Off} Failed to copy"\ - "$script-$shorttag .sh file(s) to:\n $scriptpath" + "$script-$shorttag sh file(s) to:\n $scriptpath/${scriptfile}" syslog_set warn "$script failed to copy $tag to script location" fi @@ -420,6 +420,13 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | # Copy new CHANGES.txt file to script location (if script on a volume) if [[ $scriptpath =~ /volume* ]]; then + # Set permissions on CHANGES.txt + if ! chmod 664 "/tmp/$script-$shorttag/CHANGES.txt"; then + permerr=1 + echo -e "${Error}ERROR${Off} Failed to set permissions on:" + echo "$scriptpath/CHANGES.txt" + fi + # Copy new CHANGES.txt file to script location if ! cp -p "/tmp/$script-$shorttag/CHANGES.txt"\ "${scriptpath}/${scriptname}_CHANGES.txt"; @@ -428,17 +435,11 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "${Error}ERROR${Off} Failed to copy"\ "$script-$shorttag/CHANGES.txt to:\n $scriptpath" else - # Set permissions on CHANGES.txt - if ! chmod 664 "$scriptpath/${scriptname}_CHANGES.txt"; then - if [[ $autoupdate != "yes" ]]; then permerr=1; fi - echo -e "${Error}ERROR${Off} Failed to set permissions on:" - echo "$scriptpath/CHANGES.txt" - fi changestxt=" and changes.txt" fi fi - # Delete downloaded .tar.gz file and extracted tmp files + # Delete downloaded tmp files cleanup_tmp # Notify of success (if there were no errors) From 031453a8864eed38503cfabe6093fce5b3926604 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 12 Jan 2024 21:58:15 +1100 Subject: [PATCH 337/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 6b2cb7b..5ad478e 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.79" +scriptver="v3.4.80" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db From 6c1495be0ac5cc716d7384eb21a72d01c62c475e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Jan 2024 08:19:59 +1100 Subject: [PATCH 338/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7b7bd78..3e03ff1 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | From 70eb92b3670021b135db546c7eddf70ab2ac7af9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:35:08 +1100 Subject: [PATCH 339/694] Update README.md --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3e03ff1..88661d1 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,11 @@ #### What the script does: ### Download the script -See How to download the script for the easiest way to download the script. - -Do ***NOT*** save the script to a M.2 volume. The M.2 volume won't be available until after the script has run. +1. Download the latest version _Source code (zip)_ from https://github.com/007revad/Synology_HDD_db/releases + - See How to download the script for the easiest way to download the script. +2. Save the download zip file to a folder on the Synology. + - Do ***NOT*** save the script to a M.2 volume. The M.2 volume may not be available until after the script has run. +3. Unzip the zip file. ### When to run the script From 076388b20dce53fbce89134bb800ad30e9dec6af Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:20:03 +1100 Subject: [PATCH 340/694] Update README.md --- README.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 88661d1..138db0d 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ #### What the script does: * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * DSM only uses the max memory setting when calculating the reserved RAM area size for SSD caches. +* Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). + * DSM 7.2.1 already has WDDA disabled. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. @@ -59,21 +61,27 @@ ### Options when running the script ```YAML -s, --showedits Show edits made to _host db and db.new 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 (DSM 7.x only), + -r, --ram Disable memory compatibility checking (DSM 7.x only) and sets max memory to the amount of installed memory - -w, --wdda Disable WD WDDA - -e, --email Disable colored text in output scheduler emails. + -w, --wdda Disable WD Device Analytics to prevent DSM showing + a false warning for WD drives that are 3 years old + DSM 7.2.1 already has WDDA disabled. + -f, --force Force DSM to not check drive compatibility + Do not use this option unless absolutely needed. + -e, --email Disable colored text in output scheduler emails --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) - AGE is how many days old a release must be before - auto-updating. AGE must be a number: 0 or greater + AGE is how many days old a release must be before. + auto-updating. AGE must be a number: 0 or greater. -h, --help Show this help message -v, --version Show the script version ``` -**Note:** If you have some Synology drives and want to update their firmware run the script **without** --noupdate or -n then do the drive database update from Storage Manager and finally run the script again with your preferred options. +**Notes:** +- The -f or --force option is only needed if for some reason your drives still show as unsupported in storage manager. + - Only use this option as last resort. + - Using this option will prevent data deduplication from being available, and prevent firmware updates on Synology brand drives. +- If you have some Synology drives and want to update their firmware run the script **without** --noupdate or -n then do the drive database update from Storage Manager and finally run the script again with your preferred options. ### Scheduling the script in Synology's Task Scheduler From 911f1f03a1e665c3b1b78c11605c8568e2d67564 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:36:14 +1100 Subject: [PATCH 341/694] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 138db0d..3363bf3 100644 --- a/README.md +++ b/README.md @@ -65,14 +65,14 @@ ### Options when running the script and sets max memory to the amount of installed memory -w, --wdda Disable WD Device Analytics to prevent DSM showing a false warning for WD drives that are 3 years old - DSM 7.2.1 already has WDDA disabled. + DSM 7.2.1 already has WDDA disabled -f, --force Force DSM to not check drive compatibility Do not use this option unless absolutely needed. -e, --email Disable colored text in output scheduler emails --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) - AGE is how many days old a release must be before. - auto-updating. AGE must be a number: 0 or greater. + AGE is how many days old a release must be before + auto-updating. AGE must be a number: 0 or greater -h, --help Show this help message -v, --version Show the script version ``` From 32496109a037706e8f6b8a678e803cfe84e404fb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:36:39 +1100 Subject: [PATCH 342/694] Update syno_hdd_db.sh Update help --- syno_hdd_db.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index aa3d342..76255fa 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.79" +scriptver="v3.4.80" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -60,12 +60,14 @@ Usage: $(basename "$0") [options] Options: -s, --showedits Show edits made to _host db and db.new 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 (DSM 7.x only), + -r, --ram Disable memory compatibility checking (DSM 7.x only) and sets max memory to the amount of installed memory - -w, --wdda Disable WD WDDA - -e, --email Disable colored text in output scheduler emails. + -w, --wdda Disable WD Device Analytics to prevent DSM showing + a false warning for WD drives that are 3 years old + DSM 7.2.1 already has WDDA disabled + -f, --force Force DSM to not check drive compatibility + Do not use this option unless absolutely needed + -e, --email Disable colored text in output scheduler emails --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before From 2c8613b256f04108467abc7f802f7b9230221ed5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:40:30 +1100 Subject: [PATCH 343/694] Update CHANGES.txt --- CHANGES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index adbc584..7f2cc4b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,6 @@ -v3.4.79 +v3.4.80 - Bug fix for chmod failed on changes.txt +- Improved help message. v3.4.78 - Added check that script is running on Synology NAS. From 2b6810535e801f89fc5a9aab06ab743bb23a1cde Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Jan 2024 18:47:17 +1100 Subject: [PATCH 344/694] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3363bf3..6dafe9a 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,6 @@ #### What the script does: ### Download the script 1. Download the latest version _Source code (zip)_ from https://github.com/007revad/Synology_HDD_db/releases - - See How to download the script for the easiest way to download the script. 2. Save the download zip file to a folder on the Synology. - Do ***NOT*** save the script to a M.2 volume. The M.2 volume may not be available until after the script has run. 3. Unzip the zip file. From d0052a6483690f9bc8dc72dedc6f1e605607282a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Jan 2024 18:57:18 +1100 Subject: [PATCH 345/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6dafe9a..a01a638 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ ### Download the script 1. Download the latest version _Source code (zip)_ from https://github.com/007revad/Synology_HDD_db/releases 2. Save the download zip file to a folder on the Synology. - - Do ***NOT*** save the script to a M.2 volume. The M.2 volume may not be available until after the script has run. + - Do ***NOT*** save the script to a M.2 volume. After a DSM or Storage Manager update the M.2 volume won't be available until after the script has run. 3. Unzip the zip file. ### When to run the script From 1922e4d222f57fd074b2b208d22e17c77c2b107c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 16 Jan 2024 19:59:09 +1100 Subject: [PATCH 346/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a01a638..8ea9fee 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Jordan Crawford | +| | | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | From fa650678739bf54f3df1f2f2ddee91febe5d34b0 Mon Sep 17 00:00:00 2001 From: leonpano2006 Date: Sat, 20 Jan 2024 11:49:34 +0100 Subject: [PATCH 347/694] Update syno_hdd_db.sh fix for other path of uname cause it think is not synology --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5aacddd..5f1e6d3 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -40,7 +40,7 @@ if [ ! "$(basename "$BASH")" = bash ]; then fi # Check script is running on a Synology NAS -if ! uname -a | grep -i synology >/dev/null; then +if ! /usr/bin/uname -a | grep -i synology >/dev/null; then echo "This script is NOT running on a Synology NAS!" echo "Copy the script to a folder on the Synology" echo "and run it from there." From 372f6656ee6347a536f84998b9d42bc34e1ab24b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 21 Jan 2024 07:14:10 +1100 Subject: [PATCH 348/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 7f2cc4b..2c18506 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.81 +- Bug fix for false "This script is NOT running on a Synology NAS!" if uname isntalled from Entware. Issue #218 + v3.4.80 - Bug fix for chmod failed on changes.txt - Improved help message. From 34fc3489d8d8439f50b8490b7d18dac7089e9c33 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 21 Jan 2024 07:26:45 +1100 Subject: [PATCH 349/694] Update syno_hdd_db.sh Fix typo in wdda comment --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5f1e6d3..e9d2502 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -120,7 +120,7 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ -r|--ram) # Disable "support_memory_compatibility" ram=yes ;; - -w|--wdda) # Disable "support_memory_compatibility" + -w|--wdda) # Disable "support_wdda" wdda=no ;; -e|--email) # Disable colour text in task scheduler emails From a47fd5ec93e4e5c8bbebb8b19a7060414416eb45 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:36:20 +1100 Subject: [PATCH 350/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 2c18506..564a985 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.5.81 -- Bug fix for false "This script is NOT running on a Synology NAS!" if uname isntalled from Entware. Issue #218 +- Bug fix for false "This script is NOT running on a Synology NAS!" if uname is installed from Entware. Issue #218 v3.4.80 - Bug fix for chmod failed on changes.txt From e35854488c834ec5fb55efb0fdb2ecc517ad1cd2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 21 Jan 2024 14:04:20 +1100 Subject: [PATCH 351/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 564a985..57a527e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.5.81 +v3.4.81 - Bug fix for false "This script is NOT running on a Synology NAS!" if uname is installed from Entware. Issue #218 v3.4.80 From d1a66b961d84254916118469a4539f2b038f8a04 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 21 Jan 2024 14:05:31 +1100 Subject: [PATCH 352/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e9d2502..9524b44 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.80" +scriptver="v3.4.81" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db From 707ac94e49b155a31552439db8e0e9a1ced3bbda Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 22 Jan 2024 21:48:01 +1100 Subject: [PATCH 353/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 57a527e..ab25054 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.4.82 +- Fix for drives that exist in the drive database already but have "compatibility unverified". Issue #224 + v3.4.81 - Bug fix for false "This script is NOT running on a Synology NAS!" if uname is installed from Entware. Issue #218 From d908461a80808726260fd8a7af88eedeb1635222 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 22 Jan 2024 21:48:17 +1100 Subject: [PATCH 354/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 9524b44..76bca9b 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.81" +scriptver="v3.4.82" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1114,6 +1114,9 @@ editdb7(){ #exit 6 fi fi + + # Edit existing drives in db with compatibility:unverified # Issue #224 + sed -i 's/unverified/support/g' "$2" } From aad502c217304f9eb00222822c99f29f039e2a15 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 23 Jan 2024 06:01:40 +1100 Subject: [PATCH 355/694] Update syno_hdd_db.sh - Fix for drives that exist in the drive database already but have "compatibility unverified". Issue #224 --- syno_hdd_db.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 76bca9b..bea4028 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1114,9 +1114,6 @@ editdb7(){ #exit 6 fi fi - - # Edit existing drives in db with compatibility:unverified # Issue #224 - sed -i 's/unverified/support/g' "$2" } @@ -1163,6 +1160,14 @@ updatedb(){ editdb7 "append" "$2" fi fi + + # Edit existing drives in db with compatibility:unverified # Issue #224 + if grep 'unverified' "$2" >/dev/null; then + sed -i 's/unverified/support/g' "$2" + if ! grep 'unverified' "$2" >/dev/null; then + echo -e "Edited unverified drives in ${Cyan}$(basename -- "$2")${Off}" >&2 + fi + fi elif [[ $dbtype -eq "6" ]]; then if grep "$hdmodel" "$2" >/dev/null; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 From e715b62565909098f213df0f5d708773afb377da Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 23 Jan 2024 06:04:21 +1100 Subject: [PATCH 356/694] Update syno_hdd_db.sh fix comment typo --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index bea4028..4819451 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1798,7 +1798,7 @@ fi setting="$(get_key_value $synoinfo support_wdda)" if [[ $wdda == "no" ]]; then if [[ $setting == "yes" ]]; then - # Disable support_memory_compatibility + # Disable support_wdda synosetkeyvalue "$synoinfo" support_wdda "no" setting="$(get_key_value "$synoinfo" support_wdda)" if [[ $setting == "no" ]]; then From a226a1824294f952b3d3780ae7e6a659623120bb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 23 Jan 2024 19:48:23 +1100 Subject: [PATCH 357/694] Update README.md --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 8ea9fee..d1f9771 100644 --- a/README.md +++ b/README.md @@ -58,22 +58,22 @@ ### Options when running the script There are optional flags you can use when running the script: ```YAML - -s, --showedits Show edits made to _host db and db.new file(s) - -n, --noupdate Prevent DSM updating the compatible drive databases + -s, --showedits Show edits made to _host db and db.new file(s). + -n, --noupdate Prevent DSM updating the compatible drive databases. -r, --ram Disable memory compatibility checking (DSM 7.x only) - and sets max memory to the amount of installed memory + and sets max memory to the amount of installed memory. -w, --wdda Disable WD Device Analytics to prevent DSM showing - a false warning for WD drives that are 3 years old - DSM 7.2.1 already has WDDA disabled - -f, --force Force DSM to not check drive compatibility + a false warning for WD drives that are 3 years old. + DSM 7.2.1 already has WDDA disabled. + -f, --force Force DSM to not check drive compatibility. Do not use this option unless absolutely needed. - -e, --email Disable colored text in output scheduler emails - --restore Undo all changes made by the script - --autoupdate=AGE Auto update script (useful when script is scheduled) + -e, --email Disable colored text in output scheduler emails. + --restore Undo all changes made by the script. + --autoupdate=AGE Auto update script (useful when script is scheduled). AGE is how many days old a release must be before - auto-updating. AGE must be a number: 0 or greater - -h, --help Show this help message - -v, --version Show the script version + auto-updating. AGE must be a number: 0 or greater. + -h, --help Show this help message. + -v, --version Show the script version. ``` **Notes:** From e301db92e25cc8746c890ba2060bea50e8a70ecc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 24 Jan 2024 09:21:59 +1100 Subject: [PATCH 358/694] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d1f9771..0bc45dc 100644 --- a/README.md +++ b/README.md @@ -90,10 +90,10 @@ ### Running the script via SSH [How to enable SSH and login to DSM via SSH](https://kb.synology.com/en-global/DSM/tutorial/How_to_login_to_DSM_with_root_permission_via_SSH_Telnet) -You run the script in a shell with sudo -i or as root. +You run the script in a shell with sudo -s or as root. ```YAML -sudo -i /path-to-script/syno_hdd_db.sh -nr +sudo -s /path-to-script/syno_hdd_db.sh -nr ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. @@ -103,7 +103,7 @@ ### Running the script via SSH If you run the script with the --showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. ```YAML -sudo -i /path-to-script/syno_hdd_db.sh -nr --showedits +sudo -s /path-to-script/syno_hdd_db.sh -nr --showedits ``` **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. From 8dd7d7051e4326b39ee24178f8d2b9a7d930c91e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 27 Jan 2024 07:05:39 +1100 Subject: [PATCH 359/694] Update CHANGES.txt --- CHANGES.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ab25054..e9502f3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,10 @@ +v3.4.83 +- Fix for drives that exist in the drive database already but have "compatibility not_support". + - Affected drives were showing as "Incompatible" in storage manager. + v3.4.82 - Fix for drives that exist in the drive database already but have "compatibility unverified". Issue #224 + - Affected drives were showing as "Unverified" in storage manager. v3.4.81 - Bug fix for false "This script is NOT running on a Synology NAS!" if uname is installed from Entware. Issue #218 From 8f603457a90a5165de75a06b2b3ead15e563517e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 27 Jan 2024 07:05:55 +1100 Subject: [PATCH 360/694] Update syno_hdd_db.sh v3.4.83 - Fix for drives that exist in the drive database already but have "compatibility not_support". - Affected drives were showing as "Incompatible" in storage manager. --- syno_hdd_db.sh | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 4819451..a65d735 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.82" +scriptver="v3.4.83" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -62,11 +62,13 @@ Options: -n, --noupdate Prevent DSM updating the compatible drive databases -r, --ram Disable memory compatibility checking (DSM 7.x only) and sets max memory to the amount of installed memory + -f, --force Force DSM to not check drive compatibility + Do not use this option unless absolutely needed + -i, --incompatible Change incompatible drives to supported + Do not use this option unless absolutely needed -w, --wdda Disable WD Device Analytics to prevent DSM showing a false warning for WD drives that are 3 years old DSM 7.2.1 already has WDDA disabled - -f, --force Force DSM to not check drive compatibility - Do not use this option unless absolutely needed -e, --email Disable colored text in output scheduler emails --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) @@ -96,7 +98,7 @@ args=("$@") # Check for flags with getopt if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ - restore,showedits,noupdate,nodbupdate,m2,force,ram,wdda,immutable,email,autoupdate:,help,version,debug \ + restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,wdda,email,autoupdate:,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do @@ -117,6 +119,9 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ -f|--force) # Disable "support_disk_compatibility" force=yes ;; + -i|--incompatible) # Change incompatible drives to supported + incompatible=yes + ;; -r|--ram) # Disable "support_memory_compatibility" ram=yes ;; @@ -1168,6 +1173,16 @@ updatedb(){ echo -e "Edited unverified drives in ${Cyan}$(basename -- "$2")${Off}" >&2 fi fi + + # Edit existing drives in db with compatibility:not_support + if [[ $incompatible == "yes" ]]; then + if grep 'not_support' "$2" >/dev/null; then + sed -i 's/not_support/support/g' "$2" + if ! grep 'not_support' "$2" >/dev/null; then + echo -e "Edited incompatible drives in ${Cyan}$(basename -- "$2")${Off}" >&2 + fi + fi + fi elif [[ $dbtype -eq "6" ]]; then if grep "$hdmodel" "$2" >/dev/null; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 From 555454899c53eb01c26751153ba789d7e2ef1c9e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 27 Jan 2024 07:08:05 +1100 Subject: [PATCH 361/694] Update README.md - Fix for drives that exist in the drive database already but have "compatibility not_support". - Affected drives were showing as "Incompatible" in storage manager. --- README.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 0bc45dc..bea079f 100644 --- a/README.md +++ b/README.md @@ -58,22 +58,24 @@ ### Options when running the script There are optional flags you can use when running the script: ```YAML - -s, --showedits Show edits made to _host db and db.new file(s). - -n, --noupdate Prevent DSM updating the compatible drive databases. + -s, --showedits Show edits made to _host db and db.new file(s) + -n, --noupdate Prevent DSM updating the compatible drive databases -r, --ram Disable memory compatibility checking (DSM 7.x only) - and sets max memory to the amount of installed memory. + and sets max memory to the amount of installed memory + -f, --force Force DSM to not check drive compatibility + Do not use this option unless absolutely needed + -i, --incompatible Change incompatible drives to supported + Do not use this option unless absolutely needed -w, --wdda Disable WD Device Analytics to prevent DSM showing - a false warning for WD drives that are 3 years old. - DSM 7.2.1 already has WDDA disabled. - -f, --force Force DSM to not check drive compatibility. - Do not use this option unless absolutely needed. - -e, --email Disable colored text in output scheduler emails. - --restore Undo all changes made by the script. - --autoupdate=AGE Auto update script (useful when script is scheduled). + a false warning for WD drives that are 3 years old + DSM 7.2.1 already has WDDA disabled + -e, --email Disable colored text in output scheduler emails + --restore Undo all changes made by the script + --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before - auto-updating. AGE must be a number: 0 or greater. - -h, --help Show this help message. - -v, --version Show the script version. + auto-updating. AGE must be a number: 0 or greater + -h, --help Show this help message + -v, --version Show the script version ``` **Notes:** From 25369395d7d40171cf6bcaed4a522725b80a7d35 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 27 Jan 2024 07:15:37 +1100 Subject: [PATCH 362/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index e9502f3..c189029 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,7 @@ v3.4.83 - Fix for drives that exist in the drive database already but have "compatibility not_support". - Affected drives were showing as "Incompatible" in storage manager. + - Need to use the -i or --incompatible option. v3.4.82 - Fix for drives that exist in the drive database already but have "compatibility unverified". Issue #224 From bed80cfef8185a3105b74c8f5ff976a350a47cd1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 27 Jan 2024 08:14:44 +1100 Subject: [PATCH 363/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bea079f..a08e126 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | bizIT Hirschberg | Jordan Crawford | +| | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | From 56ce8c6ada813e0a57342fab3d8d8eff838e27fd Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sun, 28 Jan 2024 11:30:50 +1100 Subject: [PATCH 364/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index a1fe78f..57150dd 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -47,6 +47,9 @@ ### Synology scripts - **Synology_DSM_reinstall** - Easily re-install the same DSM version without losing any data or settings. +- **Synology_enable_sequential_IO** + - Enables sequential I/O for your SSD caches, like DSM 6 had. + - **Synology_Cleanup_Coredumps** - Cleanup memory core dumps from crashed processes. From afbac9229a6a703c062517413f1cc6a999e456f5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 29 Jan 2024 11:03:40 +1100 Subject: [PATCH 365/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a08e126..782a97f 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | +| Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | From 5db6ba4cbfc8bf1b3029e738fca2081310b123a9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:49:02 +1100 Subject: [PATCH 366/694] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 782a97f..ca61e80 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,14 @@ ### Running the script via SSH

+### Troubleshooting + +| Issue | Cause | Solution | +|-------|-------|----------| +| /usr/bin/env: ‘bash\r’: No such file or directory | File has Mac line endings! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | +| Cursor sits there doing nothing | File has Windows line endings! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | +| command substitution: line 2: syntax error | You downloaded the webpage! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | + ### vendor_ids.txt You only need to edit syno_hdd_vendor_ids.txt if the script warns you about a missing vendor id. From 79a95ba1739d77517a1fdbdf6b7e0c96eb911356 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:32:12 +1100 Subject: [PATCH 367/694] Update CHANGES.txt - Bug fix when script updates itself and user ran the script from ./scriptname.sh --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index c189029..1b1fca2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.4.84 +- Bug fix when script updates itself and user ran the script from ./scriptname.sh + v3.4.83 - Fix for drives that exist in the drive database already but have "compatibility not_support". - Affected drives were showing as "Incompatible" in storage manager. From 00f6223f26aa368013ff51d29e7a8e4797477cef Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:42:08 +1100 Subject: [PATCH 368/694] Update syno_hdd_db.sh - Bug fix when script updates itself and user ran the script from ./scriptname.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a65d735..7da4f2c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -27,7 +27,7 @@ # Now warns if script is located on an M.2 volume. -scriptver="v3.4.83" +scriptver="v3.4.84" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -456,7 +456,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | # Reload script printf -- '-%.0s' {1..79}; echo # print 79 - - exec "$0" "${args[@]}" + exec "${scriptpath}/$scriptfile" "${args[@]}" else syslog_set warn "$script update to $tag had errors" fi From 812feeaf598f4581d4f9eaa2d2bf4f697c9e4e26 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 4 Feb 2024 16:04:09 +1100 Subject: [PATCH 369/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca61e80..378669d 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ ### Troubleshooting |-------|-------|----------| | /usr/bin/env: ‘bash\r’: No such file or directory | File has Mac line endings! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | | Cursor sits there doing nothing | File has Windows line endings! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | -| command substitution: line 2: syntax error | You downloaded the webpage! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | +| syntax error near unexpected token | You downloaded the webpage! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | ### vendor_ids.txt From f3313189cf84a4c3373ba4c68dcb9100403ca64e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 6 Feb 2024 11:51:32 +1100 Subject: [PATCH 370/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 378669d..4dafee0 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| +| | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | From 7e6e56e3b8fc24b324b2753fd6275ae7c98f6eeb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 8 Feb 2024 09:13:43 +1100 Subject: [PATCH 371/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4dafee0..4ffd85c 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ ### vendor_ids.txt | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Darren O Connor | Charles Young | J Davis | +| Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | From 2b38ab60817b0d6624e0b743050873e744ac22a2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 8 Feb 2024 10:46:13 +1100 Subject: [PATCH 372/694] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4ffd85c..f266bec 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ ### vendor_ids.txt
-**Credits** +### Credits - The idea for this script came from a comment made by Empyrealist on the Synology subreddit. - Thanks for the assistance from Alex_of_Chaos on the Synology subreddit. @@ -142,7 +142,7 @@ ### vendor_ids.txt - Thanks to bartoque on the Synology subreddit for the tip on making the script download the latest release from github. - Thanks to nicolerenee for pointing out the easiest way to enable creating M.2 storage pools and volumes in Storage Manager. -**Donators** +### Donators Thank you to the following PayPal donators, GitHub sponsors and hardware donators From e96cd50e0b8f800396e80da437b7aa56acbd7416 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 8 Feb 2024 10:47:12 +1100 Subject: [PATCH 373/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f266bec..cf2dc85 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ ### Credits - The idea for this script came from a comment made by Empyrealist on the Synology subreddit. - Thanks for the assistance from Alex_of_Chaos on the Synology subreddit. - Thanks to dwabraxus and aferende for help detecting connected expansion units. -- Thanks to bartoque on the Synology subreddit for the tip on making the script download the latest release from github. +- Thanks to bartoque on the Synology subreddit for the tip on making the script download the latest release from GitHub. - Thanks to nicolerenee for pointing out the easiest way to enable creating M.2 storage pools and volumes in Storage Manager. ### Donators From 1c80a69e3d9576eb55b24480ca73639c1070c354 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 12 Feb 2024 11:42:02 +1100 Subject: [PATCH 374/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cf2dc85..8a17e47 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | From b7473289968dbc859ab2ba00cf4ee77c93f831f5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:41:18 +1100 Subject: [PATCH 375/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a17e47..e02dd92 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | enil-kil | Xaver Zöllner | +| | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | From 82d295818ab5c6a80d4a529c228c54421c91c4d7 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Fri, 16 Feb 2024 20:29:59 +1100 Subject: [PATCH 376/694] Update my-other-scripts.md --- my-other-scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index 57150dd..25e5457 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -39,7 +39,7 @@ ### Synology scripts - Enable deduplication with non-Synology SSDs and unsupported NAS models. - **Synology_SHR_switch** - - Easily switch between SHR and RAID Group. + - Easily switch between SHR and RAID Groups, or enable RAID-F1. - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. From a07fd31d66653ac94d1add9d2b56497adac46ba1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Feb 2024 12:21:11 +1100 Subject: [PATCH 377/694] Update syno_hdd_db.sh - Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). --- syno_hdd_db.sh | 151 ++++++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 66 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 7da4f2c..ab44dea 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -16,6 +16,8 @@ #-------------------------------------------------------------------------------------------------- # CHANGES +# Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). +# # Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. # - E10M20-T1, M2D20, M2D18 and M2D17 # @@ -26,8 +28,14 @@ # # Now warns if script is located on an M.2 volume. +# TODO +# Enable SMART Attributes button on Storage Manager +# disabled:e.healthInfoDisabled +# enabled:e.healthInfoDisabled +# /var/packages/StorageManager/target/ui/storage_panel.js + -scriptver="v3.4.84" +scriptver="v3.4.85" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -197,7 +205,7 @@ if [[ $( whoami ) != "root" ]]; then fi # Get DSM major version -dsm=$(get_key_value /etc.defaults/VERSION majorversion) +dsm=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION majorversion) if [[ $dsm -gt "6" ]]; then version="_v$dsm" fi @@ -212,10 +220,10 @@ modelname="$model" echo "$script $scriptver" # Get DSM full version -productversion=$(get_key_value /etc.defaults/VERSION productversion) -buildphase=$(get_key_value /etc.defaults/VERSION buildphase) -buildnumber=$(get_key_value /etc.defaults/VERSION buildnumber) -smallfixnumber=$(get_key_value /etc.defaults/VERSION smallfixnumber) +productversion=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION productversion) +buildphase=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION buildphase) +buildnumber=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION buildnumber) +smallfixnumber=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION smallfixnumber) # Show DSM full version and model if [[ $buildphase == GM ]]; then buildphase=""; fi @@ -237,12 +245,23 @@ elif [[ $model =~ '-j'$ ]]; then # GitHub issue #2 echo -e "\nUsing model: $model" fi - # Get StorageManager version -storagemgrver=$(synopkg version StorageManager) +storagemgrver=$(/usr/syno/bin/synopkg version StorageManager) # Show StorageManager version if [[ $storagemgrver ]]; then echo -e "StorageManager $storagemgrver\n"; fi +# Show host drive db version +if [[ -f "/var/lib/disk-compatibility/${model}_host_v7.version" ]]; then + echo -n "${model}_host_v7 version " + cat "/var/lib/disk-compatibility/${model}_host_v7.version" + echo -e "\n" +fi +if [[ -f "/var/lib/disk-compatibility/${model}_host.version" ]]; then + echo -n "${model}_host version " + cat "/var/lib/disk-compatibility/${model}_host.version" + echo -e "\n" +fi + # Show options used echo "Using options: ${args[*]}" @@ -257,7 +276,7 @@ syslog_set(){ if [[ ${1,,} == "info" ]] || [[ ${1,,} == "warn" ]] || [[ ${1,,} == "err" ]]; then if [[ $autoupdate == "yes" ]]; then # Add entry to Synology system log - synologset1 sys "$1" 0x11100000 "$2" + /usr/syno/bin/synologset1 sys "$1" 0x11100000 "$2" fi fi } @@ -526,10 +545,10 @@ if [[ $restore == "yes" ]]; then keyvalues=("support_disk_compatibility" "support_memory_compatibility") keyvalues+=("mem_max_mb" "supportnvme" "support_m2_pool" "support_wdda") for v in "${!keyvalues[@]}"; do - defaultval="$(get_key_value ${synoinfo}.bak "${keyvalues[v]}")" - currentval="$(get_key_value ${synoinfo} "${keyvalues[v]}")" + defaultval="$(/usr/syno/bin/get_key_value ${synoinfo}.bak "${keyvalues[v]}")" + currentval="$(/usr/syno/bin/get_key_value ${synoinfo} "${keyvalues[v]}")" if [[ $currentval != "$defaultval" ]]; then - if synosetkeyvalue "$synoinfo" "${keyvalues[v]}" "$defaultval"; + if /usr/syno/bin/synosetkeyvalue "$synoinfo" "${keyvalues[v]}" "$defaultval"; then echo "Restored ${keyvalues[v]} = $defaultval" fi @@ -560,8 +579,8 @@ if [[ $restore == "yes" ]]; then # Make sure they don't lose E10M20-T1 network connection modelrplowercase=${modelname//RP/rp} - set_section_key_value ${adapter_cards} E10M20-T1_sup_nic "$modelrplowercase" - set_section_key_value ${adapter_cards2} E10M20-T1_sup_nic "$modelrplowercase" + /usr/syno/bin/set_section_key_value ${adapter_cards} E10M20-T1_sup_nic "$modelrplowercase" + /usr/syno/bin/set_section_key_value ${adapter_cards2} E10M20-T1_sup_nic "$modelrplowercase" fi # Restore model.dtb from backup @@ -583,7 +602,7 @@ if [[ $restore == "yes" ]]; then fi # Restore storage_panel.js from backup - strgmgrver="$(synopkg version StorageManager)" + strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" if [[ -f "${strgmgr}.$strgmgrver" ]]; then if cp -p "${strgmgr}.$strgmgrver" "$strgmgr"; then echo "Restored $(basename -- "$strgmgr")" @@ -620,13 +639,13 @@ if [[ $restore == "yes" ]]; then done # Update .db files from Synology - syno_disk_db_update --update + /usr/syno/bin/syno_disk_db_update --update # Enable SynoMemCheck.service for DVA models if [[ ${model:0:3} == "dva" ]]; then memcheck="/usr/lib/systemd/system/SynoMemCheck.service" - if [[ $(synogetkeyvalue "$memcheck" ExecStart) == "/bin/true" ]]; then - synosetkeyvalue "$memcheck" ExecStart /usr/syno/bin/syno_mem_check + if [[ $(/usr/syno/bin/synogetkeyvalue "$memcheck" ExecStart) == "/bin/true" ]]; then + /usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart /usr/syno/bin/syno_mem_check fi fi @@ -676,7 +695,7 @@ vendor_from_id(){ # Get vendor from syno_hdd_vendor_ids.txt vidlist="$scriptpath/syno_hdd_vendor_ids.txt" if [[ -r "$vidlist" ]]; then - val=$(synogetkeyvalue "$vidlist" "$1") + val=$(/usr/syno/bin/synogetkeyvalue "$vidlist" "$1") if [[ -n "$val" ]]; then vendor="$val" else @@ -697,8 +716,8 @@ set_vendor(){ # DS1817+, DS1517+, RS1219+, RS818+ don't have pci_vendor_ids.conf if [[ "$vidfile" ]]; then if ! grep "$vid" "$vidfile" >/dev/null; then - synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" - val=$(synogetkeyvalue "$vidfile" "${vid,,}") + /usr/syno/bin/synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" + val=$(/usr/syno/bin/synogetkeyvalue "$vidfile" "${vid,,}") if [[ $val == "${vendor}" ]]; then echo -e "\nAdded $vendor to pci_vendor_ids" >&2 else @@ -706,7 +725,7 @@ set_vendor(){ fi fi if ! grep "$vid" "$vidfile2" >/dev/null; then - synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" + /usr/syno/bin/synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" fi fi fi @@ -717,7 +736,7 @@ get_vid(){ if [[ $1 ]]; then vid=$(nvme id-ctrl "$1" | grep -E ^vid | awk '{print $NF}') if [[ $vid ]]; then - val=$(synogetkeyvalue "$vidfile" "${vid,,}") + val=$(/usr/syno/bin/synogetkeyvalue "$vidfile" "${vid,,}") if [[ -z $val ]]; then vendor_from_id "$vid" && set_vendor fi @@ -767,9 +786,9 @@ getdriveinfo(){ #fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space device="/dev/$(basename -- "$1")" - #fwrev=$(syno_hdd_util --ssd_detect | grep "$device " | awk '{print $2}') # GitHub issue #86, 87 + #fwrev=$(/usr/syno/bin/syno_hdd_util --ssd_detect | grep "$device " | awk '{print $2}') # GitHub issue #86, 87 # Account for SSD drives with spaces in their model name/number - fwrev=$(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 if [[ $hdmodel ]] && [[ $fwrev ]]; then hdlist+=("${hdmodel},${fwrev}") @@ -797,7 +816,7 @@ getcardmodel(){ # Get M.2 card model (if M.2 drives found) # $1 is /dev/nvme0n1 etc if [[ ${#nvmelist[@]} -gt "0" ]]; then - cardmodel=$(synodisk --m2-card-model-get "$1") + cardmodel=$(/usr/syno/bin/synodisk --m2-card-model-get "$1") if [[ $cardmodel =~ M2D[0-9][0-9] ]]; then # M2 adaptor card if [[ -f "${model}_${cardmodel,,}${version}.db" ]]; then @@ -960,7 +979,7 @@ fi # Expansion units # Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log # Otherwise the new /var/log/diskprediction log is only created a midnight. -syno_disk_data_collector record +/usr/syno/bin/syno_disk_data_collector record # Get list of connected expansion units (aka eunit/ebox) path="/var/log/diskprediction" @@ -1102,7 +1121,7 @@ editdb7(){ elif [[ $1 == "insert" ]]; then # model and default exists #if sed -i "s/\"$hdmodel\":{/\"$hdmodel\":{$fwstrng/" "$2"; then # insert firmware if sed -i "s/\"${hdmodel//\//\\/}\":{/\"${hdmodel//\//\\/}\":{$fwstrng/" "$2"; then # insert firmware - echo -e "Updated ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" + echo -e "Updated ${Yellow}$hdmodel${Off} in ${Cyan}$(basename -- "$2")${Off}" #editcount "$2" else echo -e "\n${Error}ERROR 6b${Off} Failed to update $(basename -- "$2")${Off}" @@ -1296,12 +1315,12 @@ enable_card(){ # So we'll convert RP to rp when needed. # modelrplowercase=${modelname//RP/rp} - val=$(get_section_key_value "$1" "$2" "$modelrplowercase") + val=$(/usr/syno/bin/get_section_key_value "$1" "$2" "$modelrplowercase") if [[ $val != "yes" ]]; then # /usr/syno/etc.defaults/adapter_cards.conf - if set_section_key_value "$1" "$2" "$modelrplowercase" yes; then + if /usr/syno/bin/set_section_key_value "$1" "$2" "$modelrplowercase" yes; then # /usr/syno/etc/adapter_cards.conf - set_section_key_value "$adapter_cards2" "$2" "$modelrplowercase" yes + /usr/syno/bin/set_section_key_value "$adapter_cards2" "$2" "$modelrplowercase" yes echo -e "Enabled ${Yellow}$3${Off} for ${Cyan}$modelname${Off}" >&2 rebootmsg=yes else @@ -1558,12 +1577,12 @@ backupdb "$synoinfo" ||{ # Optionally disable "support_disk_compatibility" sdc=support_disk_compatibility -setting="$(get_key_value $synoinfo $sdc)" +setting="$(/usr/syno/bin/get_key_value $synoinfo $sdc)" if [[ $force == "yes" ]]; then if [[ $setting == "yes" ]]; then # Disable support_disk_compatibility - synosetkeyvalue "$synoinfo" "$sdc" "no" - setting="$(get_key_value "$synoinfo" $sdc)" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$sdc" "no" + setting="$(/usr/syno/bin/get_key_value "$synoinfo" $sdc)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support disk compatibility." fi @@ -1573,8 +1592,8 @@ if [[ $force == "yes" ]]; then else if [[ $setting == "no" ]]; then # Enable support_disk_compatibility - synosetkeyvalue "$synoinfo" "$sdc" "yes" - setting="$(get_key_value "$synoinfo" $sdc)" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$sdc" "yes" + setting="$(/usr/syno/bin/get_key_value "$synoinfo" $sdc)" if [[ $setting == "yes" ]]; then echo -e "\nRe-enabled support disk compatibility." fi @@ -1587,12 +1606,12 @@ fi # Optionally disable "support_memory_compatibility" (not for DVA models) if [[ ${model:0:3} != "dva" ]]; then smc=support_memory_compatibility - setting="$(get_key_value $synoinfo $smc)" + setting="$(/usr/syno/bin/get_key_value $synoinfo $smc)" if [[ $ram == "yes" ]]; then if [[ $setting == "yes" ]]; then # Disable support_memory_compatibility - synosetkeyvalue "$synoinfo" "$smc" "no" - setting="$(get_key_value "$synoinfo" $smc)" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$smc" "no" + setting="$(/usr/syno/bin/get_key_value "$synoinfo" $smc)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support memory compatibility." fi @@ -1602,8 +1621,8 @@ if [[ ${model:0:3} != "dva" ]]; then else if [[ $setting == "no" ]]; then # Enable support_memory_compatibility - synosetkeyvalue "$synoinfo" "$smc" "yes" - setting="$(get_key_value "$synoinfo" $smc)" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$smc" "yes" + setting="$(/usr/syno/bin/get_key_value "$synoinfo" $smc)" if [[ $setting == "yes" ]]; then echo -e "\nRe-enabled support memory compatibility." fi @@ -1616,14 +1635,14 @@ fi # Disable SynoMemCheck.service for DVA models if [[ ${model:0:3} == "dva" ]]; then memcheck="/usr/lib/systemd/system/SynoMemCheck.service" - if [[ $(synogetkeyvalue "$memcheck" ExecStart) == "/usr/syno/bin/syno_mem_check" ]]; then - synosetkeyvalue "$memcheck" ExecStart /bin/true + if [[ $(/usr/syno/bin/synogetkeyvalue "$memcheck" ExecStart) == "/usr/syno/bin/syno_mem_check" ]]; then + /usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart /bin/true fi fi # Optionally set mem_max_mb to the amount of installed memory if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo - if [[ $ram == "yes" ]]; then + if [[ $ram == "yes" ]] && [[ -f /usr/sbin/dmidecode ]]; then # Get total amount of installed memory #IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory | grep "[Ss]ize") # GitHub issue #86, 87 IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory |\ @@ -1650,13 +1669,13 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo done fi # Set mem_max_mb to the amount of installed memory - setting="$(get_key_value $synoinfo mem_max_mb)" - settingbak="$(get_key_value ${synoinfo}.bak mem_max_mb)" # GitHub issue #107 + setting="$(/usr/syno/bin/get_key_value $synoinfo mem_max_mb)" + settingbak="$(/usr/syno/bin/get_key_value ${synoinfo}.bak mem_max_mb)" # GitHub issue #107 if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric if [[ $ramtotal -gt "$setting" ]]; then - synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" + /usr/syno/bin/synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" # Check we changed mem_max_mb - setting="$(get_key_value $synoinfo mem_max_mb)" + setting="$(/usr/syno/bin/get_key_value $synoinfo mem_max_mb)" if [[ $ramtotal == "$setting" ]]; then #echo -e "\nSet max memory to $ramtotal MB." ramgb=$((ramtotal / 1024)) @@ -1668,9 +1687,9 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo elif [[ $setting -gt "$ramtotal" ]] && [[ $setting -gt "$settingbak" ]]; # GitHub issue #107 then # Fix setting is greater than both ramtotal and default in syninfo.conf.bak - synosetkeyvalue "$synoinfo" mem_max_mb "$settingbak" + /usr/syno/bin/synosetkeyvalue "$synoinfo" mem_max_mb "$settingbak" # Check we restored mem_max_mb - setting="$(get_key_value $synoinfo mem_max_mb)" + setting="$(/usr/syno/bin/get_key_value $synoinfo mem_max_mb)" if [[ $settingbak == "$setting" ]]; then #echo -e "\nSet max memory to $ramtotal MB." ramgb=$((ramtotal / 1024)) @@ -1699,22 +1718,22 @@ fi if ls /dev | grep nvme >/dev/null ; then if [[ $m2 != "no" ]]; then # Check if nvme support is enabled - setting="$(get_key_value $synoinfo supportnvme)" + setting="$(/usr/syno/bin/get_key_value $synoinfo supportnvme)" enabled="" if [[ ! $setting ]]; then # Add supportnvme="yes" - synosetkeyvalue "$synoinfo" supportnvme "yes" + /usr/syno/bin/synosetkeyvalue "$synoinfo" supportnvme "yes" enabled="yes" elif [[ $setting == "no" ]]; then # Change supportnvme="no" to "yes" - synosetkeyvalue "$synoinfo" supportnvme "yes" + /usr/syno/bin/synosetkeyvalue "$synoinfo" supportnvme "yes" enabled="yes" elif [[ $setting == "yes" ]]; then echo -e "\nNVMe support already enabled." fi # Check if we enabled nvme support - setting="$(get_key_value $synoinfo supportnvme)" + setting="$(/usr/syno/bin/get_key_value $synoinfo supportnvme)" if [[ $enabled == "yes" ]]; then if [[ $setting == "yes" ]]; then echo -e "\nEnabled NVMe support." @@ -1732,23 +1751,23 @@ if ls /dev | grep nv[em] >/dev/null ; then if [[ $m2exists == "yes" ]]; then # Check if m2 volume support is enabled smp=support_m2_pool - setting="$(get_key_value $synoinfo ${smp})" + setting="$(/usr/syno/bin/get_key_value $synoinfo ${smp})" enabled="" if [[ ! $setting ]]; then # Add support_m2_pool="yes" #echo 'support_m2_pool="yes"' >> "$synoinfo" - synosetkeyvalue "$synoinfo" "$smp" "yes" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$smp" "yes" enabled="yes" elif [[ $setting == "no" ]]; then # Change support_m2_pool="no" to "yes" - synosetkeyvalue "$synoinfo" "$smp" "yes" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$smp" "yes" 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})" + setting="$(/usr/syno/bin/get_key_value $synoinfo ${smp})" if [[ $enabled == "yes" ]]; then if [[ $setting == "yes" ]]; then echo -e "\nEnabled M.2 volume support." @@ -1763,22 +1782,22 @@ fi # Edit synoinfo.conf to prevent drive db updates dtu=drive_db_test_url -url="$(get_key_value $synoinfo ${dtu})" +url="$(/usr/syno/bin/get_key_value $synoinfo ${dtu})" disabled="" if [[ $nodbupdate == "yes" ]]; then if [[ ! $url ]]; then # Add drive_db_test_url="127.0.0.1" #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" - synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" disabled="yes" elif [[ $url != "127.0.0.1" ]]; then # Edit drive_db_test_url= - synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$dtu" "127.0.0.1" disabled="yes" fi # Check if we disabled drive db auto updates - url="$(get_key_value $synoinfo drive_db_test_url)" + url="$(/usr/syno/bin/get_key_value $synoinfo drive_db_test_url)" if [[ $disabled == "yes" ]]; then if [[ $url == "127.0.0.1" ]]; then echo -e "\nDisabled drive db auto updates." @@ -1797,7 +1816,7 @@ else sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf # Check if we re-enabled drive db auto updates - url="$(get_key_value $synoinfo drive_db_test_url)" + url="$(/usr/syno/bin/get_key_value $synoinfo drive_db_test_url)" if [[ $url != "127.0.0.1" ]]; then echo -e "\nRe-enabled drive db auto updates." else @@ -1810,12 +1829,12 @@ fi # Optionally disable "support_wdda" -setting="$(get_key_value $synoinfo support_wdda)" +setting="$(/usr/syno/bin/get_key_value $synoinfo support_wdda)" if [[ $wdda == "no" ]]; then if [[ $setting == "yes" ]]; then # Disable support_wdda - synosetkeyvalue "$synoinfo" support_wdda "no" - setting="$(get_key_value "$synoinfo" support_wdda)" + /usr/syno/bin/synosetkeyvalue "$synoinfo" support_wdda "no" + setting="$(/usr/syno/bin/get_key_value "$synoinfo" support_wdda)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support WDDA." fi From c428f598fb6aa5dbb39a30f6cdc9c3b02f04097e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Feb 2024 12:21:55 +1100 Subject: [PATCH 378/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 1b1fca2..37186b9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.4.85 +- Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). + v3.4.84 - Bug fix when script updates itself and user ran the script from ./scriptname.sh From 161120c3926af2524e21508a250b002333696ec0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:21:30 +1100 Subject: [PATCH 379/694] Update syno_hdd_db.sh - Bug fix for get_key_value not being in /usr/syno/bin - Changed to use synogetkeyvalue --- syno_hdd_db.sh | 56 +++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index ab44dea..f390961 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -14,7 +14,7 @@ # or # sudo -i /volume1/scripts/syno_hdd_db.sh -force -showedits #-------------------------------------------------------------------------------------------------- - + # CHANGES # Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). # @@ -35,7 +35,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.4.85" +scriptver="v3.4.86" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -205,7 +205,7 @@ if [[ $( whoami ) != "root" ]]; then fi # Get DSM major version -dsm=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION majorversion) +dsm=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION majorversion) if [[ $dsm -gt "6" ]]; then version="_v$dsm" fi @@ -220,10 +220,10 @@ modelname="$model" echo "$script $scriptver" # Get DSM full version -productversion=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION productversion) -buildphase=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION buildphase) -buildnumber=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION buildnumber) -smallfixnumber=$(/usr/syno/bin/get_key_value /etc.defaults/VERSION smallfixnumber) +productversion=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION productversion) +buildphase=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION buildphase) +buildnumber=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION buildnumber) +smallfixnumber=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION smallfixnumber) # Show DSM full version and model if [[ $buildphase == GM ]]; then buildphase=""; fi @@ -545,8 +545,8 @@ if [[ $restore == "yes" ]]; then keyvalues=("support_disk_compatibility" "support_memory_compatibility") keyvalues+=("mem_max_mb" "supportnvme" "support_m2_pool" "support_wdda") for v in "${!keyvalues[@]}"; do - defaultval="$(/usr/syno/bin/get_key_value ${synoinfo}.bak "${keyvalues[v]}")" - currentval="$(/usr/syno/bin/get_key_value ${synoinfo} "${keyvalues[v]}")" + defaultval="$(/usr/syno/bin/synogetkeyvalue ${synoinfo}.bak "${keyvalues[v]}")" + currentval="$(/usr/syno/bin/synogetkeyvalue ${synoinfo} "${keyvalues[v]}")" if [[ $currentval != "$defaultval" ]]; then if /usr/syno/bin/synosetkeyvalue "$synoinfo" "${keyvalues[v]}" "$defaultval"; then @@ -1577,12 +1577,12 @@ backupdb "$synoinfo" ||{ # Optionally disable "support_disk_compatibility" sdc=support_disk_compatibility -setting="$(/usr/syno/bin/get_key_value $synoinfo $sdc)" +setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo $sdc)" if [[ $force == "yes" ]]; then if [[ $setting == "yes" ]]; then # Disable support_disk_compatibility /usr/syno/bin/synosetkeyvalue "$synoinfo" "$sdc" "no" - setting="$(/usr/syno/bin/get_key_value "$synoinfo" $sdc)" + setting="$(/usr/syno/bin/synogetkeyvalue "$synoinfo" $sdc)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support disk compatibility." fi @@ -1593,7 +1593,7 @@ else if [[ $setting == "no" ]]; then # Enable support_disk_compatibility /usr/syno/bin/synosetkeyvalue "$synoinfo" "$sdc" "yes" - setting="$(/usr/syno/bin/get_key_value "$synoinfo" $sdc)" + setting="$(/usr/syno/bin/synogetkeyvalue "$synoinfo" $sdc)" if [[ $setting == "yes" ]]; then echo -e "\nRe-enabled support disk compatibility." fi @@ -1606,12 +1606,12 @@ fi # Optionally disable "support_memory_compatibility" (not for DVA models) if [[ ${model:0:3} != "dva" ]]; then smc=support_memory_compatibility - setting="$(/usr/syno/bin/get_key_value $synoinfo $smc)" + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo $smc)" if [[ $ram == "yes" ]]; then if [[ $setting == "yes" ]]; then # Disable support_memory_compatibility /usr/syno/bin/synosetkeyvalue "$synoinfo" "$smc" "no" - setting="$(/usr/syno/bin/get_key_value "$synoinfo" $smc)" + setting="$(/usr/syno/bin/synogetkeyvalue "$synoinfo" $smc)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support memory compatibility." fi @@ -1622,7 +1622,7 @@ if [[ ${model:0:3} != "dva" ]]; then if [[ $setting == "no" ]]; then # Enable support_memory_compatibility /usr/syno/bin/synosetkeyvalue "$synoinfo" "$smc" "yes" - setting="$(/usr/syno/bin/get_key_value "$synoinfo" $smc)" + setting="$(/usr/syno/bin/synogetkeyvalue "$synoinfo" $smc)" if [[ $setting == "yes" ]]; then echo -e "\nRe-enabled support memory compatibility." fi @@ -1669,13 +1669,13 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo done fi # Set mem_max_mb to the amount of installed memory - setting="$(/usr/syno/bin/get_key_value $synoinfo mem_max_mb)" - settingbak="$(/usr/syno/bin/get_key_value ${synoinfo}.bak mem_max_mb)" # GitHub issue #107 + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo mem_max_mb)" + settingbak="$(/usr/syno/bin/synogetkeyvalue ${synoinfo}.bak mem_max_mb)" # GitHub issue #107 if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric if [[ $ramtotal -gt "$setting" ]]; then /usr/syno/bin/synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" # Check we changed mem_max_mb - setting="$(/usr/syno/bin/get_key_value $synoinfo mem_max_mb)" + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo mem_max_mb)" if [[ $ramtotal == "$setting" ]]; then #echo -e "\nSet max memory to $ramtotal MB." ramgb=$((ramtotal / 1024)) @@ -1689,7 +1689,7 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo # Fix setting is greater than both ramtotal and default in syninfo.conf.bak /usr/syno/bin/synosetkeyvalue "$synoinfo" mem_max_mb "$settingbak" # Check we restored mem_max_mb - setting="$(/usr/syno/bin/get_key_value $synoinfo mem_max_mb)" + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo mem_max_mb)" if [[ $settingbak == "$setting" ]]; then #echo -e "\nSet max memory to $ramtotal MB." ramgb=$((ramtotal / 1024)) @@ -1718,7 +1718,7 @@ fi if ls /dev | grep nvme >/dev/null ; then if [[ $m2 != "no" ]]; then # Check if nvme support is enabled - setting="$(/usr/syno/bin/get_key_value $synoinfo supportnvme)" + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo supportnvme)" enabled="" if [[ ! $setting ]]; then # Add supportnvme="yes" @@ -1733,7 +1733,7 @@ if ls /dev | grep nvme >/dev/null ; then fi # Check if we enabled nvme support - setting="$(/usr/syno/bin/get_key_value $synoinfo supportnvme)" + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo supportnvme)" if [[ $enabled == "yes" ]]; then if [[ $setting == "yes" ]]; then echo -e "\nEnabled NVMe support." @@ -1751,7 +1751,7 @@ if ls /dev | grep nv[em] >/dev/null ; then if [[ $m2exists == "yes" ]]; then # Check if m2 volume support is enabled smp=support_m2_pool - setting="$(/usr/syno/bin/get_key_value $synoinfo ${smp})" + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo ${smp})" enabled="" if [[ ! $setting ]]; then # Add support_m2_pool="yes" @@ -1767,7 +1767,7 @@ if ls /dev | grep nv[em] >/dev/null ; then fi # Check if we enabled m2 volume support - setting="$(/usr/syno/bin/get_key_value $synoinfo ${smp})" + setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo ${smp})" if [[ $enabled == "yes" ]]; then if [[ $setting == "yes" ]]; then echo -e "\nEnabled M.2 volume support." @@ -1782,7 +1782,7 @@ fi # Edit synoinfo.conf to prevent drive db updates dtu=drive_db_test_url -url="$(/usr/syno/bin/get_key_value $synoinfo ${dtu})" +url="$(/usr/syno/bin/synogetkeyvalue $synoinfo ${dtu})" disabled="" if [[ $nodbupdate == "yes" ]]; then if [[ ! $url ]]; then @@ -1797,7 +1797,7 @@ if [[ $nodbupdate == "yes" ]]; then fi # Check if we disabled drive db auto updates - url="$(/usr/syno/bin/get_key_value $synoinfo drive_db_test_url)" + url="$(/usr/syno/bin/synogetkeyvalue $synoinfo drive_db_test_url)" if [[ $disabled == "yes" ]]; then if [[ $url == "127.0.0.1" ]]; then echo -e "\nDisabled drive db auto updates." @@ -1816,7 +1816,7 @@ else sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf # Check if we re-enabled drive db auto updates - url="$(/usr/syno/bin/get_key_value $synoinfo drive_db_test_url)" + url="$(/usr/syno/bin/synogetkeyvalue $synoinfo drive_db_test_url)" if [[ $url != "127.0.0.1" ]]; then echo -e "\nRe-enabled drive db auto updates." else @@ -1829,12 +1829,12 @@ fi # Optionally disable "support_wdda" -setting="$(/usr/syno/bin/get_key_value $synoinfo support_wdda)" +setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo support_wdda)" if [[ $wdda == "no" ]]; then if [[ $setting == "yes" ]]; then # Disable support_wdda /usr/syno/bin/synosetkeyvalue "$synoinfo" support_wdda "no" - setting="$(/usr/syno/bin/get_key_value "$synoinfo" support_wdda)" + setting="$(/usr/syno/bin/synogetkeyvalue "$synoinfo" support_wdda)" if [[ $setting == "no" ]]; then echo -e "\nDisabled support WDDA." fi From 1a5f704807d110d9f8398f0b2be75d024607df27 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:22:30 +1100 Subject: [PATCH 380/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 37186b9..9788a83 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.4.86 +- Bug fix for get_key_value not being in /usr/syno/bin (changed to use synogetkeyvalue). + v3.4.85 - Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). From c3e02fe77179e57ba8e379c9c5db4262a51f9e4d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:25:43 +1100 Subject: [PATCH 381/694] Update CHANGES.txt --- CHANGES.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 9788a83..c7cf3ff 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,8 +1,5 @@ v3.4.86 -- Bug fix for get_key_value not being in /usr/syno/bin (changed to use synogetkeyvalue). - -v3.4.85 -- Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). +- Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). #249 v3.4.84 - Bug fix when script updates itself and user ran the script from ./scriptname.sh From 99f5174ca1c44efa481ab023022132658d8a42e4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Feb 2024 15:06:17 +1100 Subject: [PATCH 382/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e02dd92..589c725 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Lorenz Schmid | enil-kil | Xaver Zöllner | +| Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | From 23b12410538bbd0106bdf9ed35dced11a960c7f9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 6 Mar 2024 20:38:12 +1100 Subject: [PATCH 383/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 589c725..a1b8c8a 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | From 175b7e33546e87c8fad177a87b6e4e2bdf4199f0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 7 Mar 2024 06:09:10 +1100 Subject: [PATCH 384/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1b8c8a..055da80 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Alex Joyce | +| | | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | From ca09ca725a17b103e7b5bd7089706d8500bbe9d5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 7 Mar 2024 11:26:21 +1100 Subject: [PATCH 385/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index f390961..e8f1e1a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -264,7 +264,9 @@ fi # Show options used -echo "Using options: ${args[*]}" +if [[ ${#args[@]} -gt "0" ]]; then + echo "Using options: ${args[*]}" +fi #echo "" # To keep output readable @@ -1154,6 +1156,7 @@ updatedb(){ getdbtype "$2" if [[ $dbtype -gt "6" ]]; then + # db type 7 used from DSM 7.1 and later if grep "$hdmodel"'":{"'"$fwrev" "$2" >/dev/null; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 else @@ -1203,6 +1206,7 @@ updatedb(){ fi fi elif [[ $dbtype -eq "6" ]]; then + # db type 6 used up to DSM 7.0.1 if grep "$hdmodel" "$2" >/dev/null; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 else From 95e37b4967edafda5e05e8d90f71caa67a790ae2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:07:45 +1100 Subject: [PATCH 386/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 055da80..acfeeae 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Patrick Hoekstra | Alex Joyce | +| | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | From 8f9351f4d8475827f8eae4b5f74a5a6d71af4a1a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 15 Mar 2024 21:00:22 +1100 Subject: [PATCH 387/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index acfeeae..4c11c62 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Nico Scherer | Patrick Hoekstra | Alex Joyce | +| | | | Alexander Gundermann | +| Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | From 0b624981541822d9d71a44989ad68cfd4e6382dc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:45:21 +1100 Subject: [PATCH 388/694] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4c11c62..5f1c369 100644 --- a/README.md +++ b/README.md @@ -148,10 +148,10 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Alexander Gundermann | +| | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | -| Jan Bublitz | Darren O Connor | Charles Young | J Davis | +| Jan Bublitz | Darren O'Connor | Charles Young | J Davis | | Jürg Baiker | Joshua Gillispie | bizIT Hirschberg | Jordan Crawford | | Tyler Teal | Voluntary Commerce LLC | Ez Hosting | Alec Wilhere | | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | From f584404b6491ca4a4743ac143c65d7a7d5553225 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:46:48 +1100 Subject: [PATCH 389/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f1c369..59acbf9 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ ### Donators | Reece Lyne | Enric Escudé Santana | Yunhao Zhang | Matthias Gerhardt | | Darryl Harper | Mikescher | Matthias Pfaff | cpharada | | Neil Tapp | zen1605 | Kleissner Investments | Angel Scandinavia | -| bcollins | Peter jackson | Mir Hekmat | Andrew Tapp | +| B Collins | Peter jackson | Mir Hekmat | Andrew Tapp | | Peter Weißflog | Joseph Skup | Dirk Kurfuerst | Gareth Locke | | Rory de Ruijter | Nathan O'Farrell | Harry Bos | Mark-Philipp Wolfger | | Filip Kraus | John Pham | Alejandro Bribian Rix | Daniel Hofer | From d50a8c9c55d73266bf776794f1efc7f1aa7a5d18 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:20:59 +1100 Subject: [PATCH 390/694] Update my-other-scripts.md --- my-other-scripts.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index 25e5457..96cb2e9 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -29,6 +29,9 @@ ### Synology scripts - **Synology_app_mover** - Easily move Synology packages from one volume to another volume. +- **Synology_docker_cleanup** + - Remove orphan docker btrfs subvolumes and images in Synology DSM 7 and DSM 6. + - **Synology_enable_M2_card** - Enable Synology M.2 PCIe cards in Synology NAS that don't officially support them. @@ -39,7 +42,7 @@ ### Synology scripts - Enable deduplication with non-Synology SSDs and unsupported NAS models. - **Synology_SHR_switch** - - Easily switch between SHR and RAID Groups, or enable RAID-F1. + - Easily switch between SHR and RAID Group, or enable RAID F1. - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. From 6b3db792c446c763a1a3058e949ac2e022b26310 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:27:32 +1100 Subject: [PATCH 391/694] Update my-other-scripts.md --- my-other-scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index 96cb2e9..283ee22 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -42,7 +42,7 @@ ### Synology scripts - Enable deduplication with non-Synology SSDs and unsupported NAS models. - **Synology_SHR_switch** - - Easily switch between SHR and RAID Group, or enable RAID F1. + - Easily switch between SHR and RAID Groups, or enable RAID F1. - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. From 0a23b8cda20fb6df1ba9e944af0b4ab695c035b6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:36:28 +1100 Subject: [PATCH 392/694] Update my-other-scripts.md From 4c4654b482c45784076a18ffd4178a53d247370b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 27 Mar 2024 11:28:26 +1100 Subject: [PATCH 393/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 59acbf9..242823f 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ #### What the script does: * Backs up the database files if there is no backup already. * Checks if each drive is already in the Synology's compatible-drive database. * Adds any missing drives to the Synology's compatible-drive database. -* Prevents DSM auto updating the drive database. +* Optionally prevents DSM auto updating the drive database. * Optionally disable DSM's "support_disk_compatibility". * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. From cd102c62f627247e6de7c4a4c25da037101da4eb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:43:22 +1100 Subject: [PATCH 394/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 242823f..ac99d32 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | +| Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O'Connor | Charles Young | J Davis | From 5f519eed3190a561eb07e041bc2001ef10bfc629 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Fri, 29 Mar 2024 19:05:02 +1100 Subject: [PATCH 395/694] Update my-other-scripts.md --- my-other-scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index 283ee22..622b050 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -17,7 +17,7 @@ ### Plex scripts ### Synology scripts - **Synology_HDD_db** - - Add your HDD, SSD and NVMe drives to your Synology's compatible drive database. + - Add your SATA or SAS HDDs and SSDs plus SATA and NVMe M.2 drives to your Synology's compatible drive databases, including your Synology M.2 PCIe card and Expansion Unit databases. - **Synology_enable_M2_volume** - Enable creating volumes with non-Synology M.2 drives. From d23ca4eb48064adb74e13038a6c8fbc45b30c08c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 1 Apr 2024 05:44:39 +1100 Subject: [PATCH 396/694] Update syno_hdd_db.sh - Fix Invalid json format syslog output #270 --- syno_hdd_db.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e8f1e1a..02afe31 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -35,7 +35,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.4.86" +scriptver="v3.4.87" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -271,6 +271,16 @@ fi #echo "" # To keep output readable +# shellcheck disable=SC2317 # Don't warn about unreachable commands in this function +pause(){ + # When debugging insert pause command where needed + read -s -r -n 1 -p "Press any key to continue..." + read -r -t 0.1 -s -e -- # Silently consume all input + stty echo echok # Ensure read didn't disable echoing user input + echo -e "\n" +} + + #------------------------------------------------------------------------------ # Check latest release with GitHub API @@ -1040,6 +1050,7 @@ fi getdbtype(){ # Detect drive db type + # Synology misspelt compatibility as compatbility if grep -F '{"disk_compatbility_info":' "$1" >/dev/null; then # DSM 7 drive db files start with {"disk_compatbility_info": dbtype=7 @@ -1132,7 +1143,8 @@ editdb7(){ elif [[ $1 == "empty" ]]; then # db file only contains {} #if sed -i "s/{}/{\"$hdmodel\":{$fwstrng${default}}/" "$2"; then # empty - if sed -i "s/{}/{\"${hdmodel//\//\\/}\":{$fwstrng${default}}/" "$2"; then # empty + #if sed -i "s/{}/{\"${hdmodel//\//\\/}\":{$fwstrng${default}}/" "$2"; then # empty + if sed -i "s/{}/{\"${hdmodel//\//\\/}\":{$fwstrng${default}/" "$2"; then # empty echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" editcount "$2" else @@ -1170,6 +1182,7 @@ updatedb(){ default="$default":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true, default="$default"\"smart_test_ignore\":false,\"smart_attr_ignore\":false}]}}} + # Synology misspelt compatibility as compatbility if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then # Replace "disk_compatbility_info":{} with # "disk_compatbility_info":{"WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}}} @@ -1645,7 +1658,7 @@ if [[ ${model:0:3} == "dva" ]]; then fi # Optionally set mem_max_mb to the amount of installed memory -if [[ $dsm -gt "6" ]]; then # DSM 6 as has no /proc/meminfo +if [[ $dsm -gt "6" ]]; then # DSM 6 as has no dmidecode if [[ $ram == "yes" ]] && [[ -f /usr/sbin/dmidecode ]]; then # Get total amount of installed memory #IFS=$'\n' read -r -d '' -a array < <(dmidecode -t memory | grep "[Ss]ize") # GitHub issue #86, 87 From 63518c6c04ab66ceaadf29cf94d1f7fd21ffbc2d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 1 Apr 2024 05:45:09 +1100 Subject: [PATCH 397/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index c7cf3ff..4af6356 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.4.87 +- Fix Invalid json format syslog output #270 + v3.4.86 - Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). #249 From d97cb2fb14953f8be9e4998e4c59661aa49f4264 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:19:34 +1100 Subject: [PATCH 398/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 4af6356..14b8151 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.88 +- Changed how memory compatibility is disabled for older models. Issue #272 + v3.4.87 - Fix Invalid json format syslog output #270 From 48a65a9866fdc4be72a7e5c11475c2d96e719b64 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:37:15 +1100 Subject: [PATCH 399/694] Update syno_hdd_db.sh Changed how memory compatibility is disabled for older models. Issue #272 --- syno_hdd_db.sh | 50 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 02afe31..66def20 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -16,6 +16,8 @@ #-------------------------------------------------------------------------------------------------- # CHANGES +# Changed disabling memory compatibility for older models. Issue #272 +# # Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). # # Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. @@ -35,7 +37,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.4.87" +scriptver="v3.5.88" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1620,10 +1622,40 @@ else fi -# Optionally disable "support_memory_compatibility" (not for DVA models) -if [[ ${model:0:3} != "dva" ]]; then - smc=support_memory_compatibility - setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo $smc)" +# Optionally disable memory compatibility warnings +smc=support_memory_compatibility +setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo $smc)" +settingbak="$(/usr/syno/bin/synogetkeyvalue $synoinfo.bak $smc)" + +if [[ -z $settingbak ]] || [[ -z $setting ]]; then + # For older models that don't use "support_memory_compatibility" + memcheck="/usr/lib/systemd/system/SynoMemCheck.service" + memcheck_value="$(/usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart)" + if [[ $ram == "yes" ]]; then + if [[ $memcheck_value == "/usr/syno/bin/syno_mem_check" ]]; then + # Disable SynoMemCheck.service + /usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart /bin/true + memcheck_value="$(/usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart)" + if [[ $memcheck_value == "/bin/true" ]]; then + echo -e "\nDisabled SynoMemCheck memory compatibility." + fi + elif [[ $memcheck_value == "/bin/true" ]]; then + echo -e "\nSynoMemCheck memory compatibility already disabled." + fi + else + if [[ $memcheck_value == "/bin/true" ]]; then + # Enable SynoMemCheck.service + /usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart /usr/syno/bin/syno_mem_check + memcheck_value="$(/usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart)" + if [[ $memcheck_value == "/usr/syno/bin/syno_mem_check" ]]; then + echo -e "\nRe-enabled SynoMemCheck memory compatibility." + fi + elif [[ $memcheck_value == "/usr/syno/bin/syno_mem_check" ]]; then + echo -e "\nSynoMemCheck memory compatibility already enabled." + fi + fi +else + # Disable "support_memory_compatibility" (not for older models) if [[ $ram == "yes" ]]; then if [[ $setting == "yes" ]]; then # Disable support_memory_compatibility @@ -1649,14 +1681,6 @@ if [[ ${model:0:3} != "dva" ]]; then fi fi -# Disable SynoMemCheck.service for DVA models -if [[ ${model:0:3} == "dva" ]]; then - memcheck="/usr/lib/systemd/system/SynoMemCheck.service" - if [[ $(/usr/syno/bin/synogetkeyvalue "$memcheck" ExecStart) == "/usr/syno/bin/syno_mem_check" ]]; then - /usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart /bin/true - fi -fi - # Optionally set mem_max_mb to the amount of installed memory if [[ $dsm -gt "6" ]]; then # DSM 6 as has no dmidecode if [[ $ram == "yes" ]] && [[ -f /usr/sbin/dmidecode ]]; then From 39d3362a66505da34b4d2790682f346dbb46ba75 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:38:11 +1100 Subject: [PATCH 400/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 4af6356..14b8151 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.88 +- Changed how memory compatibility is disabled for older models. Issue #272 + v3.4.87 - Fix Invalid json format syslog output #270 From f1930a17d3e58e0ff0c332ded22a82ebd023337a Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Apr 2024 19:39:33 +1100 Subject: [PATCH 401/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 622b050..af99c71 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -47,6 +47,9 @@ ### Synology scripts - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. +- **ContainerManager_for_all_armv8** + - Script to install Container Manager on a RS819, DS119j, DS418, DS418j, DS218, DS218play or DS118. + - **Synology_DSM_reinstall** - Easily re-install the same DSM version without losing any data or settings. From 1f36ad7b1de1e639097bbd89532c45b5c9b3f22d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:07:53 +1000 Subject: [PATCH 402/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ac99d32..682cb36 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | +| | | | Simon Azzouni | +| Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | | Jan Bublitz | Darren O'Connor | Charles Young | J Davis | From 9be9309c479d79400a3f8abf73f51062e8c25960 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:11:33 +1000 Subject: [PATCH 403/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 14b8151..6e1a70e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.89 +- Bug fix for -s, --showedits option for multiple of the same drive model but with different firmware versions. Issue #276 + v3.5.88 - Changed how memory compatibility is disabled for older models. Issue #272 From 80cb80fad590ed55f67bba5e8f4e9f4434affc12 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:12:44 +1000 Subject: [PATCH 404/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 6e1a70e..7ef16a1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.5.89 -- Bug fix for -s, --showedits option for multiple of the same drive model but with different firmware versions. Issue #276 +- Bug fix for -s, --showedits option with multiple of the same drive model but with different firmware versions. Issue #276 v3.5.88 - Changed how memory compatibility is disabled for older models. Issue #272 From f1a91819e8d150172ddec1069e50065bc04043f1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:12:52 +1000 Subject: [PATCH 405/694] Update syno_hdd_db.sh v3.5.89 - Bug fix for -s, --showedits option with multiple of the same drive model but with different firmware versions. Issue #276 --- syno_hdd_db.sh | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 66def20..74d9673 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -16,6 +16,9 @@ #-------------------------------------------------------------------------------------------------- # CHANGES +# Bug fix for -s, --showedits option for multiple of the same drive model +# but with different firmware versions. Issue #276 +# # Changed disabling memory compatibility for older models. Issue #272 # # Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). @@ -37,7 +40,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.88" +scriptver="v3.5.89" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1920,32 +1923,30 @@ fi #------------------------------------------------------------------------------ # Finished +show_changes(){ + # Assign passed drive models array to my_array + local my_array=("$@") + local drive_models=() + for i in "${!my_array[@]}"; do + drive_models+=$(printf "%s" "${my_array[i]}" | cut -d"," -f 1) + done + # Sort array to remove duplicates + IFS=$'\n' + drives_sorted=($(sort -u <<<"${drive_models[*]}")) + unset IFS + for drive_model in "${drives_sorted[@]}"; do + echo -e "\n$drive_model:" + jq -r --arg drive_model "$drive_model" '.disk_compatbility_info[$drive_model]' "${db1list[0]}" + done +} + # Show the changes if [[ ${showedits,,} == "yes" ]]; then - if [[ ${#db1list[@]} -gt "0" ]]; then - getdbtype "${db1list[0]}" - if [[ $dbtype -gt "6" ]]; then - # Show 11 lines after hdmodel line - lines=11 - elif [[ $dbtype -eq "6" ]]; then - # Show 2 lines after hdmodel line - lines=2 - fi - - # HDDs/SSDs - for i in "${!hdds[@]}"; do - hdmodel=$(printf "%s" "${hdds[i]}" | cut -d"," -f 1) - echo - jq . "${db1list[0]}" | grep -A "$lines" "$hdmodel" - done + # HDDs/SSDs + show_changes "${hdds[@]}" - # NVMe drives - for i in "${!nvmes[@]}"; do - hdmodel=$(printf "%s" "${nvmes[i]}" | cut -d"," -f 1) - echo - jq . "${db1list[0]}" | grep -A "$lines" "$hdmodel" - done - fi + # NVMe drives + show_changes "${nvmes[@]}" fi From 638d97be9d3196bd33978d66055bd17ef9706597 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 11 Apr 2024 07:57:28 +1000 Subject: [PATCH 406/694] Create dtc_info.txt --- bin/dtc_info.txt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 bin/dtc_info.txt diff --git a/bin/dtc_info.txt b/bin/dtc_info.txt new file mode 100644 index 0000000..b506120 --- /dev/null +++ b/bin/dtc_info.txt @@ -0,0 +1,8 @@ +MD5 01381dabbe86e13a2f4a8017b5552918 +SHA-1 f24a4c06b4865a5948eddc2f43fcdb7700398c7d +SHA-256 14f7f87a5822050eab7c30a064912a6efe99f49bf6b896bbb38c2ba003803e78 +Vhash 4885c57da971db5c59998566ee02855f +SSDEEP 1536:ZJ048w/2Iaosz0SlWcCyeyudm5gupvatDVF4Utc3Lyk+pboAZ4NMMy6MajiRTrbc:0hfosz0j0ehm57vaTDc3Lmo/iRTrM4q +TLSH T13EE33D02F3648C7DD4F85B34469A82B7A7B4F8455232171F7B4097192F86F688F2A9E3 + +https://www.virustotal.com/gui/file/14f7f87a5822050eab7c30a064912a6efe99f49bf6b896bbb38c2ba003803e78/detection From d14c0442f3f3b561e0806739598cca304a3b03f4 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Mon, 15 Apr 2024 07:12:03 +1000 Subject: [PATCH 407/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index af99c71..6c70576 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -44,6 +44,9 @@ ### Synology scripts - **Synology_SHR_switch** - Easily switch between SHR and RAID Groups, or enable RAID F1. +- **Synology_Recover_Data** + - A script to make it easy to recover your data from your Synology's drives using a computer. + - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. From 5728bdde17738b8d0cbfef489116de944f4ffe05 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 17 Apr 2024 15:53:31 +1000 Subject: [PATCH 408/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 682cb36..5af6e99 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Simon Azzouni | +| | | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | From 1819a09ee95776ea56d0b931cb554218281ef995 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 25 Apr 2024 06:45:16 +1000 Subject: [PATCH 409/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5af6e99..6cc460c 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ #### What the script does: * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. + * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2.1 and above **(need to run script after each boot)**. From 2bfb1c0f019e78c5b1a43f1ef14057815099f75c Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sat, 27 Apr 2024 19:17:54 +1000 Subject: [PATCH 410/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 6c70576..26cbefc 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -47,6 +47,9 @@ ### Synology scripts - **Synology_Recover_Data** - A script to make it easy to recover your data from your Synology's drives using a computer. +- **Synology clear drive error** + - Clear drive critical errors so DSM will let you use the drive. + - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. From b9b0565cabdcefd88f83ca725e2930304d68fb78 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 2 May 2024 13:51:00 +1000 Subject: [PATCH 411/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6cc460c..4151ae6 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ # Synology HDD db +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/paypalme/007revad) [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) [![committers.top badge](https://user-badge.committers.top/australia/007revad.svg)](https://user-badge.committers.top/australia/007revad) From 7574d848a95a1175c78ddb458e0ffc26a33720a3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 4 May 2024 18:10:06 +1000 Subject: [PATCH 412/694] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 4151ae6..496f13e 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,14 @@ ### Download the script - Do ***NOT*** save the script to a M.2 volume. After a DSM or Storage Manager update the M.2 volume won't be available until after the script has run. 3. Unzip the zip file. +### Required files + +The following files from the downloaded zip file must be in the same folder: + +1. syno_hdd_db.sh +2. syno_hdd_vendor_ids.txt +3. dtc or the bin folder containing dtc (only required if you have a E10M20-T1, M2D20 or M2D18 in a NAS that does not support them). + ### When to run the script You would need to re-run the script after a DSM update. If you have DSM set to auto update the best option is to run the script every time the Synology boots, and the best way to do that is to setup a scheduled task to run the the script at boot-up. From 64f3314f8432ba6733d0b70e2dced25f19d80cc9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 4 May 2024 21:12:42 +1000 Subject: [PATCH 413/694] Update syno_hdd_db.sh Improved formatting of script on NVMe drive warning. --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 74d9673..695f7a2 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -40,7 +40,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.89" +scriptver="v3.5.90" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -348,7 +348,7 @@ scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then - echo -e "${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" + echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" fi From 7234f870bcac260d577cca11602259b7bc1dfe77 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 7 May 2024 16:05:25 +1000 Subject: [PATCH 414/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 496f13e..22336dc 100644 --- a/README.md +++ b/README.md @@ -158,7 +158,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Christian | Simon Azzouni | +| Sven | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | From d4ac47d222deb1fa0b4b65b22420fb2fcef4cb33 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 9 May 2024 09:44:39 +1000 Subject: [PATCH 415/694] Update syno_hdd_db.sh v3.5.90 - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor in DSM 7.2 - Previously only supported DSM 7.2.1 - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor even if PCIe M.2 adaptor not found. - This may allow creating NVMe volumes on 3rd party PCIe M.2 adaptors. - Bug fix for when there's multiple expansion unit models only the last expansion unit was processed. Issue #288 - Bug fix for when there's multiple M2 adaptor card models only the last M2 card was processed. - Bug fix for incorrectly matching model name variations as well as the exact model name. - e.g. RX1217 matched RX1217, RX1217rp and RX1217sas. --- syno_hdd_db.sh | 60 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 695f7a2..081ea14 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -16,6 +16,14 @@ #-------------------------------------------------------------------------------------------------- # CHANGES +# Bug fix for when there's multiple expansion unit models only the last expansion unit was processed. Issue #288 +# Bug fix for when there's multiple M2 adaptor card models only the last M2 card was processed. +# Bug fix for incorrectly matching model name variations as well as the exact model name. +# - e.g. RX1217 matched RX1217, RX1217rp and RX1217sas. +# +# Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor even if +# PCIe M.2 adaptor not found. This may allow creating NVMe volumes on 3rd party PCIe M.2 adaptors. +# # Bug fix for -s, --showedits option for multiple of the same drive model # but with different firmware versions. Issue #276 # @@ -538,7 +546,15 @@ adapter_cards="/usr/syno/etc.defaults/adapter_cards.conf" adapter_cards2="/usr/syno/etc/adapter_cards.conf" dbpath=/var/lib/disk-compatibility/ synoinfo="/etc.defaults/synoinfo.conf" -strgmgr="/var/packages/StorageManager/target/ui/storage_panel.js" + +if [[ $buildnumber -gt 64570 ]]; then + # DSM 7.2.1 and later + #strgmgr="/var/packages/StorageManager/target/ui/storage_panel.js" + strgmgr="/usr/local/packages/@appstore/StorageManager/ui/storage_panel.js" +elif [[ $buildnumber -ge 64561 ]]; then + # DSM 7.2 + strgmgr="/usr/syno/synoman/webman/modules/StorageManager/storage_panel.js" +fi vidfile="/usr/syno/etc.defaults/pci_vendor_ids.conf" vidfile2="/usr/syno/etc/pci_vendor_ids.conf" @@ -619,7 +635,13 @@ if [[ $restore == "yes" ]]; then fi # Restore storage_panel.js from backup - strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" + if [[ $buildnumber -gt 64570 ]]; then + # DSM 7.2.1 and later + strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" + elif [[ $buildnumber -ge 64561 ]]; then + # DSM 7.2 + strgmgrver="${buildnumber}${smallfixnumber}" + fi if [[ -f "${strgmgr}.$strgmgrver" ]]; then if cp -p "${strgmgr}.$strgmgrver" "$strgmgr"; then echo "Restored $(basename -- "$strgmgr")" @@ -1032,17 +1054,25 @@ fi # Host db files db1list=($(find "$dbpath" -maxdepth 1 -name "*_host*.db")) db2list=($(find "$dbpath" -maxdepth 1 -name "*_host*.db.new")) +#db1list=($(find "$dbpath" -maxdepth 1 -regextype posix-extended\ +# -iregex ".*_host(_v7)?.db")) +#db2list=($(find "$dbpath" -maxdepth 1 -regextype posix-extended\ +# -iregex ".*_host(_v7)?.db.new")) # Expansion Unit db files for i in "${!eunits[@]}"; do - eunitdb1list=($(find "$dbpath" -maxdepth 1 -name "${eunits[i],,}*.db")) - eunitdb2list=($(find "$dbpath" -maxdepth 1 -name "${eunits[i],,}*.db.new")) + #eunitdb1list+=($(find "$dbpath" -maxdepth 1 -name "${eunits[i],,}*.db")) + eunitdb1list+=($(find "$dbpath" -maxdepth 1 -regextype posix-extended\ + -iregex ".*${eunits[i],,}(_v7)?.db")) + #eunitdb2list+=($(find "$dbpath" -maxdepth 1 -name "${eunits[i],,}*.db.new")) + eunitdb2list+=($(find "$dbpath" -maxdepth 1 -regextype posix-extended\ + -iregex ".*${eunits[i],,}(_v7)?.db.new")) done # M.2 Card db files for i in "${!m2cards[@]}"; do - m2carddb1list=($(find "$dbpath" -maxdepth 1 -name "*_${m2cards[i],,}*.db")) - m2carddb2list=($(find "$dbpath" -maxdepth 1 -name "*_${m2cards[i],,}*.db.new")) + m2carddb1list+=($(find "$dbpath" -maxdepth 1 -name "*_${m2cards[i],,}*.db")) + m2carddb2list+=($(find "$dbpath" -maxdepth 1 -name "*_${m2cards[i],,}*.db.new")) done @@ -1889,13 +1919,21 @@ fi # Enable creating pool on drives in M.2 adaptor card -if [[ -f "$strgmgr" ]]; then - # StorageManager package is installed - if [[ ${#m2cards[@]} -gt "0" ]]; then +if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then + # DSM 7.2 and later + #if [[ ${#m2cards[@]} -gt "0" ]]; then if grep 'notSupportM2Pool_addOnCard' "$strgmgr" >/dev/null; then # Backup storage_panel.js" - strgmgrver="$(synopkg version StorageManager)" + + if [[ $buildnumber -gt 64570 ]]; then + # DSM 7.2.1 and later + strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" + elif [[ $buildnumber -ge 64561 ]]; then + # DSM 7.2 + strgmgrver="${buildnumber}${smallfixnumber}" + fi + echo "" if [[ ! -f "${strgmgr}.$strgmgrver" ]]; then if cp -p "$strgmgr" "${strgmgr}.$strgmgrver"; then @@ -1916,7 +1954,7 @@ if [[ -f "$strgmgr" ]]; then else echo -e "\nCreating pool in UI on drives in M.2 adaptor card already enabled." fi - fi + #fi fi From a67f818634b31174d8dccd19f74bcc977f2b90e7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 9 May 2024 09:44:46 +1000 Subject: [PATCH 416/694] Update CHANGES.txt --- CHANGES.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 7ef16a1..dc3583d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,13 @@ +v3.5.90 +- Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor in DSM 7.2 + - Previously only supported DSM 7.2.1 +- Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor even if PCIe M.2 adaptor not found. + - This may allow creating NVMe volumes on 3rd party PCIe M.2 adaptors. +- Bug fix for when there's multiple expansion unit models only the last expansion unit was processed. Issue #288 +- Bug fix for when there's multiple M2 adaptor card models only the last M2 card was processed. +- Bug fix for incorrectly matching model name variations as well as the exact model name. + - e.g. RX1217 matched RX1217, RX1217rp and RX1217sas. + v3.5.89 - Bug fix for -s, --showedits option with multiple of the same drive model but with different firmware versions. Issue #276 From 0cf419f54500c798aab1e8abfe138bd201652b2a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 9 May 2024 09:45:48 +1000 Subject: [PATCH 417/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index dc3583d..fe87d23 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.5.90 +v3.5.90-RC - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor in DSM 7.2 - Previously only supported DSM 7.2.1 - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor even if PCIe M.2 adaptor not found. From 13e90e11148ad99488a16e30fe91a28516697b22 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 11 May 2024 08:04:10 +1000 Subject: [PATCH 418/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index fe87d23..dc3583d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.5.90-RC +v3.5.90 - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor in DSM 7.2 - Previously only supported DSM 7.2.1 - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor even if PCIe M.2 adaptor not found. From 9069f042403dd947943cd164eb60dfa090f632d3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 11 May 2024 08:09:33 +1000 Subject: [PATCH 419/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 081ea14..ce72367 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1921,7 +1921,7 @@ fi # Enable creating pool on drives in M.2 adaptor card if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then # DSM 7.2 and later - #if [[ ${#m2cards[@]} -gt "0" ]]; then + if [[ ${#m2cards[@]} -gt "0" ]]; then if grep 'notSupportM2Pool_addOnCard' "$strgmgr" >/dev/null; then # Backup storage_panel.js" @@ -1954,7 +1954,7 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then else echo -e "\nCreating pool in UI on drives in M.2 adaptor card already enabled." fi - #fi + fi fi From 3aa9fb64c7a0e32eafe23c733279379f937e1c58 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 11 May 2024 08:24:03 +1000 Subject: [PATCH 420/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 22336dc..59ecd62 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ ### Options when running the script -w, --wdda Disable WD Device Analytics to prevent DSM showing a false warning for WD drives that are 3 years old DSM 7.2.1 already has WDDA disabled + -p, --pci Enable creating volumes on M2 in unknown PCIe adaptor -e, --email Disable colored text in output scheduler emails --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) From a2c0ec982f6c99558f72dd66740da62bf26450ef Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 11 May 2024 08:25:08 +1000 Subject: [PATCH 421/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 59ecd62..7be5856 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ ### Options when running the script -w, --wdda Disable WD Device Analytics to prevent DSM showing a false warning for WD drives that are 3 years old DSM 7.2.1 already has WDDA disabled - -p, --pci 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 --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) From 7752f30df03af595d294b5dfa0021f33a6f60ed2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 11 May 2024 08:27:05 +1000 Subject: [PATCH 422/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index ce72367..e21fc4a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -32,7 +32,7 @@ # Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). # # Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. -# - E10M20-T1, M2D20, M2D18 and M2D17 +# - E10M20-T1, M2D20, M2D18, M2D17 and FX2422N # # Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. # @@ -90,6 +90,7 @@ Options: -w, --wdda Disable WD Device Analytics to prevent DSM showing a false warning for WD drives that are 3 years old DSM 7.2.1 already has WDDA disabled + -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor -e, --email Disable colored text in output scheduler emails --restore Undo all changes made by the script --autoupdate=AGE Auto update script (useful when script is scheduled) @@ -119,7 +120,7 @@ args=("$@") # Check for flags with getopt if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ - restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,wdda,email,autoupdate:,help,version,debug \ + restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do @@ -149,6 +150,9 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ -w|--wdda) # Disable "support_wdda" wdda=no ;; + -p|--pcie) # Enable creating volumes on M2 in unknown PCIe adaptor + forcepci=yes + ;; -e|--email) # Disable colour text in task scheduler emails color=no ;; @@ -1921,7 +1925,7 @@ fi # Enable creating pool on drives in M.2 adaptor card if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then # DSM 7.2 and later - if [[ ${#m2cards[@]} -gt "0" ]]; then + if [[ ${#m2cards[@]} -gt "0" ]] || [[ $forcepci == "yes" ]]; then if grep 'notSupportM2Pool_addOnCard' "$strgmgr" >/dev/null; then # Backup storage_panel.js" From e91158b7f421b5b8d6c2e2a06a81108100e0cc2f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 11 May 2024 08:33:08 +1000 Subject: [PATCH 423/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7be5856..6b8dc79 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ #### What the script does: * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. - * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2.1 and above **(need to run script after each boot)**. + * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(need to run script after each boot)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From daf61ded4702e3cccf6db4294c769e851893806e Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sun, 12 May 2024 21:27:55 +1000 Subject: [PATCH 424/694] Update my-other-scripts.md --- my-other-scripts.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 26cbefc..b9b8d12 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -9,6 +9,9 @@ ### Plex scripts - **Asustor_Plex_Backup** - Backup your Asustor's Plex Media Server settings and database. +- **Linux_Plex_Backup** + - Backup your Linux Plex Media Server's settings and database. + - **Plex_Server_Sync** - Sync your main Plex server database & metadata to a backup Plex server. - Works for Synology, Asustor, Linux and supports Plex package or Plex in docker. @@ -59,6 +62,9 @@ ### Synology scripts - **Synology_DSM_reinstall** - Easily re-install the same DSM version without losing any data or settings. +- **Synology_CPU_temperature** + - Get Synology NAS CPU temperature via SSH. + - **Synology_enable_sequential_IO** - Enables sequential I/O for your SSD caches, like DSM 6 had. From d3274d8e692e9b2b49be3b6b46a3d94115e5c669 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 14 May 2024 03:23:46 +1000 Subject: [PATCH 425/694] Create schedule3-2.png --- images/schedule3-2.png | Bin 0 -> 18769 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/schedule3-2.png diff --git a/images/schedule3-2.png b/images/schedule3-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d9df547be4a6936667f6049b1c8e848ffd82c36e GIT binary patch literal 18769 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 z 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 KzDVxb-~R*g_GgIz literal 0 HcmV?d00001 From 1db4246964867a6fb2393168ada96815f306b376 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 14 May 2024 03:24:28 +1000 Subject: [PATCH 426/694] Update how_to_schedule.md --- how_to_schedule.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how_to_schedule.md b/how_to_schedule.md index 51b243f..d2e65a5 100644 --- a/how_to_schedule.md +++ b/how_to_schedule.md @@ -24,4 +24,4 @@ # How to schedule a script in Synology Task Scheduler

-

+

From ffaf87afc2667832eef93de60303bc12abdbce2c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 19 May 2024 13:16:17 +1000 Subject: [PATCH 427/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b8dc79..768806e 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| Sven | Thomas Horn | Christian | Simon Azzouni | +| Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | | Marcus Ackermann | Lorenz Schmid | enil-kil | Xaver Zöllner | From be7639d3c1a7e6c2c761e3decd4b6e57b293a463 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 20 May 2024 17:48:42 +1000 Subject: [PATCH 428/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 768806e..a027354 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | From 73f970d45b65fcc7cb871708acf03f02d51dc2a5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 22 May 2024 09:18:55 +1000 Subject: [PATCH 429/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a027354..771b673 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Jean-François Fruhauf | +| | | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | From 6c1a24579e6e467996bb51f6b82d6f6faf744180 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 24 May 2024 20:33:58 +1000 Subject: [PATCH 430/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 771b673..ff36c4b 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Po-Chia Chen | Jean-François Fruhauf | +| | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | From a7fa127630957d33a9811e46e40e127246016987 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 26 May 2024 09:54:08 +1000 Subject: [PATCH 431/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff36c4b..acd063c 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | +| Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | | Björn Schöninger | Nico Scherer | Patrick Hoekstra | Alex Joyce | From 99ee7124bfa5058866b457d579389c2a49e66233 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Mon, 27 May 2024 14:26:42 +1000 Subject: [PATCH 432/694] dtc source --- bin/dtc_source.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 bin/dtc_source.txt diff --git a/bin/dtc_source.txt b/bin/dtc_source.txt new file mode 100644 index 0000000..c1a744b --- /dev/null +++ b/bin/dtc_source.txt @@ -0,0 +1,2 @@ +dtc-1.6.1 source code - Author David Gibson +https://git.kernel.org/pub/scm/utils/dtc/dtc.git From 341ac030eb0052807771c971c7d4159bbba52a53 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 13 Jun 2024 17:28:38 +1000 Subject: [PATCH 433/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index dc3583d..aec201e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.5.91 +- Changed to not exit if no SATA or SAS drives found. Issue #303 + - Now only exists if no SATA, SAS or NVMe drives found. + v3.5.90 - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor in DSM 7.2 - Previously only supported DSM 7.2.1 From c43662d443fce1ca226064e28bc83a6094ac5a53 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 13 Jun 2024 17:29:08 +1000 Subject: [PATCH 434/694] Update syno_hdd_db.sh v3.5.91 - Changed to not exit if no SATA or SAS drives found. Issue #303 - Now only exists if no SATA, SAS or NVMe drives found. --- syno_hdd_db.sh | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e21fc4a..f98a944 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -48,7 +48,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.90" +scriptver="v3.5.91" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -948,10 +948,9 @@ if [[ ${#hdlist[@]} -gt "0" ]]; then done < <(printf "%s\0" "${hdlist[@]}" | sort -uz) fi -# Check hdds array isn't empty +# Show hdd if hdds array isn't empty if [[ ${#hdds[@]} -eq "0" ]]; then - ding - echo -e "\n${Error}ERROR${Off} No drives found!" && exit 2 + echo -e "No SATA or SAS drives found\n" else echo -e "\nHDD/SSD models found: ${#hdds[@]}" num="0" @@ -970,7 +969,7 @@ if [[ ${#nvmelist[@]} -gt "0" ]]; then done < <(printf "%s\0" "${nvmelist[@]}" | sort -uz) fi -# Check nvmes array isn't empty +# Show nvmes if nvmes array isn't empty if [[ $m2 != "no" ]]; then if [[ ${#nvmes[@]} -eq "0" ]]; then echo -e "No M.2 drives found\n" @@ -987,6 +986,13 @@ if [[ $m2 != "no" ]]; then fi +# Exit if no drives found +if [[ ${#hdds[@]} -eq "0" ]] && [[ ${#nvmes[@]} -eq "0" ]]; then + ding + echo -e "\n${Error}ERROR${Off} No drives found!" && exit 2 +fi + + # M.2 card db files # Sort m2carddblist array into new m2carddbs array to remove duplicates if [[ ${#m2carddblist[@]} -gt "0" ]]; then From 40f19fd40c6d01fa4c4d107077731e24e9af9986 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 13 Jun 2024 19:24:15 +1000 Subject: [PATCH 435/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index aec201e..63d5b6a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ v3.5.91 - Changed to not exit if no SATA or SAS drives found. Issue #303 - - Now only exists if no SATA, SAS or NVMe drives found. + - Now only exits if no SATA, SAS or NVMe drives found. v3.5.90 - Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor in DSM 7.2 From 71a925c2385a0a192e886564a04920a3a95b17d1 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sun, 23 Jun 2024 13:38:41 +1000 Subject: [PATCH 436/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index b9b8d12..d26bcf9 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -65,6 +65,9 @@ ### Synology scripts - **Synology_CPU_temperature** - Get Synology NAS CPU temperature via SSH. +- **Synology_SMART_info** + - Show Synology smart test progress or smart health and attributes. + - **Synology_enable_sequential_IO** - Enables sequential I/O for your SSD caches, like DSM 6 had. From 57ac882d435cf6830c5a89f37cbcf3c326d89d42 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 30 Jun 2024 15:35:19 +1000 Subject: [PATCH 437/694] Update syno_hdd_db.sh v3.5.92 - Changed to support M.2 SATA SSDs in M2D18 or M2D17. - Change -s, --show option to show changes for each different drive model. --- syno_hdd_db.sh | 126 +++++++++++++++++++++++++++---------------------- 1 file changed, 70 insertions(+), 56 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index f98a944..78e08c1 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -14,7 +14,8 @@ # or # sudo -i /volume1/scripts/syno_hdd_db.sh -force -showedits #-------------------------------------------------------------------------------------------------- - +# https://smarthdd.com/database/ + # CHANGES # Bug fix for when there's multiple expansion unit models only the last expansion unit was processed. Issue #288 # Bug fix for when there's multiple M2 adaptor card models only the last M2 card was processed. @@ -48,7 +49,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.91" +scriptver="v3.5.92" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -359,6 +360,7 @@ echo "Running from: ${scriptpath}/$scriptfile" scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) +# shellcheck disable=SC2002 # Don't warn about "Useless cat" if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" fi @@ -828,13 +830,25 @@ getdriveinfo(){ #fwrev=$(cat "$1/device/rev") #fwrev=$(printf "%s" "$fwrev" | xargs) # trim leading and trailing white space - device="/dev/$(basename -- "$1")" + device=/dev/"$(basename -- "$1")" #fwrev=$(/usr/syno/bin/syno_hdd_util --ssd_detect | grep "$device " | awk '{print $2}') # GitHub issue #86, 87 # 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 + # Get M.2 SATA SSD firmware version + if [[ -z $fwrev ]]; then + dev=/dev/"$(basename -- "$1")" + fwrev=$(smartctl -a -d sat -T permissive "$dev" | grep -i firmware | awk '{print $NF}') + fi + if [[ $hdmodel ]] && [[ $fwrev ]]; then - hdlist+=("${hdmodel},${fwrev}") + if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then + # Is SATA M.2 SSD + nvmelist+=("${hdmodel},${fwrev}") + else + hdlist+=("${hdmodel},${fwrev}") + fi + drivelist+=("${hdmodel}") fi fi } @@ -852,6 +866,7 @@ getm2info(){ if [[ $nvmemodel ]] && [[ $nvmefw ]]; then nvmelist+=("${nvmemodel},${nvmefw}") + drivelist+=("${nvmemodel}") fi } @@ -883,58 +898,70 @@ getcardmodel(){ } m2_pool_support(){ - # M.2 drives in M2 adaptor card do not support storage pools + # M.2 drives in M2 adaptor card do not officially support storage pools if [[ -f /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support ]]; then # GitHub issue #86, 87 echo -n 1 > /run/synostorage/disks/"$(basename -- "$1")"/m2_pool_support fi } +m2_drive(){ + # $1 is nvme1 etc + # $2 is drive type (nvme or nvc) + if [[ $m2 != "no" ]]; then + # Check if is NVMe or SATA M.2 SSD + if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then + + if [[ $2 == "nvme" ]] || [[ $2 == "nvc" ]]; then + # Fix unknown vendor id if needed. GitHub issue #161 + # "Failed to get disk vendor" from synonvme --vendor-get + # causes "Unsupported firmware version" warning. + get_vid /dev/"$(basename -- "$1")" + + # Get M2 model and firmware version + getm2info "$1" "$2" + fi + + # Get M.2 card model if in M.2 card + getcardmodel /dev/"$(basename -- "$1")" + + # Enable creating M.2 storage pool and volume in Storage Manager + m2_pool_support "$1" + + rebootmsg=yes # Show reboot message at end + fi + fi +} + 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 - # Get drive model and firmware version getdriveinfo "$d" fi ;; - sata*|sas*) - if [[ $d =~ (sas|sata)[0-9][0-9]?[0-9]?$ ]]; then - # Get drive model and firmware version + sas*) + if [[ $d =~ sas[0-9][0-9]?[0-9]?$ ]]; then + getdriveinfo "$d" + fi + ;; + sata*) + if [[ $d =~ sata[0-9][0-9]?[0-9]?$ ]]; then getdriveinfo "$d" + + # In case it's a SATA M.2 SSD in device tree model NAS + # M.2 SATA drives in M2D18 or M2S17 + m2_drive "$d" fi ;; nvme*) if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then - if [[ $m2 != "no" ]]; then - # Fix unknown vendor id if needed. GitHub issue #161 - # "Failed to get disk vendor" from synonvme --vendor-get - # causes "Unsupported firmware version" warning. - get_vid "/dev/$(basename -- "${d}")" - - getm2info "$d" "nvme" - # Get M.2 card model if in M.2 card - getcardmodel "/dev/$(basename -- "${d}")" - - # Enable creating M.2 storage pool and volume in Storage Manager - m2_pool_support "$d" - - rebootmsg=yes # Show reboot message at end - fi + m2_drive "$d" "nvme" fi ;; - nvc*) # M.2 SATA drives (in PCIe card only?) + nvc*) # M.2 SATA drives (in PCIe M2D18 or M2S17 only?) if [[ $d =~ nvc[0-9][0-9]?$ ]]; then - if [[ $m2 != "no" ]]; then - getm2info "$d" "nvc" - # Get M.2 card model if in M.2 card - getcardmodel "/dev/$(basename -- "${d}")" - - # Enable creating M.2 storage pool and volume in Storage Manager - m2_pool_support "$d" - - rebootmsg=yes # Show reboot message at end - fi + m2_drive "$d" "nvc" fi ;; esac @@ -948,7 +975,7 @@ if [[ ${#hdlist[@]} -gt "0" ]]; then done < <(printf "%s\0" "${hdlist[@]}" | sort -uz) fi -# Show hdd if hdds array isn't empty +# Show hdds if hdds array isn't empty if [[ ${#hdds[@]} -eq "0" ]]; then echo -e "No SATA or SAS drives found\n" else @@ -1057,7 +1084,6 @@ else echo fi - #------------------------------------------------------------------------------ # Check databases and add our drives if needed @@ -1799,6 +1825,7 @@ fi # Enable nvme support +# shellcheck disable=SC2010 # Don't warn about "Don't use ls | grep" if ls /dev | grep nvme >/dev/null ; then if [[ $m2 != "no" ]]; then # Check if nvme support is enabled @@ -1830,7 +1857,8 @@ fi # Enable m2 volume support -if ls /dev | grep nv[em] >/dev/null ; then +# shellcheck disable=SC2010 # Don't warn about "Don't use ls | grep" +if ls /dev | grep "nv[em]" >/dev/null ; then if [[ $m2 != "no" ]]; then if [[ $m2exists == "yes" ]]; then # Check if m2 volume support is enabled @@ -1971,33 +1999,19 @@ fi #------------------------------------------------------------------------------ # Finished -show_changes(){ - # Assign passed drive models array to my_array - local my_array=("$@") - local drive_models=() - for i in "${!my_array[@]}"; do - drive_models+=$(printf "%s" "${my_array[i]}" | cut -d"," -f 1) - done +# Show the changes +if [[ ${showedits,,} == "yes" ]]; then # Sort array to remove duplicates IFS=$'\n' - drives_sorted=($(sort -u <<<"${drive_models[*]}")) + drives_sorted=($(sort -u <<<"${drivelist[*]}")) unset IFS + # Show the changes for drive model for drive_model in "${drives_sorted[@]}"; do echo -e "\n$drive_model:" jq -r --arg drive_model "$drive_model" '.disk_compatbility_info[$drive_model]' "${db1list[0]}" done -} - -# Show the changes -if [[ ${showedits,,} == "yes" ]]; then - # HDDs/SSDs - show_changes "${hdds[@]}" - - # NVMe drives - show_changes "${nvmes[@]}" fi - # Make Synology check disk compatibility if [[ -f /usr/syno/sbin/synostgdisk ]]; then # DSM 6.2.3 does not have synostgdisk /usr/syno/sbin/synostgdisk --check-all-disks-compatibility From aabb3180bb6d51e76e5abb76e43f29a848cd6a7c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 30 Jun 2024 15:38:19 +1000 Subject: [PATCH 438/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 63d5b6a..9101972 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.5.92 +- Changed to support M.2 SATA SSDs in M2D18 or M2D17. +- Change -s, --show option to show changes for each different drive model. + v3.5.91 - Changed to not exit if no SATA or SAS drives found. Issue #303 - Now only exits if no SATA, SAS or NVMe drives found. From f0dffc397a8278ebd8427c379f2c9f4885327540 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:45:14 +1000 Subject: [PATCH 439/694] Update syno_hdd_vendor_ids.txt --- syno_hdd_vendor_ids.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/syno_hdd_vendor_ids.txt b/syno_hdd_vendor_ids.txt index 44f51d5..8cd6212 100644 --- a/syno_hdd_vendor_ids.txt +++ b/syno_hdd_vendor_ids.txt @@ -12,6 +12,7 @@ 0x05dc="Lexar" 0x1462="MSI" 0x1f40="Netac" +0x137e="Patriot" 0x1987="Phison" 0x196e="PNY" 0x1c5c="SK Hynix" From 7731b80f740bf83411eb9e820aed20f828444aa8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:42:08 +1000 Subject: [PATCH 440/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index acd063c..3f7a39b 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | From 32a49e311f9b60edd25d765393999a460d8f50ed Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 4 Jul 2024 07:46:12 +1000 Subject: [PATCH 441/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 9101972..36e3c15 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.5.93 +- Bug fix for false "Failed to delete tmp files" log entries. Issue #312 + - Bug first appeared in v3.1.64 + v3.5.92 - Changed to support M.2 SATA SSDs in M2D18 or M2D17. - Change -s, --show option to show changes for each different drive model. From 93bdd5c59dab54969bc5afe335fe494877226de3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 4 Jul 2024 07:46:29 +1000 Subject: [PATCH 442/694] Update syno_hdd_db.sh v3.5.93 - Bug fix for false "Failed to delete tmp files" log entries. Issue #312 - Bug first appeared in v3.1.64 --- syno_hdd_db.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 78e08c1..2d52df4 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -49,7 +49,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.92" +scriptver="v3.5.93" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -388,7 +388,7 @@ cleanup_tmp(){ fi # Add warning to DSM log - if [[ -z $cleanup_err ]]; then + if [[ $cleanup_err ]]; then syslog_set warn "$script update failed to delete tmp files" fi } @@ -1780,7 +1780,7 @@ if [[ $dsm -gt "6" ]]; then # DSM 6 as has no dmidecode fi # Set mem_max_mb to the amount of installed memory setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo mem_max_mb)" - settingbak="$(/usr/syno/bin/synogetkeyvalue ${synoinfo}.bak mem_max_mb)" # GitHub issue #107 + settingbak="$(/usr/syno/bin/synogetkeyvalue ${synoinfo}.bak mem_max_mb)" # GitHub issue #107 if [[ $ramtotal =~ ^[0-9]+$ ]]; then # Check $ramtotal is numeric if [[ $ramtotal -gt "$setting" ]]; then /usr/syno/bin/synosetkeyvalue "$synoinfo" mem_max_mb "$ramtotal" From d7b8ebe2fabbd3f4dd648a7daa262b8bf7332388 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 4 Jul 2024 08:25:29 +1000 Subject: [PATCH 443/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 36e3c15..e7092be 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.5.93 -- Bug fix for false "Failed to delete tmp files" log entries. Issue #312 +- Bug fix for false "Failed to delete tmp files" log entries after script updates itself. Issue #312 - Bug first appeared in v3.1.64 v3.5.92 From 486a21ba3de2a29a75588ad4e12f6e0f3dd8ab3a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 4 Jul 2024 08:28:28 +1000 Subject: [PATCH 444/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index e7092be..0f86e84 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.5.93 -- Bug fix for false "Failed to delete tmp files" log entries after script updates itself. Issue #312 +- Bug fix for false "Failed to delete tmp files" log entries when script updates itself. Issue #312 - Bug first appeared in v3.1.64 v3.5.92 From f774a3e479d646e3203b06e15d0f3f5e0d837763 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 6 Jul 2024 13:55:28 +1000 Subject: [PATCH 445/694] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3f7a39b..b5374ca 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ ### Running the script via SSH **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. -

+

If you run the script with the --showedits flag it will show you the changes it made to the Synology's compatible-drive database. Obviously this is only useful if you run the script in a shell. @@ -121,7 +121,7 @@ ### Running the script via SSH **Note:** Replace /path-to-script/ with the actual path to the script on your Synology. -

+

### Troubleshooting @@ -137,11 +137,11 @@ ### vendor_ids.txt If DSM doesn't know the brand of your NVMe drives they will show up in Storage Manager as Unknown brand, and Unrecognised firmware version. -

+

In this case the script will show you the vendor ID and advise you to add it to the syno_hdd_vendor_ids.txt file. -

+


From 4666d5d6b3f58070c61e3698b8db23d7fd2d5945 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sun, 7 Jul 2024 17:18:24 +1000 Subject: [PATCH 446/694] Update my-other-scripts.md --- my-other-scripts.md | 104 +++++++++++++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 35 deletions(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index d26bcf9..be27b47 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -1,6 +1,15 @@ -## My other scripts +## All my scripts -### Plex scripts +#### Contents +- [Plex](#plex) +- [Synology docker](#synology-docker) +- [Synology recovery](#synology-recovery) +- [Other Synology scripts](#other-synology-scripts) +- [Synology hardware restrictions](#synology-hardware-restrictions) +- [Synology dev](#synology-dev) +## + +### Plex - **Synology_Plex_Backup** - A script to backup Plex to a tgz file foror DSM 7 and DSM 6. @@ -16,36 +25,28 @@ ### Plex scripts - Sync your main Plex server database & metadata to a backup Plex server. - Works for Synology, Asustor, Linux and supports Plex package or Plex in docker. +               [Back to Contents](#contents) -### Synology scripts - -- **Synology_HDD_db** - - Add your SATA or SAS HDDs and SSDs plus SATA and NVMe M.2 drives to your Synology's compatible drive databases, including your Synology M.2 PCIe card and Expansion Unit databases. - -- **Synology_enable_M2_volume** - - Enable creating volumes with non-Synology M.2 drives. - - Enable Health Info for non-Synology NVMe drives (not in DSM 7.2.1 or later). +### Synology docker -- **Synology_M2_volume** - - Easily create an M.2 volume on Synology NAS. +- **Synology_ContainerManager_IPv6** + - Enable IPv6 for Container Manager's bridge network. -- **Synology_app_mover** - - Easily move Synology packages from one volume to another volume. +- **ContainerManager_for_all_armv8** + - Script to install Container Manager on a RS819, DS119j, DS418, DS418j, DS218, DS218play or DS118. + +- **Docker_Autocompose** + - Create .yml files from your docker existing containers. - **Synology_docker_cleanup** - Remove orphan docker btrfs subvolumes and images in Synology DSM 7 and DSM 6. -- **Synology_enable_M2_card** - - Enable Synology M.2 PCIe cards in Synology NAS that don't officially support them. +               [Back to Contents](#contents) -- **Synology_enable_eunit** - - Enable an unsupported Synology eSATA Expansion Unit models. - -- **Synology_enable_Deduplication** - - Enable deduplication with non-Synology SSDs and unsupported NAS models. +### Synology recovery -- **Synology_SHR_switch** - - Easily switch between SHR and RAID Groups, or enable RAID F1. +- **Synology_DSM_reinstall** + - Easily re-install the same DSM version without losing any data or settings. - **Synology_Recover_Data** - A script to make it easy to recover your data from your Synology's drives using a computer. @@ -53,32 +54,65 @@ ### Synology scripts - **Synology clear drive error** - Clear drive critical errors so DSM will let you use the drive. -- **Synology_Config_Backup** - - Backup and export your Synology DSM configuration. +- **Synology_DSM_Telnet_Password** + - Synology DSM Recovery Telnet Password of the Day generator. -- **ContainerManager_for_all_armv8** - - Script to install Container Manager on a RS819, DS119j, DS418, DS418j, DS218, DS218play or DS118. +               [Back to Contents](#contents) -- **Synology_DSM_reinstall** - - Easily re-install the same DSM version without losing any data or settings. +### Other Synology scripts + +- **Synology_app_mover** + - Easily move Synology packages from one volume to another volume. + +- **Synology_Config_Backup** + - Backup and export your Synology DSM configuration. - **Synology_CPU_temperature** - - Get Synology NAS CPU temperature via SSH. + - Get and log Synology NAS CPU temperature via SSH. - **Synology_SMART_info** - Show Synology smart test progress or smart health and attributes. +- **Synology_Cleanup_Coredumps** + - Cleanup memory core dumps from crashed processes. + +               [Back to Contents](#contents) + +### Synology hardware restrictions + +- **Synology_HDD_db** + - Add your SATA or SAS HDDs and SSDs plus SATA and NVMe M.2 drives to your Synology's compatible drive databases, including your Synology M.2 PCIe card and Expansion Unit databases. + +- **Synology_enable_M2_volume** + - Enable creating volumes with non-Synology M.2 drives. + - Enable Health Info for non-Synology NVMe drives (not in DSM 7.2.1 or later). + +- **Synology_M2_volume** + - Easily create an M.2 volume on Synology NAS. + +- **Synology_enable_M2_card** + - Enable Synology M.2 PCIe cards in Synology NAS that don't officially support them. + +- **Synology_enable_eunit** + - Enable an unsupported Synology eSATA Expansion Unit models. + +- **Synology_enable_Deduplication** + - Enable deduplication with non-Synology SSDs and unsupported NAS models. + +- **Synology_SHR_switch** + - Easily switch between SHR and RAID Groups, or enable RAID F1. + - **Synology_enable_sequential_IO** - Enables sequential I/O for your SSD caches, like DSM 6 had. -- **Synology_Cleanup_Coredumps** - - Cleanup memory core dumps from crashed processes. - -- **Docker_Autocompose** - - Create .yml files from your docker existing containers. +               [Back to Contents](#contents) + +### Synology dev - **Download_Synology_Archive** - Download all or part of the Synology archive. - **ScriptNotify** - DSM 7 package to allow your scripts to send DSM notifications. + +               [Back to Contents](#contents) From 594e599c362d64c4c074abdc25efadd503593bcf Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:11:27 +1000 Subject: [PATCH 447/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b5374ca..4a6b63c 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | dweagle79 | lingyinsam | +| | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | From a087dfa1f60a7583a7269951a387a6d6145879c0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 11 Jul 2024 21:07:54 +1000 Subject: [PATCH 448/694] Update CHANGES.txt --- CHANGES.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 0f86e84..d33a914 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,11 @@ +v3.5.94 +- Updated to support newer drive db versions. + - Synology added size_gb in host v7 version 8051. + - Synology added barebone_installable_v2 in host v7 version 8054. + +Note: You may need to run syno_hdd_db without the -n or --noupdate option, then update the drive database from +"Storage Manager > HDD/SSD > Settings > Advanced > Update Now" then run syno_hdd_db with your preferred options. + v3.5.93 - Bug fix for false "Failed to delete tmp files" log entries when script updates itself. Issue #312 - Bug first appeared in v3.1.64 From e52b20e3d965ead37fff1e1c6f2d7e0a228edf65 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 11 Jul 2024 21:08:12 +1000 Subject: [PATCH 449/694] Update syno_hdd_db.sh v3.5.94 - Updated to support newer drive db versions. - Synology added size_gb in host v7 version 8051. - Synology added barebone_installable_v2 in host v7 version 8054. Note: You may need to run syno_hdd_db without the -n or --noupdate option, then update the drive database from "Storage Manager > HDD/SSD > Settings > Advanced > Update Now" then run syno_hdd_db with your preferred options. --- syno_hdd_db.sh | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 2d52df4..faa8697 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -812,6 +812,15 @@ fixdrivemodel(){ fi } +get_size_gb(){ + # $1 is /sys/block/sata1 or /sys/block/nvme0n1 etc + local float + local int + float=$(synodisk --info /dev/"$(basename -- "$1")" | grep 'Total capacity' | awk '{print $4 * 1.0737}') + int="${float%.*}" + echo "$int" +} + getdriveinfo(){ # $1 is /sys/block/sata1 etc @@ -841,12 +850,15 @@ getdriveinfo(){ fwrev=$(smartctl -a -d sat -T permissive "$dev" | grep -i firmware | awk '{print $NF}') fi + # Get drive GB size + size_gb=$(get_size_gb "$1") + if [[ $hdmodel ]] && [[ $fwrev ]]; then if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then # Is SATA M.2 SSD - nvmelist+=("${hdmodel},${fwrev}") + nvmelist+=("${hdmodel},${fwrev},${size_gb}") else - hdlist+=("${hdmodel},${fwrev}") + hdlist+=("${hdmodel},${fwrev},${size_gb}") fi drivelist+=("${hdmodel}") fi @@ -864,8 +876,11 @@ getm2info(){ fi nvmefw=$(printf "%s" "$nvmefw" | xargs) # trim leading and trailing white space + # Get drive GB size + size_gb=$(get_size_gb "$1") + if [[ $nvmemodel ]] && [[ $nvmefw ]]; then - nvmelist+=("${nvmemodel},${nvmefw}") + nvmelist+=("${nvmemodel},${nvmefw},${size_gb}") drivelist+=("${nvmemodel}") fi } @@ -1229,6 +1244,7 @@ editdb7(){ updatedb(){ hdmodel=$(printf "%s" "$1" | cut -d"," -f 1) fwrev=$(printf "%s" "$1" | cut -d"," -f 2) + size_gb=$(printf "%s" "$1" | cut -d"," -f 3) #echo arg1 "$1" >&2 # debug #echo arg2 "$2" >&2 # debug @@ -1243,15 +1259,23 @@ updatedb(){ if grep "$hdmodel"'":{"'"$fwrev" "$2" >/dev/null; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 else - fwstrng=\"$fwrev\" - fwstrng="$fwstrng":{\"compatibility_interval\":[{\"compatibility\":\"support\",\"not_yet_rolling_status\" - fwstrng="$fwstrng":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true, - fwstrng="$fwstrng"\"smart_test_ignore\":false,\"smart_attr_ignore\":false}]}, - - default=\"default\" - default="$default":{\"compatibility_interval\":[{\"compatibility\":\"support\",\"not_yet_rolling_status\" - default="$default":\"support\",\"fw_dsm_update_status_notify\":false,\"barebone_installable\":true, - default="$default"\"smart_test_ignore\":false,\"smart_attr_ignore\":false}]}}} + common_string="$common_string"\"size_gb\":$size_gb, + common_string="$common_string"\"compatibility_interval\":[{ + common_string="$common_string"\"compatibility\":\"support\", + common_string="$common_string"\"not_yet_rolling_status\":\"support\", + common_string="$common_string"\"fw_dsm_update_status_notify\":false, + common_string="$common_string"\"barebone_installable\":true, + common_string="$default"\"barebone_installable_v2\":\"auto\", + common_string="$common_string"\"smart_test_ignore\":false, + common_string="$common_string"\"smart_attr_ignore\":false + + fwstrng=\"$fwrev\":{ + fwstrng="$fwstrng$common_string" + fwstrng="$fwstrng"}]}, + + default=\"default\":{ + default="$default$common_string" + default="$default"}]}}} # Synology misspelt compatibility as compatbility if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then From a56f409bc96ab25b89bd5b6012aee8bcf1312239 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Jul 2024 11:22:52 +1000 Subject: [PATCH 450/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index d33a914..844b6c1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,9 @@ v3.5.94 - Updated to support newer drive db versions. - Synology added size_gb in host v7 version 8051. - Synology added barebone_installable_v2 in host v7 version 8054. +- Bug fix when restoring where memcheck service was only re-enabled on DVA models. +- Changed to add leading 0 to short vids reported by drive. + - Sets 2 vids in case DSM uses the short one (e.g. 0x05dc=brand and 0x5dc=brand). Note: You may need to run syno_hdd_db without the -n or --noupdate option, then update the drive database from "Storage Manager > HDD/SSD > Settings > Advanced > Update Now" then run syno_hdd_db with your preferred options. From 621405a523013d8607fc061208fdb2af4b503071 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Jul 2024 11:23:19 +1000 Subject: [PATCH 451/694] Update syno_hdd_db.sh v3.5.94 - Updated to support newer drive db versions. - Synology added size_gb in host v7 version 8051. - Synology added barebone_installable_v2 in host v7 version 8054. - Bug fix when restoring where memcheck service was only re-enabled on DVA models. - Changed to add leading 0 to short vids reported by drive. - Sets 2 vids in case DSM uses the short one (e.g. 0x05dc=brand and 0x5dc=brand). --- syno_hdd_db.sh | 83 +++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 45 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index faa8697..6840261 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -16,31 +16,7 @@ #-------------------------------------------------------------------------------------------------- # https://smarthdd.com/database/ -# CHANGES -# Bug fix for when there's multiple expansion unit models only the last expansion unit was processed. Issue #288 -# Bug fix for when there's multiple M2 adaptor card models only the last M2 card was processed. -# Bug fix for incorrectly matching model name variations as well as the exact model name. -# - e.g. RX1217 matched RX1217, RX1217rp and RX1217sas. -# -# Changed to enable creating storage pools/volumes on NVMe drives in a PCIe M.2 adaptor even if -# PCIe M.2 adaptor not found. This may allow creating NVMe volumes on 3rd party PCIe M.2 adaptors. -# -# Bug fix for -s, --showedits option for multiple of the same drive model -# but with different firmware versions. Issue #276 -# -# Changed disabling memory compatibility for older models. Issue #272 -# -# Hard coded /usr/syno/bin/ for Synology commands (to prevent $PATH issues). -# -# Now enables creating storage pools in Storage Manager for M.2 drives in PCIe adaptor cards. -# - E10M20-T1, M2D20, M2D18, M2D17 and FX2422N -# -# Added new vendor ids for Apacer, aigo, Lexar and Transcend NVMe drives. -# -# Now includes syno_hdd_vendor_ids.txt so users can add their NVMe drive's vendor id. -# - syno_hdd_vendor_ids.txt needs to be in the same folder as syno_hdd_db.sh -# -# Now warns if script is located on an M.2 volume. +# RECENT CHANGES # TODO # Enable SMART Attributes button on Storage Manager @@ -49,7 +25,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.93" +scriptver="v3.5.94" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -686,12 +662,10 @@ if [[ $restore == "yes" ]]; then # Update .db files from Synology /usr/syno/bin/syno_disk_db_update --update - # Enable SynoMemCheck.service for DVA models - if [[ ${model:0:3} == "dva" ]]; then - memcheck="/usr/lib/systemd/system/SynoMemCheck.service" - if [[ $(/usr/syno/bin/synogetkeyvalue "$memcheck" ExecStart) == "/bin/true" ]]; then - /usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart /usr/syno/bin/syno_mem_check - fi + # Enable SynoMemCheck.service if disabled + memcheck="/usr/lib/systemd/system/SynoMemCheck.service" + if [[ $(/usr/syno/bin/synogetkeyvalue "$memcheck" ExecStart) == "/bin/true" ]]; then + /usr/syno/bin/synosetkeyvalue "$memcheck" ExecStart /usr/syno/bin/syno_mem_check fi if [[ -z $restoreerr ]]; then @@ -772,6 +746,18 @@ set_vendor(){ if ! grep "$vid" "$vidfile2" >/dev/null; then /usr/syno/bin/synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" fi + + # Add leading 0 to short vid (change 0x5dc to 0x05dc) + if [[ ${#vid} -eq "5" ]]; then + vid="0x0${vid: -3}" + fi + if ! grep "$vid" "$vidfile" >/dev/null; then + /usr/syno/bin/synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" + fi + if ! grep "$vid" "$vidfile2" >/dev/null; then + /usr/syno/bin/synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" + fi + fi fi } @@ -997,7 +983,7 @@ else echo -e "\nHDD/SSD models found: ${#hdds[@]}" num="0" while [[ $num -lt "${#hdds[@]}" ]]; do - echo "${hdds[num]}" + echo "${hdds[num]} GB" num=$((num +1)) done echo @@ -1020,7 +1006,7 @@ if [[ $m2 != "no" ]]; then echo "M.2 drive models found: ${#nvmes[@]}" num="0" while [[ $num -lt "${#nvmes[@]}" ]]; do - echo "${nvmes[num]}" + echo "${nvmes[num]} GB" num=$((num +1)) done echo @@ -1259,16 +1245,16 @@ updatedb(){ if grep "$hdmodel"'":{"'"$fwrev" "$2" >/dev/null; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 else - common_string="$common_string"\"size_gb\":$size_gb, + common_string=\"size_gb\":$size_gb, common_string="$common_string"\"compatibility_interval\":[{ common_string="$common_string"\"compatibility\":\"support\", common_string="$common_string"\"not_yet_rolling_status\":\"support\", common_string="$common_string"\"fw_dsm_update_status_notify\":false, common_string="$common_string"\"barebone_installable\":true, - common_string="$default"\"barebone_installable_v2\":\"auto\", + common_string="$common_string"\"barebone_installable_v2\":\"auto\", common_string="$common_string"\"smart_test_ignore\":false, common_string="$common_string"\"smart_attr_ignore\":false - + fwstrng=\"$fwrev\":{ fwstrng="$fwstrng$common_string" fwstrng="$fwstrng"}]}, @@ -2023,16 +2009,23 @@ fi #------------------------------------------------------------------------------ # Finished +show_changes(){ + # $1 is drive_model,firmware_version,size_gb + drive_model="$(printf "%s" "$1" | cut -d"," -f 1)" + echo -e "\n$drive_model:" + jq -r --arg drive_model "$drive_model" '.disk_compatbility_info[$drive_model]' "${db1list[0]}" +} + # Show the changes if [[ ${showedits,,} == "yes" ]]; then - # Sort array to remove duplicates - IFS=$'\n' - drives_sorted=($(sort -u <<<"${drivelist[*]}")) - unset IFS - # Show the changes for drive model - for drive_model in "${drives_sorted[@]}"; do - echo -e "\n$drive_model:" - jq -r --arg drive_model "$drive_model" '.disk_compatbility_info[$drive_model]' "${db1list[0]}" + # HDDs/SSDs + for d in "${hdds[@]}"; do + show_changes "$d" + done + + # NVMe drives + for d in "${nvmes[@]}"; do + show_changes "$d" done fi From ca1791eecc35695a31f1f5864ad4f77820dafad3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Jul 2024 15:47:14 +1000 Subject: [PATCH 452/694] Update CHANGES.txt --- CHANGES.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 844b6c1..90e3780 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ v3.5.94 - Updated to support newer drive db versions. - - Synology added size_gb in host v7 version 8051. - - Synology added barebone_installable_v2 in host v7 version 8054. + - Synology added size_gb in a recent host v7 version (in SynoOfflinePack 764). + - Synology added barebone_installable_v2 in the latest host v7 version (in SynoOfflinePack 787). - Bug fix when restoring where memcheck service was only re-enabled on DVA models. - Changed to add leading 0 to short vids reported by drive. - Sets 2 vids in case DSM uses the short one (e.g. 0x05dc=brand and 0x5dc=brand). From a0df053b0e7a7e7f6b85b736a9ec764075115386 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:47:52 +1000 Subject: [PATCH 453/694] Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a6b63c..b3ba1cd 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,16 @@ ### Options when running the script DSM 7.2.1 already has WDDA disabled -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor -e, --email Disable colored text in output scheduler emails - --restore Undo all changes made by the script + -S, --ssd=DRIVE Enable write_mostly on slow internal drives so DSM + runs from the fast internal drive(s). + -S automatically sets internal SSDs as DSM default + --ssd=DRIVE requires the fast drive(s) as argument, + or restore as the argument to set drives to default + --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc + --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc + --ssd=restore + --restore Undo all changes made by the script (except -S --ssd) + --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 auto-updating. AGE must be a number: 0 or greater From 0c3054b8efffac70c17a39f5e54ed680d1774efd Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:48:30 +1000 Subject: [PATCH 454/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 90e3780..f2700b7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.96 +- Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s). + v3.5.94 - Updated to support newer drive db versions. - Synology added size_gb in a recent host v7 version (in SynoOfflinePack 764). From 6f2416d5b83a51070ca68b291a3e9ed4e69c0abf Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:49:21 +1000 Subject: [PATCH 455/694] Update syno_hdd_db.sh v3.5.96 - Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s). --- syno_hdd_db.sh | 167 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 140 insertions(+), 27 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 6840261..cd9d1ec 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -17,6 +17,10 @@ # https://smarthdd.com/database/ # RECENT CHANGES +# Make DSM read md0 and md1 from SSD drive(s) if internal SSD and HDD are installed. +# https://github.com/007revad/Synology_HDD_db/issues/318 +# https://www.techspark.de/speed-up-synology-dsm-with-hdd-ssd/ +# https://raid.wiki.kernel.org/index.php/Write-mostly # TODO # Enable SMART Attributes button on Storage Manager @@ -25,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.94" +scriptver="v3.5.96" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -38,7 +42,7 @@ if [ ! "$(basename "$BASH")" = bash ]; then fi # Check script is running on a Synology NAS -if ! /usr/bin/uname -a | grep -i synology >/dev/null; then +if ! /usr/bin/uname -a | grep -q -i synology; then echo "This script is NOT running on a Synology NAS!" echo "Copy the script to a folder on the Synology" echo "and run it from there." @@ -69,7 +73,15 @@ Options: DSM 7.2.1 already has WDDA disabled -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor -e, --email Disable colored text in output scheduler emails - --restore Undo all changes made by the script + -S, --ssd=DRIVE Enable write_mostly on slow internal drives so DSM + runs from the fast internal drive(s). + -S automatically sets internal SSDs as DSM default + --ssd=DRIVE requires the fast drive(s) as argument, + or restore as the argument to set drives to default + --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc + --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc + --ssd=restore + --restore Undo all changes made by the script (except -S --ssd) --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater @@ -96,12 +108,12 @@ args=("$@") # Check for flags with getopt -if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ - restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ +if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ + ssd:,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do - case "${1,,}" in + case "$1" in --restore) # Restore changes from backups restore=yes break @@ -109,6 +121,20 @@ if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -l \ -s|--showedits) # Show edits done to host db file showedits=yes ;; + -S) # Enable writemostly for md0 and md1 + ssd=yes + ;; + --ssd) # Enable writemostly for md0 and md1 + ssd=yes + if [[ ${2,,} == "restore" ]]; then + ssd_restore=yes + else + IFS=$',' + for d in $2; do ssds_writemostly+=("${d,,}"); done + unset IFS + fi + shift + ;; -n|--nodbupdate|--noupdate) # Disable disk compatibility db updates nodbupdate=yes ;; @@ -337,7 +363,7 @@ scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) # shellcheck disable=SC2002 # Don't warn about "Useless cat" -if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then +if cat /proc/mdstat | grep "$md" | grep -q nvme; then echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" fi @@ -734,7 +760,7 @@ set_vendor(){ if [[ $vendor ]]; then # DS1817+, DS1517+, RS1219+, RS818+ don't have pci_vendor_ids.conf if [[ "$vidfile" ]]; then - if ! grep "$vid" "$vidfile" >/dev/null; then + if ! grep -q "$vid" "$vidfile"; then /usr/syno/bin/synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" val=$(/usr/syno/bin/synogetkeyvalue "$vidfile" "${vid,,}") if [[ $val == "${vendor}" ]]; then @@ -743,7 +769,7 @@ set_vendor(){ echo -e "\nFailed to add $vendor to pci_vendor_ids!" >&2 fi fi - if ! grep "$vid" "$vidfile2" >/dev/null; then + if ! grep -q "$vid" "$vidfile2"; then /usr/syno/bin/synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" fi @@ -751,10 +777,10 @@ set_vendor(){ if [[ ${#vid} -eq "5" ]]; then vid="0x0${vid: -3}" fi - if ! grep "$vid" "$vidfile" >/dev/null; then + if ! grep -q "$vid" "$vidfile"; then /usr/syno/bin/synosetkeyvalue "$vidfile" "${vid,,}" "$vendor" fi - if ! grep "$vid" "$vidfile2" >/dev/null; then + if ! grep -q "$vid" "$vidfile2"; then /usr/syno/bin/synosetkeyvalue "$vidfile2" "${vid,,}" "$vendor" fi @@ -1085,6 +1111,7 @@ else echo fi + #------------------------------------------------------------------------------ # Check databases and add our drives if needed @@ -1123,10 +1150,10 @@ fi getdbtype(){ # Detect drive db type # Synology misspelt compatibility as compatbility - if grep -F '{"disk_compatbility_info":' "$1" >/dev/null; then + if grep -q -F '{"disk_compatbility_info":' "$1"; then # DSM 7 drive db files start with {"disk_compatbility_info": dbtype=7 - elif grep -F '{"success":1,"list":[' "$1" >/dev/null; then + elif grep -q -F '{"success":1,"list":[' "$1"; then # DSM 6 drive db files start with {"success":1,"list":[ dbtype=6 else @@ -1242,7 +1269,7 @@ updatedb(){ if [[ $dbtype -gt "6" ]]; then # db type 7 used from DSM 7.1 and later - if grep "$hdmodel"'":{"'"$fwrev" "$2" >/dev/null; then + if grep -q "$hdmodel"'":{"'"$fwrev" "$2"; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 else common_string=\"size_gb\":$size_gb, @@ -1264,13 +1291,13 @@ updatedb(){ default="$default"}]}}} # Synology misspelt compatibility as compatbility - if grep '"disk_compatbility_info":{}' "$2" >/dev/null; then + if grep -q '"disk_compatbility_info":{}' "$2"; then # Replace "disk_compatbility_info":{} with # "disk_compatbility_info":{"WD40PURX-64GVNY0":{"80.00A80":{ ... }}},"default":{ ... }}}} #echo "Edit empty db file:" # debug editdb7 "empty" "$2" - elif grep '"'"$hdmodel"'":' "$2" >/dev/null; then + elif grep -q '"'"$hdmodel"'":' "$2"; then # Replace "WD40PURX-64GVNY0":{ with "WD40PURX-64GVNY0":{"80.00A80":{ ... }}}, #echo "Insert firmware version:" # debug editdb7 "insert" "$2" @@ -1283,25 +1310,25 @@ updatedb(){ fi # Edit existing drives in db with compatibility:unverified # Issue #224 - if grep 'unverified' "$2" >/dev/null; then + if grep -q 'unverified' "$2"; then sed -i 's/unverified/support/g' "$2" - if ! grep 'unverified' "$2" >/dev/null; then + if ! grep -q 'unverified' "$2"; then echo -e "Edited unverified drives in ${Cyan}$(basename -- "$2")${Off}" >&2 fi fi # Edit existing drives in db with compatibility:not_support if [[ $incompatible == "yes" ]]; then - if grep 'not_support' "$2" >/dev/null; then + if grep -q 'not_support' "$2"; then sed -i 's/not_support/support/g' "$2" - if ! grep 'not_support' "$2" >/dev/null; then + if ! grep -q 'not_support' "$2"; then echo -e "Edited incompatible drives in ${Cyan}$(basename -- "$2")${Off}" >&2 fi fi fi elif [[ $dbtype -eq "6" ]]; then # db type 6 used up to DSM 7.0.1 - if grep "$hdmodel" "$2" >/dev/null; then + if grep -q "$hdmodel" "$2"; then echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 else # example: @@ -1402,7 +1429,7 @@ enable_card(){ backupdb "$adapter_cards2" long # Check if section exists - if ! grep '^\['"$2"'\]$' "$1" >/dev/null; then + if ! grep -q '^\['"$2"'\]$' "$1"; then echo -e "Section [$2] not found in $(basename -- "$1")!" >&2 return fi @@ -1608,7 +1635,7 @@ edit_modeldtb(){ # Edit model.dts for c in "${cards[@]}"; do # Edit model.dts if needed - if ! grep "$c" "$dtb_file" >/dev/null; then + if ! grep -q "$c" "$dtb_file"; then dts_m2_card "$c" "$dts_file" echo -e "Added ${Yellow}$c${Off} to ${Cyan}model${hwrev}.dtb${Off}" >&2 else @@ -1663,6 +1690,91 @@ for c in "${m2cards[@]}"; do done +#------------------------------------------------------------------------------ +# Set or restore writemostly + +set_writemostly(){ + # $1 is writemostly or in_sync + # $2 is sata1 or sas1 or sda etc + if [[ ${1::2} == "sd" ]]; then + # sda etc + # md0 DSM system partition + echo "$1" > /sys/block/md0/md/dev-"${2}"1/state + # Show setting + echo -n "$2 DSM partition: " + cat /sys/block/md0/md/dev-"${2}"1/state + + # md1 DSM swap partition + echo "$1" > /sys/block/md1/md/dev-"${2}"2/state + # Show setting + echo -n "$2 Swap partition: " + cat /sys/block/md1/md/dev-"${2}"2/state + else + # sata1 or sas1 etc + # md0 DSM system partition + echo "$1" > /sys/block/md0/md/dev-"${2}"p1/state + # Show setting + echo -n "$2 DSM partition: " + cat /sys/block/md0/md/dev-"${2}"p1/state + + # md1 DSM swap partition + echo "$1" > /sys/block/md1/md/dev-"${2}"p2/state + # Show setting + echo -n "$2 Swap partition: " + cat /sys/block/md1/md/dev-"${2}"p2/state + fi +} + +if [[ $ssd == "yes" ]]; then + # Get array of internal drives + readarray -t internal_drives < <(synodisk --enum -t internal | grep 'Disk path') + + if [[ $ssd_restore == "yes" ]]; then + # Restore all internal drives to just in_sync + echo -e "\nRestoring internal drive's state:" + for idrive in "${internal_drives[@]}"; do + #if ! grep -q "write_mostly"; then + set_writemostly -writemostly "$(basename -- "$idrive")" + #fi + done + + elif [[ ${#ssds_writemostly[@]} -gt "0" ]]; then + # User specified their fast drive(s) + echo -e "\nSetting slow internal HDDs state to write_mostly:" + for idrive in "${internal_drives[@]}"; do + if [[ ! ${ssds_writemostly[*]} =~ $idrive ]]; then + set_writemostly writemostly "$(basename -- "$idrive")" + fi + done + + else + # Get list of internal HDDs and qty of SSDs + internal_ssd_qty="0" + for idrive in "${internal_drives[@]}"; do + internal_drive="$(echo "$idrive" | awk '{printf $4}')" + if synodisk --isssd "$internal_drive" >/dev/null; then + # exit code 0 = is not SSD + # exit code 1 = is SSD + + # Add internal HDDs to array + internal_hdds+=("$internal_drive") + else + # Count number of internal 2.5 inch SSDs + internal_ssd_qty=$((internal_ssd_qty +1)) + fi + done + + # Set HDDs to writemostly if there's also internal SSDs + if [[ $internal_ssd_qty -gt "0" ]] && [[ ${#internal_hdds[@]} -gt "0" ]]; then + # There are internal SSDs and HDDs + echo -e "\nSetting internal HDDs state to write_mostly:" + for idrive in "${internal_hdds[@]}"; do + set_writemostly writemostly "$(basename -- "$idrive")" + done + fi + fi +fi + #------------------------------------------------------------------------------ # Edit /etc.defaults/synoinfo.conf @@ -1836,7 +1948,7 @@ fi # Enable nvme support # shellcheck disable=SC2010 # Don't warn about "Don't use ls | grep" -if ls /dev | grep nvme >/dev/null ; then +if ls /dev | grep -q nvme; then if [[ $m2 != "no" ]]; then # Check if nvme support is enabled setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo supportnvme)" @@ -1868,7 +1980,7 @@ fi # Enable m2 volume support # shellcheck disable=SC2010 # Don't warn about "Don't use ls | grep" -if ls /dev | grep "nv[em]" >/dev/null ; then +if ls /dev | grep -q "nv[em]"; then if [[ $m2 != "no" ]]; then if [[ $m2exists == "yes" ]]; then # Check if m2 volume support is enabled @@ -1971,7 +2083,7 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then # DSM 7.2 and later if [[ ${#m2cards[@]} -gt "0" ]] || [[ $forcepci == "yes" ]]; then - if grep 'notSupportM2Pool_addOnCard' "$strgmgr" >/dev/null; then + if grep -q 'notSupportM2Pool_addOnCard' "$strgmgr"; then # Backup storage_panel.js" if [[ $buildnumber -gt 64570 ]]; then @@ -1994,7 +2106,7 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then sed -i 's/notSupportM2Pool_addOnCard:this.T("disk_info","disk_reason_m2_add_on_card"),//g' "$strgmgr" sed -i 's/},{isConditionInvalid:0/dev/null; then + if ! grep -q 'notSupportM2Pool_addOnCard' "$strgmgr"; then echo -e "Enabled creating pool on drives in M.2 adaptor card." else echo -e "${Error}ERROR${Off} Failed to enable creating pool on drives in M.2 adaptor card!" @@ -2052,3 +2164,4 @@ if [[ $dsm -eq "6" ]] || [[ $rebootmsg == "yes" ]]; then fi exit + From e681a95546747af58089fc17c4e46aeff2981f2d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:00:04 +1000 Subject: [PATCH 456/694] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index b3ba1cd..74d387b 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,9 @@ #### What the script does: * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * DSM only uses the max memory setting when calculating the reserved RAM area size for SSD caches. +* Optionally set writemostly on your internal HDDs drives so DSM will normally read from your faster SSD(s). + * It can automatically set DSM to read from your internal SSDs. + * Or you can tell the script which drive(s) DSM should read from. * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. From 75f920e48eeaa624904a6c401838018cd9c9c75f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:02:25 +1000 Subject: [PATCH 457/694] Update CHANGES.txt --- CHANGES.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index f2700b7..f34d4f0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,7 @@ v3.5.96 -- Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s). +- Added option to set writemostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). + - It can automatically set DSM to read from your internal SSDs. + - Or you can tell the script which internal drive(s) DSM should read from. v3.5.94 - Updated to support newer drive db versions. From d9694f0832270faf0ec066e9e8561f59f3500e30 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:03:29 +1000 Subject: [PATCH 458/694] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 74d387b..0e16517 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,9 @@ #### What the script does: * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * DSM only uses the max memory setting when calculating the reserved RAM area size for SSD caches. -* Optionally set writemostly on your internal HDDs drives so DSM will normally read from your faster SSD(s). +* Optionally set writemostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). * It can automatically set DSM to read from your internal SSDs. - * Or you can tell the script which drive(s) DSM should read from. + * Or you can tell the script which internal drive(s) DSM should read from. * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. From d874f141538a6d1e2f7cd2cb2f1a844e6386e27b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:06:12 +1000 Subject: [PATCH 459/694] Update syno_hdd_db.sh v3.5.96 - Added option to set writemostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). - It can automatically set DSM to read from your internal SSDs. - Or you can tell the script which internal drive(s) DSM should read from. --- syno_hdd_db.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index cd9d1ec..beb944d 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1727,14 +1727,14 @@ set_writemostly(){ if [[ $ssd == "yes" ]]; then # Get array of internal drives - readarray -t internal_drives < <(synodisk --enum -t internal | grep 'Disk path') + readarray -t internal_drives < <(synodisk --enum -t internal | grep 'Disk path' | cut -d"/" -f3) if [[ $ssd_restore == "yes" ]]; then # Restore all internal drives to just in_sync echo -e "\nRestoring internal drive's state:" for idrive in "${internal_drives[@]}"; do #if ! grep -q "write_mostly"; then - set_writemostly -writemostly "$(basename -- "$idrive")" + set_writemostly -writemostly "$idrive" #fi done @@ -1743,7 +1743,7 @@ if [[ $ssd == "yes" ]]; then echo -e "\nSetting slow internal HDDs state to write_mostly:" for idrive in "${internal_drives[@]}"; do if [[ ! ${ssds_writemostly[*]} =~ $idrive ]]; then - set_writemostly writemostly "$(basename -- "$idrive")" + set_writemostly writemostly "$idrive" fi done @@ -1769,7 +1769,7 @@ if [[ $ssd == "yes" ]]; then # There are internal SSDs and HDDs echo -e "\nSetting internal HDDs state to write_mostly:" for idrive in "${internal_hdds[@]}"; do - set_writemostly writemostly "$(basename -- "$idrive")" + set_writemostly writemostly "$idrive" done fi fi From 7a63586290dc253f87c527ec1e23643ec12b9268 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:07:00 +1000 Subject: [PATCH 460/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index f34d4f0..856c7f0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.5.96 -- Added option to set writemostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). +- Added option to set write_mostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). - It can automatically set DSM to read from your internal SSDs. - Or you can tell the script which internal drive(s) DSM should read from. From 53339293dc23bca81f3961172fcea6f0c08cf40a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:07:17 +1000 Subject: [PATCH 461/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e16517..7270654 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ #### What the script does: * Optionally disable DSM's "support_memory_compatibility" to prevent non-Synology memory notifications. * Optionally edits max supported memory to match the amount of memory installed, if installed memory is greater than the current max memory setting. * DSM only uses the max memory setting when calculating the reserved RAM area size for SSD caches. -* Optionally set writemostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). +* Optionally set write_mostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). * It can automatically set DSM to read from your internal SSDs. * Or you can tell the script which internal drive(s) DSM should read from. * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). From b0b472ea6395130087c8e4a69ef6cdbd7a255ff2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:11:54 +1000 Subject: [PATCH 462/694] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7270654..84ba81b 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,6 @@ ### Options when running the script --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc --ssd=restore --restore Undo all changes made by the script (except -S --ssd) - --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 auto-updating. AGE must be a number: 0 or greater From 0c3442430e818082a57d849cb8324fb0ca22cffe Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:17:43 +1000 Subject: [PATCH 463/694] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 84ba81b..f1dd419 100644 --- a/README.md +++ b/README.md @@ -86,10 +86,9 @@ ### Options when running the script -e, --email Disable colored text in output scheduler emails -S, --ssd=DRIVE Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s). - -S automatically sets internal SSDs as DSM default + -S automatically sets internal SSDs as DSM preferred --ssd=DRIVE requires the fast drive(s) as argument, - or restore as the argument to set drives to default - --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc + or restore as the argument to reset drives to default --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc --ssd=restore --restore Undo all changes made by the script (except -S --ssd) From ecd406aefe9375120b5e9ff507f8f65c2a5ebc9f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:21:33 +1000 Subject: [PATCH 464/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f1dd419..b732776 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,7 @@ ### Credits - Thanks to dwabraxus and aferende for help detecting connected expansion units. - Thanks to bartoque on the Synology subreddit for the tip on making the script download the latest release from GitHub. - Thanks to nicolerenee for pointing out the easiest way to enable creating M.2 storage pools and volumes in Storage Manager. +- Thanks to Xeroxxx for the writemostly suggestion and their writeup here: https://www.techspark.de/speed-up-synology-dsm-with-hdd-ssd/ ### Donators From 738359562827fc5a48282218349687ecdd93ae8f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:22:04 +1000 Subject: [PATCH 465/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 856c7f0..c376567 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,6 +3,9 @@ v3.5.96 - It can automatically set DSM to read from your internal SSDs. - Or you can tell the script which internal drive(s) DSM should read from. +Thanks to Xeroxxx for the writemostly suggestion and their writeup here: +https://www.techspark.de/speed-up-synology-dsm-with-hdd-ssd/ + v3.5.94 - Updated to support newer drive db versions. - Synology added size_gb in a recent host v7 version (in SynoOfflinePack 764). From 2af83c51b0764fb06c81b6820b6936fa88db9296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=84?= <1109954+Xeroxxx@users.noreply.github.com> Date: Thu, 18 Jul 2024 23:13:57 +0200 Subject: [PATCH 466/694] feat(write_mostly): More specific description For further documentation check README. --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index beb944d..d6051c9 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -73,8 +73,8 @@ Options: DSM 7.2.1 already has WDDA disabled -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor -e, --email Disable colored text in output scheduler emails - -S, --ssd=DRIVE Enable write_mostly on slow internal drives so DSM - runs from the fast internal drive(s). + -S, --ssd=DRIVE Enable write_mostly on internal HDDs so DSM primary + reads from internal SSDs or your specified drives. -S automatically sets internal SSDs as DSM default --ssd=DRIVE requires the fast drive(s) as argument, or restore as the argument to set drives to default From 49e17394b3102d83a78491b4e58ed3495f0ea4e7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 19 Jul 2024 12:45:57 +1000 Subject: [PATCH 467/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b732776..c025d01 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Dave Smart | dweagle79 | lingyinsam | +| Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | | Lee Booy | Bünyamin Olgun | Hartmut Heinbach | Alexander Gundermann | From da4a23a2d3b32757a177b308054bc7e48744ce37 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 22 Jul 2024 11:17:28 +1000 Subject: [PATCH 468/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c025d01..f793878 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | From 8856552331abd57c9755ae96deb6b0be8ccacc99 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:36:38 +1000 Subject: [PATCH 469/694] Update syno_hdd_vendor_ids.txt - Added 0x1e4b="FIKWOT" - Changed order to by vid --- syno_hdd_vendor_ids.txt | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/syno_hdd_vendor_ids.txt b/syno_hdd_vendor_ids.txt index 8cd6212..fe52af8 100644 --- a/syno_hdd_vendor_ids.txt +++ b/syno_hdd_vendor_ids.txt @@ -2,22 +2,24 @@ # # Only edit this file if the script warns you about a missing vendor id. -0x1dbe="ADATA" +0x025e="Solidigm" +0x05dc="Lexar" 0x0ed1="aigo" -0x1bdc="Apacer" -0x1b1c="Corsair" -0x1cfa="Corsair" +0x10ec="TEAMGROUP" +0x137e="Patriot" 0x1458="Gigabyte" -0x1e0f="KIOXIA" -0x05dc="Lexar" 0x1462="MSI" -0x1f40="Netac" -0x137e="Patriot" -0x1987="Phison" 0x196e="PNY" +0x1987="Phison" +0x1b1c="Corsair" +0x1bdc="Apacer" 0x1c5c="SK Hynix" -0x025e="Solidigm" -0x10ec="TEAMGROUP" -0x1d79="Transcend" 0x1cc4="UMIS" +0x1cfa="Corsair" +0x1d79="Transcend" +0x1dbe="ADATA" +0x1e0f="KIOXIA" 0x1e49="ZHITAI" +0x1e4b="FIKWOT" +0x1f40="Netac" + From c69054c6919989d42dfadf1854ee128f50953c71 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:59:49 +1000 Subject: [PATCH 470/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f793878..2fc7127 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Oleksandr Antonishak | +| | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | From b8f45e97243a64b117d14adeddc8f40bed213a62 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 29 Jul 2024 18:07:19 +1000 Subject: [PATCH 471/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index c376567..73b71a3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.5.97 +- Changed silently skip empty .db.new files with showing an error. Issue #175 +- Changed to warn if if db file is 0 bytes. + v3.5.96 - Added option to set write_mostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). - It can automatically set DSM to read from your internal SSDs. From 738562251b7f52505654a1c2f766833a16335443 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 29 Jul 2024 18:08:31 +1000 Subject: [PATCH 472/694] Update syno_hdd_db.sh v3.5.97 - Changed silently skip empty .db.new files with showing an error. Issue #175 - Changed to warn if if db file is 0 bytes. --- syno_hdd_db.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index d6051c9..588df1c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.96" +scriptver="v3.5.97" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -74,11 +74,10 @@ Options: -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor -e, --email Disable colored text in output scheduler emails -S, --ssd=DRIVE Enable write_mostly on internal HDDs so DSM primary - reads from internal SSDs or your specified drives. - -S automatically sets internal SSDs as DSM default + reads from internal SSDs or your specified drives + -S automatically sets internal SSDs as DSM preferred --ssd=DRIVE requires the fast drive(s) as argument, - or restore as the argument to set drives to default - --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc + or restore as the argument to reset drives to default --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc --ssd=restore --restore Undo all changes made by the script (except -S --ssd) @@ -1156,8 +1155,14 @@ getdbtype(){ elif grep -q -F '{"success":1,"list":[' "$1"; then # DSM 6 drive db files start with {"success":1,"list":[ dbtype=6 + elif [[ ! $1 =~ .*'.db.new' ]]; then + if [[ $(stat -c%s "$1") -eq "0" ]]; then + echo -e "${Error}ERROR${Off} $(basename -- "${1}") is 0 bytes!" >&2 + else + echo -e "${Error}ERROR${Off} Unknown database type $(basename -- "${1}")!" >&2 + fi + dbtype=1 else - echo -e "${Error}ERROR${Off} Unknown database type $(basename -- "${1}")!" >&2 dbtype=1 fi #echo "db type: $dbtype" >&2 # debug @@ -1980,7 +1985,7 @@ fi # Enable m2 volume support # shellcheck disable=SC2010 # Don't warn about "Don't use ls | grep" -if ls /dev | grep -q "nv[em]"; then +if ls /dev | grep -q "nv[cm]"; then if [[ $m2 != "no" ]]; then if [[ $m2exists == "yes" ]]; then # Check if m2 volume support is enabled From bfe82041822d59c1ea6508985ff699d8aacf1654 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 29 Jul 2024 18:08:47 +1000 Subject: [PATCH 473/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 73b71a3..ad11d2b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ v3.5.97 - Changed silently skip empty .db.new files with showing an error. Issue #175 -- Changed to warn if if db file is 0 bytes. +- Changed to warn if db file is 0 bytes. v3.5.96 - Added option to set write_mostly for your internal HDDs so DSM will normally read from your faster internal SSD(s). From 96f157d8f51dcfba4de53efb7ccea3ea79060399 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 2 Aug 2024 10:29:45 +1000 Subject: [PATCH 474/694] Update FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 41ec634..f659812 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,3 @@ github: 007revad +buy_me_a_coffee: 007revad custom: ["https://www.paypal.me/007revad"] From d8f1679bc37dc17297b35a0d9500c5bd9127274b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 3 Aug 2024 17:49:45 +1000 Subject: [PATCH 475/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ad11d2b..6f54990 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.98 +- Changed to install dtc automaticall if needed and running from task scheduler. + v3.5.97 - Changed silently skip empty .db.new files with showing an error. Issue #175 - Changed to warn if db file is 0 bytes. From 5cb43786c5ed4360d927041e65edf2769e163d22 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 3 Aug 2024 17:50:49 +1000 Subject: [PATCH 476/694] Update syno_hdd_db.sh v3.5.98 - Changed to install dtc automatically if needed and script is running from task scheduler. --- syno_hdd_db.sh | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 588df1c..1acb4bc 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.97" +scriptver="v3.5.98" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1564,6 +1564,33 @@ EOM2D17 fi } +is_schedule_running(){ + # $1 is script's filename. e.g. syno_hdd_db.sh etc + local file="/usr/syno/etc/esynoscheduler/esynoscheduler.db" + local rows offset task status pid result + + # Get number of rows in database + rows=$(sqlite3 "${file}" < # example: @@ -1580,6 +1607,8 @@ install_binfile(){ # Download binfile if [[ $autoupdate == "yes" ]]; then reply=y + elif is_schedule_running "$(basename -- "$0")"; then + reply=y else echo -e "\nNeed to download ${1}" echo -e "${Cyan}Do you want to download ${1}?${Off} [y/n]" From e86b575537e72c3397d900c3ea0cc4e132f6fc1a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 3 Aug 2024 17:57:05 +1000 Subject: [PATCH 477/694] Update CHANGES.txt --- CHANGES.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 6f54990..36b1124 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,9 @@ v3.5.98 -- Changed to install dtc automaticall if needed and running from task scheduler. +- Changed to automatically download and install dtc if all of the following 4 conditions are met: + 1. dtc is not already installed. + 2. /bin/dtc or dtc are not in the same folder as the script. + 3. The script needs dtc. + 4. The script is running from task scheduler. v3.5.97 - Changed silently skip empty .db.new files with showing an error. Issue #175 From c5a0ebfb59f865926b501470206cf7d325b797d2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 9 Aug 2024 15:14:52 +1000 Subject: [PATCH 478/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2fc7127..5d3c0cd 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | +| vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | From 236e2dfa387ba830d66580a7f2ee1ee1852f14fb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 9 Aug 2024 15:15:38 +1000 Subject: [PATCH 479/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2fc7127..5d3c0cd 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | +| vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | | Sven 'ctraltdelete' | Thomas Horn | Christian | Simon Azzouni | From 6a7546e662ed74c6972182168ece94d93d9a1409 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 13 Aug 2024 07:53:51 +1000 Subject: [PATCH 480/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5d3c0cd..35c8a66 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ #### What the script does: * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. - * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(need to run script after each boot)**. + * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(schedule the script to run boot)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From 1883038e948c852aa29e0d2668dbeb13990e0b03 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:25:46 +1000 Subject: [PATCH 481/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 36b1124..f01be33 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,7 @@ v3.5.98 2. /bin/dtc or dtc are not in the same folder as the script. 3. The script needs dtc. 4. The script is running from task scheduler. +- Bug fix for "Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s)." Issue #340 v3.5.97 - Changed silently skip empty .db.new files with showing an error. Issue #175 From 8f6488e3bfefcfc14bdb43e601e51e67f586362a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:26:12 +1000 Subject: [PATCH 482/694] Update syno_hdd_db.sh - Bug fix for "Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s)." Issue #340 --- syno_hdd_db.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 1acb4bc..c11726d 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1785,13 +1785,12 @@ if [[ $ssd == "yes" ]]; then # Get list of internal HDDs and qty of SSDs internal_ssd_qty="0" for idrive in "${internal_drives[@]}"; do - internal_drive="$(echo "$idrive" | awk '{printf $4}')" - if synodisk --isssd "$internal_drive" >/dev/null; then + if synodisk --isssd /dev/"${idrive:?}" >/dev/null; then # exit code 0 = is not SSD # exit code 1 = is SSD # Add internal HDDs to array - internal_hdds+=("$internal_drive") + internal_hdds+=("$idrive") else # Count number of internal 2.5 inch SSDs internal_ssd_qty=$((internal_ssd_qty +1)) From 92daf9f3331fff18b31a49d5e06f65e24f2cc5a1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:23:40 +1000 Subject: [PATCH 483/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index f01be33..3263c9e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,7 @@ v3.5.98 3. The script needs dtc. 4. The script is running from task scheduler. - Bug fix for "Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s)." Issue #340 +- Improved output to make it clear which drive(s) have most-writly set. v3.5.97 - Changed silently skip empty .db.new files with showing an error. Issue #175 From 613b54fff183d139ace32d258f8c99ae61902d0d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:23:49 +1000 Subject: [PATCH 484/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c11726d..778f138 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1730,31 +1730,36 @@ done set_writemostly(){ # $1 is writemostly or in_sync # $2 is sata1 or sas1 or sda etc + local model + # Show drive model + model="$(cat /sys/block/"${2}"/device/model | xargs)" + echo -e "${Yellow}$model${Off}" + if [[ ${1::2} == "sd" ]]; then # sda etc # md0 DSM system partition echo "$1" > /sys/block/md0/md/dev-"${2}"1/state # Show setting - echo -n "$2 DSM partition: " + echo -n " $2 DSM partition: " cat /sys/block/md0/md/dev-"${2}"1/state # md1 DSM swap partition echo "$1" > /sys/block/md1/md/dev-"${2}"2/state # Show setting - echo -n "$2 Swap partition: " + echo -n " $2 Swap partition: " cat /sys/block/md1/md/dev-"${2}"2/state else # sata1 or sas1 etc # md0 DSM system partition echo "$1" > /sys/block/md0/md/dev-"${2}"p1/state # Show setting - echo -n "$2 DSM partition: " + echo -n " $2 DSM partition: " cat /sys/block/md0/md/dev-"${2}"p1/state # md1 DSM swap partition echo "$1" > /sys/block/md1/md/dev-"${2}"p2/state # Show setting - echo -n "$2 Swap partition: " + echo -n " $2 Swap partition: " cat /sys/block/md1/md/dev-"${2}"p2/state fi } @@ -1765,7 +1770,7 @@ if [[ $ssd == "yes" ]]; then if [[ $ssd_restore == "yes" ]]; then # Restore all internal drives to just in_sync - echo -e "\nRestoring internal drive's state:" + echo -e "\nRestoring internal drive's state" for idrive in "${internal_drives[@]}"; do #if ! grep -q "write_mostly"; then set_writemostly -writemostly "$idrive" @@ -1774,7 +1779,7 @@ if [[ $ssd == "yes" ]]; then elif [[ ${#ssds_writemostly[@]} -gt "0" ]]; then # User specified their fast drive(s) - echo -e "\nSetting slow internal HDDs state to write_mostly:" + echo -e "\nSetting slow internal HDDs state to write_mostly" for idrive in "${internal_drives[@]}"; do if [[ ! ${ssds_writemostly[*]} =~ $idrive ]]; then set_writemostly writemostly "$idrive" @@ -1800,7 +1805,7 @@ if [[ $ssd == "yes" ]]; then # Set HDDs to writemostly if there's also internal SSDs if [[ $internal_ssd_qty -gt "0" ]] && [[ ${#internal_hdds[@]} -gt "0" ]]; then # There are internal SSDs and HDDs - echo -e "\nSetting internal HDDs state to write_mostly:" + echo -e "\nSetting internal HDDs state to write_mostly" for idrive in "${internal_hdds[@]}"; do set_writemostly writemostly "$idrive" done From c7f0132c090a259b26af62cff7558c5aec2d6fd5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:24:42 +1000 Subject: [PATCH 485/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3263c9e..f938db2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,7 +5,7 @@ v3.5.98 3. The script needs dtc. 4. The script is running from task scheduler. - Bug fix for "Enable write_mostly on slow internal drives so DSM runs from the fast internal drive(s)." Issue #340 -- Improved output to make it clear which drive(s) have most-writly set. +- Improved output to make it clear which drive(s) have most_writely set. v3.5.97 - Changed silently skip empty .db.new files with showing an error. Issue #175 From a65077df147dab20da3b6950956941bab11570bb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 16 Aug 2024 08:59:45 +1000 Subject: [PATCH 486/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index f938db2..fa06a23 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.99-RC +- Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 + v3.5.98 - Changed to automatically download and install dtc if all of the following 4 conditions are met: 1. dtc is not already installed. From 3fbd1bb84c1fdfc3f2c321246ccca7a42d5def45 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 16 Aug 2024 08:59:54 +1000 Subject: [PATCH 487/694] Update syno_hdd_db.sh v3.5.99-RC - Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 --- syno_hdd_db.sh | 133 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 87 insertions(+), 46 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 778f138..d6f5646 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.98" +scriptver="v3.5.99" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -113,13 +113,6 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ eval set -- "$options" while true; do case "$1" in - --restore) # Restore changes from backups - restore=yes - break - ;; - -s|--showedits) # Show edits done to host db file - showedits=yes - ;; -S) # Enable writemostly for md0 and md1 ssd=yes ;; @@ -134,6 +127,13 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ fi shift ;; + --restore) # Restore changes from backups + restore=yes + break + ;; + -s|--showedits) # Show edits done to host db file + showedits=yes + ;; -n|--nodbupdate|--noupdate) # Disable disk compatibility db updates nodbupdate=yes ;; @@ -566,6 +566,44 @@ vidfile="/usr/syno/etc.defaults/pci_vendor_ids.conf" vidfile2="/usr/syno/etc/pci_vendor_ids.conf" +set_writemostly(){ + # $1 is writemostly or -writemostly + # $2 is sata1 or sas1 or sda etc + local model + # Show drive model + model="$(cat /sys/block/"${2}"/device/model | xargs)" + echo -e "${Yellow}$model${Off}" + + if [[ ${1::2} == "sd" ]]; then + # sda etc + # md0 DSM system partition + echo "$1" > /sys/block/md0/md/dev-"${2}"1/state + # Show setting + echo -n " $2 DSM partition: " + cat /sys/block/md0/md/dev-"${2}"1/state + + # md1 DSM swap partition + echo "$1" > /sys/block/md1/md/dev-"${2}"2/state + # Show setting + echo -n " $2 Swap partition: " + cat /sys/block/md1/md/dev-"${2}"2/state + else + # sata1 or sas1 etc + # md0 DSM system partition + echo "$1" > /sys/block/md0/md/dev-"${2}"p1/state + # Show setting + echo -n " $2 DSM partition: " + cat /sys/block/md0/md/dev-"${2}"p1/state + + # md1 DSM swap partition + echo "$1" > /sys/block/md1/md/dev-"${2}"p2/state + # Show setting + echo -n " $2 Swap partition: " + cat /sys/block/md1/md/dev-"${2}"p2/state + fi +} + + #------------------------------------------------------------------------------ # Restore changes from backups @@ -696,6 +734,45 @@ if [[ $restore == "yes" ]]; then if [[ -z $restoreerr ]]; then echo -e "\nRestore successful." fi + + # Restore writemostly if set + if [[ $ssd_restore == "yes" ]]; then + # Get array of internal drives + readarray -t internal_drives < <(synodisk --enum -t internal | grep 'Disk path' | cut -d"/" -f3) + + # Restore all internal drives to just in_sync + echo -e "\nRestoring internal drive's state" + for idrive in "${internal_drives[@]}"; do + #if ! grep -q "write_mostly" ; then + set_writemostly -writemostly "$idrive" + #fi + + md0="/sys/block/md0/md/dev-" + md1="/sys/block/md1/md/dev-" + if [[ ${idrive::2} == "sd" ]]; then + # sda etc + # md0 DSM system partition + if ! grep -q "write_mostly" "${md0}$idrive"1/state; then + set_writemostly -writemostly "$idrive" + fi + # md1 DSM swap partition + if ! grep -q "write_mostly" "${md1}$idrive"2/state; then + set_writemostly -writemostly "$idrive" + fi + else + # sata1 or sas1 etc + # md0 DSM system partition + if ! grep -q "write_mostly" "${md0}$idrive"p1/state; then + set_writemostly -writemostly "$idrive" + fi + # md1 DSM swap partition + if ! grep -q "write_mostly" "${md1}$idrive"p2/state; then + set_writemostly -writemostly "$idrive" + fi + fi + done + fi + else echo "Nothing to restore." fi @@ -1727,43 +1804,6 @@ done #------------------------------------------------------------------------------ # Set or restore writemostly -set_writemostly(){ - # $1 is writemostly or in_sync - # $2 is sata1 or sas1 or sda etc - local model - # Show drive model - model="$(cat /sys/block/"${2}"/device/model | xargs)" - echo -e "${Yellow}$model${Off}" - - if [[ ${1::2} == "sd" ]]; then - # sda etc - # md0 DSM system partition - echo "$1" > /sys/block/md0/md/dev-"${2}"1/state - # Show setting - echo -n " $2 DSM partition: " - cat /sys/block/md0/md/dev-"${2}"1/state - - # md1 DSM swap partition - echo "$1" > /sys/block/md1/md/dev-"${2}"2/state - # Show setting - echo -n " $2 Swap partition: " - cat /sys/block/md1/md/dev-"${2}"2/state - else - # sata1 or sas1 etc - # md0 DSM system partition - echo "$1" > /sys/block/md0/md/dev-"${2}"p1/state - # Show setting - echo -n " $2 DSM partition: " - cat /sys/block/md0/md/dev-"${2}"p1/state - - # md1 DSM swap partition - echo "$1" > /sys/block/md1/md/dev-"${2}"p2/state - # Show setting - echo -n " $2 Swap partition: " - cat /sys/block/md1/md/dev-"${2}"p2/state - fi -} - if [[ $ssd == "yes" ]]; then # Get array of internal drives readarray -t internal_drives < <(synodisk --enum -t internal | grep 'Disk path' | cut -d"/" -f3) @@ -2056,7 +2096,8 @@ fi dtu=drive_db_test_url url="$(/usr/syno/bin/synogetkeyvalue $synoinfo ${dtu})" disabled="" -if [[ $nodbupdate == "yes" ]]; then +#if [[ $nodbupdate == "yes" ]]; then +if [[ $updatedb != "yes" ]]; then if [[ ! $url ]]; then # Add drive_db_test_url="127.0.0.1" #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" From 19f6d36ff2cc254aae4439c1fde2a0798ae53c4d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:02:24 +1000 Subject: [PATCH 488/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index fa06a23..acad096 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.5.100-RC +- Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 + - When using --restore you can also use --ssd=restore, -e or --email + v3.5.99-RC - Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 From 25981e01f65c269b6795fce1157b89eb1cfce659 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:02:34 +1000 Subject: [PATCH 489/694] Update syno_hdd_db.sh v3.5.100-RC - Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 - When using --restore you can also use --ssd=restore, -e or --email --- syno_hdd_db.sh | 56 ++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index d6f5646..a1cda47 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.99" +scriptver="v3.5.100" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -81,6 +81,8 @@ Options: --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc --ssd=restore --restore Undo all changes made by the script (except -S --ssd) + To restore all changes including write_mostly use + --restore --ssd=restore --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater @@ -105,7 +107,6 @@ EOF # Save options used args=("$@") - # Check for flags with getopt if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ ssd:,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ @@ -113,6 +114,22 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ eval set -- "$options" while true; do case "$1" in + -d|--debug) # Show and log debug info + debug=yes + ;; + -e|--email) # Disable colour text in task scheduler emails + color=no + ;; + --restore) # Restore changes from backups + restore=yes + if $(echo "${args[@]}" | grep -q -- '--ssd=restore'); then + ssd_restore=yes + fi + break + ;; + -s|--showedits) # Show edits done to host db file + showedits=yes + ;; -S) # Enable writemostly for md0 and md1 ssd=yes ;; @@ -127,13 +144,6 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ fi shift ;; - --restore) # Restore changes from backups - restore=yes - break - ;; - -s|--showedits) # Show edits done to host db file - showedits=yes - ;; -n|--nodbupdate|--noupdate) # Disable disk compatibility db updates nodbupdate=yes ;; @@ -155,9 +165,6 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ -p|--pcie) # Enable creating volumes on M2 in unknown PCIe adaptor forcepci=yes ;; - -e|--email) # Disable colour text in task scheduler emails - color=no - ;; --autoupdate) # Auto update script autoupdate=yes if [[ $2 =~ ^[0-9]+$ ]]; then @@ -173,9 +180,6 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ -v|--version) # Show script version scriptversion ;; - -d|--debug) # Show and log debug info - debug=yes - ;; --) shift break @@ -743,30 +747,20 @@ if [[ $restore == "yes" ]]; then # Restore all internal drives to just in_sync echo -e "\nRestoring internal drive's state" for idrive in "${internal_drives[@]}"; do - #if ! grep -q "write_mostly" ; then - set_writemostly -writemostly "$idrive" - #fi - md0="/sys/block/md0/md/dev-" md1="/sys/block/md1/md/dev-" if [[ ${idrive::2} == "sd" ]]; then # sda etc - # md0 DSM system partition - if ! grep -q "write_mostly" "${md0}$idrive"1/state; then - set_writemostly -writemostly "$idrive" - fi - # md1 DSM swap partition - if ! grep -q "write_mostly" "${md1}$idrive"2/state; then + # Check DSM system and swap partitions + if grep -q "write_mostly" "${md0}$idrive"1/state ||\ + grep -q "write_mostly" "${md1}$idrive"2/state; then set_writemostly -writemostly "$idrive" fi else # sata1 or sas1 etc - # md0 DSM system partition - if ! grep -q "write_mostly" "${md0}$idrive"p1/state; then - set_writemostly -writemostly "$idrive" - fi - # md1 DSM swap partition - if ! grep -q "write_mostly" "${md1}$idrive"p2/state; then + # Check DSM system and swap partitions + if grep -q "write_mostly" "${md0}$idrive"p1/state ||\ + grep -q "write_mostly" "${md1}$idrive"p2/state; then set_writemostly -writemostly "$idrive" fi fi From e30132fa578122a8c2e260573c56b4ccab281ef4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:27:01 +1000 Subject: [PATCH 490/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 35c8a66..98d7e56 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Mark Rohde | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | From e40a0372488b1787bd1a7606807d4e95e0386741 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:27:27 +1000 Subject: [PATCH 491/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 35c8a66..98d7e56 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Mark Rohde | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | From acf8c0b9418ae6da380a8807ab2b52be746f5c83 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:35:54 +1000 Subject: [PATCH 492/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a1cda47..6b3b008 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -125,7 +125,7 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ if $(echo "${args[@]}" | grep -q -- '--ssd=restore'); then ssd_restore=yes fi - break + #break ;; -s|--showedits) # Show edits done to host db file showedits=yes From 8eae46b74f9ac985ffdd51597d9729f4ad293f51 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:36:32 +1000 Subject: [PATCH 493/694] Update CHANGES.txt --- CHANGES.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index acad096..55e06ca 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,10 +1,7 @@ -v3.5.100-RC +v3.5.100 - Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 - When using --restore you can also use --ssd=restore, -e or --email -v3.5.99-RC -- Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 - v3.5.98 - Changed to automatically download and install dtc if all of the following 4 conditions are met: 1. dtc is not already installed. From 8f4d03b2a381dea24fe8e53dce3fb1be935fcf16 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:48:46 +1000 Subject: [PATCH 494/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 6b3b008..e63bf3c 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -2090,8 +2090,7 @@ fi dtu=drive_db_test_url url="$(/usr/syno/bin/synogetkeyvalue $synoinfo ${dtu})" disabled="" -#if [[ $nodbupdate == "yes" ]]; then -if [[ $updatedb != "yes" ]]; then +if [[ $nodbupdate == "yes" ]]; then if [[ ! $url ]]; then # Add drive_db_test_url="127.0.0.1" #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" From b970f934ec65fc6712fc5b70f2e9e4d558c999f2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:51:48 +1000 Subject: [PATCH 495/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 55e06ca..0ec82be 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,4 @@ -v3.5.100 +v3.5.101 - Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 - When using --restore you can also use --ssd=restore, -e or --email From 3aff2b3ea6e1b161348f592e336e9fe047645d88 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:52:19 +1000 Subject: [PATCH 496/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e63bf3c..21e2356 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.100" +scriptver="v3.5.101" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db From 9cee163c0951ced2805b18e54a96db875d115f81 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:52:06 +1000 Subject: [PATCH 497/694] Update my-other-scripts.md --- my-other-scripts.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index be27b47..f055a2c 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -56,7 +56,7 @@ ### Synology recovery - **Synology_DSM_Telnet_Password** - Synology DSM Recovery Telnet Password of the Day generator. - +               [Back to Contents](#contents) ### Other Synology scripts @@ -76,6 +76,12 @@ ### Other Synology scripts - **Synology_Cleanup_Coredumps** - Cleanup memory core dumps from crashed processes. +- **Synology_toggle_reset_button** + - Script to disable or enable the reset button and show current setting. + +- **Synology_Download_Station_Chrome_Extension** + - Download Station Chrome Extension. +               [Back to Contents](#contents) ### Synology hardware restrictions @@ -105,6 +111,9 @@ ### Synology hardware restrictions - **Synology_enable_sequential_IO** - Enables sequential I/O for your SSD caches, like DSM 6 had. +- **Synology_Information_Wiki** + - Information about Synology hardware. +               [Back to Contents](#contents) ### Synology dev @@ -115,4 +124,7 @@ ### Synology dev - **ScriptNotify** - DSM 7 package to allow your scripts to send DSM notifications. +- **DTC_GUI_for_Windows** + - GUI for DTC.exe for Window. +               [Back to Contents](#contents) From 0c481abaff11598e2ebf362bf208bd0f4ecbcb1f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:42:30 +1000 Subject: [PATCH 498/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98d7e56..1aa5a58 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Mark Rohde | +| | Qwerty.xyz | Max | Mark Rohde | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | From 0b41db6529ed7b98979c91245f5239177ee89a5a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:44:57 +1000 Subject: [PATCH 499/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1aa5a58..9cab6e8 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Qwerty.xyz | Max | Mark Rohde | +| Qwerty.xyz | Max | Mark Rohde | Someone | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | | Vojtech Filkorn | Craig Sadler | Po-Chia Chen | Jean-François Fruhauf | From 90ef1ebc3fd63a6be2c64c0e96beca5975126754 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 30 Aug 2024 19:34:52 +1000 Subject: [PATCH 500/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9cab6e8..ae873a9 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | Jordi Chavarria Fibla | | Qwerty.xyz | Max | Mark Rohde | Someone | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | From a5480a3436ddf800bc29a94cfd277feace78f3d8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Sep 2024 19:41:28 +1000 Subject: [PATCH 501/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae873a9..b367c3f 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Jordi Chavarria Fibla | +| | | Alan | Jordi Chavarria Fibla | | Qwerty.xyz | Max | Mark Rohde | Someone | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | From e9a00d418507723641fc00b07fb0c8c070fbf173 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Sep 2024 19:44:32 +1000 Subject: [PATCH 502/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b367c3f..3b9211b 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Alan | Jordi Chavarria Fibla | +| | Alan | speedyyyyyy | Jordi Chavarria Fibla | | Qwerty.xyz | Max | Mark Rohde | Someone | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | From 76f192f6202f3cd6a84dcd878c1866b186f34f27 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sun, 8 Sep 2024 11:41:30 +1000 Subject: [PATCH 503/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index f055a2c..154a8c7 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -64,6 +64,9 @@ ### Other Synology scripts - **Synology_app_mover** - Easily move Synology packages from one volume to another volume. +- **Video_Station_for_DSM_722** + - Script to install Video Station in DSM 7.2.2 + - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. From 22faeb88ec4e888d3f7bceac792da4f0a99c4194 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:46:15 +1000 Subject: [PATCH 504/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b9211b..55686ed 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Alan | speedyyyyyy | Jordi Chavarria Fibla | +| | | Arnaud Costermans | dealchecker | +| Michael Carras | Alan | speedyyyyyy | Jordi Chavarria Fibla | | Qwerty.xyz | Max | Mark Rohde | Someone | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | | Marcel Siemienowski | Dave Smart | dweagle79 | lingyinsam | From 6d9de95084697dfc10fcde60209390ec4bc1aad8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 18 Sep 2024 07:04:11 +1000 Subject: [PATCH 505/694] Update README.md --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 55686ed..ff8c81d 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,20 @@ ### Troubleshooting | Cursor sits there doing nothing | File has Windows line endings! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | | syntax error near unexpected token | You downloaded the webpage! | [Download latest zip file](https://github.com/007revad/Synology_HDD_db/releases) | +If you get a "No such file or directory" error check the following: + +1. Make sure you downloaded the zip or rar file to a folder on your Synology (not on your computer). +2. Make sure you unpacked the zip or rar file that you downloaded and are trying to run the syno_app_mover.sh file. +3. If the path to the script contains any spaces you need to enclose the path/scriptname in double quotes: + ```YAML + sudo -s "/volume1/my scripts/syno_hdd_db.sh -n" + ``` +4. Set the script file as executable: + ```YAML + sudo chmod +x "/volume1/scripts/syno_hdd_db.sh" + ``` + + ### vendor_ids.txt You only need to edit syno_hdd_vendor_ids.txt if the script warns you about a missing vendor id. From 1687d81d1aea470aeb9f898f9486ab1f6ad4c5ce Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 26 Sep 2024 18:47:55 +1000 Subject: [PATCH 506/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff8c81d..2576058 100644 --- a/README.md +++ b/README.md @@ -184,7 +184,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Arnaud Costermans | dealchecker | +| | kunvanimals | Arnaud Costermans | dealchecker | | Michael Carras | Alan | speedyyyyyy | Jordi Chavarria Fibla | | Qwerty.xyz | Max | Mark Rohde | Someone | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | From 6fd56d973f0a7e574b40d3a63dc5a50b3dc4612c Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:37:34 +1000 Subject: [PATCH 507/694] Update my-other-scripts.md --- my-other-scripts.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 154a8c7..b465b69 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -6,6 +6,7 @@ #### Contents - [Synology recovery](#synology-recovery) - [Other Synology scripts](#other-synology-scripts) - [Synology hardware restrictions](#synology-hardware-restrictions) +- [How To Guides](#how-to-guides) - [Synology dev](#synology-dev) ## @@ -29,6 +30,9 @@ ### Plex ### Synology docker +- **Synology_Docker_export** + - Export all Synology Container Manager or Docker containers' settings as json files to your docker shared folder. + - **Synology_ContainerManager_IPv6** - Enable IPv6 for Container Manager's bridge network. @@ -119,6 +123,13 @@ ### Synology hardware restrictions               [Back to Contents](#contents) +### How To Guides + +- **Synology_SSH_key_setup** + - How to setup SSH key authentication for your Synology. + +               [Back to Contents](#contents) + ### Synology dev - **Download_Synology_Archive** From 17e6e96566d7420b00785e01d8e73856956e7857 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 30 Sep 2024 19:55:44 +1000 Subject: [PATCH 508/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 0ec82be..a19784c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.5.102 +- Changed to use a faster method of detecting if an expansion unit is connected, for models with the syno_slot_mapping command. +- Changed so XPE users using the hdddb addon don't need to reboot. + v3.5.101 - Changed to support "--restore --ssd=restore" to restore write_mostly when restoring all other changes. Issue #340 - When using --restore you can also use --ssd=restore, -e or --email From 0109257af3a19eecd709e349c5cc4643ca4cf532 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 30 Sep 2024 20:01:36 +1000 Subject: [PATCH 509/694] Update syno_hdd_db.sh v3.5.102 - Changed to use a faster method of detecting if an expansion unit is connected, for models with the syno_slot_mapping command. - Changed so XPE users using the hdddb addon don't need to reboot. --- syno_hdd_db.sh | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 21e2356..a16099a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.101" +scriptver="v3.5.102" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1150,15 +1150,23 @@ fi # Expansion units -# Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log -# Otherwise the new /var/log/diskprediction log is only created a midnight. -/usr/syno/bin/syno_disk_data_collector record - -# Get list of connected expansion units (aka eunit/ebox) -path="/var/log/diskprediction" -# shellcheck disable=SC2012 -file=$(ls $path | tail -n1) -eunitlist=($(grep -Eowi "([FRD]XD?[0-9]{3,4})(rp|ii|sas){0,2}" "$path/$file" | uniq)) +# eSATA and InfiniBand ports both appear in syno_slot_mapping as: +# Esata port count: 1 +# Eunit port 1 - RX1214 +# Only device tree models have syno_slot_mapping +if which syno_slot_mapping >/dev/null; then + eunitlist=($(syno_slot_mapping | grep 'Eunit port' | awk '{print $5}')) +else + # Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log + # Otherwise the new /var/log/diskprediction log is only created a midnight. + /usr/syno/bin/syno_disk_data_collector record + + # Get list of connected expansion units (aka eunit/ebox) + path="/var/log/diskprediction" + # shellcheck disable=SC2012 + file=$(ls $path | tail -n1) + eunitlist=($(grep -Eowi "([FRD]XD?[0-9]{3,4})(rp|ii|sas){0,2}" "$path/$file" | uniq)) +fi # Sort eunitlist array into new eunits array to remove duplicates if [[ ${#eunitlist[@]} -gt "0" ]]; then @@ -2095,10 +2103,12 @@ if [[ $nodbupdate == "yes" ]]; then # Add drive_db_test_url="127.0.0.1" #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" /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" disabled="yes" elif [[ $url != "127.0.0.1" ]]; then # Edit drive_db_test_url= /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" disabled="yes" fi From 874fec7f5538462cafe638041b1f3fe35c90f9a6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 30 Sep 2024 20:19:09 +1000 Subject: [PATCH 510/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2576058..46ed623 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ ### Troubleshooting If you get a "No such file or directory" error check the following: 1. Make sure you downloaded the zip or rar file to a folder on your Synology (not on your computer). -2. Make sure you unpacked the zip or rar file that you downloaded and are trying to run the syno_app_mover.sh file. +2. Make sure you unpacked the zip or rar file that you downloaded and are trying to run the syno_hdd_db.sh file. 3. If the path to the script contains any spaces you need to enclose the path/scriptname in double quotes: ```YAML sudo -s "/volume1/my scripts/syno_hdd_db.sh -n" From 05bd5d6af6968b9c2a42762686373b41c362d9dd Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:56:22 +1000 Subject: [PATCH 511/694] Create .gitattributes --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto From 4027b130b02dda8ba6281ce696b9e028b2f44c3e Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:24:16 +1000 Subject: [PATCH 512/694] Update .gitattributes --- .gitattributes | 101 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index dfe0770..7353bc3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,101 @@ +# Common settings that generally should always be used with your language specific settings + # Auto detect text files and perform LF normalization -* text=auto +* text=auto + +# +# The above will handle all files NOT found below +# + +# Documents +*.bibtex text diff=bibtex +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain +*.md text diff=markdown +*.mdx text diff=markdown +*.tex text diff=tex +*.adoc text +*.textile text +*.mustache text +*.csv text eol=crlf +*.tab text +*.tsv text +*.txt text +*.sql text +*.epub diff=astextplain +*.dsc text eol=crlf +*.dsp text eol=crlf +*.ini text eol=crlf + +# Graphics +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.tif binary +*.tiff binary +*.ico binary +# SVG treated as text by default. +*.svg text +# If you want to treat it as binary, +# use the following line instead. +# *.svg binary +*.eps binary + +# Scripts +*.bash text eol=lf +*.fish text eol=lf +*.ksh text eol=lf +*.sh text eol=lf +*.zsh text eol=lf +# These are explicitly windows files and should use crlf +*.bat text eol=crlf +*.cmd text eol=crlf +*.ps1 text eol=crlf + +# Serialisation +*.json text +*.toml text +*.xml text +*.yaml text +*.yml text + +# Archives +*.7z binary +*.bz binary +*.bz2 binary +*.bzip2 binary +*.gz binary +*.lz binary +*.lzma binary +*.rar binary +*.tar binary +*.taz binary +*.tbz binary +*.tbz2 binary +*.tgz binary +*.tlz binary +*.txz binary +*.xz binary +*.Z binary +*.zip binary +*.zst binary + +# Text files where line endings should be preserved +*.patch -text + +# +# Exclude files from exporting +# + +.gitattributes export-ignore +.gitignore export-ignore +.gitkeep export-ignore \ No newline at end of file From 747c578abb56f6f9e2baf5e5088a1d4ce7a08dfe Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:18:57 +1000 Subject: [PATCH 513/694] set sh files as executable --- .gitattributes | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.gitattributes b/.gitattributes index 7353bc3..86a3b88 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,6 +15,7 @@ *.DOCX diff=astextplain *.dot diff=astextplain *.DOT diff=astextplain +*.epub diff=astextplain *.pdf diff=astextplain *.PDF diff=astextplain *.rtf diff=astextplain @@ -25,15 +26,11 @@ *.adoc text *.textile text *.mustache text -*.csv text eol=crlf *.tab text *.tsv text *.txt text *.sql text -*.epub diff=astextplain -*.dsc text eol=crlf -*.dsp text eol=crlf -*.ini text eol=crlf +*.csv text eol=crlf # Graphics *.png binary @@ -43,17 +40,19 @@ *.tif binary *.tiff binary *.ico binary +*.eps binary # SVG treated as text by default. *.svg text # If you want to treat it as binary, # use the following line instead. # *.svg binary -*.eps binary # Scripts *.bash text eol=lf *.fish text eol=lf *.ksh text eol=lf +*.py text eol=lf +*.php text eol=lf *.sh text eol=lf *.zsh text eol=lf # These are explicitly windows files and should use crlf @@ -61,6 +60,14 @@ *.cmd text eol=crlf *.ps1 text eol=crlf +# Visual Dialog Script +*.dsc text eol=crlf +*.dsp text eol=crlf + +# Config files +*.ini text eol=crlf +*.conf text eol=lf + # Serialisation *.json text *.toml text From d6e9525c161e793a862e5ab93f18aba8b0aab2a8 Mon Sep 17 00:00:00 2001 From: PhilBrk8 <92030164+PhilBrk8@users.noreply.github.com> Date: Sat, 5 Oct 2024 22:06:49 +0200 Subject: [PATCH 514/694] Update README.md included codeblock for downloading and extracting the build (struggled a bit because I was new to the DSM shell, tried with unzip, faild to install it with apt/dnf, etc. so I thought i might help out other newbies) --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 46ed623..48da411 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,12 @@ ### Download the script 2. Save the download zip file to a folder on the Synology. - Do ***NOT*** save the script to a M.2 volume. After a DSM or Storage Manager update the M.2 volume won't be available until after the script has run. 3. Unzip the zip file. +``` +cd /usr/local +sudo wget https://github.com/007revad/Synology_HDD_db/archive/refs/heads/main.zip -O syno_hdd_db.zip +sudo 7z x syno_hdd_db.zip -o/usr/local/Synology_HDD_db +cd Synology_HDD_db && ls -ali +``` ### Required files From d684e3f6eefffca38f0adbc127fbd99ae4b05069 Mon Sep 17 00:00:00 2001 From: richard Date: Sat, 19 Oct 2024 23:33:34 +0100 Subject: [PATCH 515/694] get_size_gb() calculation error for 20GB HDDs. Increased precision of GiB to GB, 2^30 / 1e9 = 1.073741824 --- syno_hdd_db.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a16099a..0b97023 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -896,11 +896,9 @@ fixdrivemodel(){ get_size_gb(){ # $1 is /sys/block/sata1 or /sys/block/nvme0n1 etc - local float - local int - float=$(synodisk --info /dev/"$(basename -- "$1")" | grep 'Total capacity' | awk '{print $4 * 1.0737}') - int="${float%.*}" - echo "$int" + local disk_size_gb + disk_size_gb=$(synodisk --info /dev/"$(basename -- "$1")" | grep 'Total capacity' | awk '{print int($4 * 1.073741824)}') + echo "$disk_size_gb" } getdriveinfo(){ From 5b91007ea4e277f427083009811696309a1915dc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 20 Oct 2024 10:26:50 +1100 Subject: [PATCH 516/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index a19784c..44f1459 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.103 +- Bug fix getting size of large drives. Issue #368 + v3.5.102 - Changed to use a faster method of detecting if an expansion unit is connected, for models with the syno_slot_mapping command. - Changed so XPE users using the hdddb addon don't need to reboot. From eba77306b1030b21f092941ed63be4ca59c89dc9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 20 Oct 2024 10:27:47 +1100 Subject: [PATCH 517/694] Update syno_hdd_db.sh get_size_gb() calculation error for 20GB HDDs. --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 0b97023..a24bd81 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.102" +scriptver="v3.5.103" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db From a2d674d6be6e002a03b813d9c98331747c950074 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 20 Oct 2024 13:41:52 +1100 Subject: [PATCH 518/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 44f1459..ca73297 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,6 @@ v3.5.103 - Bug fix getting size of large drives. Issue #368 + - Run the script once with the --restore option to undue the previous changes then run the script as normal. v3.5.102 - Changed to use a faster method of detecting if an expansion unit is connected, for models with the syno_slot_mapping command. From 11b0ffca6859675110a423e78d3e9549bb6b960b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 23 Oct 2024 09:32:13 +1100 Subject: [PATCH 519/694] Update README.md --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 46ed623..63b018b 100644 --- a/README.md +++ b/README.md @@ -180,11 +180,14 @@ ### Credits ### Donators -Thank you to the following PayPal donators, GitHub sponsors and hardware donators +Thank you to the PayPal and Buy Me a Coffee donators, GitHub sponsors and hardware donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | kunvanimals | Arnaud Costermans | dealchecker | +| | | | Alexander Machatschek | +| Yeong​Nuno | Joe | Torben Schreiter | Anthony McMurray | +| Abhishek | Steven Haskell | Malte Müller | Aaron Thomas | +| DENNIS BRAZIL | kunvanimals | Arnaud Costermans | dealchecker | | Michael Carras | Alan | speedyyyyyy | Jordi Chavarria Fibla | | Qwerty.xyz | Max | Mark Rohde | Someone | | vaadmin | Sebastiaan Mulder | Nico Stark | Oleksandr Antonishak | From 53390dda725661283b7f0ab788a48f333f606fbc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:18:08 +1100 Subject: [PATCH 520/694] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f5ff143..8768b3f 100644 --- a/README.md +++ b/README.md @@ -52,11 +52,13 @@ ### Download the script 2. Save the download zip file to a folder on the Synology. - Do ***NOT*** save the script to a M.2 volume. After a DSM or Storage Manager update the M.2 volume won't be available until after the script has run. 3. Unzip the zip file. + +Or via SSH as your regular user: ``` -cd /usr/local -sudo wget https://github.com/007revad/Synology_HDD_db/archive/refs/heads/main.zip -O syno_hdd_db.zip -sudo 7z x syno_hdd_db.zip -o/usr/local/Synology_HDD_db -cd Synology_HDD_db && ls -ali +cd $HOME +wget https://github.com/007revad/Synology_HDD_db/archive/refs/heads/main.zip -O syno_hdd_db.zip +7z x syno_hdd_db.zip +cd Synology_HDD_db-main && ls -ali ``` ### Required files From 82f1163caef6a3480af9255f933b78599096744e Mon Sep 17 00:00:00 2001 From: Ing Date: Wed, 27 Nov 2024 22:03:28 +0800 Subject: [PATCH 521/694] Some disks will be blocked in special scenarios --- syno_hdd_db.sh | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a24bd81..91df9f7 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -897,7 +897,7 @@ fixdrivemodel(){ get_size_gb(){ # $1 is /sys/block/sata1 or /sys/block/nvme0n1 etc local disk_size_gb - disk_size_gb=$(synodisk --info /dev/"$(basename -- "$1")" | grep 'Total capacity' | awk '{print int($4 * 1.073741824)}') + disk_size_gb=$(synodisk --info /dev/"$(basename -- "$1")" 2>/dev/null | grep 'Total capacity' | awk '{print int($4 * 1.073741824)}') echo "$disk_size_gb" } @@ -932,15 +932,16 @@ getdriveinfo(){ # Get drive GB size size_gb=$(get_size_gb "$1") - - if [[ $hdmodel ]] && [[ $fwrev ]]; then - if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then - # Is SATA M.2 SSD - nvmelist+=("${hdmodel},${fwrev},${size_gb}") - else - hdlist+=("${hdmodel},${fwrev},${size_gb}") - fi - drivelist+=("${hdmodel}") + if [ -n "$size_gb" ]; then + if [[ $hdmodel ]] && [[ $fwrev ]]; then + if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then + # Is SATA M.2 SSD + nvmelist+=("${hdmodel},${fwrev},${size_gb}") + else + hdlist+=("${hdmodel},${fwrev},${size_gb}") + fi + drivelist+=("${hdmodel}") + fi fi fi } From 9924a4d4c2857983d61a4312461bc483353ab8f3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Nov 2024 05:35:32 +1100 Subject: [PATCH 522/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ca73297..17f7110 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.104 +- Some disks will be blocked in special scenarios. PR #387 + v3.5.103 - Bug fix getting size of large drives. Issue #368 - Run the script once with the --restore option to undue the previous changes then run the script as normal. From a595132fa175c48c9fe45d56e4d5a890565d970b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Nov 2024 05:36:02 +1100 Subject: [PATCH 523/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 91df9f7..e1af1ef 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.103" +scriptver="v3.5.104" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -941,7 +941,7 @@ getdriveinfo(){ hdlist+=("${hdmodel},${fwrev},${size_gb}") fi drivelist+=("${hdmodel}") - fi + fi fi fi } From 622221b67c3421c7332e278265086d3a06acfa6d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 28 Nov 2024 23:12:49 +1100 Subject: [PATCH 524/694] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8768b3f..db56eb7 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,9 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Alexander Machatschek | +| BrattishPlaque | Chris Bunnell | dansimau | Bsih | +| Tim Trace | Michel VIEUX-PERNON | R De Jong | Rick | +| Klaus-Dieter Fahlbusch | Amarand Agasi | someone61986 | Alexander Machatschek | | Yeong​Nuno | Joe | Torben Schreiter | Anthony McMurray | | Abhishek | Steven Haskell | Malte Müller | Aaron Thomas | | DENNIS BRAZIL | kunvanimals | Arnaud Costermans | dealchecker | From 6c4c2c173b4e507f14fff0f2fc9cd158cdc05dac Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:04:07 +1100 Subject: [PATCH 525/694] Update syno_hdd_db.sh v3.5.104 - Bug fix for drives that return "HCST " as the model, like HGST drives do. Issue #389 --- syno_hdd_db.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a24bd81..1f75d2a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.103" +scriptver="v3.5.104" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -884,6 +884,9 @@ fixdrivemodel(){ hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name + # Chinese brand? + hdmodel=${hdmodel#"HCST "} # Remove "HCST " from start of model name + # Old drive brands hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name From 99c936e70c6d2a2b31721d74d1c979434a2874e0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:04:15 +1100 Subject: [PATCH 526/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ca73297..e8fd9c4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.104 +- Bug fix for drives that return "HCST " as the model, like HGST drives do. Issue #389 + v3.5.103 - Bug fix getting size of large drives. Issue #368 - Run the script once with the --restore option to undue the previous changes then run the script as normal. From 6337f1b7fbb0585873bbf500cfeab83fbbd7a2c0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:09:45 +1100 Subject: [PATCH 527/694] Update CHANGES.txt --- CHANGES.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index e8fd9c4..44350e8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,9 @@ -v3.5.104 +v3.5.105 - Bug fix for drives that return "HCST " as the model, like HGST drives do. Issue #389 +v3.5.104 +- Some disks will be blocked in special scenarios. PR #387 + v3.5.103 - Bug fix getting size of large drives. Issue #368 - Run the script once with the --restore option to undue the previous changes then run the script as normal. From ae48216104423d0e9c9f2b029ea9d5420f6dfbf9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:19:12 +1100 Subject: [PATCH 528/694] Update CHANGES.txt --- CHANGES.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 44350e8..17f7110 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,3 @@ -v3.5.105 -- Bug fix for drives that return "HCST " as the model, like HGST drives do. Issue #389 - v3.5.104 - Some disks will be blocked in special scenarios. PR #387 From ad280ec93ab31212575182c838da36be36d2eeae Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:21:11 +1100 Subject: [PATCH 529/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 17f7110..44350e8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.105 +- Bug fix for drives that return "HCST " as the model, like HGST drives do. Issue #389 + v3.5.104 - Some disks will be blocked in special scenarios. PR #387 From 7312b4c324a2bbb70a3ad7ac736ab52587f375d4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:28:00 +1100 Subject: [PATCH 530/694] Update syno_hdd_db.sh v3.5.105 - Bug fix for drives that return "HCST " as the model, like HGST drives do. Issue #389 --- syno_hdd_db.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e1af1ef..7264a9f 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.104" +scriptver="v3.5.105" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -884,6 +884,9 @@ fixdrivemodel(){ hdmodel=${hdmodel#"HGST "} # Remove "HGST " from start of model name hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name + # Chinese brand? + hdmodel=${hdmodel#"HCST "} # Remove "HCST " from start of model name. Issue #389 + # Old drive brands hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name @@ -932,7 +935,7 @@ getdriveinfo(){ # Get drive GB size size_gb=$(get_size_gb "$1") - if [ -n "$size_gb" ]; then + if [[ -n "$size_gb" ]]; then # PR #187 if [[ $hdmodel ]] && [[ $fwrev ]]; then if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then # Is SATA M.2 SSD From bcfa4d276539e0e4b2851a1a7ea7a03d34b256b8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:30:56 +1100 Subject: [PATCH 531/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c194a3b..7264a9f 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.104" +scriptver="v3.5.105" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -885,7 +885,7 @@ fixdrivemodel(){ hdmodel=${hdmodel#"TOSHIBA "} # Remove "TOSHIBA " from start of model name # Chinese brand? - hdmodel=${hdmodel#"HCST "} # Remove "HCST " from start of model name + hdmodel=${hdmodel#"HCST "} # Remove "HCST " from start of model name. Issue #389 # Old drive brands hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name @@ -935,7 +935,7 @@ getdriveinfo(){ # Get drive GB size size_gb=$(get_size_gb "$1") - if [ -n "$size_gb" ]; then + if [[ -n "$size_gb" ]]; then # PR #187 if [[ $hdmodel ]] && [[ $fwrev ]]; then if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then # Is SATA M.2 SSD From fdf7b3d1975bc5ff441f55e4716090ed48525e86 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 12 Dec 2024 04:30:35 +1100 Subject: [PATCH 532/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db56eb7..d583e4f 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ #### What the script does: * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). -* Enables creating M.2 storage pools and volumes from within Storage Manager **(newer models only?)**. +* Enables creating M.2 storage pools and volumes from within Storage Manager in DSM 7.2 and later **(newer models only?)**. * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(schedule the script to run boot)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** From 9390828c4747f9aedf62895ef505854167745afa Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:22:12 +1100 Subject: [PATCH 533/694] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d583e4f..8165d18 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | ctrlaltdelete | +| CannotTouch | Kevin Staude | Alistair Hathaway | 8347 | | BrattishPlaque | Chris Bunnell | dansimau | Bsih | | Tim Trace | Michel VIEUX-PERNON | R De Jong | Rick | | Klaus-Dieter Fahlbusch | Amarand Agasi | someone61986 | Alexander Machatschek | From 1270b10aeb12b686280d40bd355a704b05c65f57 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 15 Dec 2024 06:38:19 +1100 Subject: [PATCH 534/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8165d18..37e705a 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | ctrlaltdelete | +| | | frogger1805 | ctrlaltdelete | | CannotTouch | Kevin Staude | Alistair Hathaway | 8347 | | BrattishPlaque | Chris Bunnell | dansimau | Bsih | | Tim Trace | Michel VIEUX-PERNON | R De Jong | Rick | From 1f88c519239904ee32d19cc10797d1cf70a320aa Mon Sep 17 00:00:00 2001 From: Curtis Doty Date: Sun, 15 Dec 2024 15:04:17 -0800 Subject: [PATCH 535/694] Normalize line endings --- syno_hdd_vendor_ids.txt | 49 ++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/syno_hdd_vendor_ids.txt b/syno_hdd_vendor_ids.txt index fe52af8..9bb8246 100644 --- a/syno_hdd_vendor_ids.txt +++ b/syno_hdd_vendor_ids.txt @@ -1,25 +1,24 @@ -# You can add your drive's vendor id and vendor name here. -# -# Only edit this file if the script warns you about a missing vendor id. - -0x025e="Solidigm" -0x05dc="Lexar" -0x0ed1="aigo" -0x10ec="TEAMGROUP" -0x137e="Patriot" -0x1458="Gigabyte" -0x1462="MSI" -0x196e="PNY" -0x1987="Phison" -0x1b1c="Corsair" -0x1bdc="Apacer" -0x1c5c="SK Hynix" -0x1cc4="UMIS" -0x1cfa="Corsair" -0x1d79="Transcend" -0x1dbe="ADATA" -0x1e0f="KIOXIA" -0x1e49="ZHITAI" -0x1e4b="FIKWOT" -0x1f40="Netac" - +# You can add your drive's vendor id and vendor name here. +# +# Only edit this file if the script warns you about a missing vendor id. + +0x025e="Solidigm" +0x05dc="Lexar" +0x0ed1="aigo" +0x10ec="TEAMGROUP" +0x137e="Patriot" +0x1458="Gigabyte" +0x1462="MSI" +0x196e="PNY" +0x1987="Phison" +0x1b1c="Corsair" +0x1bdc="Apacer" +0x1c5c="SK Hynix" +0x1cc4="UMIS" +0x1cfa="Corsair" +0x1d79="Transcend" +0x1dbe="ADATA" +0x1e0f="KIOXIA" +0x1e49="ZHITAI" +0x1e4b="FIKWOT" +0x1f40="Netac" From 46d3a2e6735493ea37620c80b46e40a5f5c20b00 Mon Sep 17 00:00:00 2001 From: Curtis Doty Date: Sun, 15 Dec 2024 15:05:00 -0800 Subject: [PATCH 536/694] Make executable --- syno_hdd_db.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 syno_hdd_db.sh diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh old mode 100644 new mode 100755 From f9944334661982e5328104b257ce7a31cfb50f10 Mon Sep 17 00:00:00 2001 From: Curtis Doty Date: Sun, 15 Dec 2024 15:16:54 -0800 Subject: [PATCH 537/694] Make debugger pretty --- syno_hdd_db.sh | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 7264a9f..e68bb26 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -197,9 +197,25 @@ else fi +PS4func() { + local lineno="$1" + local i f='' + local c="\033[0;36m" y="\033[0;33m" n="\033[0m" + local d=$((${#FUNCNAME[@]}-2)) + + if [[ $lineno == 1 ]] + then lineno=0 + fi + + for ((i=d; i>0; i--)) + do printf -v f "%s%s()" "$f" "${FUNCNAME[i]}" + done + + printf "$y%s:%04d$c%s$n " "${BASH_SOURCE[1]##*/}" "$lineno" "$f" +} if [[ $debug == "yes" ]]; then - set -x - export PS4='`[[ $? == 0 ]] || echo "\e[1;31;40m($?)\e[m\n "`:.$LINENO:' + PS4='\r$(PS4func $LINENO)' + set -o xtrace fi From 8e7f56b80faaa118c964709e9f3e440ca7959a6c Mon Sep 17 00:00:00 2001 From: Curtis Doty Date: Sun, 15 Dec 2024 16:46:18 -0800 Subject: [PATCH 538/694] De-spaghettifi shell code - reduce excesive subshells/piplines - improve readability - speed up performance - fixes #397 --- syno_hdd_db.sh | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e68bb26..a2716ed 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -378,11 +378,24 @@ echo "Running from: ${scriptpath}/$scriptfile" # Warn if script located on M.2 drive -scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) -vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) -md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) -# shellcheck disable=SC2002 # Don't warn about "Useless cat" -if cat /proc/mdstat | grep "$md" | grep -q nvme; then +get_script_vol() { + local script_root vol_num vg_name + script_root="${scriptpath#/*}" + script_root="${script_root%%/*}" + if [[ $script_root =~ ^volume ]] + then + vol_num="${script_root:6}" + vg_name=$(lvs --noheadings --select=lv_name="volume_$vol_num" --options=vg_name) + vg_name="${vg_name// }" + vol_name=$(pvs --noheadings --select=vg_name="$vg_name" --options=pv_name) + vol_name="${vol_name// }" + else + vol_name=$(df --output=source "/$script_root" |sed 1d) + fi +} +get_script_vol # sets $vol_name to /dev/whatever +if grep -qE "^${vol_name#/dev/} .+ nvme" /proc/mdstat +then echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" fi From aa4aacd3af25b015a3ca0721b42ed5dd3fe99bf7 Mon Sep 17 00:00:00 2001 From: Curtis Doty Date: Sun, 15 Dec 2024 16:46:18 -0800 Subject: [PATCH 539/694] De-spaghettifi shell code - reduce excesive subshells/piplines - improve readability - speed up performance - fixes #397 --- syno_hdd_db.sh | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 7264a9f..4e0139f 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -362,11 +362,24 @@ echo "Running from: ${scriptpath}/$scriptfile" # Warn if script located on M.2 drive -scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) -vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) -md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) -# shellcheck disable=SC2002 # Don't warn about "Useless cat" -if cat /proc/mdstat | grep "$md" | grep -q nvme; then +get_script_vol() { + local script_root vol_num vg_name + script_root="${scriptpath#/*}" + script_root="${script_root%%/*}" + if [[ $script_root =~ ^volume ]] + then + vol_num="${script_root:6}" + vg_name=$(lvs --noheadings --select=lv_name="volume_$vol_num" --options=vg_name) + vg_name="${vg_name// }" + vol_name=$(pvs --noheadings --select=vg_name="$vg_name" --options=pv_name) + vol_name="${vol_name// }" + else + vol_name=$(df --output=source "/$script_root" |sed 1d) + fi +} +get_script_vol # sets $vol_name to /dev/whatever +if grep -qE "^${vol_name#/dev/} .+ nvme" /proc/mdstat +then echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" fi From 206124a4ecbe3d61099d8fbec365ec32064d9b4a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 16 Dec 2024 12:27:08 +1100 Subject: [PATCH 540/694] Update .gitattributes --- .gitattributes | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index 86a3b88..629298a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -28,7 +28,7 @@ *.mustache text *.tab text *.tsv text -*.txt text +*.txt text eol=lf *.sql text *.csv text eol=crlf @@ -105,4 +105,4 @@ .gitattributes export-ignore .gitignore export-ignore -.gitkeep export-ignore \ No newline at end of file +.gitkeep export-ignore From 1f5ebc1823834ec6e6a8511749f192db1d2de133 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:22:36 +1100 Subject: [PATCH 541/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 44350e8..619bf05 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.106 +- Bug fix for when script is not located on a volume. Issue #397 + v3.5.105 - Bug fix for drives that return "HCST " as the model, like HGST drives do. Issue #389 From 5ce04615b8777d05ec46c4aad7eea0c9c67a2ccf Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:22:53 +1100 Subject: [PATCH 542/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a2716ed..8871ea4 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.105" +scriptver="v3.5.106" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db From 5ae4870adfc9181e4e94bc57b4d6559425136763 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:25:55 +1100 Subject: [PATCH 543/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37e705a..390a4e7 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | frogger1805 | ctrlaltdelete | +| leadadri | Gary Plumbridge | frogger1805 | ctrlaltdelete | | CannotTouch | Kevin Staude | Alistair Hathaway | 8347 | | BrattishPlaque | Chris Bunnell | dansimau | Bsih | | Tim Trace | Michel VIEUX-PERNON | R De Jong | Rick | From 249a9262f222720abaab4cec0b747859bf6c7949 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 29 Dec 2024 04:19:13 +1100 Subject: [PATCH 544/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 619bf05..3310192 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.107 +- Bug fix for firmware version as "Found]" in db files. Issue #407 + v3.5.106 - Bug fix for when script is not located on a volume. Issue #397 From cda6a5641ceb3a660b2994b5475530a9ee6fa842 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 29 Dec 2024 04:19:57 +1100 Subject: [PATCH 545/694] Update syno_hdd_db.sh v3.5.107 - Bug fix for firmware version as "Found]" in db files. Issue #407 --- syno_hdd_db.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 8871ea4..6d11f97 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.106" +scriptver="v3.5.107" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -73,7 +73,7 @@ Options: DSM 7.2.1 already has WDDA disabled -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor -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 -S automatically sets internal SSDs as DSM preferred --ssd=DRIVE requires the fast drive(s) as argument, @@ -197,6 +197,7 @@ else fi +# shellcheck disable=SC2317 # Don't warn about unreachable commands in this function PS4func() { local lineno="$1" local i f='' @@ -956,10 +957,11 @@ getdriveinfo(){ # 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 - # Get M.2 SATA SSD firmware version + # Get firmware version with smartctl if $fwrev null + # for M.2 SATA SSD and Github issue #407 if [[ -z $fwrev ]]; then 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 # Get drive GB size From c101af6e2f938acb547e366b9a7a5a83c3749482 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 30 Dec 2024 06:48:01 +1100 Subject: [PATCH 546/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 3310192..47eced7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.5.108 +- Prevent error message if /tmpRoot exists but does not contain /usr/syno/bin/synosetkeyvalue and /etc.defaults/synoinfo.conf. Issue #411 + v3.5.107 - Bug fix for firmware version as "Found]" in db files. Issue #407 From 6d975b24507a33419f0871aec98eec20b70607ac Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 30 Dec 2024 06:48:28 +1100 Subject: [PATCH 547/694] Update syno_hdd_db.sh v3.5.108 - Prevent error message if /tmpRoot exists but does not contain /usr/syno/bin/synosetkeyvalue and /etc.defaults/synoinfo.conf. Issue #411 --- syno_hdd_db.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 6d11f97..f41837f 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.107" +scriptver="v3.5.108" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -958,7 +958,7 @@ getdriveinfo(){ fwrev=$(/usr/syno/bin/syno_hdd_util --ssd_detect | grep "$device " | awk '{print $(NF-3)}') # GitHub issue #86, 87 # Get firmware version with smartctl if $fwrev null - # for M.2 SATA SSD and Github issue #407 + # for M.2 SATA SSD and SAS drives. Github issue #407 if [[ -z $fwrev ]]; then dev=/dev/"$(basename -- "$1")" fwrev=$(smartctl -a -d ata -T permissive "$dev" | grep -i firmware | awk '{print $NF}') @@ -2136,12 +2136,20 @@ if [[ $nodbupdate == "yes" ]]; then # Add drive_db_test_url="127.0.0.1" #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" /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" elif [[ $url != "127.0.0.1" ]]; then # Edit drive_db_test_url= /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" fi From 080484ac725ca49ae6dbed11055563efefdd7da3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 13:44:15 +1100 Subject: [PATCH 548/694] Add files via upload --- bin/dhm_tool.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 bin/dhm_tool.txt diff --git a/bin/dhm_tool.txt b/bin/dhm_tool.txt new file mode 100644 index 0000000..30e0354 --- /dev/null +++ b/bin/dhm_tool.txt @@ -0,0 +1,12 @@ +stx_ihm from QNAP firmware, renamed dhm_tool for Synology DSM + + SeaDragon_DHMr - Seagate drive utilities + Copyright (c) 2017-2021 Seagate Technology LLC and/or its Affiliates, All Rights Reserved + SeaDragon_DHMr Version: 2.5.1-2_2_3 X86_64 + Build Date: Oct 3 2022 + +MD5 cf67c1d5006913297f85ca7f9d1795ba +SHA-1 163b384afabc491c97f3aa4ee7916601a9a680dd +SHA-256 86dd0e3c5ded507d23dfeb2ca04a2e086c97a86e2ab96dc6fdeab686a8202795 +SHA-384 3d806909d445605787ceb155bc1555e01d02efe324378c9c71e6b53d91bba6bf8dbadef38dd882b43caf8dbd93eaff6c +SHA-512 a2d87d91fd4cc298708946c9a611027dce290ba17a48c65e712b5d7e72ba04c6b5303c90efeb178a8fc690241b405691a15cc88200ab3b28319198df6bd6ad16 From a2878076c4664d516700988a6c99160b5833427c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 13:44:37 +1100 Subject: [PATCH 549/694] Add files via upload --- bin/dhm_tool | Bin 0 -> 1555688 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/dhm_tool diff --git a/bin/dhm_tool b/bin/dhm_tool new file mode 100644 index 0000000000000000000000000000000000000000..3ce8e459dc47acb48088da05e7df1f391db81b0a GIT binary patch literal 1555688 zcmdqKdt8?F{l|afDYU~)<~HU!kfS132IK)v8=BT_p^=!8wQdkWD1QF5&)u!*EG zSIxQBSl?F84rAra%!I6rTx-l)IXf|Hb))5&omdC`y`o>H3_m54SfrPRlyKUtC=OfZ6&5&JD!jyz8S(ar9>(u=Y>i5zQZ&fs8;rex49G zJ}?M+pm@B(Yng`}TNxNO?-;K#zz7HMyq_`pW$KAJ9P#L?s(Ox67VxwG6`jxXwPU_T4980kInKX8WWYOm_g#YfB!7DOfBsA` z#95^!^Tv)ot91UEr6pxm)n`^`j6HMg=uwsBqtYe)q?}=hLyDZNeXd7wJ_-J>a13MrIra_Mug9Kb!r6)Q({TPEjuUX4jib8_H{4d3 zXPWcL=1A^D>~CWqNr5d9*XH6l4#!#?hhx7F`!MI8A3(DzwPSC>&g~iOFUpzzI2ZhQ z>>om|q=oZuIbkRj2;5>$`s3PFI6oQtpN)46yq9qP7IxN^)3JM7hdCJykM;Nf_I@~D zh~psaH(>vc;eUhk@8SFr9KCI%x%Lkj-^F=~xxkuw0`wLfU%@^R=d;YUE6njfI8HO? z15G#wp^r1?V{!gpbG`TBO~(j1=R947{ZH7-un$I9H{;0dNE2?IO8fJN#{V0fYq4iQ z-+|*G97kYJ#r{5YCXPp8ufq9K?5|<}1Ut7sVE;a@aZAQ=6OKQ@o^HH-IFHBq8XUR( z2s?YTN3q|8{oA+}#C|W%pTy4X9OyLc+`6&9hy8KvuVa4%mXo0o&iSF^6Z(8}?HF@B#bJ3m2K#A_ceFWAHpiLHHE(^g%fb(V`IO6k@4Kaxvnth88}AG`H()YFLJzdoO7NY z*Gu;$3ygVGuZ!8xmtddc_@(Cj`#4^Q{X*wj@6$qKOf|>vIzTbblN`;{8ND=RHTFLm z|Ccxp#y$yqKK7y5y)73fKQ!Y1aJ&_JEB1Qq+%xg}yhJ}waW6vv-pPse@+ z_FdS2hy7pJ_h9dbom(FEkFmdjJpuRKh~tSko{XK_em#8c&r&38XdlD^RLT*7qc8wp zELX=F=ELvw%}?|R=Rp%r^Q{`rKoib21Nsi+4iEa|_e>xE5}$mH#Ng6byvLwX%X2j4Q)9|!3(CJQ{zISoa}+u@Dd!DZ z&PgVmQ_%=mKRd#c#qq|BpTX}d{CJ;oxB@)G&otq)Z|C-kPde{R=sWy>ntC2F^?bYr z6R7aX*F`?*8HOswd^LZhqi==@XO~Ys$@2Ji<-NRL=<~dO>=WG==(0oKpfUiCB1r+)77Dd&FZ%KJ*^{XX$- z$7HZC{wJ7d_2mym_)KTgV~eHa(M)8!1oiD$_^HN6cP(3zPdMlL)SvTw_~}0B-{aFx zGrp(otKGCy&ONwQ8Na62^Saz8{LO|>7{{4l&%AdO>I3te>6HWeeQuZdq<=gnNPU&( z>puO)F+T106(2s$r@md|Q$BoYVE>b}LhC=GlWjE;*;hKbmeH3#&4km@E1c;*_39+l zXU3cQ#8ipz0u%4=ed@z+e4fh{CY;-!)NpPx<$qaF>u1eIt)Dd}{11KlvAI6wwjSjs z6f|Hfy3#4X*Y|I9?iV}4tAO&0Da@)Pq#)84a9I9~bx!sof);`1Eu zHRaqG%`_qFA?8zV!+m@->p;>WA*i_DCq2u3=3~F{;TQPS+d@2dmS>GAhia3CzxuS7 zSA4=B;*+npQT~0^+lfB){Cd;RXIEt&QW`5vJZNhKu^&WAaPdPODwD$o%{BZcpZ<5KEm)|pd=1XgR>f416&oSw5?KS?cF@Bes4pGwJ=z%`{Or1}9 z!anIa&gVJ))ugA<^s8RKG!@~nziNMCv6Q3NpX~4{pTS9*-@IP^bBE7-a=Op@K)z4D zru)o)_LzJ{sxu{>-j4}B<$07(eJl4Vx1ag=!+qLgqECCg9~F<|T8Amm6qC^HKKX6; ziT5ZU{%)Ug?&rgA_L<*qKz-|L+tHsXp_oeh6IVldnyd5~wrfFw3W3 zdI;D13jeo0_3&h$=lihFc+}>T{%t@&XH@AKZV$0t4i^vTy|pZ?@c^S;(<(vxe_^E01t-o^F4>hn!L{o(I@o@0hj ze|UsXzMk+&&)Giy%_d)&PcD`m)tG!e>66Z4AOG8$oiPo|ImoKOAi z@Tpgmed>9N(x238{t)yTm;dVXT+TXK%b~`sf1+B-mT&xyUhVM;^yeIZTTS^R z8L}1ol-uP#_2grp=Mrz`+kq|me7$z`W1n(ZWzrew)vjMLerm7h`!7?@dDmx}lE<=J4`duy-s+~iZQ zF7c_K7n^u%dX>*D#!u?yALkR!P@jJO6rc2uGV_6?pJbYn(Ze6Sc!%f{$8agz5T9~; z&?o!@xT~*ztkS2S{J_N9XzD+fC1tzcXI^@nPdzO5DW5!_c0C&Pysva7eP8QCUaxjn z=##IRKI8j*FPvWWYLd@9;oCm`XZ`w4Cx6-6SNae5_*v+eI6h{Zb`4CnRX+2*SAEL) z4xfJYEuVhx0aFeEQ=gGd+5U^?g(mZr?PSEu_82k07elp??IWM(`{EBEe90*^yC_Kw> z=auGHRu)$3?S0-{P+DGaO?W|JG+MH-kTF(9=NJ6o2aI)WAUt>GMLCsY3J`Y1v_(dy zon2H?Ha}ccQc)QVmlsXTzNlc~LSD;>rj4JMUs+NRE(c#ywg5j1^A}Dpz=gDe;{1wm zv?9MGS~U4=3nX)k} zHySyPj1T983lL+paN5F!vo4Z2aC!C|#Gj!FJG^u;Oys+-jB0e_DheZ|`2~g3W{yYU zmsKGP)oJ6x;j;3Ih54o75&XnDo-?1G%iY14Aj!}`C;Yf(jEVNYgFWTWTjNAqoQ zNVdZT`O$)6jZrd~mKtUyKqktso7R)ToM@!fzmRk0O`jc}of@8<7Un%;!#NqKBU&oo z>~Z0)oM`&!a5!3AQNB1_Ud4wHuE;N2P#7*+7)3o;B8iQrrMuV8OJlsKgLCKSXGxyS|d8Dw683KQHczStd_+l6f%jcsD(F#Adr+Jl?+a|^W$%&R$GMByD z@w8bCtEbURbDtfamNO=dc;vouXxjLEaiM<=b;97YVi;0mr{#TE-repuCO+O*kWl-?l?4uyygv%CytUR4l1+;Gs9xj`|TMdcNX znQpJ&3rF)8An_=?v0e$x%b$<#tTJknJsuBgVO3PSYSZ4ePv}V@OLe>*6TD&`<96ip zs*3!p74G0;Kl~fK*333&x|^?UPbPx&FrOkuy`qv*)N*%JE66V`4Of*FR!0g8qJ{JI zhOroN^GgfOGt7xrU_eBSy;_!zkcZzi5Oz*hRbQTc0C%U)`(e8pmo+STZJBSX#P3I*WSd7Oja|(1)PW~~`E3e33P$)%tQBHJBLG-!^D>Vj;8R5kx^9#$uC1oX1 zDJL}j@!?tXFss9SrlbsmcQl-jnPElYy!_JqvVy{S*{BH_7AeC>BOP8&D*AOzzpYtc z+tPXs?1$4h-O89&TD}17Q@USdJtzAA<(Q;pY3h`j2y-r@6U2oJInPlhlEuN7=XfUL z3d$Eo@+%5G3ng{P2;#LppkpdzCL+Pio<2_l!vkUG9l0*dnRO-V`~MmTFz$0QYKBld zY_r$$=|@dhCh0YaU~Wuy%@KB|A4bopiSYVVGpTh)^3l`L zHoPa7Q$D7sw5qb$>r=k*6Uzykw+D?E$)3#KC0vYVSi#YMv6#{2oE`Rh)o(PL(jt*(imuLkuW_Go z!L?N-6`b*K$o3w^*VN4aJ(nFPb6I^$?KPQ|`PyMbg5(I=Giago{Mw31`{9fgX6Tdf(pE7GfEhTj+o#0#quky$du9HzuQXfM1wE`qmFL! z##~WY;1c{%Gin~RrlpE zRk5tV*E+rTaC&mn&}Yh!Rbn0jmV!8CHLop|W~PkP9M+4O1}Vc!MWHt>kwu!XybB<{ zLq-EL=JoMHCKU#~!x(v4@CJ4C9Qta-B`s5DdiU$-<172@*6kd8EZ=po0&3O?IEk*r ztd6U@W;M)xKJ%UD3(O6CX3^2^FAOA8Alfg-*KX|RYD>ppnN371y0 zGE#Ap96%?{2^6Wwyozghtc*xnie&Y>qL3LxS>XNLOLep&T3#9`LW~6gzRv6Icu;1J zin?B15)B~9cz^-SC#4LS@Up6f5(C$=`R-9x9%jf~;0_dVGRm7+2H|j#q;u@(K!KzK zOYrP_c^P>rl2y$Bio`^YFeEFH{3uq3Su|xV8w~3*X_&`o0+p2o`DH~cUo2JzO3DkO zr4;y|rN^@4;Dv>`YmgX0VdE-pE?c1Gh-mn7P*xr&l2I#wh3kAgE6|)bgD+$_Sm`e6 zDKiv7k(TDdYa}!B1S>g(zgB*F$&8j)VQr#965HdImM=D5Q9&7!91iOvL|H5>UsM>V zlHx@=xzK@}v;1%{uXbTpN)!lx5wbA91m&z3Dx(pWWM!GDgO%4+V%-aM5pS++7-=%r zR2Jrk@k)mG*tE3sa%N1PHT(PuROqwQkyF%q4E5)gFI$#jb_Y~qZl&gRYeOcr(G?r`0FFe;62$=j2D-ML*-R? zIh6EW^p*Qk&kLbNM2oY~`1wkV^i`DL_ZKs(7S1a)ZxUa*$t{|(xG61t&S7Nb?6VpE zWt{xQhxE!{p-Gxo3&lQyoZ4ArcnLY7?*x4CKU zI<%pW`Np-YuTT!Jez+|wP1{S>3~e)q^C0`^roMRt>#KHu^D@xXm&`9M49~{se>kak z`iH(A{NYt*EIU_*bE?ouS6pY>)c>Kn++L7c;#)9C&`Liz`e;ARa zjb~)Mg%RdN@C87T!)l;X%e4FJ>p2}(^Gr`=7>8I7O~K_tc7# zMJQ(cuDBeH9Baz63KtztmL=&k@~gwMF@>KtOI~ijc6dwE%%TzUDIZ1@XUij$D)Ili zaP(oKaLy~opj2LZIMMdh#J-|UJIqcq1D&R+uZ8muyWipXF~)BSkgh`>rWshWOq0j1 z=NRkK!<9KR(!;9z9PHfri40RROrl__%Jer7|6}4NPeUg&;W_e)d($e-JnV3a*31H70PudFO@C9+j$IZZ6J8!#yuIck-0! z;j~d_;{!l~n@i&lQE6!odB~OYLqgO`h%s%nJw2NrOzIbi!*{X`z|R5ZKPv9tPxbr5 zgAB_%xT(wgdcx5-j=;A*F=XDsW1KKviZovJ85Vu+UU*)b z)FZ(=7$492;pYH+Yu%xgvKl78gGy7ScWTHa;?2&hgG?HgVG6a}crX8BJQ@enr6Ds% zS{e+^3%%zmox%2smqN|2hUS%_-cQdfBMsY&-3$NFG-w`@ zUmCaON;N*DDc8Jm8jMi95@4Eo?%~;yCXP6K4o;sH!#diyjQ<$iq2=U#K8~T`BeC-R zLrFMR4KKkbACC&WiO=70{F_45k`_$|33Ckk`d+hZiA)%9|HaNua8^Sgfm{)oW$jDG14*Wjamg90Osj>z?afiXr$ zPhW+9xiBCw6`C9KbGJ!fCiLw;yAy?WbRgUC$CZ@elZx?yD~#6s^*hp;r!*=U-eD5=ka`C<%9{&{6Zt;$9ia@R< zIR0st#&_#D{^^dN!I)1U^=Q)1F@vnCLYR9i|{2Ir<&heKy{`HRE==e7|{%Xgsb^IpBU+Va49sgFx zZ+83@j=$0IZ+HAw$G^+*+Z_Mbj^FP1cRT)0$A7@_I~@OE$B#MwddKf_{7sJE?f6eR ze&GI|`v02a$2)$9<0m-&JC2{|_%X*%a{TulKgIDscl=bx=V#TuEyMBo9fIDL>G=F! zLT?K>KEKb>+p-eqR&$lO5mto*ep<9N+t18v0Wm-}_z~`qLcW`~DXC7dw8y zDYpX0PjdYEj_-Ys2g6z5_}=$3(7(~~1LogZ)30%S@B0nt*E_!V@A~QA;rQOa*QWoF z<9q+^nEn%v@BRB(`p-MQ_wVoM?{|Ff-#5|ccX)c6_wOU<^E*Yot=-gH)&<87>~#G8 z9*kp$;}3BBnB#K};cZ=xkBO1px*Z=Ax}I&V_Nz<}W@UDZcl@KQi#eO)VNyj<+~-oJ68A94Ke(J))J{jFW_^0xATjuyl*2Q-%I{pa9U+wtc zcl;*DKgIFaI{vAS-|YA)j=$0IM>>A15gCH_!m0< zGRL3c_>GRA?f9!5{}RVkf4|0>7ta{PS9?{@rojvrXpQ~wJcKi=_+9Y4YGOB_GZ@!j{SB*(wT z;Zq#H)bUdtzs&J79KYQ0GaWzT_#wx?*736)ztZt@9Y5;$d5&M@_{EOD$nhhNuO+J& zs~x}E;cFa!iQ_MG{2x1hqvQX?@mD+k4UXUB_;rrI*70v~{AS1hspD^S{AG^c>iEkY zzs>O*9KYT1S33Sq$G^?-I~>2!@neqvGso|8{8f(M?f5@;{J;Y}_5V)Ck9YiEIDUfT zuXg-I$N#0{CprEa$4_zmUpaoN-{|;%a{N}u-{AOdj{lhBw>$nu$KUDrk2`*c<8OBSnB#A8{4U3Dar|z_Z*}~@ zgFW^CDaVg@{H>0k;P_8Fexl<)IA|E%MuIQ}-rPj&p~96!VH+Z;dB@wYpE$npQ| z_}PyCg5&2p{$CtF&+%V${9?!dtK&x;|8I_8?f5$!zsB)ja{OhE|98i4bo^Hwf3@Sk z>iA8Lzti#8I{rT#zuED3IsQh+f8Ft09sdo-Z*%-N9lzc2-*Wt&j{i@`?{NIxjvsUU zw;jLB@&D!c-H!jR;|CtM^JAR(yf8zMXj{m9SM;yP~@v9yGzm8wy_@6oc zGRObI@f#igOUGaB_y--o$?@FH2 z{=N;bwL3ol9*?)}bbS7;7;o!ve16xax5XTvf0xPIx*VT>`^Ve59pC%zLb>*EPyP4) z_744c$9Mm3QG(;U>&c0Z&%bBmZAp&Lzl-E;DUR>`eI;H?b$tH4A#clYeEw|+Z_9Li z{>>q83psw0<7Yem$&R1v`24#+-j?V1-rxA)wPMHj{`QC0=WEeDCl5&|mHN?%(}sa(wS^SCL=q`0n2fYj%A8?IUm7==k2>CE~SK z$M^m&7yUNJ=iis|wsyxKSye;1GGaWy{@h3ZesP_H%P{Y7W$BqkxmbOL*#%lWo0$shdTwqvq0Z zXOrlAs0UIvie5uKh`L7fD(WMsBchj6$5ZEtzL|P3b++gw)I+EQ0i9E>D0$jH;W!g zJ&d|Z^a$#2Q8$VnPW^4_8qq_kze61nJ%l=uI!|;z>hDr#i~bCcw0Jmmrs)0D-=j_y zy@&dE>Lk&-sZXFz5WS1~MCyR(9n>dLcYVqHZ>LV8?hw6|`ef>M(VM78P`8SHg!=o` z&7#*)CsQ|xzK8l0>PFFPs86M?5xt7~H0p@x<QU4I(X*(}qVD=aoP-jr*iS9=|o;q9fXJeozP-lwXPkjz` zs^~q`6RDF#@1~waogjJ_^|{mm(L1PrNZs|hJb&s;>JHIcsV7sni{3;%g}PPrBh=?n zH;Z0JJ(api^gYzms2fGEp+29wM)WG`3#cQams5wR^F-fFJ)JsR^b+a|sWU}aP+vry zD*9^bEb1iD^QdP~Cy1U)J(D^hdKUG?)Loy+^QX?H?hrkN`V#7P(G#d=QMZatr_P~n z7Cn-BHg%Ke5!9DbH;NukJ%_qR^ib-{s3W3>Q0G$TiS9>zId!(^&qhPfrOp(+pZW^w zRMC5=ucS^Ay_@<+)Cr<@QC~$J5WRysOx^WgdH&RS)E%O?Qs+~*i{3;%kGfU#Bh&@d z&7#*)&!=t@eGhdZb))Dt)J4=aqE}HbppJ-MPR#+RGf(u*)Fsr}qL)x#O`R#ag8CZj zRMA&cmr^H*o=3fqIzjYY>N4tp=vma|)Lq^3{HY_<9ipdDUrXICdIEI?b*t!f>PqTn z(Ics&)J>vCP*+hmiXKkAh`L7fP-+hPoe|MPsH>^-ME9eDY){Rnj} zb+hPo)OFNNqVJ(zO5G@W4fQS5HKJEh|CBl+dO7tn>O9dmQ`b{xi(W##oH|o<1$6^; zs_3h!Z>3HWJ&$??b%N-*)GMh2qGwUxM&0#^Jb&s&>JHIUsDDP?E_wp>D(Y6z>C``` zZWcX~`gZCj(Icqupl%dBocd1c8qq_ke?c7)J%oBSb)M*c)W4+87X4W|^cw0+(fg@? zMV%^o5A|KtNuqaC|C%~M^e*bVsRN>SQ2&Oy>tlKT)J@bKqPJ52mbzW^ChB{rTSY%Y z{eRTWqSsO1OWh>;9_rswH;P_EeIIp==vCDBQ%6KEr(R2)C;DdU-&1FcUP8T&I#YB7 z^#jzYqOYcYkUB~9JnDz26GYFYewaESdKUE`sJlLr=TF^C-647k^&hF*MNgo9gt}F9 zI`yN}&7wzAucvMjJ%ajA)QzHtQ*WTI5j~XpG3touA=DeG^F;Tfew;d6^k-?%o2WBI z@27r(I#u)@>dn+iqIXk2Nu3~i7xfnEfao36E!15f%JZjgrS1^DmHH{_cF~)tw^Fx? zeuVmI>SodFsGp&35`7Q#v($~E*HCYxt`WV8`Z?-|=;hRH)On(Brhc9}Tl5m@?bMl~ zE2#fWohtfj>KCY!M9-uC3w46%xzsOG2Sm@J{wsCYetG`X?bIEjr%?Zmx?S`H>K)Xr zqSL8gqHY#FlKN%pCeb6P|4!W~dN}nf)HR}qQol+a5j})@Cv~3ae$@Y<&KCVyD)cVu zOws$PU!zVHy@&dB>Lk&-so$VZ5WS1~P3nN?9n^18cl}46KXnInhv==;|D58R>UXJYM6aTLk2)fHIdzOW4?5IvM5upttYL9d z?TZ6C%P?cj3DtidYWU%n>abB8+jg)k_|ydndj~gMkgy{AVEttYOIvRo*m*a4#HSlWwUe$) z8Hc}N>&q?jxY1wF&GfjVzMebPX2dlh0?~!mrb6N);jsp z$+I6H2;TmpFIfk#mqh=()P&Bm}{2TU~MrPjQX&ivTXw@Q4kknj$$}rl#E7g!7&FQtxd? z1pXM!s{a&mg;q>WE@i;%WqA#!9I(0Jv{BFGZl?Nz+Dig0Nk5#*Yt_(kiY>z_bHjid zaXu3mPS@g;nUnBwo}+dfPC1FB-H!9C)Q;hl;nD8Gd6C-jNA}nWIImPYg{Ov2#d)>b z8HPp}A)KCXh-{qStOVC5<`_GI^W|z+pPYHV}Wjaq;3;4<`RT@@t82eB9pW zLk*L-z7|?~F#6;sRGL8AC$aGu#_I<*oHZ`6_xFhDoVdOBFxI%ezj|)qwQ#xZy$#lc zxV_7ml(@Y&;V?0-b1}v{ERya-0fp+PCZ~25!N8?Sah+H4QthP8EW2RcOek=86I+pc zaQqv=mD>?!sNm_T!420ZCuG%^Cg;vrG5^`X-U5s|1A=v9(M{s)s9@dgdUkZM?yq{* zFIX2GAXf)fjodT{;UMcR|A$hDCG9(SaA|9B1IqGoKJehwr6(l)r`JCl9T%#9F81=jncnXH!KF)()-92uGz zN?yEPN#d1LnC9bUj2?5!=_o=1$PjPkuXJJoz4l%28ncaStjw`@x)|cE5(jT&h#?G9 zywO6zKVcYeKtmL>Iu^R=AV1e0Tsnl&;DXZ5h5qJ(2IpM(0@aCkFi)Ws&V`S0A?;vn zK1M$rKG=%~J?1pDIJA!WU<0)W&JWg|fT9epd<+?=Jup95w}GX3U{P@CLv$tu&txT8 zc{-L8TUIYep`3QpmIHaYuX4Sv9|KU)5Tj4yNo7COcvII!1VUO1+kqUWDtoBuL90ygu26lxUNLF1GVzhJ+d=A>B{%JC@9F z;>_s$6bqK2hA}C4Ba{b~f}8Av;zaL|2bCfZssW7G9qc&$wn|D zh6n#G$eQahv{Vg4!aq%BFR?k9!NzvH#~xs_^eM4RQNKeC>*b1P%A`K_1Ukjq&B-;a zlvPzN?Y#9dytuHlknX7dxlsMnvGw?6t9N6l{)C56mt$T3VxR+mi}TuzFW|;N^hdRm z^3fdyZkX-G){@b13EE@q=YTcz%Ne?cI`eZ39V5JOW52P?m>y;%7{quEW4Rua=jat# z1z$eFIyZUqQ2gARm{tEt%iklj7|WSV5<23n@t;RepV1I~0}uUEdERJQLkX@!1wea# zCRG1aXngC3_eIiVdYCQfdp1fxQQK|0E1AooTOl^bU~^bq(6wnGoML$$+Gs=6v!>O4 zK0qG!7MZA-E^nw3OLt(E4t3{jjO2U}P0Z4rC`MH3IdPrqd6nbFiLh@h#Z2=Ztm;~4 zA)URha|NCKt}~s^f9W&~tisDSW0CO#b2uLPh7wxQyp|E4`2oxDM82g3SMqZjtVTN6 z^o*N%@MHbahTRb{8>SAKot=zo%>I)Z6^2YREN1eqzv#7hy=!dKNKPuR{gKx&WHNZ( z$Pk%P-e{rMAJQR{cO25BhaLw51EA8*0Qep%DKBVn&V~Kvg2rbrM31(m8$^{s>z;%W zc{)ZJRR0JEXG{{{{t%}ZBmFqN45#DK;TZNsRObdv@|U(^(v=uox&_)$kK#0hYpHlm z57uS!LI&nv<8XojS$+*IO^ZDOo<|^h49@C!7F>GHNfJy_pz0i?q&iSF8rPQbTGdFL z-705EoL-Hu?TVX#nc||MR1;K94F0s`c*#U58dz3xl8jCDZ*6Hh6`@aS3zZz?*)m*- zZNmtM6mrs-5UiVx#=sckB;}|z>rwa|dU4u}Q{EQ(?(?Bf|5p3Yev+|Ayo~+c$HiFBtn5yo$VBL9ga%8Y>0#2r-eZbX#JUp1a=Z982FcD*bRCpOZ_Qmc(C1cTl zg5=ju8iNiyaKmucI-LjX$*O<1W$mrfW9D}pJUF@b*|@3alqMGkYx$SUr`GRHYkfQk z_l8PdW46(|h593*ct~85#e$Te7+|1Lce$FGc8kF$2cwc$|I<*}>^VoHps{1f2dzPw^1y z?m9?t1w5JbpAjs><3bI?lG(r4+$M#W{MNyPoMLjO z)472YZ_N9$>OYg7*6SpLn!>tlREkjj&d%F(G|h->_|{zr^}7c@ef6gI_&QwQjn>tV z={*-!wY$E%wk-}K#S{G?5gBHI)35SMr&p=M&Tp4Ys<`)7HAx5Rsbfz9>=?@y$_ zi&$6xfl`-lN1oC?L80)3TWrt~M+8u-mewL84V%T6X2qpEZC0^LOc&5Lrq@3ctXqy@ z1Gm3}vc(NNWi4TSlIc*%hti@NZWo(xKZ_84ZFevl&q%7!6`?&H*YVE=YtMnG-|JPIw5897aC1sl{p{qVs<|OV!c5D6$;3BY9Ls9B z3XyG}G5*h9GSccMOFjC2qChR8K?haM%?!4YF?9BMh5zI%mk!>?I;*r%F^ToEqUj{za*Db;3hy1g!IhKmL;`9<%AYX5N4*OrVCf><+#5uy+mJ3a>?Y?K)mVhzyBCH*c^P zv+mdV0?9+t)QQ1@*;Crd9;bf1puzQAsQc2LihVSX6E8T@pmZYIepy_gb2llpubeLj zNSAPyyp_Cgg3PEM;w-FQ2AK#3nb?7U;2mN$O*6&go&PPuf*yvbCy~k8NvnA04T-EA z_`sX?u^Y9IZN=SoqHsd(qy>TwY56u@tYfu!xX(%VjmH%5W)V?fnFbq4>`IHFfDqmH z`-pB5K+L!=L3F5MNf;*hoiQ>82`)X7r)C}!T>3gf@#Z3!MPo+JCt>;(tuUBR;uel6 zJRUqKy$q@u>qGrpT;yZTi+xxqrLdGM^0kw0JzmOh9gE5oLUW^}>WQ5w!d38FB77^m zbr)oRzP%uQnRt)`cVSd!R}%^@UBI_6bf>3Xd9;-9W%5=wJ2@nyQp`M6xWKDii!Q!T#kfD@ZaK7mPBevh?gNJ|7QJywke z*MedU#P;FLrZ|mp2Dyf1Dqrj*I$XKpJI<8Xbp*$Kfrjgo=g0oYVDeDvvD0{lnH_#V zg)=+M_m}lGJZ_Yb{I&+O78CS`>sYhjnlg}M)iE`jlaB?1Nya%C%UZHf?hR+I8$J&2 z2PpgChFg=5!{y+H+mnalh&zKD*2^7OkE}}`2Jg9ni-Dv51Y%2`9T=!TvlOy3ibs_8 z2_AeYZ^{hbu`M=n$B|MjGjXYQ(lk&kmJH@1A8|45ESb(xxZX4FHlq+j$aF&Ni-UvY z{(JG8soF^cd4F)_ACS?O-FVxJoxr-%1c}*d@zU3VOV7g!Z_7rOdOuv!ej#=xG8v<{ z?^Sq`>iM`@JLym8&k$ai;eEmI{sKTg2Z@S%GGCJTo<21>GdB8isj^G&<(P+VJ#)*) zSnX<=#G5w$9XEC1vFUV8CTaKJ@yI0Ympqx2r4e0?-@|$Br(4_4k9qSf__dQxBXq;D zp@wL3YD-8b!B^rk3yF!g>nTYr9(O(EVbfQ0!6J4#Do*E8E^AEsd!pp;LloX29ay(^ zU2f$ zUi-b+(M%6+Z$*Thx$}8F&bb9wJpYZZ3`=6DdR~)=oq5!dK+8vf>z|FCj9=9({UEsX zn(v@NNzW{=FZ|2H^2l=$ z5}S$WLr83%84ojI%8E7ynOHu$LNBeM+U*Co+>YNc#Xd*H3)Qw_`p(b9eD(TkyuKnk zj&U_vqbyl3Kp@q!p$BL0i#&4-|-9WbMK%h?xu;flT@StOBYF*0eG4aQb67=+0@ zP~T&;B!bCb&GBlYNq%%B*+Z`-nNU5Kp-hxeda@Eh=$js3K~y}&l;Ic0CX>7?cBaXT zn!WN8FnM7L_4fvEB1X;^ha9V6F$}LrWB+7b!7qL4-(dOZliQTaLWlV>9?q75Q)h`7 zhkCeW;arO6Vk0S*70ecKf_o)_VjfC?Sbz7*CupTx%FLBc2ol#KUR0!3L^mzi^3I3B zxfnBIdyzvM*A}2t>)$0^fJbZn``|Z3lM{L2LifT7T-YB>z&L~}O)M-NNPeoKvFGxL;G?8;bN*h_d}}7o3X!{i`rtHi|8X_ z>&->|g;KAJzmSU@ex78K8zybRtPH;s#OU5leZ;}+_|9USwq&zStVYpxR)2ykC_d@& z<{*I1Be0fdovCzQ=X}Rw(&>Bwr)38Rk(W?gJC9=U7^r!Fuw`da?dR!OoI;O-v$KPB z{D)XL8yl><3r`VelU@V_2B_yqc=K<88c)zG^OywFDn z>z3k5?W70g{+)*m5*a#3?0WIw!M$6Us@BVZc6?qNOD{stxwt-rDjMICtI<3PEbX<< zA2ALuix=Yt`P7(oCea!Ak;D9e4nJv&@sEiJt{l!F-05~e6LJY+==>5TR6FU*V}z?J^UJYKs_#V~p z_O{nfstZcRTg=ApR?&@G@gDv&s?%ItterGh$r-)LY9;GP@&mQZNUKTsE^{;)Wbz`1 z7KgJqzCTAZP~%Iq8=~=0B3Sn*Cfl8B85!p4A-o2x7|5{jj^@4o>DybdZh>6D)Q^jy zc%8rpDH`sT7sUM!V?JgVL*=!p=NHZs`^EZml;9HfvsicKyCo;h=>4K_CiTHpFNBuJ~+r|3l(Rd_$ zr}!Cq(W77B?9t2`(HPhpV;YoIzdN=AvDvvAhA+7Uq#f~34YoX}EgSQ;-xEaF)@#ly zTzzNkLbQ*`_0RI*&~lp()|20jVHy#bw)BH&DG80FrybY*4xJmR(V%qYK|7v4g9-xb zGnD%JRdCW#Y!;X^vpEyVgY|swM>rQie3L0i%ek-^AmTlu(6octK*fT3?h51mYGOD zJ{5uJd274GvzxQa1L)}4R%!842cx=!v&&%;&+QU930@)5g=6e8xrl{JV>Z)#gcBsB zL{0n1bQ--hn<>FMvE0$?BL6iHFShq}@giK@f{GewIdBlMyw6zpG@e5<#7Y;|5(mgH z=O;gR#C-g5m&w~M7!cU>leglR$)UId)1TUtG`0Si zqN(+B225RXlpvZ4T%S@uEI4_^B?F!t@EtDIrtM(Zh$Oi5YDm<@Rul}caM9@*IbShA zf}pWYj1X4aiJ?=OUO)SY_}EMGI85!qn;EafPDIt3z5>4njMcq#@F16GR^rNvoPM&T z{9fp(-Th;0w(I)IRuo?Cq?ZP>caYgIpK?ncdI@wr1Gf>vgeCTx!7G9DA(C?1ba3ey zyujn#GWG~St}vv_3;mB7Zg6Gd7nr}T;w13r&!JBp4EY3pc^26FAbUrAZs2&IVC#~B zvI+lSCYtbfD9mbkXD3!HwOize*ti&n?lF2ky2j{ac}L!~VD9X|mN}+HeO5JCR!FAf zHjE{&^MhLGo-lT2BT1q9y`ArV%Hz|WZ{nEt{3d?lD(w>jEx2{>)4cRsT-w{V7rzsb zX;9Ol9UH0#u6HiNJV{qn?z{+zKJXTT#bSWBlH7%S>ucEp3~sz4pPyi}|A8hAAeN@rF7&RMcj{JN`<8@wYck{DjU94C!_2QrltB4cNwC?msny5O-fH!&@&Ot1)=3sb|K2?l{cmMS-Dz$LrwmlDeLz?Q`Ui} z!dQBxELgW618QfA)`Gpi#53Nzfj?g2lb1D29ADDQydPt&Px;+oVn{fY2-Y=nCgV+- za#=fW(7Datc1Ch763~*s75CC-kd$ZSg;i==uYMmx6q*7D$m1A@d=?G&Z-QC#1Q%YB zFj;`j!mk87Z<4|E-?8tYqSsD}4U{Iil(lpXn`D4-vC=XL>v62@#-}46z?7zT(h~yT zb{m9UgB*+{D*S$sMUZ`HFQBiaHF%m?^>6c4d)o7?$6tLbl}f-o#c}|XNbMC;50PdF z4zFLSt`bJj5WQYf@j%V$xKN$bQBoarkj*f~tHe~X z=`572%;92Ju+u;b({!&FmiN@~o)eoHzj--86u>%^ch8G=xd^Q!Cd@G6z9rZdtdAU0G(+%@!q>}?|)H< zdtby4COUFxqJwpV!Qn%~dNr^2)xDTj?|pzz;h#9;@pBxfuXwTsr5oEi`e-gMVtKtz zmesMAey=R5p4d=%?-jVxsQFQOg6SoHI zp2EYQ_+GFspU3~;w@tWxdhNFF%@}_m`kTqY4TB~Qu6lKH%?(EdqA|$xPQ&ej=-N6H z-kAg;iN%5o2uTHl!pCY;LnbXaPYG#i28ISp4hF+ZGUxF)Pc-L8;5@;c55jpo?ql&I zX_pTSBWe4CxpKtw8aNKR@^bHaRi_}{PY8F(>T~D)sC6c3ckwj1p{#%BDygztC5eCA zQ`-@T$aoK&6cki0_G5=7cU}W*fAGqIFMp5_2w}Bewi=BpZRg%b6Yf+E_xwTAf*Xnk zY9;JE>uaLei72oidwjBdEd!!>D#YK2li*?v}k4fu5DLCjd# zO1_I1m?!Xys6gjQ@1gJhHT&+VThMpU15i6DA%K4U#wENRQ-VO}JcMPMVAr8dQ0MCZ zn5z9jM_(5=n~Uv-UJTYzS;>qEu?0q2g{qSlOf^mZDT@qM?o^6(V(^r6`s9wi{z6sbou0D%G`FOX4Jk zl|kx2ic@<+kyHoj zl9mLeQV$xcmeev*n=D1C)Gcm|HKcC06s1ymhFZn2s!5euic+ZwhH7ITBcwu>qEu>_ z8)Gr45tgDUu-H zz_3E3mRpKasX2y9y&Y60sri0OIi|?O06?g2Gi9{YNMqnm8x@NTuW+|r6`rU%1|8) ztBF*pr6`rkFjV3%K&>WqzNILY8tTT_NGi!vluEt7UQ6P8%;PdrpP`m$9x0XDW~dCt zSVQV%OHnG-WGHDJ)ubM_6s1y240RG?jF4JpDN3bg8)_M2EG9M2Qj|)Ka%0RRHPKR( zO2r#0l`-a$`nIJgmD>HNmP9jS%qG=^x}+sRsnljeNghL_wp)r)sXGldfiY&1y4O;a zN<|EH0jUg9H&}{NsSDj0Q%U7oic+a$L(OJbDWuXZMXA(*M>LOlq>@M-WhqLfb{b0Z zm`Lhf)FmwmN~In#R2jocAk}IqN~LZ!R3)i+Qfn+lsZ^00V}MlDQj|(%8mfk2b+>?; zX(>vjh8yaqq`F9@Sc+1qkN)WN05MYiEJdl*i-x+FVRevt9d$`df>NoqhI)w9PEs2z zMXA)yZj9}u8ZAYs)Rl(%Bg1MVb+x4^l^W}Y)kpBdI_Qny%&QmI*n+R66VNGi`# zluDi9#<+~s1WQpWHOQrENDZ?TrBWS#a7v<@)IQWDEeT4cHn~)URGXzJmAc(fe`6kt zN!?>9N~OvSm9!dE9;xdsMX6NCjWL(h97|CuHNsG@GRACDsg|Nt>Whb+JcdXOu@t3J zueekusdrG9v?M5%YBtnsj4^}M7E4howcJp-%wsC4)s~`EYQ7s|3aJW9Q7Uz=q26YU zNu;tYMX6Mx8&)EzQ!PcQ)c%K@l1LyGuoR_IFBobsV~i)Y3w23Lf>Npb4AsFr21u>9 z6s1x%Zj9YqK&`YCrBZVZ^&iIAMXK0RluC_u!-|obVkt_cj&Z3DQpa10QmNR3S`rDr zM2tI0eS*5Ad8AZotDzd#fNCezZYfHo?lP2&9c`r6S&CArMK0A!s?JiBN@W`=^De}= zkI+hhq?#;6sZ^<dLS`w5>-DfCS zvCAa2-cpoG)wnTckXmUeN~Pu+N>=PrNfld)QmN5~k`=oYQd2BNsnjuUj7g-9w-lvP zvHP_oWW_F#)F-G*nny~dwi-%S>=H<|TZ&Sty9^~YC!W+gOHnGd$WXFk7a&z=P*q=s6GQmHrZ(~^)CyAD$Cqb_MlP%5?2 zP?E=;q_$a#QmIvjk`=plQcaekRI1cavSQapYKf&Nl{(*zv6a+pOHnG7WGGp&+em7Z zr6`s9?01?+S+Q#-6>lj@rCv6aDbDq<;0r6w9mR_vCMy3kUTN`2cQ+lpDwS&}S+UC{Rb(kjrP2*0D|XqW zGA%`^)KPAXAyUIFMXA)g|EDD(D|VTrK0;m6lAu(o)ljlxmqF@9OHnGd#!ymoQc10~ z6s1y8L&=I=3aOhdMXA(GL&=I=5~(XKMX6MZ8)G7=v6iA#s-K}`#V&zVf~6>xdi@?P z30bj=C$$H4NlSuKsSSpbJO)TTV<}3d8Vw~YcHPf_y4zBeN?mOzS+VOPRc$FsrKY+u z#z@Vw6s1xp8cJ5|I!K*iDN3cff2(vl}qEzY@L&=I=E2-NpMX6Mt8{=^rBd(wMoU6g?21Y4M_tmApj2v$p=8A_ zkJJm6qEu?Np`_;IlDf}QluA_?N>=Q$N!3`2QmHIM$%?N}snq*-IXyrdsn1YLG>?=@Z8Mat*tL>+*;15BH5p1)>^72m*iw{AEpcOP zCbi5`luFHZskNl$S&CArQ7+X)YNDkmm5O(%)ug^{DN3bw|4K_jR_q!{b)hb4Nl+@a z*-)}#w~W+wOHnFyr=g_g)R4N@Qj|(X3?(ae)ue8)6s1xZx?x2~T`GgrOiNKJHQZ3LVwXxP#Zr_?ee_E$30bjAA=S@PluEs5D9K|I zsn=1Lv?M5%T5Bj-u}dVi!BUh;-Ry>yK&sJFluBLcQt_m&wiKmOV+|!Mb^%gTEk&tR zf}v!^uA84~Inh#-O6^(g^Z;F?x>1)jkCaM1<5DqFJ1j-1)ZK=X6}t{n4_b;+scJ*X zirr39w^)i&sabA}?WFQ7MXA&oF4abAf~6>x8e}M0v1=tY%uSO(~ze z<6lARoPc|J*7t;ep8PD!Q}*yfzRGVWKf>~qJ^U{CJ>loHbZvK*4rA}%;iZbcejacw z?y#Q+jKPj=K+V%~qtv`IKcr-Jv4d2jr6`rU(ooXkc9OcCiS4DD3z*q zV_Zw>7E4hoHOo-4y4XZ2&r+01ona_hU0h9Sf~6>x8sx^&#mq^`FVrBWe7$?9S;sX3OS zRBD79V;-qgOHnHI#m_a5vbvZ{itR)5NU78-hLY9AY*O!_E-6K+RI{NZk0DZ9EJdl* zazn}LVkW88mZDT@zM*7wF@scvr6`p;*NriiRF}tS+XII@MB?O6^~zB_XSe zNu&anqEzYyLrESJN$o;i(vqN5>OMos>S6+^^_HSks>V>Vx)@JtrKKp9n(M|GAXRKB zN~J~{N>&%Up9eL?Qj|&^V<=f&>>_o%r6`q({mkhBVx&GnUD7;KDz(*6vbxwos@+nQ zO5J5BSzX*oYMrGhm0IM+*iNd>Qj|(%8%kCe+elqyDN3bA8cJ3dTS;YDic+ZoZj2jA z4Yd@dQg1eDNyzGAGpYAcm$W1(mD*@1SzTO9YMZ4fm0D#esX0xgnk+@BRH>n4b#XPR zC6=O8>U=}V>S80Q*_NVID#?v;8L3g0qEza$+cb}|x>!Rh-cpoGy=*91U92Xx8+A!b zf>No64JCPuklJi1N~M+=N>&$(N!@8FN~Pu*N>&&1NJT6~snkR_##~YtT8dJsZyQQh z7qdwvTZ&Stu9aF6vbq=|bpW+Q^GK=Gc0)-XGfC~V6s1!48cJ3dGe|vRDN3boFqEt= zrjokVQj|*Nx-q7ZDzX%%Qt5`0)x{)InUL^3W>S7|P;g+IQ>fIGi50F6WBh)1= z2}-3}4JE6K@uXg~6s1yY3?-|J0a9x%MX6NOjj_88)XkQnRBEQ7WOcEN)RmT^R4T<# zvbq=}HP%v;O7(MN>>!n3DN3bYzg0^@Ru^}Y+Jm~JB|)jw21Ci}Vmqm4EJdkQqoJhc zw2`{oQj|(vZ75k?Y$a7~DN3cL8cJ3dHJ~%E>S80Q+bu<@RGy(^b#WP~GD}e^ zHNlOshE&K>lu8XVl&mgRlNwJ>{-Ds_*c zWOXr*RI{ZhmAc+gvbvZ{YPqE-m73$mm`!TFr6`q3HI%F_hDe=jDN3b=7)n+bGf5>{ zic+a}>YW}SgVcW1B`pa`rM4JKRu@xAyf%OHt1LyS)K!L()x~B~ zrIw;pD#ML&EvfS@MXA(KL&@r56R9LiQ7ZNRElx?SCiNL=iRO_~sckORNa|%vQ7YAB zC|O-xM(SZpQ7W~>P_nvMLu#3&D3zM+##l{io~0<28f7S1U5t>LXemmi;@z-{NqyT= zluGSh>XbwtsV>wdEeT4cHXBM-7jsE%w-lvPcN$7o7qdy-Ybi>lB5sT!Qa4zNQmG3K zC98{>q;f4qsZ_EXRtBkbOHnFypw7u-DygF^MXA(IL&@r53aNKdm$W1(m3qWbvbvZ= zs?}1IO5N(lm`G~P|HIsyfJaqi@53Dk5EZylLE}oR(Mc4?#1SL{l1L)Av7fE(^nQR~tO!36>;`M+<~y|?e} zBrY@0H{XxvA${xAsdK7MojP@Dx3L&hSQSpJOkxFWECv-;p@}7D7c+=;u8qZ@!aCf< zlCz5*V&&La3@WT|gAPfwaXze@jm4nCTJOYaCDsSfB_#<471jb1OU^C|V!dQzF{rTa zFtOz9VhgcqY%B&9)}*GUBRD0t7I(Z88;!eq6YXcSop28CH|g85`Ue-zu&@t%)$>^ z`1J~Zt-^m;;a_dxPqFaFS@<;y{~?8cox&e%;h$yUA8+B8EBtE}{uv6tmxX_jg}>`P zv%Glzn{W??`0{Ur!4#zEc^#8{0-GoKJUIL<@2<{ zztzIO!@|GT!k@43pHld@D*SUS{PQjRGc5c{g@22}AFc3@wD6C$@DH%?3l+Xk;UBK> zzj~L_KzYALtSs*b5(0h5RQQJ}{H@DndE*xTN(=uv3%_NSEU)o`EblUfKhMIy*TSD^ z;V)G9OBMbf6@Iyee}#pAo`qkn@FNQUVuhb?;h$>ZdoBDjg@2L4KT+X#v+%oF_&YaK z0@QznpR4fqE|cYbL&j475i8}h(!y_@sr3Kfvb^gQ{^J(@V;25>7Jj|LU#svRR`^vG z{uB$p!NRXm_zx-k>lFS!Ec~-1e*Ra!$j0C6kx%vDme#UyzNUK5ELXFZ<9w9IK!c88511HuoqP+#kAzroMnYgNg z|LhlA%l~tUaA6P*!g%6sb;czVzcKmMbJXJl6LLk|h+sO>HZNd)n9INdY~^O)HU?VEz>NstsmR-d z?des2i63Q*l_(Pco!#CHqPO2UyZsgX&g?zAofk;sX&sa%zS<;w3TX{Bvvw>41I$2w z2HH%t3 zkLVzQpE?~S&94_fOb5=jpddB@r%oq!v&0_MK(r}{0@_5N#!uN(Qbo?lntD}E|OQrChYINS_6@!t`!TLG>h0IKMz zI|wv^F@^wK1%gwED({74y*~i5e03+2b#HPQ!LM%kLSYX^UUAh~dTDq5`~g1z?t4iB zcPQYHb7kD+>Svkyxe{+nA;GiiXV4fFW(>(ba|;+0@$2vS0>;xQCrI9>NPd9S2!&N> zJK}(Hx-Ngp)z3rf=LJRief86?Orn&kpF7ph-z4TG#+Uf5G3|r(#`Gaeph@bL>2Uqb z{#JWZ?@fp6@#6HXgz?+k(RN(+p=jLrv1rMa!8+dE)Ps+-desADH)Nw(gaPD5B87Ua zR=zb8*~*LJ{xk!Za>cH~8!3^Gcn{y5u+8dXM#s&m;Sdw!R#b0(y&k+pc&hNS-7U$N zQrKkC_$&FW-zv*~ zNded~K`4W~H(lNr8P$beuuhwE9nHSc0z@D|{5k%<;!oP!|jKN*$tLeASL$LR1^SF+P2*29mg zVwXFM9r^~zmZ}1-#e<;Wv(zl$=(fl@7I7o_;MH9g@JTckS-_ViH(ZL7%;R017-Z*ijGJl8{zonX#90G$^^v%EF>-q<0YlZwxI4=&J*YU zKw+YZb%+}v_^v6n@H)07MZ&3w0X$<)@gD%R#NSK=)Pa3VTHueoU})R-h^{uHovIL+ zqtd?u1Os(y@o;8S3tfhY#M?-2jK>%BfbYFajp38;zQ`_E3%sEVsoGmoa{R+ydeL(k>w&|MLu7Nc4abSUnHvRbGiu@|M)Rw`ePv{HLfyVTw?GcnMTi9;pGSJD~| zL(Wqz_Hn?lYaJIXPk_-e`T~gdnk@6zC|7Ekk4`P~QAn!F++C$la$eU7=Nn;soSZ*` zGRvow&`3hy=d|Nrc9NbqA}TZVI8%Ngc~-mA{jEbfi=#F#3ki6obOlo%fIyAY8lT`c z-Nyc?aHsX=wdzUv@CN-<`OH=Hr8;y24<(u@GMlP=$@J?wN&kCC`jv3)ReHVC^bdEE z{xnDWJM8qVwN&{AZcNpRDAQWD05UoY>5Zu}Df(BZ98OJ%Q10} zlh{NOb9B1>5q5QnxBdZju5QSzMv)!5u6o6CG2}bdh$=gYJJO7Ewh@)CP)euKbk;H5hr`*9s3;7{0 z8}Aa}8D|ipWI%J{!u|{bQ*9!TsBbdZvHRCT2Z4s{*^LbrO2>{bv<-2_g%-OM!xUQ2 z*aF1b?e#zO|8JtMIsE?sGTp%p{Mx*aTU?U+@1T<^L!Czm=o^(*K`CZR*Qnm^%4F6O_dffB`@FM*u;Rl2LJlt)d#EVJfzhIvX4&8R`ixG zIRL|Sfe}MRq|ctm$#YOEeoUVBe5lob2ab35{j;7UyQ5^!pK-m}b0;2jbc>1i%v$MK zc}Iz=?W*#gL#OMSU%@<#D-3(9M}8bz*NpLEu~z$q9$b?lUl0mhX7_{~{L{^R!s^(ntw9N)t6-Rk)Ez;ok2rp<7C z^LBU(?sa_2hr><$JO{kc@vS?)%gk?aC@M&52aAv=HbY*#qI^E$2`N;s4(y~p(Mw+n zcO02g^F#8{y$Ys4x1og^8Pz#bktC}|YF@hs>2oL(Kr`hf=;WwIY~nFkWO*05nTtG8 zNzVsY0#{2&(!~#N;rln8Gkvv!X*e>Cjuw1aJa;8tH`eA{bcmTGAJ>gHiju3yOy&aR z6+OubZ_JELiUAKlku9bKjBAOzNQEgL@s70Vcp)$~V<%)H3El*O=ep+l#t$1P*&4x?ha>--1;E)aOvV7#GMAt#W>NDBk1{ z$B#xN27=+C-92dVTIhKclB4PuK|qg9%1HFai}a!b(X9jWRa$5_TXS?q zn|z9HD+1y^Nqk0|4?42*?CzdnJ*rmJjhr;j8ouxP=Eg zbXDLtzUT-)W_Xa*BSi_QA4V@)RKi04r-1jytw%!HExO%fT<9FYMYQQt+4O<_PZGU(@IP;N39V>0lG(jHMHLy77a8?FzP^lOsl6N8e|G zO4u;1i6!3vWGytrEcO11H!{lFlckrrv})~u3z2oyT2iQO#dc{=mRhn%HZYQApB(re4nT0>tS$GEX zXLc5H%q--YS(uMsEtK6!7Kq6#T!AbYJ1}=^%}ZHofp^jBQ2?q(ZnI9!;48Lw2GTuv z1|c&Iit$=3)1%#SB>;L*q~&jt{ul0y*J}6b1#Q#5(+lue!|xf5zN&?^3PMsfw2*E> zz04<|%#9X0)r1zBPzqEF9ce<#P3R;E?J1#nE<{4{F1duZNjK!>><7^^i=`7O$D{Vb zLu?FXPe&ANA6_Z}rayXof{r7MF;O#Ln#Pxk5aQG@{~^IGGC}v-1mV>toZoXD-!+c! z2d(eOBZ^7nH)4?NPtAvmk(SJ}a50y~xsczn=^5f>c6Kon5q;1CmMgZT4S5l*vI8^Y zqUfB}>#|HX{xT#B*IVVHq{#x0WUwddK3(9&@H9zU6?_@B6RakMH z6AZ=i$Tw<5Zznj3{T=3TEauB#c|GwZT(bPg2~J`+Il-C4ZY1_Xg3X-k(L#Y2s?uvv zE$}?F&7cy^r*9#O$M;eUW4N_^*D~Db;;f2VF ze8^6;i$2?fos2AV2$iSG{5cE^%gkxr{mkNy zky5l&1xirP2p051NGRIF_vm0e)TQ3{_FB*K-hL5qEdAsWX|*&0I;>D=$`L%gJ6s7D`CUoK<+Gv>@)m ztQOv4LcK0`Pg${-vkPsSmzrF>He|F3@z{_dCZt8yEAw`O38}Xs{RqL@5ZYyAvtxBg zkC|%$Wn#=FthxYa{jqi`&XPfVIUZB$`+J2_PLxV9z)S&;mqD*|cLQ7nqgR?Q<(|4I z_5m9l#`YlL7*Xssq2Qf_hH@}Lnw-$D!y3~v%>8i@#9I9A$thHrvH1{&$h;I&1K(m2 z664M;9&j14hq1+co2b(VULI*P<7MOeSge5EqsBLULq66J4R(Qo#qgq(wx9eNMyd0} z&~iX%WF#b6nDDu*aiVk>U{J$Z0IoZVC>xL*+T{b(c>+-(TbUZ#C6~E^XvC~QREJtp zvxauc9;&4x+p675la7qmq-L~MW>nd}_#zt4Q4lPL9Sc}Xofbj7If2wVj**T-rO6~} zj8u97(5x(0gR^*_36Wn09Al)_;|RvfTmZ}T;#2A#@~a>Y!QPDg+VjCu^ipt1jL@>L zoq99}Z6H;T9t4JDhoqtz(lzdMrRm;Dn!TLxvUKl$rV)T7^|c++O6AiH-l?6YoM~F& zc_q_4(@B~wz_8N{WSUK`G;=yh)4bD>rVS!CUIGN|BFTym{iJ5E8V;Jxs)5OF1VkH9 z=twuIlXOQq(?ytW{|@QOI!U*8uY=zhrV|n}E<2Mt(SphsC+c`|sF!SiRYtz(VJ}xQ35F6X^nUKG+8Gn*;$U?GIIV`~>Bjr#{l1s51 zVLT}z_l^dqS53P>ADl6TOpxVAObB*JkB!SdlHhWJH?kn=rMsjd@iOMi za}e`36QKKDM$M0wc<5QN%g)n>S6)`+(Ly)umI&<|w0Ns=83M^NtOjao8EVWrk!AP} z?ar7<2sljWio-r9hn)yG7sj?=?Zp}110{5Z$3Uvia8*k9#}xeGsA(5|O8gL5dT0Fo zDfIj);b##}O62ZNB=Q@lL_Ql2iS#D~-fMK4H@H4sjJO1_0=X(@IU`Dm95_c1r+rtF zS730e{@S@MkCfpsdU$JP6x-tLIKB2=V$msubm&M=vy^ z-A;r7y|ryx3@FAsgkX!%>*lXq!9;ks3U|^eR*mblU%A^PUCqp$O48iuv(=pD5TIx|a#)zZ?Y&pny zFV`P2ePrNUzOh(DgYYz(3=?F^1ZzYcfQk8p$YCMI5v8!3dITe-v9`;N9D-s$R*22a zN%>+@E(2xxuw>$WBS(qVIEzKVkVQU4xsZyGtYj^87E&1Fi1Hy&jML0Sy_iLnq+D{e z^+F42Od_||rL>-=Qacf=#>MA7m>FZ6qG}w2UsrX-WJ-5iyalkNe-Xx{`*}y>O>rz# zaFqf}6tlMtkuFmxdo$bwJp$*KzG6KC@Rkbo2z;{m=V;!L6H)k&wb$bKZnM5Iqa&CS zzpeNcTiL9YmyU;p31R=zV@WM+Qd7>bNo}E|rbN_FD5lY?7TI?nQHP3BM8(~l!MwpuRCuWfEd4s)JjcigxJ)kyQrxs2etkw z)LKYwDyg;8SfWk|v8kO1YFcgo&*xx^dnU7|VjTp(PpODj5}Zte&zl4Zu?fBlKMVx# zwF#d;(sK;i6%ipY=UzY!BI9r73(1Q;Za1lS|toF2?j~9HwgOiQaVjR zDd(Z4;B{L0bUIM{vB#yo@JFje;!rtmjcg9rPajbl*;X3;LnaaghWVm1y#C17+yfH5 zO!y1%M(o*dh||!_!u3^~{JG!gv*CTT&ziLkACN=!jO9q1g|tWFU^5lMfhdj4H(SNx-^@258=zgxWMyn`J zu6#Mf`DaN?3ttC}q)4^9&t(`rhG;6uL26~BUFhQllA0ENo+!3XYIom@Fm>9){uo+^(b^1AggxCkQW%yvpU+~cutMdO zLOG>icG4M0&wuQsGacVK)^}tx4v1lmC6t{dSwTVZE6zMe)dp$NxxKNN6;V%0s0ayl z_HO-{4@X5*G7GZ5{%$k~MQ>*g)$)=!PLgUiNfFc49BSpVezH!hNlNzGPlFWel;w~X zW;LrH0HV-=$nr;L2!E_RBhjzIY!4mn%U;{Qd@t?Gn`mUJKCzp=Yx_d-l$5N{KOJmW zD9D)xMv)6ka$5L$qU3(;n++S&K1;j%JcR8!l!dqI@PL#8*Ra6S!&vG|Dew-{q!Ptl zV5|NAe0jH^W&GOmo_0`|<$XYs)57}^#Zlg`4s?`vEi2n9?`o;q$qJs&@=8x=t?tkj zg2nD4s+~*@wIj%-E8nJ&T1ZmT4Vnp3E?s#N2A#S>6u0QGY|DAnuG)X9zC4bW@oVLG zM`oAu8!yRe;R}i4kl#>*ZGBnil;4b$Lf5m<(p!s+a>$QhQCmp)$>fk9K`!}uQ%G$f zDe0=62~sZkjh2??*=(ZxSMs|Gt@ziR$^BEj>!#*$(*;ET)a1{H|hh$d4eG{LV}v)k;#*o!nRAAVshk=psdsi_|MA zq&yhODqr$NkaAVU1KfcGRVIqND*9ty^q1=K2WTO`wjSQbrhqQ$AtuRb;b(~AsE2t7 z+j@MhvmSng#c=i+9J?!Lx1l(t#J5pTY56;p_y~JE`%BBc1)BY9%YDNEU6%U+NlptF z5yesN;}Pz>+^Lf+5 zc=Ze?DS}+2+NC{A=Bk{eq~kr-Ns3@GTavoY%oRZ{QjevOsw64tb!Rw95iAC~ND<^B zRYFqm4!vUZsog#K*n+&KA~G&JCo#GP``R+TF4hLNh`GngEm`$|Wcp(>GO>B*#CmLK z+bnKGj8^-8iB`KMxN5)Rg3q+r)wDODm?4%P%nfprv3HI1(?MSjX8g=UbOxt$wa^IW zQ4By7A@H*^#5tg;V@#FtwRRx3uhlKZaDwg7^Uaf5=o&b4GSXSWH6+ppcO=kC+r!_Z zB%epJ8Jiq%+$<7@DSx9l($?hw_#=OGmMAUQ?bFVFNBj;}fepAccem+H&RT~Lq1iN~a1NU{2cH$@uf{(>?683iavoo=!4f|pr2Wo!3FS3KX{&I}zoc44$ z&4Ge0I*xHFH;4EmZF=rzeYnib)%tMe<@WS&{Vf-91dEVAY-sUwo!K7aN74cVmzZbywb1AzJ)R}V z5|`>rP+_w&nVWj%;`(879a4{CHzh_SRI@Dc#R>ev#E;}_PH}A{aQ14>tvWU=@Q4`a zP_2Drpi5n0DXU38dIm}fJHh~goH50bI~3H~PbDV&jsr<*Z?2M&JmP8)5!9K-^ctgGej}UUq6OGksGpe{88{hEu%GFj=iuy`XV1= zW;>B3{pjL|P=AQcG@|yGs}x3o7iUHk4_f8g0G;4Z;4CLVyM@?+^>AIF@4R6 z9ekhyrC!g%#7;XVcBn(pDm@Cu_5iHO(r!vU6K8An=((8V*`r7Nz|zj%D1ICvsb{l# zb4nw7e7S3Vv-e0YnDE&{F4|qyQq!BM=~ehF844k2p*Qd;8+jdF;id4l(DsY8`(<8G z{|+H%W1~VzXp0uEk%kPCt>eIZDO?-WnNrSgo|MF3Y`D>u6$xRA523@H%29(^>^PnT zt~4NwRfUdD#9+2EBY_zTj8BxkC@PJ7Q5wA}8-m>uIMavHL$dGjG%zfNui#^8G164o zHzfP3Shx@aNhi`sgx*W_f@Er__xGLdXx)UU z*8L#9_)lD!XSZ&~y6WQu)(30RR$8j57CssJU-U90>@iNa3=?I`a~We)!J2Mh*gL*2*++B*J*W_4EjynfAI1-{bPO>;Q{MN1^#=1DZCi~}Svq{i+1uN94 z9Gm2J1K3oPV;MQla&ja@ahzarJTJ+Su`Z7HnH)*bxE9n?IZl*Y9~PILkGgyv22vRx0T__Q-S%%)zxn=RMrZuXkoF_ug#$A9k^`vN5 zMMt*9%Gx7i+l&J-sjAE%y5dZ^?e;}bvut6Jw1u^8syLF?fu!{WAW7@V4qK%tQjVB5 z?-}&wmiZJPq2$IxfLN|JV=_(Iv`{v~@`-+bHUpMylr9KMHv64uSBS!L$mTnQaaWNptG@qf*N=>uG zSsiyU&69vci)5XSX)}E6M9r>CbX$!06J=8{UE|h8fShh>sI1bD2zl>Iq>2X6FkWYH zB!d=_6@)A_Td+*>3?ZL6i9AF|krQVQA$tu6ohm|}f(5iGUrC7H2^mAkj#dZG2tr0V zAtw`3Vp>g^pCbra?=0qigxutW?0ylD0X%|gmFsgtj&tVu4MI+E@@gPtCvcLL(%4Bw z{_bPawbq0h#nw}h?C2C=6=|K);-vM*PG~*$k(<_ENh_8D%q6Y9pE_yn>qJ>vQj(od zTCV_@EKY4F$+o8?JA%pHO#wdn0)Pjll<^({)3>-wa65q&uFT%l3D+x9Xg%>;Br8n; z=8@K&047V&zY|(7q$InDv>tUOdmf|Y)W)?oCE2k|w#b$2nog2^mXa)SGLo%#C0p1@ zvL92DEn+f}0vz#g0I!1ZoceVlfmeJ2Aje>I*^MjV4q6u0=q3$|T7@<$8L;u5quXeQ zmcxc6LqlDm?_8L}X?N^&=dgpZL;sT94V-isQt?;F%rz-K&h$qZtI}9&fd_S%8OBru zcN(Ow?5xXI15(F0$Gy`a;T$rp4it4Uqd|L#f$ibW84YdTyd5aaaCBqUw`b6In8h%y z1TzdDL7L}3pU4u+)lxN8r+TO*>{9VhTyvc2Oo+@Gj^s&vEnIGTDbk?ccSk}(7o@W8}|HuGV%VMBrcJOleTd^1Zm^}Xs35}nukGIo#D5jc1ilTLJ+BK z_MNZI+5&HJ6N#?@#J!)qrjv9Be&a}2z;qlBxYNz;B;7gAbZJai0EjzXUMJ~xJJYSr zMY_*Bq|4|eU8ytOJxn*WLpo0<=?pgCSW@m6FzK5B)+FW0+r?7l`MYl&ayf>Hjse77 zzWJS`i#YRX~talPh~aGI@}IFMIQ-m%qD?I->Q)lf-@+7>HEPsu@$ z+Ab|!ulY{{DRox$Hm;*#YsxBg1r`NpsACvaHPAgd>qCk}t%+MN2M4x?A9&Mt*-izw z#2OQ=&`mP%T;d%wrZt7YeTfwoX(*s08(Ii6ozm8Gm?z$N3dKgAtxPXW#Xbmei47(# zkDCkT=^*9A3sxRd)4t8v`_0&v)Yv76HEvF_o}Y^FXCj=RM5swcm`VinZz}UChu=aI z7<;f4i+w_F;o;;55$?kuGl!L_2)y*vn36=GO?8R#L?VnyB2>d5I}ifv>}tGz0YtIf zWJFuyK+{5>LV1n-l5{Fl5gLdf@COu(Me3KM=JHg;2Z>mhMBoU~#Y%1n|1pWs;x3cQ zvQ&*F|8!)z+Kr}#P9dWU9CT6{@#aBeP!fS{$B`4&proI19vHDO8&Y|^0t-S3N~~O9 z8A}O)2yR!uOf^3>)dPq#UQQy^q%cla%G*ymO1L4l0Hvf8NYcsclFr>uItx?j^dOyq zNjlyx>74DPQV%Yqn|N)C+QS+N#_J7oxD^!kCM)6{4wQI*(IHi9(Tycn@VRq>D->A zQ{E+=Ke_0n%6T*TTjRbYox)UvS|UtIB5X*tZ+{}f7=>W)ghg`vaUL87HBBSCxB9?{ zC9rgy5KH51{%og*ah?}sCKF;0Uj~1M-cruva2n?YhOC}CQ77e>a^H1mf97Qk{+QCO zPR*?U)VH*nW&L9wGXnj$<*AxBTEads{OrATlhQ=eO~J(G`{(`-v$(bc312cum&N z?b&7W)+^jpAle47$W^%RVY(K<~QOu(F7o^A9}?6Q(?p>nVB}zJVNn zl{xDv{2}Eqdo@`XN8}}AMH7pDUv$~3x*-6GCy%H2x5gn1s2+ z=~-IXK#_~ImwL`E%F<`=Q5(dIKp>ugbn5Dt;Sl*?3J+#n;EH{SXUJ=;Y%~Mf?EA^&MDdD|P>mlf(;14~juC4P1vCn+4U4aSQy;OzQ z8*pzND)!7nQ!AF6wBfA|8r=sK^|2^LLZc7;5B9dq%<{hhav&g-uJJrRn!1lcgdYgZ zt(+vluX(NX*W%%$ptnQq^tU~NYwIYq=n-Pxu{aJk3>l=bzCIjW;5|$I1Bye3qGR8PfrH7Krip4F19pC_T45XDwX8HV;Er?$q4Se(gZF z3ir`pQ8;-lkz$Q^qwG#ZWx{fX??q8jEn-w()Dthc!mbQ44gtA#uNO1~Zr7s)JboDv z!`Rkw$@7{Uv?ra^tEre#>e71vRD=)Oo{I`YrO5mxsQ z5#9mv_{tNv@hb=(8O&N^A3HbATId0Z&m3u?2)@OW->2s4P2@@vDvC6UQ(Uxeb#BS?;$gNZ2v`DHNHG_+$`UGwql7tT33J3h zwnJRFjO8!*HF%4&9z%Plj4F$@x&X}C!C3?{44K{e94V%BE#bv%A1WOdKaeMEyvKXi z(0Mk!S-l~w$eP4q+*BpL-O~-1p9Ox;>No*R)%|HZ#LdLw>5?TZleHo183e?IxI}{x z-kr8sCa+o)KM*QI8sDNyF}wB;wPWieaat3s{R8p)uO26(-%`={P%zb`45?9J#W3Vf zkB-BPSoE}PAC5hMfj_cGjC-E&yG*UNU&W}pF$C2d1sx6!&$$qTiC5DoKXJR}tg2CbmI5wgok_C!J&Nsc|PyLqc))uo~*a2V(8v{YQV*!nP&ek_h1V3O!y zIsyw=pq0Q&{MB@FC&Ig55WAsh@=oNH6yz<)8Lm+UMO=J? zC1$MR9_*L`wvM__c}OLG`Y7^km^e-ZMlu2|vh|2v)^p9}YnR#+J z@+0!Cz*pRmEG-mtL%g`=0{uF+n{h9g z77DhextjaQukO^oce7NuC zwF6OXT(DV&Jx>tm4l$6L5WT?bi~b&ayzCop1FtVd1ik#xZQ-@E8ff-Lh{=$jNhqWU zRn?mNnS5vsAaW@${%{zDe$0$X$-48$1DK*WK+^kCoUVvz;aw<<+9&FZmVn$u7q#$7 zNJ&%M%fy$jZuue~8r!K`vVPQsx#6{VJZ0AYipx@Hp_%LTR3#Mu410dul0!BqbRvhU zf0-%oS1GGr@3f$SQ*2Kf@4mp~LRms63mvac*}d&eZRuKZSKjU+(VGw9f;`K{q@nQ-Vg=rf(EgH~6F1XPguB59@|K zzJ6T30azg}>hz_(MsL1{(0kJ$9aoz6tv_--b`oEiX_Fi1wI`4D2g1Jog(mLe{9NK-5`rG1&e0Mo`YCy^wpbIp(Tp5*<*LVc#%E< zCl%<-VwOP)e>-y54KMjn@`_~DR2;Ua^oOUH=Hitbyfi5*1ftde|X`vt8T@ ze7z2T_-}+>uuq$V*#gwS7kcc-H6Ti=vSN;qU?>gQHGeACpNCSns`8$j#k|6X=k#=BuhdPqw_^J9~*1N2qgXvp!tRLpK8~Hiw zXi67#gnRul{ITlj7!0Mmsw1?~pR1o2Xn0XS&p7MnQ2_C3N*yH4f2wk@F4|e;94*0C z<(z^L?8Z;lk8Cf!a8-Mo4*MjVOdFa^hO5bRPiZpyBTK%HO~%?MuIyAp8od|FkY}+I1Yf08QrcPIW1c{ z&l`{@J^EXJ^baE8rQKJ1QPOe3rr3waDdTWna44!C+gc(`rO|7={zw9TvAkXat*5kL zJI)qhlIT7080rb)YJ^4i=eDX7J2Mx8Mi#CFMnqj<2*UszO8CC&I@oDi<;g0^DW$pF z&1*Mi9tu;11798bBWt6pCimFh@~-7S5))MO>mA*fKQ;?n_)U9+em=urFg+`f4<8WB z#o?$aJ=#0lA1(LF8I@dB7)Su6K_`L&y=`0!;pNw(_b@8)m9)=A7wWN58R}{zU*yN} zV^Oh?Yz{g{J<=~*PXBUfgJH{B=?b2RGZS7Nhc+NQHD9^ISMY%^@@}bi_N)HLIzJ|h zGsV@Y=Wu;dq~6cnusByJea6lH+!j-i7XnpEt-To3GsS5#K`~vjs-yY(UhaGP?7hh9 ztXVjPu@{wwgDgA`BOj5RyF%uLhAy}|$04d3Ro_~yHxNn-s->Qv0<_%izw=5>b{M^~9cVqfGPHq0;|k&+u~Ren%6828emIkJC=Rf_J4xAu}6=CNo1N$*4L)Y8Hy>hg(O_a@MS%bK@D;|9!!kS)RZRoSDxs zrUFn=LpeNztVkhKi#);y)#Drogl*g-r33qBmNBw<#%mJGs4(S*%SmYWaN+^pa77KY zz&Kb&srHEzg#__AK=#2$u}qlLDCved&xQEIX_C1p27#@Jq&<@@P(F8w_J_td#2=jo zvxbEiJ(3QyhC%-E)RgE6m<%a}J1-K4TlPTh`twJ=D~(RYX{lX2hBgyM4PN3G>OLIv z{ttAnP;%TaWS?$w?)sa`xda?TD;Ss^z}HvudF+E|PMlV1PJfj;e@j zP$6djtHw9zAAZsM#^-`_hxc~iR&yAGq2;Jdy{T90KgP%o=SGaq;2jLypcjb11j)xA zyBcq4)K~R0F2j_NY(GA}a$azKW?--nR>Y6T(;brdG+F-erdim^6Uf$>Kr~XMNL7U` z2zV!>R(1&^IV}~KPPYD7_6C1JOW<L1_tiYMP%hVUy_H%rh zK%5J{OjWhc(nns0)FuY240xG=Y0eCkyEAaGu@#eD)EAS#_t)`XpCwUdP)_Y!( zzp8)P-38^6LsEUv-^hu_-~zNZNA+sqFOds98l0aB@1^h`OodZh_1N{3{IP#9&R4Ka z3ylN~tMOFzHC~0ml6IhATVN;)$6`5{2EK6V@@A>aVqg2dc2KKYZ;w~;0>==&Afbi% z8o2DYR%fzv!vo&cU~RrL8Qz2!m}g;@7!5)!1(9TWv>CT>D{R7T)vS&tp7u<8|76F@5MIGx!?tek>Dvt^&GzC;VX1MNxbpn98pH}ym+ zQ2?n7fuPAZnQmSu>E5x^4P(0I&eG98NaZ)#PM6Mf?wb_X*S4{40xYeZz{}C z4|rE*!u1I5?FLAu3CY46U%|cI0m(8U-asB8>411mNKW8rKzag_V?y$(dh4;uA%Li- z!3*9B`1M@qTj@T1qoD^I;3fZ<=8vWC7dZJFZDtRVn+dBhZbJrMjMi?b$MJh0tjyGM z&uYb6Xj69h3)YN|oz@uWr8o5?3$6BgcxJa@qTDS0>21Hd_^Wvw;r~YQjhz3e_*r)G zhhWFUudMyWIR5v4r1)EZ^B)!8YZt#@*RL-Ale|Xg|3>X6@CM(1p!{g)rt+VG)#6`S z`+tVf_+J%&>rc1+ZO8va@f)UfX!~gQ*pzcyX1u-;`?mIdkFrN^%Zkrus8xl$@g)p> zszN#O1q{8ZLV58A8ETZFk(u!tglICwA_d8cS6YzA6vP{!Ye8xhBqu)Ig3MHqy!a#w za)W|o#>*8X6FY5~$B|j_LJOiRh&MjLf(%xWoVad5vK1sRKE#3?q#&8`JO#-T9tFvY zXIhZ$dnGS#Jja53pddN%EDN$uLGt1m7G#NnWX3%T;uTLSNLIXMjg*g9+^-e zLqT%l!h%#PNM3xi1^K;#WX3lrNS^R3NLGBI1vx`OyzyoWlA|Cw@g)}I5CzGLFR&o# z3X&P0uOLIj*X#o+=V}Ymq9ES*gBE1Hg5<>KT9B6&BriVQf;_Dtnej>mDHIPXNLIYe zg50Sf-uNU75>Sww_yh}bg@WY8bqi9aAer$(1<}Qs3X&D~T9APX;*AfnAcreRPCUng zWGF~pJj;UYVh0$7KG(03^;IUeCvTd9#Igq6a|?e z{-_{mDHde9f}o{XkO~DsOR*s16a+2Bf}EuwXekO(F7gxvEyaQytsrPA7Noa=pru%l zz3ly>BhgYUh)@u;6a|?i-c}H_6brIiLC{hx$O{UBmSREXD+pSO1-V;6GUJ(2@=LfU zN8F--S@G7@6utsprGVaeh6D3F1{@c znSx9gyVwV^?dMsLEehg|>lS2_g5<=9Sde-J$&2S$kmnU7Gwzj;CDj!BLkgG`_c(wd z1@y+V9Kgv6m=n)%054X+ym*_`B1N-A0W;&R3OJXH@)R&DzQF-JLIJ&T;Q;njz?}GI z2XH6OY{`bu>;Qg1VC=RbaSwoEy$Th^+g2h}uR?mfm7y0@Xi~hMp~qFIGQNbNKdI34 z_y&gNs?daZ3q!Z6P;RUV($2&iLoQbBF)-Z8FT26uEVo4{yi*#db5+ADcV`qb7gsnn`kA z(3}%&8Z|@>SjJ^*def*v8E6`%o4;k|?*#L=-29zn{#Kg5)79^sYOpdtS$gx6WtN|q zlP_y!T`Zpu5a(aedA~F(#qmQ)%gY^iBS9fBAckoqw@*gTf&faiyKX&%5@)vxrg;vOj zj*~N=s*(70Td{=uw!Dfebwj*uy>rf?WbATQlpfrH z9s2SLcPsWQgIhPgF~(vPjVvS{;-44z=M|N^SAkH9Ns>c5o#Wyg?jMT`v=&Q$pccN! z4`XN7tp>w(TyGe-RgczE#CURj?%%QNb}LqBd{MP~v+nPJT zo*14ku*~-{(r}Lqmo4O@?(*Hv{P)EP-=Lg9T$WmunHVnT?Sre*DheiMOg)7Q9avHu zpQY7e-Qiq;anj2CO=8?vG(&i_{B3LkE}1{^p2?f8f|>7 zdW-b(*~!POhCoIReO2;-93Y~lnECbKMNK6sENsgaokKxLiQ_=L)tM@f@i|fy5Q|K0 z3S{IqQy_0S1k(M#m&bCb;IEWN#urK+>9R-ny-- zK~A|}0o{9GH#*sO#Pu#hHL3Yw=>q#pPAFKRhy6A7J-`f%)oRbnsKEBNG0^k;_f31^ zi;mA@Eyf1oRun8Az%Zmu{Y|M{k>4%Ogf{Rx-v%ttv*vF^&9jwPd2vN#X@)ckuS{8f ziR1?>Df>Ms&r9;_t#Az_X767g>yP&JMQ;%m+zEaP);#=?wb&|wb78yR4Su3k6uhpT z{dz^P{a|fQ8e;R;=GRMl6~!8k8*yfHWm<7seMP~}s%;eoyCZmNo9B;v1{p|q2D+)hnhl<` z4QM#He3j3pYPB$nTD;$ZX&Yh}z>vP9-FdhKZ%Tr@NpSa6aCZsb2D7BqIqqM06cYu3$!0W*SSFZ6Lg^qbO1r914ll46O``)^&#kJ zfP#&Et>U99ryiiy?vmmBv<;V7>t9gVDlLCke!X!R7EIWmT(T;%-q?Z_k{ar_rB75R z9*}mclhh`uOm9N2R3^6?L5sF4CE`WPrV?kl`=uGCcRssUA+}xDAl!ZRcM#LMs&au71}=N(>^HOiI0rkN8si_}4fGPDuj}FdX+gO|}8t}*X1b?T@n>7TZ^<)HtA9LG3D8$d@Mrte__Jd?{XC176e(0+)w_BI8u`SfD?5um3RW_q58lH!%hr*tjBJ~Vc@OYAUG3(1;+=NCh?$>&wGhQsxwgiQSzBW ztg}VFlcOvg%6<^-kApTZ-H=QX{uCWe?B(pakcHdb1W|M$63pB>9aqv4!Tx5WX-^-i0b_#o4;`QD%Kius+JIk4gLx{VBib z&C~T*F-7X<2porLYd{*m(WA616CcNhy#$ z1fWS`92gj0AXw|x(eWr}00&MmAe;v4%yXCA|407~D~a3~Rr3)um8nP17rTlxy*+r? zA8b))qw8818c|3 z$8Jf}&PPUve835|4jQ81KT|CfB6ucGtv@EoqjIH;S!?2W3^8O?NBdknfC_;cr>Z~| z&O%se41jr3H65xZ>%r6rDzp^MpFg2!c$z24w(3&cC%{(Y+6-B2Rp|y!?4Pn%Z$TbbX2p=r(q0uE)zMxJ0?b*M z|AoDJ3hEAfwerYL?bV9_(_RH7)}RoB(LPV`ht=~xvR7AAe$ksJnO5c}?Nz}$lr=3x zSN5vc#})>ZRoSb@sjyz?VrTZM3Fi%HC*s_vLRW+r5+u#M!+rJCDFzuhA(1+$2DAMc zlBZaGgZsv04r%14Ld&d62;|&1fW}q8aM^pjRJ)Bc8+vq5k4)ObaeUkw*NU*8_j1)i zd?;-Z`YgPPA~vvai1(_cgTEt=XPmxbYvvAZh%UTo`au#!jFinpLBT!IN9ikY=xhT| zUd-baM_71zWToD{Oy~t~1P-bm`rE3v8oR>+fzAv0*UJs9~j+DMKuTkSarl6l;eb0A%FR;FG4!F=C38WWN zG`d9Xewz@#l`Zq+QDBUoj{Xl^v_6#gi&9k+f`68V@>{(BHsuE&hsFzK zGFYMs(s70yh=PA`Xv(GU{M-gsIUhZbsud0CJ1a!neV$G!NF+4H3DTqMFZCvnEtR2A z93tBbu5F=i6pCJE@DLSjlX`{w5LD2RZOFU;2budBiF9yROVU{Y^A;KwPI|02gQt`< zdjG%mqZOmT?J9$fLzO`@k~J+$=++a3}f?*#B7n-(qG?9tFmo=|A&B{RbAtxBDST z{U`MQNBw_;Sq^YO`%CoyHDLd&{!k0;N>WFXP(NH*Qd^vTbVWgN z_92+%Ni49|QnV1~DpOY0&}9d*3+2k%O}OAjt*6Yfk_4`CqigfzSynsAnN||xN~bGv zu3Mtoyhm}=iFMZ(_(lx^Xx6dO?P>>igf7MCw%ASWYANqQN5HrUbREcvf9uh)%ILsA zpoi&K$Qq*UceZ3vwTVi?3&oNnWaU>Biv3ixgusilD#7bulDQ#_c zlm*u+Y!@S#+YSo4lo?utbkgrJaASexKFz0?Qi<$c+ZmAnvwyBinrP`DbOUoRq-y*b zzs~g>YyugDar5Waxn(`}KsivbxcDu$gjlnC3-ES@9tlst_y+istW#r6<_?iaxLn4} zVgLF+*eZhC6~mR_D2_&F;g3C|(l3;%X-TMA|;NXQL#4 zQwipfRM{(v)n*d>{>9!%qS8%gx~Gs1Q};bC->Z3+!8b(Lz@vyw;rWQAS847o0c4>G z5rfttqnKbFzII=Gtn!CQu%78Q5p+1B%QO4fX7`_}xV=y@$z5*Xt;1rk8>+G5ENO&%I%bDq-37n07yXYb$|_y-Sg9-{>(s8Ui$u={;nukKW(!=B2($Ha5c<B~g&}IzgaJ$bEBFNf|_ITs~*;Plvv|5xN+FK9x-D57|*k4ajs24F99dxVw z0is3PEMk)^sq$83L6oy92}^f1HoXkleh_?=(;A*{<_ORQ$DCgii$06!M9XUNV7D$D7_U3^3ZSZ9IQ!I&m4lC zC`Z9SU}5Kik@8N{FGYA&7ioGX)BGE6xyUqnbTJzwd6gpF(jLrB(@M65_|e!N!{*!% z5jZrHrklqAqdF>Vou2!(Ua(%9v-mfh^(Nl1)s*21((6D+yuQ*VB6}b=k>HVR95QMC zTJa4TM(+?nG7P3_1+G7CuPB(ZLt%kqis47Gm9{$no1jZmJ?jC=fRg@k)s( zWoUuQNiMpgQerKZSbu=AM-%6_tG**VZ59nHf{vw$#}&La6~9iwRe2ovefp5ji?Sca z=C1HsEp#bCylt-)?Pd4J!7sIfJ=)oOf_tz<V2>+^Bx%o`t_Ybj@jCh53E}YF`tV<#)qAm))u=p4Pugu>=vLK0Z*e$7N9!;4>w6=nc zQ+r~O{gAW`-Gj}@&Cnq2dqjR~p_QmYwc`~ZQt8lLpod|9^Ao+D>ghU6MqDQ!oL8NS zqccR`C_a(8-s9`;vYS0Poj-lPl_5uO8|`5zgsuE>^xNo;*>BTPusi>|dZ=E};%EC8 z?91|DitX;x(I)0)$YL%`ZA1Nd#xE+pHdk9*NBr2;n=euOp^7e>=vbfUZ7q}P*tzvw z#!ai}5%Tomm6sKv6Fd#pB~Boa+BazN4aTv6sChxA%j+UtGjirm_mXTfTwmbTB%k$1 z?@^z>$+!c~kU4%#?pcm!n_c8i^lq513{OFo*uW1IFtk7HF8aYgL}GZcW&j| zEw=g0L}u0H#_9SUwTj{*nlG0j}q zsQ5K1d=CZ&Qk;Q+N#g`=%17A)l{`beo!bo`xL`{qRF{RIHUW>}B z2rg$4pnLOC>D&)r5qaPOkgJHq#wDqmtfaz8P=-k&4HeQ@vH%)2sILcYIktkntLf-Nnaq(u$$aLxvE(WEcqKCT_@!Pl zTyOr;Y|-bJ-Y+Zxf4SBwoeIWDpMM@i0iS1R!yT|>AqtAbpLcN;7 z=%730kFr9Ng;|UySsK#{GRvmVPht+Ae>#Gu&tHvC<_B4uoBXUvemB0* z%1QBxi{QCb1XoaBJb}JiZJ1vbxnYM|x)kWCT9S}j&{2VIkda*}(4|K>6{rTe1v~1i z*}(m=frY+?&(llOzN2?MLKeVk`qFIByo%raR1UVj#O!sIgKn-I^hFMQu@dagRZQgM zfR6l#)k;nd%cNS*vyyrjg`fPBtZzQtS@`=<20YQ8X|fh$yI?rVAvuf;@)c?elg?1FX4PqEJU zN!DAS|4Ab?P_fQ&vCbpwPve}v7@3JHNE3&nlMb;NKJ)@ng-i9qa?BBlRg=`AC?cfD&wjatI4y->tX^7BQ16T2Dapw zcvxK=5>?|Dt}$+gFSdjOUfgi4o~0j+wQ^*-91U8`L2EY(07%Y*uR(&;S=#{4fmun$ zF$v!ZO(waclO+8dT#jLq?k+Abcamg0PNP{|wxj(R#Q-F^+|o&sGaN~lGfA#1$>2_s z3~(fw%OrhWNxnh-q!$0x)?~)UGs$uQk{M%HlbU4X*U2QuGD$rER+2y<6@5Jp)>%dW z2F=M>0RXl(KY#;v@f_0)yAEPxmEHp38}}h5`3843D$_AJZrqv@KHVM0HN}o;cR#el z8OC*It}t9FS2&mwE<_mCmR6lJ6tS1@I+Yag;XT0LV23X~m*}9g5S!wOB>CBH4IQ9` zsQHSZ?9bB7eyyTFx}MscDXMKc`V&#~0?n>8ugcTSOj@q^Ai8=3pkq{}htcbS;Q5dp z2-3aPLObE`VHPeqlG8#jBLa>aeb%BC@@Q5REAZLqQMaH+{nnU+cpL-7p2cyvv^=?R zrG?+b2t%F-azXDiq3AN~B`qyH%!H!nazMYw*-BDCSL%R1E}^)l(+Ru^z|w**v@mb_ z#QX^JD;|gJAPnioKS;Gu9g(0vVO)qqn%I2_+AF*qdNhUkBVFrgCB`z1Y2yBW%QS?m zc^bZ|Bi26;sHM>|t#}0vHfQp>-^T8U_+klt?x>{c8rAS%3fQ9fEAkXu{-v^)gBj0w8hEuYv zg*ixulq9EZ=r!;y^|nQQ%VF%IMH0^G3eik>bj4hh(0POx>(+}OrS9i|HTa}VPz3Dw z3>B|zhdr?&Pa%@orSyfF2aMUA0M%Dwb+R$~wPnr#y)%3s#gP8E%J+%9X@llRojROg}-T z$DG3%khZG0JgRZBv|4DCqrP86I%6;Z#v%BF1V*mz&7zOX4V>|Vbrz^<}tC@D1hp#Vt7-FQH_*x zFJR&$g^`(xafh03ks7-08DQT8z%owj#GMCecRX#0D%BcvGf!$B_Mvskhm(*;<3|KkUN>|_=U7FjB_%!tEtY(`u^cx`sWcgt$R6k=?j%ur zO)^W&I9N7KHak@dugXrg)A_a{QH;$Bd|&7}S5q zAQ(|OW64Z&O_9IGH>{Az*L5|KF`oFJah5s1UflGQl)mu};!=9@uPKCR*FAX{HL2zm zJMYhVPNrjjeu@co_vf2Ii@5IooF~Up`}3-Ed{I|lUUi7<$ETxGjNc*45QMP<<{2*o z>3E&f^)x51gH;u|^jQe4(ZV@l2~wNSch35oh4TP$?n#>By5#3(D`lx8r8e(8P_a^9 zh}6cJ09dFeyHNW&PzMtAM^sUg!M~HA8!ZBEUTEqzuf#JT@FV~hs+-qT2WmZ0xm1>9 z;N-=-&*e#Px0;Mbw?)A|CL5S@GDNf^3O0uwgYqEPbFIe&JaZ8opbt?zdXS%>?WgG2 z-SkM6j=@Ab{6yAi=qeSbmmSOh=x6gSbrP zkFhF$zeRfNpNdFV*5L6XJUm&PJrWhCdN(;GikWj!{DfV!j+0EiWMo%UJpH&|R|x^L zlqaEXEW2Fz|5$qy_$sRN|NpXxxYWcwRf|zkQBi{{Dr$m3FNzv>>Y7@MxTgw=;u1|_ zNh2C}T$`%3xYVYuh!}z*;8Kmafg2I6&NT|DTBNA>|Gb}b?&Qo|?C;y}_wVZ^^U3o$ zXP(bI=gf1?oS8err1~YbfngZq;_`|{B6TO{xZx!QN>AhX zwyBBR=5F0*(A#>-)i4;Nl}t!A=SVe7{pq%2H&uM;KK0XMF{JYEKkvQaTpOrgI<+>itAL20_;vvfVbUz-??m5KT_z<75 zQ+Q%lyTBN2>JAYcj7~-M^$gG@%4E?RI*zEX{!x|SEQ&rdQ;;26?OvTTT!xmJT85@) zoGLAGc2MXuqlfL{VU=@ZS|D2cUPP>NZfyJ)_ZaVvJ7}$aJ|SLiz?r8qx$R|etyK`pb>zri z{hx2BlL*c|N?tV7!-euK}EBsP}Z3x$_wRbpy;uOLEGS z{AGD^&wDH&{O$5&Kf49_tQoFG%!W=({o8h8IKocV?{!+ygwGn0Z2v#nUI~rcYpXlY zZLgLJXS&J_HI^~+r&~KR?DBbMUIN=>b90Hu9$jPY)c_8Uvf+4(Qh0#Tubls$qbdvh z+fnWB{o5mtYUI>T>&LpNSwr{vqr!Nc46YHI(`838-K^I?`9?gIxP72xNF#os@YL=5 z>Ehip{fe#~seIjY>a}Q3?r_U3k4_w|W5pP?Xz*0u1Bb_2zlQ4PctlpN?C8wZ`QFw2 zTIH?VccOEZvn-O2EIGlsddp5ldkvVpS+3Z{c>^cBDMm85p1kr8@_e%lE(it6D(P!i zIAuhw?OcMeK%)miIKmDjFUFKxGiOcA#AC;d>2u!OQ*mi{jy|}G zdhff1S&Qi~j^Jf8xY$|V-@_~9VTzuX>5u~#uKVqLm{=o)7^8kpAvh7MOVmGddc4Ui z@27m4kM#|AtL%<4=xB4ir8?i*md5LqT#4z%w)~inX=kkX8|&*6 zCunaNqoXylDK_AQBA%Pf{X&Yz)IG$)9(P`8xkRDN7beTP$#-|D!qP4oQp4GncgaJ_ zw$3VSEAA{T_o-~wsJkDnew%pY!aZ-9o2G?v0@3QXqn7gb+}xl2cBZz`6>c}VKKdi~ zf|g%$qg6cD$JZI4ZI|xTKA(G&(nqX9$Vqu24eg9RJ=fqx^^YvkuC`@OCv}k9tzthL z%9fvyC+F^05juZ5?cAaX`EO;&7fsIHhX+ObQgnz6tDd{(caZeerNJE4d6saxLJnW=kZBg zz+a4jJtV+-bVETx{Uy9xOmr#8lH_9w1On~d^6}J@Q_-cMt(?GSClGs7tJJ)z)Abwc zx-P4ax?RpbmcfakUgBV0v3R($rIdX}hMu4EHuFAv`|c!PbJCYo&gP7E&&Ikpck!6b zx3|h@x4iX+h2X*1i#8CeOM-206VE#){TGXq7nr#zJkRd$fBM(w>qpZEX(c$GP>t7D zQgm~u$57O8JCV>kMH5DwhUgY&!r19b_D>jjQBt-^Z(WIf6g6y%jaM-8vK4nfHh(j& zsQyTi)0Ku9ab{w&Z*_D|P)FRoWly;lnBjXO78=b5-p6?HVL;JrHG zox>Goa`6rA8ln<+5QppVLY{iT-(A_x|6l&U*QxZM z{PTW3|Ls!yjJTb)CD9X{fphyX+t+eRR&Q$4Jy`k9_Nj@Y1-EdMMlayeCrcMao7{vd z`zZM4E+ zdenC_o*Xp3UG?={;-dO8T~^fnpxr#BQ&7WRQT;rD5xnlHqE5ZC{tEqBIka0}gcs0L z7q!~EzrDhO|>JFuqjf;!w*3%TMqVAKvMGf;M zLI<#Z(Ua>ed#?AS{zVNp%3{xzA3C|ZSJwo64-FajYOi{8Q;F81oRC-Lf2e&#aIp|S zHtRofuLJd=kll3%hfJ>AW@8 ztWF4h<}8~jI3MUtEk}})n=Wov|`eMCAoj+@*j$iS}eMU(5 za2;1=(UU{iE_`JHID&X5|{HCr=?42w6JrNDxrHVSfaYtJ1rlU%R zPvX^+dv#oJd_ica(D1hA?UGdKyUC^s#E|zY>|2<**Wlv(kl!OayFiiB)^>jW{R}3J zi+-%C>bh5Xpy#;W)xo>tvKDR_VA@x<>r^ai7_EaEIaxs|l^1*8ReZcJSDoaUvR>K1gfhMNg(<18%( z9#}G|LeEX;Wg$Ewe3!KyKNW9yucy6>8k!`}y5*4f=4AAN^f+F2Ug!Ym2l+GNswK?6 z)GHXU^##h$mS-D_b*kvQj2j7#Dqf!5Zh6Jz4f+9^Fatl?fnQ9Ew zB_k(aSQ1^X*+%XZ9b(*H@=@mai|P+kEE`|Qm8zycZpB@xZRw9y6sTyNtMwCU14zCH2P2Ubco#rm(% zewx^u3CIpW98v)z<24-2GPUcc8w$FKWb(mc|LlYu}1^T z7Mc#|dtqPnpILgJRt0*Co;hGA{Wxa%bwXKeOF+$_Pe7fZcR|H}66yd|gXVx*K{G&m zvX@6eo!F*=%I+7s8*~)xO`uwAzXx@IYC-+~EOa4gH0W&5RM4rQ)2KTdv>e-EpzKtk zN>DRsZ%_xQ3{>)f&^Dm4pv^$jKMo84QK)Ab5QX^LY<&;(A%J9 z&?}&J&~u;&Gz~QLVWCGrlR)=@7JzOC75_!38B`6r8q^B96m&U9c|Iufh-_m)Squ13k-Ljt32WTx=Dn7IYw}12ha&`h?Ifps}DqpjOZTD+k)Z$~`HxCa4CK0Zjuf zyGE!R^aZH&DWS!n8qfkzJLpwV@id{?plZ-`P%Eevv>bFlDEqX~ouDb88$j=IM3X=Z zuw4!sG+k&MXaeX=&^%BzsQ4M7V?ouRQJ}Bc%WzODwxOWR456JsRiJ^O37}0t(?G?b z{?7{a1C0iK-y}2@^cAQB6oE?Hggyj~1-%KH26_q9f2L47Xf)_aPz&f`P&eov(9m|F zDWFN9Ye5S@^`O#O`t)esY<>Gyf4TAB@>9)8I=)jWQLPfuXwX_a%XS#36q&@G@re;2w2Gy!xKXc}k&sQ;@%=Ypz0 zr-5of$Aj8IRaWjbp#wpqLBl{(LA!uziN+w%a%=-YR(AtXd53Ikf|@}YP$y{FB%!j` zg}wmQf);~1Knp;n^Mzgo)qrM$+CkGn{ofF31&s#X52^*-3F-jd04jY`XcDLfbUEl+ zG>-$dV>=UcAGT^x@msPT3#tZ<0=0sMgEDUm4FwGX?F5UgBE~#g9a@UT7I?A1ke)DJkTeg;!dG=LDirR&{WVI&~nfWQ29qfkAj*(Q$d}e zyFr5%3*7{o0Qx;>9;g;n^0Cl`pan$oY*00}Q$eku(V)yHLWhB>K$V~=puItzpfXU| zKZLdc)q*wyb%53bEyG8DQ2$S5TiGC#1$_gW0{R>jfjU7$KNETzR110q)B$=9v_3zs zo(3w7WP1cu1-cK^0=gYEgmTTGZfsYBN^?S&f@(nLgW5r3LB*f@vEg|A)pLEI6^tMB zVq}&=hv?yZT`e~()bzUHz41R|BsoF9)wJu#nboQv4PZ~LpbbF#qGC-@rc1UAs2sGc zUZ@%L1?X7HEe3UBTL3EiLg-b{8L+cKwb-VEIzX+U(l3SX2VG6MJ3%$rZUD7|CV{#^ zmxIce2#pis0A^mVTKfLaY5JS%QFk22>aXY{ts>{v=VB~)A3yP!IYE2yK^e>*TiN55 zpv+RC5>ORr9Z(CXFQ^-|LJL1L%e#fTLCv5~L7kxYL1q6Gnh$!IW10u5#nuMu06h*W z{YvOT&{$9lXd37iQ2(!mt^th(T?Lv7ngCi3Iu}&_jnHYJNuc9F9iS>u>A!>y1l53s zf!aa4fQpw14FXkz27p>Y8-Oz33atssf>`pJIR&)rDxnDU1!&N6p~axFpar05pjSct z|1C5dR0Wz2Y5}!^+Cle&GAo4c1eJqs05yXqffj%+2Mzj8XdGw)=uFT&P&KIJd!b`N zV?m=pt)Stc<)ERU><>aafu?{4f+El+prI>;ib2z8!G54g*uK9~r~~vBsPspn2vh_5 z5Y!HO6VyMWx-WsMK<%Iw(37AS+4IAo2-`iNLA`{gfF^*h1q1NC29Xg$zq zP=8PhXyp|`-Jowken7$`%V<4Qd8m3R(a)wL)RDD z5;O@^0-6R|2b9@Bs4plBT5-8hGpHN10Q4zn(1t?q8=|G>gC<~`2bu?J1C?wf^f+iN z=t0mlPz$L4#zMD%MuV;aO$A*A>IO{!m6iyd3mOYL4b%!c9+dgHP!*^ObRcL7Xc#C0 z?E)IQiO?X>B+vj*2WSIO>83(!g2sX}plP6GmkIUXOy~>HXwYKNRL}xYH|SMR`7eZK zgPK9pL7kvhP}u;X`$4s!J3$?w8$hL-3rzxz1ziqm1&sq`N`=k@Re`EOQ$WXpBG4$% z&@F_9gC>E7f);>w0u9?T!6=X+tKgf>kPLLhh4In$RNgzA2 z%RzQz<3M&~XM*g=szG*S$Aaw0MuF_ehJ%7gSs0Q2npjOa)P-bhPd7vs#8)y>fanJ(LgP=j%2(^GFfNlZJ z16>0u*;eQ(P&H@*s1|fCr~`DGl^Y~SI+Xd7O8U!lYPG|tA z8ngkZ6|^QOv%OFTG!(S#VxdW(FF*@Gi$Ntj2rU4O1-%NI2AU1(KUiowXf&u5G!=9| zXgTOkP2|}Z=OKl0Z%_BScp3B+^W0tOPt}{aqY;#AbNfw{e$Yy@ z>*#T6?DfI;7JuL5P`y}r=%M;TTh&PYlO2iPV%@x~XtN)3Hg@Ux-0@rGc;BFVPgcU4 z(>wBitap$9S}*5|_8;pV*>s{*+S{P_`k<)(9J_V7Z2T6vDW=fw@AO3Dzl|s7%YPS7 z&X+KrBbzQAn9Vl)IBvD*jEf{)K^=oFX>yYgZV&ci1@sFmo&JXwgg4_FA+I!d2@&3XR-hWQNgG=rx3^;Nr~jP#*MB^I^S_mDOQv$k|0w=V+Iw*Py0@C! znnTg{7uwqME=~Klbubv5r;e=GhBma1>)&XfU@KRD-luIj+)?7h*zb17e}uVo7nz57 zv(A7FzrWn4EsJ?;Z`Ns@8UL8>9-ffvtE&e0Jjuw$Z%ML4=JRmccWqVH&A!O;YTVME zSL>gzITo+n-yFMto%p#l6@LzyZ`GnhRY;GE^yL4n&fC)Ie=9#y&t_CMe&kB6em)V_ z{p?CT5jjFn=}r2LQlt5cp3x-M-Ro|AtLc*E**<4R4SLw_%L#)We@C8gI$!s`-!gt# z{^k6a=Sd#8+3sy#?KJD(y|a34-nEbGq3GJZ^`o8r^_t4sOL_@Cfa#LnLQ@U($&BAM zcfX*XH>ka&uj~UTJAtyh8KUgohWZGV3-K28x?Hd9*eZO5%j<2~%= z|EO_5sBuN0aYTW}uVu+=y!C=q953%5{d|=oe>nI5F7jg2qCiexuOe}pwXkz{nw_cB z?8~A_$I^f3dC}1}W6&w6PtI009lv~(&a)8>@A0ja{u6d`Wy_lwZDs11*?|}Nb}FiOuT`+` zr_JK_eUkPv(|UK~r9JyTNY;vJ!OkliGq!iSWMc1sIXkWVgkbMKsykOW>6M}O&#+JT z`?p@CcV!pjK}TZyAJXpgyY1gH_wnjd?-fmYIqp)uY~CVHX?azd`y(6I#jh%J&(4#D znR}wf2J1|>(VUjKCt$M9RBK3`X-MvJ!DiQwE~KROBkO?Hk49PFq8}ZNQLSU>;u=E069xv8PS#kuDoQmP8Yk50e@FjI(+&(a)3{ ze2b5u#YZ+>UL0L}oB%W!8>#Y1E-pqe4$}^2}XP!;!o?OOJS!1y_AV4f%&cdGxO5 z3xmJcsH=H=Hb0NAI7LtLs!x=wYiOR`GqitTGaY~270+^r6)sCK_Ri#BH1?7|el0ON z>(1^u>yO~fwPZ4#P>QsaVj=Y>W%TS=_7KMPtYDu-+JhU<8P4;W>fbttpY|vFn8yB` z=DB}qHtViKd-CJ?>cykzzV@&pU`t&h$h%33$N=7ZytTDvnbb_KPBKJdnm6XcRi=# zWCf>LgwM6#68vEw*w9mb^t`Z-xsPRR z9?j6NqME=`oBPD_SM1F&QBb)Y*ZXcD-ri(Ngxt#qpzT4E>=JAtk9^bLWtSdjViF~AY zx6|x8wpmf}x3g+%naXR4Y&cW-j?9a0D*tZut?gz}bcM2!zBF9-gVL#6A4qm;{k)O` zS65H|plBzTPKO5Rv}b&^o}qq|`=?GUo3AMXJyFq7O#5{~G=3vREDtHQE{gg~mY=Y# z-3P0VXi@al>G6bZfuF7A_E$QyM6U2ZpDVRf`uNpy8wWRNs&wVRp4BIdH zOg3(o2MW`I+(MtlcyKy9`S?D$c@Ff-&2*r5?n!|-DV>x~N-vuZel2sDH0NgM&$#eb z>B5iu!lls`6#kR`4AM>4`{5t=_>5ARc#5I}_)%f1rSe|}+!jtD`~w|c-?@3G=X!t4 zmH&PqqXk?2%I&BN*VA7Q>I6GT?MvG}Kc-o4Y1Y-@W$FZLs&Aj3@7vKgzf#xPcf&vJ zp6OF`-L{-*O^0SGn?}04vcyh^rP1AXh8?Oi<(0~&3SG4Pilj2C@#6{GFos^?>86Wy zx$+9EGRoR8zwr#e$=U8z{rWLGYlYSY<`-SNmweUkC6U)iWUbzISyXS?;$m{d9*`H? zx_~?9^%v^`V<>C+#A@06@&>b!Po@a*W4^l2wJuPhbpiA0^U1xCmQU=B5q6!j303Vn zr8BpVFu!+j`gLfztU6`9UZ=PbKK;;T+Bpi|^zm^7AFU>WZ`^AUJO(d{VAF4xH!Lff zv=M(Q3@0N%&pl{ar=v8=9fz3y+-9>L(&lE=QJ2i}=H||ImIbMiTYmxij zkRrETE)tCO6TflW6T5LobA31N<3J-%_C#X)b_*85rYQ>vxWbxLcl zAI10Y2u8HJI!}&-Gp2deU8I(HW*TI0Oj*4oNTuiVk9FVH7be?^L<<$B~Viu;jl`H4k5tZyMNY zTUIQ3GsuKc{M?@A_nm{<*KxzYfCkn zwj=q$4y$YH@wYs*cn@VTrE^B;r(_C#4XdWtF|cTgq#2jS+RDa%^V^?ImKtM6+RX;@d`?8tp82Ud;SKRbD>ejGG@IpeBSbY<&a(BHZgc>E-W z@3RM%unu>e`g5CI4plUc)8)`!I>_e>znaOdE$!Mrhp+iX13x*< zy`!Af)4%z>SpDjHc|p;&zty@(-Eu8WPSvVQ-SR#~4Lb{jA*gPf!eLLLQFYkW;bCvJ z!X37Z!G+LW+NZyNl|T0BhuX0##6=Cum3PKeT)9$%K*JZpbraWKecWl>!?0u0im1dk z9k6!Y^1em&TbN2tp1S3$>$?^bS9I+sx~Q*Pu3zrms6Y4R)$BzL6IkG(CrsDd;WBMg zl>(#F)I03$boqX&mUX}Fo?(5cZP2bN)uzB^o33%aN=;BYLf>HshoN&$AcR@uKMe6ook$Rbi-h9pcB6WLyk$PdCEL`fiOATss z+j_ZnbK4s**;2>thLlqG$XzWMuA7}qaT|~BQxM&{*@K1{kL*1$KegVmP{rJM^qfQL zFY|@sI4Vk`8f~4rm@`mcest$#&FY{8oADQomAvQ4{^6*>=x zT&iV^Xr3L%k{6(mrI*o|K@YG|LZVO-?d zph)4e>K_$n>mC=%yXziPFC{o`?+JFb6BH$?wv=X?tL zN4T!~dH;O>c*7y}kB^1&akV!Hx&u_T=nFf;9(R32?cGf_aP7T7O>gZz34cvJWhRZJ zj5YcPdM0*NU96sus^urWMfC^kCQW+cdp~)3vis_9wDpNf2RF%5p$_NtH~vq z8cUd!C+mIW#LL-xPRaVSZP(?&msYt)o{rgpDn-mV6{3G0FG;)kdOmBhPJWCIC7!<_ zBA-`VRLjX5qj1Au3FR%}t?&77#RlU>{ol2a5;teVZyq5B^mo30#e2PUU{zZa zq5HQY&G1weda5^1I_bmVseX*y&?-vi10 zF%GFaX4=MYq8Bv2uZGGkRWB~k?>_MC#-TmTWj>NUbBi{;QHOZB2nUXNuW+tRj(ehf z>A;${dGw8(+KqVBg!;$Xo+>d0yW!Iuxf~Pad_3ZH>%jwaO`JiDiqVtD=qP%z*p*** zRzlC&n^{=qtW>|(-x;OXww?V+ae!2CPO*E*9g8#@l(D;I%1?!yaxhtvpux3VfrT5TLl=}RqXTMCnbjB|E>FFF?EZ=jm@-dp(Svl3!J===med9gOX? z*SP)Taqp#7jC-dXsUY}qkDG*c!{=UZi{yv2pDB&yOQXl@f0J+r<#q z_M01G{99Y-C&#~ELfZBEfevZ>J5ng$j_L7F{Wu$pZ4VFc8UM0w{Igdp$8le{inxDP z)f3hD5s4hLqqx%ybloi$#`on;N#8Wiz2Uh z?*~c+y3XcgJ(Gw7D&jz&caRVCt;!?u3E7)7`suQoUG?8!`5(1fCU?CG*a@>EsV{%R zl=l2#w;@U_9o2K%1>@;M{H1{^e1Flm49EF7$RCx7a{rK}txDG(%sVz$T4h3Tf$17H zux%0-C5^fPW7FTc%!+4f3BcBk_56n}@Adr0xJ|`!Sy)X$H&1$kH?j@3-7x-W`k!gb zF*u%mxSXyJ;qKSdA#$zCU*Y(Agj6fDlf#E;FbJtfbw9;&$yOpP$!y}lYPod@D06NNuQo zjPr|H7FxC6)pAQ5SUvX-2m0mSccpR%sy6%Y@VnF z{o@PNrVDV>Fn2;v0cMejJ-lfX7C$Bb>J62CPL{5Y_@F+-_JZBwvSTkxRKJ=1f5$%D z{jurZ_5qf#i?C3TAWHGyOM6o@wS23sWK$ef9Cx-Rr{V28u z^pw2;I6pbo>FTDPyO;#6E--D=>s)e7H=d0OJ7H0S`wFZ|+3MpjwQucMLD6N6@^0HH zHiw!Ul{;eGTD(8x0o~tf95JZvJU_wO%9C3|zA~hDW@fFJr!`iRQ@*~xsQ#C_Ziakk zEAo-Tu+K?DiyHXKRBm0l(U7YAZc8(JD&G`cw@{aHT(;CN*K$GK@_xF0VFe+cVEgNr zc5>VZMl>cESxqwCwk-nsmFZLJ#77WQ7#pSG~Kks7F{A-Hm~g}s>y16K;l0zFM|Fz={mxg>FR z)yoC(k1x{d?~#}Ec&GVVPon$VC=EUO-|7+5F*|E0n|wiWTfKUk&KK@XZYBu~fg5;* zjVsk0e>upS zqtdlU#bmpsS@CU0Wqecflg4>OT@nB33jo?;t1Nr^HhSm~Cu3Hrx?jFc8g!rh$4Xx6 zwlvy1r;()TH}+nryH!~0-@3o3=RtJ8fgO}n7pzl`Y1}335)IF23B?bG@eAxKPS&F@^b_l#$_1l* z7p$MC296h8wox0Z)$5N{SB@84)^)~)i|GpftgWzRZ(9++=RgJC$MwL2^>ECH#@+hL zpr-pQ+FgckrM~*<-uMK@tG)3^Z*0MMgE#K$jZGNu^u|Hncp=8A-nhOu{t9FM(s-o~3-O~c z<}ZzN-bmJsudLtnMjkG9dD5jl3*G4>dP29BdS3i&Ro^&(->7?6*!AhCUY&Zh$UO%1 zJI#Fad0uPor>MF7n)_@)8!&@4_ii;{?gYCAwRNtRxJ=JF*DI9S)5@sthFK|G57|aX zL%wqB9zD6~k&oQ)P_Q2IkL3E1Wc%x}a4vg1^Z0l;x^!T*TQ7N95g`j!hgq=FJXK;0 z)=Mt8^&_c|uP4L(mAQfZ48K23UV4;&)9JFRjKThPvh}0n{xk^*){pK~x5%xoV)^UK zK!3Sk|5DSTzdZC;@BPUb_-oUper~U%zkHNu3~W(*xb?gHZI}5eO3zX3WP7c*l8GJv zh8??C1?OwA9%XBlzx4WQLVcesa`BKc&^LhH+@_rmrZv zbxzR@?G@Y28Bx@>EZRX0GUUY(4a+q26y5Begx7Fm_gfkNwYoB@amD{+z*+g92Ambq zqqe6XqrG+V=6)~PZoYMyR<9c#Qxo=_A8xh1t(%F}7s`?_ZtmUFa^pTE-mAD*Guf`C zRnX>=KhrGHCaIHk$>=UZqkn6nBb&Y8_yWC5R4e$(&&Nj0sw(W^(MemoY1I!3E_wP;{?@eWOM*>w-L&d$Hykpp>NRLp)2e^$&rbcc%8laRCLT;$ zbu4oa>GIX$*7l8BmeKVgg;V{gfy;Fb`izwQ|E^wlr*J_T~IDR8d);kq?}`Q z<9piy%9_s%)~@WvQ`>r~tOMVyFH?%BTcUH7ZoeG-m~FHU!L;YIs6iDeqtRJ+-lI7j zUekDcMdX>HdY;wFHLD@?+(X;M0mqpBE`=BUo2mB%!QmZQ-2+paEBDR)R<06zSUuRoLn>Qg`rY@)c6A}q z%P0xS2m2``yx3*#h{2jaW^#A1LcsL=UdhWHr*7Ue!|W!mx||GGRF2@nIKQHDxP0aI zm!+r9`>Uwqz5?r(hN4ZWGgGVKJ$0t6qRv+I|NJHUXX@U$b?uC}Oc|1&TYaMI1DzBV zPv~**oo#JhjQ!&3r99KSsA0oAV?VlT%`>{y{++$(era^AMmjwM73DscLG2fgS8MCg z!@o~U{avcR{iSf2M#m5Pspqt=m`w$}Pn?X*HFQBHAE&Ra`9K}1!d*}J{fEQIxR$PW zy*V7s#x-_nl53ak$w8Bs;C4;*{t8C!D%juqidBixV0Tfuv-1a8Kd@Hqlqj$P1$aO} z)pM)&6m-ci7+1RdbxDi%5MBJdYAwX#)Rrdp*)AgYt^RTIp8T@Gcf68lRMY8t9^SNFBtryb9cqZUpJo>a0K_~LyC`hS?#YgenD)LU+G zGy8R;L+~9>>nGbze|lQK${GDMt{=F}9Mh-=J!k8g$OUdaOV8uk^Edp$T1zDybGB~g z*}95et>||vl=ho`#~(iqd?7RXNKG>dnvoxLt3{B zW}6;^9`d5@#6W+lH%1peGt;h&FlzE+tYP@NAL=1G9V}z@`bvvBKMHHzBVD5=KU8BX z9;>19Z7h- zxq6c?Dh^6#(CLnLYfAGly$|fD$)}eLnV&D4kMhh*wR;|X(LfMAM_14^P=8q5@7XW* z{f_ciVc@pVv0+X2|G%m0_oT+-RVJN+uTu%hj9!=A+*SI+t~U~KxTriYRY6$e>{!TQ zB+|W9C7$0Uj&3)zbT`cs^vz+- z~TU+SMoRJcaV>>(6j-zen|h zzq{@X|Ckwwe2FR47dndARaM&6Sz?h^8tsTHJ&e&)xGY`x`?&vQDEy`V3|;><{Npu^ zZ0SVe9s)0owwytWFN$v0snGRK*IV)Jhr}eo-YKwo^si@BIF)bw~{=oSX>^j+aS5wV3-V@p{ z=lnSmOpeeXZaIQM__p0>l83BG^yiuuebz;3i?g*`+TwAJlw@%k=Z=bf%xPAmKm2&@ zdJKK1C$js?Yfece%=$ZE`>mq=)2HXUjO&U>QFN`m=X!^Q3r^1#c5j7$Md9o9XLv@g z^7JeYX0-X=Xw*&PxE4jt}?6X=InlP45M6EQTMRHeH^ql@bQPLnjeH*ScvIR19nRjcznVm*0capM8~1vhIv zKwk&9epFK&ttH;-vzFed{iL$O_+MZNk7)cpnuzJQLAK7Ek8)A{RdSuoZCChLoD5P2 zuvcto9M6{@cVMdQLoUeQOHS7xdh&mE@@0DQ#nE=W(U0r)%GeFg9zJY~r*+;1f9Ect zos}>-A)@Dtn9VGTCfXUW4`XB9(vtk=(*3JeK75iIU0ts<=by*2_8Fy}{B--MT}t!` zgUzCDWtl|VEW*G|%zaKOFRHh*EYUXC>D2sBZF3%{F7;j83@vDzEehIZ|F~`H)gC?Z zUS<1O!Y_&@DW`Qk;rioGw$Gnk`(4*YKKniKe`%j8#-H%q*&joE?i9Aq(w+Zv`@AOpKb|}P|Fln3_CIf*8I(=7 zPtW-?Q!)PEwol#Ku6_2g8Q)K|&)tu$vVH!G{PwVNMWT)Fz!0B9h57A}o&Iwh?I8X? zo3}VTmwhr zp4qtvG1TZ1=b&Q0<%&eJ13fE1k+}zz^7q_>25qd3-B6r+&|vC_;$njBP`@qr+pOPK z`R!=iT3VjLDWsj(Xy^X+J%{YpuL9$#-FN&UElH8=L%iwNBL)ln)OASs%4aZ~6 z%axC^woi096&)2gvTOFXPi~QUn0KW{(0qNmCR3J$Mwq|UwRyw--k}QjEN(Saq#Rb+ z?Zap>9nT*b4$GbSWiyX*_x#H_z(o=tA+F6FJd?Oz=A zN#0uxhgUtF-|OIzOE?@>CwAR_x{Id@2Z#3@);OO2E+G%;N124r83Svzce|S$eYzvZ zevQ9>__#6dP`}_ROzWPMO}M$hoEJVy)o^~wf2(S?^{SNrTJz%i4o_mXz^nl?#`~u% z3#u@2+n(ViU`$9T^%7jIAOxGIBy^}|+r~KhVQ|>UGX}Q9Yz_0VG1m;FED~T`2y!c2 z2(TplcZ`uiv2j%b|F1y=P0+2HZM)&+vXuW$nBg$L_Wmi0e;DWg4DTOH!hfyz@2Uj; zuSogVFrR5V!j6B3hmW2Oi@84Ak{9l*yUxSyacKj*-)i5*c_`QG1;vdEzzxR(N;lJGbcU1!a z`=|Uj-Ukk${ZqdiaCq|!H;a$6%sdQju z;OUQEf~yq}Eh!0QIJyQ$=cXi-!tgj|bhMX1StP*35{~l{FeajKn3v#c1riQTNvOin z?MUd_CK-itmwCM0}!stjrfS1XXP0wQRL8r5uj7Dr=K z5~^WdgE`Dgpe#{tHb^Bph?93?f{uK*G@wfrM7owC5Y6Q&SRJV6wWu5M{jt$|3{`xB?!PN?gM<4(r`oaiOET7iTU zQWA>$$kBJS_`KT zLOaY7n7h3&lr z$`S>bSi+880>*@d*(b{&ZLU@z;dzLlA$aL}+onjEwRtiM8JGwOe>O&WK^7#y#1bC- z(&q&u15dy85?rl-s7XmE!_g2V?3a>I3RAMXn1NmbWsv|AOW4*+z?g`_058GS3MBj@ zC7}vOBaraSfMgWPVNQhkqcO@0=0$ly+v&>3b_IW*KBPgsF(xFue3A?zT&+ODOAtXr z)ZpkM91TrLsD`;3W`LJKS)u?FOW49oz?hIQ!Ao$p0tpwTBsAmbJ{&#qi)0jPVX`#D z9mXgxm>1;*ZDR>{clo?vWZ-FQFTvFch=C~ytvGrd3A>~uw7`r-LW!3^S)u?FOW4#) zz?g`_{1atRL%3Rjgx4X0hUmc2JS6;evt$(7VVaR}voXpG=0$ly+gQRBdo`Hyf{}rz zE4&0(DAH*ADLc+omWDwzM1rioO1PxJ!qfKzMO-e#3 z%nmSXdkK_90!%ES$V<4Sg3q}T>cJ&fmt$^4iC7}jK=i{g}C7~Lo38tTyKv|*y6H8dbOTd_jLg(=^ zs3BafK*A!3pdp%ZbU%*n`gt-6wJ^`X)ET3^U|y6Lw2dWPo&On|k%6blUV^I?5Z9z6 zwBl$Xjy6e2Xn|S48Ikc4C`%MzVhMe`1dNF&?CmAET7iVUQW83F^c50r)$2`(PyTAE z9VWAfn9Gb&UNA4p3);pKYVDU~$_qvYo<94fYY0~>AU=f%8loFVYmSto4N?+1VFn># z#m0!cW*}vW0!%F7hkv+}5@R9?H+c!JRv_WVl!W4bax@SL*PElBC}d#vfVs#^pezz# zVhNXc2^bR+D!c?&E09p0l2C@DLvXZCN%`LT-v#)O2dm*8pz5)Mj9XvR@HjvCBSPZVll7Q&q6 zB~TU#FtLPly#$O23I94y1~r7M6-f97B4~(K9ChQUcS=GFOz(rmL>ss$P!BcT)KXqd&uC@+{7U; zE=OZxUmw+)5g{O{|K@H(*1rnZw2pXarM>`_nlcHo4I$>Io@RBjg3+6?6 zLEBiu-#>6sz?hJ5nwQ{e1rmOpl2F`Vjw+DwtCWNc%mO4FgbI64CfC!{2l!wf<~g_l5Cq5u<1sPqyrCM2BYCAeCFgfmkTYH)NJ5*GX{8HH+? zn_=3FQC=`F$_v`Y5@x;U^Ma9qrxGv0)e4A>QxckS^azfQNlB=MnG3Uzmq1y|3);pK z_VW@bo`}K=N6MgvaJ2#nvmt_pXvNV-IGVq9G72p)RW!sjW0V)ni}HfDv4m&d^?AX_ zz|;9&f~yq}zfDQ#z|k@!9G;TU4l@A>yL$y(5l99@c|15y&oVa`%Ejkfa=C~J8^+gQS2 zFM;BTD7;Z6gU$$7E08cBB4~&j99@fq_BE1GsD^2Qx!)M&1@of3plvMSfp>gfFf#B| z>m|5a0dYl2LNksY$I-qi3AHdU!ffRwP}cH-w!EU%W=-382^3F6VMi~))e0mGPDyCR z(I+^X-ai?I7MLGkT8vR%FfYmr+Qt&@ecR^+BLh$G9xhF42v;j07D5CK(Sf5)4wa)l zQxe)?=5bQ~!b_m6BZotNNh1rn}KN$AE=84?~}JsE{gm~xogjZt1O zFUkwr#uDy&%jX3n15dko39eQ^?3$8LtRG{x9g3qNDG3>v4Kv~NR+Qt$#@DeDVh{8Tzf~yrs*gGYm21hp{ zVd`qhC{)9YCJNUYqr6~Vlozy(C0wtUml1D_2?^1mGKg@s0tuf%1P#%Qqlb{NbxJ}l zOfwSJ@)9U(c|qG)!a808#S;>4_7YsJK*CKa39UGqjf8vpCZo^-(~g8m#wahC7v%+Q zV+l?3eO@p!@HE^@aJ2%WA|;^%NADwH^OS^km@i>g^Aad)c|qG)LVquT;)y6M9VLSr z!qo~SEP)6bq8mqR9VSP2_DM#e6Q-LeTxE>%f_YJ1&^DIP@Vd_nMh2el^b%aHfVd+i zp?EDh8i0hKrzB)xiuV%pV{gRieuONR7qpEf^!5@co`}LoFTvFcBxF+(%5XFk3AdP| zo>i7on1f(0^%5wH1ejRD6&*e=7#Vn4c8E%=AzZD1_!mUb5LK#aFLsI6Pe~|;DI*I1 z?&YFDStP*3625=UNx+zh!o7z$39eQk;U0)ULXB#+RdcM(=BOtM)i9%xaG{q#StP*3 z5-#=5-=ttJm@93T7iTIQW83F z)IbzgPf2KpS%8EufBeDD2+AS>CYI2x_q@>SFeW4%=OwsWfrMjI61s78I}+;6QBM>) zVfyba=1ebvvPgi5C7k0WU`$Bp>m|5afrLIO3B_y6Q7aO9r6lm8g0?v@pRIIJpezz# zVhNwW;-Y{tA>nT$Wl(rrtw2I6M9>$?aI_dlmz$%WD3rpK5rxyd1j-@-CYErzmw+)L z;bbqt)e0n>l#)<|qZLT_PT$ujovIm~Dzd}NI7Q<@j$1#M#qpSq=k0>(rXre$SNL%3Rjgr^{ahG@nS z@3f2lrC)J}QK*fX_l(hfO7o(;plvMS!|DsKv|*y6H7S8OTd_j!r5Mes})E% zD1+m*8pzL`h0Q8IE`zVl*Zt zp)_Vjc?pz70!%F7a4!L4A_{X3l!5s|n)nhTXoxBmu-7z3AOAZUh4Pqr(HP|g+nMr$ zwy}g)=K8!~WN@(0dkL;qKzyE(P=llO4p$VaQxd9SegSi!mq1yf02BW>YNVHdF%gA! zFTvFcBz%^V(2OJAU>SX|JQ;=Bn0ek9Sk)sok@cOc36f!X9!#rh-@`5Z#fQfGsPUodzI`=RpB>c@w zaJ2#n3sMrwaKvlqqQg=WN@Hd>FM+a1fQcpS=_O!HNO;6caJ2#nZ>1zu;plf9>&yR2 zMxh*rm+M7;Ge&vAyeKbd8%uaxFAXCK7!wj6@)BIFK*Ic#gc=-8K|(eqp&DiZePJgr zfwDvaCZ4hk@e(j5Buw=ZT&+ODYbgoMIQlCRUic;%g<6>BVIDF@dBMCWFK8P}c;q>s z7mN%%{mDykwF2Uml!R6sy@{jYDG4nwU%(9V5-3X)U}6b7cnKI2QMkuTaJ2#nFQz1P z;HX!X9L@YX8HIM35|}?3qr6~Vlozy(B}|>=^Ma9qr$2ZJu2w+U_!SIO-8kAFN5fJQ zI$<*Vh}qIhpe#{S{=769g?1QTARA3KMtQ-!C@*Lmj}gt! z`n+Id;OTc>f~yq}Hhu*Xx^eV25(cIubi#BKg*Ckd$`S>bSi;Y|1dNF&)O!i8Rv^K~ zuRua^u^cTy!XNcfmGF$nz?2LV^E+dd7i2*KOf2E|Gkjh!GVpYzm*8pzgpFT;gfblU zKSGWMq$HHWlp~?9mq1x0z{C<(_YyEBqHwvF;A#aDZ2Sr&RN<%;33up)Xkiq}Va6ii zN@J84%!~4Zwy}izXMA2TGVnCfOK`OU!p5&aLJf}gLPAMOLN!b?5>|eJINgshFUkwr z#u9pY2^bSmnBXP2T7d)`zXA!(I64{$H=CoLRhC+qX-JspB~X@zfQcnsKHcX9BLh$4 zy#!Y)AZ+{!B(&n_93-rllF$OviG<}{E((-I0!%F7yQiH5jEN|m?B zszbtc=BOtM?J)iK6*JyTpezz#VhIzx1dIs@=XnXPRv^K~uRuaKj&4W7+9?U0Fl9*i z>T?$b$|3E(#bE63+G#T&+NYjbDL;;&tWdQ6w~)qn;>aU`8Y1JTHN=NPvkY zobM%IOh`DxOK`OU2{wKO63TG&A`<$gB$UF`BH;^t&5$#KvPgi5B`kf)MFC?%!Wb{X z)e0oo_!UT~!qG=as53`BQ7DI*ii9(~1j-@-CYErvmw+)L;n!Y*s})GF@hgx}gQFEl z$fP7x!*n3w)5zxq^P;?BQ^goJ7@0S^hn#;-s^vkJ6raHJevW{!HIPz$ph z3BUFdC`%MzVhLls1dIt!CwU33RuBanzXA!ZINA{jD?Z~`dnB~LldD9r>1@of3plvMS9bOxzi+hX-35R(Ju2vwy#;-s^6^?E~!dWQ^vLYY6XOiUx9>X9JM3iHz^6VF!ngjAzlJyEiY&rOE}C+pm-t*BfJDx zE0AF0S0JGkN3SDc@yE$1w7}ToH1mv6UNA4p3);pKUjCcU3q}T>hIW3q}T>w)YZTt$?ucE0EBEqZ^TMP)b5OjIF-z=p|6r@`ARpgfcII;)y71 z>m|5afdm`B0twwXnu>(kA10&F31h3T4;rJqU|y6Lw2dYFj##Udq^%5v+c|qG)!uDPQ#S>B3!b@2dglFP2&!Y|kH#n|m=`4lZCwcF{>f(q zV*)pM|E@|vr2RMJg|EU#`=tEW!q~ebxA6WcYZ*b?_$Fzkmq77E2sZU0aJ2#nHhu>o zXvLAeM{?SG$q=-}%-zN)BbXOu1Z`aiX5Z)2fiZ!bynk0EAkzLj@M7zu-9JLJpO--KL>}UOL*dsJ|h?zcv{;_aJ2%$<}ZPSW*ps%qwP`>YGIy+De@91YZ*b? zSi&w|0>u+iSi?(jwE_t?e+eYC;-~{h_rH^jLJQ2NFxMEPj9^}r5wwjZ{I$g=1tSAb z{k#NMD5+3-2&kIHdo-$s7s}&G7e+eWMZzM-$IQm6O zLI!3yOdl_SvX&RLjU{a3B~UyOg&#)9peub>E0AFGmq0=pj*h_5?QbQcPzrMrOsz4> z3+6?6LEBiuy?6V(U}WHFg_q!J1%%BX0tr<(ItND^rzDiae0iLhAKpZq?m?Irtu<;J zODOdcFeak#t(V|x1rluh4kXmzXaW*$GDkhDY}GKogSo^@pezjm6HB=3E}s{S3_N|~ zCAeAvVdG~Yp&3Uv<7nNKgj$$+FyFr6qCi>83);pKHt`ZDo`}Lfy#!Y)kYM9iAfXjU z58>!qbJP=s7MM1eab5ytkpL4*xb;q-7mN%%E%6dut$?ucE0EBEqjzz%R!TxU%oOs% zKj*tBP!@2NPvkYtm7qMOhn-yUV^I? zNU-rMkWhxBjgWAaIqHc*DNOPHV#az2ltlteETQRkpBIb_JT3MTT&;kx@hgx}g`*vi z@M8zZ+9RPHrW^_XFh+U7yeKbd8%yZ#C16ZMVUd^MY6TK({0b!0m?I=ynvzfrQ-g$4 zy#&e<1(;Yu!)-n<7#Vna-%D_{0>Z|xKteN)jzPk|UrR=z7N!LWi;U4T3+CnVfiSUz z-d+O6L=+Z!39eQk!N#vZLMx8OAmPH4gcg_uNI20;pe#{1;*ZDR@F-|8e_Ohn-gFTvFcB-r>BNa)7V zBqY?NBy_@Lk#MY+Kv|*y6HB<*OTd_r(BUPxT7d)`zXA!xC318J62AO*@dfnI{E6-YQFC7~Hd_TceHFDIi= z8#8l_QC=`F$_v`Y5^b#mb6ky^9 z3{UqGFeW4n@Dg0DK*BFl5;}17FC@J8QZfqdFq1ebXBnfsU|y6Lw2iytCpY@MU}WIw zbS#dJOi3t( z83QxaOQ0+gU}6a;cnKI2QTXZr8PpK2Rv_W$DG60Lx)evR%}Yk19Og!tCyY^EFfYmr z+Qt$VT<`OOk%6bBUV^I?5F4c=)Zl0;jz)P2uF8yo)iCWayLbtdB?>UHgk!t}jEN|G zfrQBq4{U}|G+gaK%35BEIeJ%)__*Jkxh@cS6}76}_9-eJHbyCd{Wa!d0dF?@tdJJ) zo{xbE2)|pi0^-WqeAvjoRadVyD;-horRDlU-h6$pQm3pQk4k*q{1Jx2{L$#Et>?b* z!;iV!WYove()AZ>|LOYmsroxn|Gcn%xc8c@K6U-DSo^-LkD6q0l}L`^AO!R_req+NWTDrO;lBeN#>QQhLT>->lGH zh5f8T`%vs>7urj)KT~M$k9|g=z577f*V1G>rDp;5wF~X-*iR_5PsM&>p}iUVLxuJU z*dH#mS7TpUXwPE*vCv+I{RmxBrSz9zKeEuC!G2$%JsKhVp9<|A*uO2bPs6^v(B6Xm zU|r~@^i0BjNTIz3`(1_h(b(@Uw3lP=F0>EA{?9^tG4=zr{E*VKyi)ecLVG9nTMF&- zu-{r}Z^fP~v`@kQd7-@)`!FpErSy!&zHgzu3j1}1_MzCD3+<)Y7Z=+5WB<6&-hF`V zyKAW~rDp;5JqqpZ*e4a*r($m`v^Qgauh2dL`}>9VYV12{0X3y3i+$%pdl~jC3+*M? zuPU@>u)kSokA}(@5DZ*&^{0Q+(LUR_MhKdpl1s9O$zO`*v~GskHvmY zp}h+G%tHH6?Cpj2Qta#9SD>dq_Vo+x-Q}|XrqI3s`Z{p3P>7W*lM_A=~$E3}tjf3(n^!QS`&0zJ|GvaeQX@4$Xsp?w<<>&Ct-i6&|ZW6heG>k>?;fH<=CtKT%dmt_9F`I#n|sHv@hRJ_WKI$o!FNZ+UH^a zw$R>+edN>vJyWnBTxhSwerKV5EcUw!?N!*97TSkm?=G~LVjuoMfu8=@4=A*E?<@Pw zh4uy5Zz;65V~+~$Q?cg??akQtd9Xmw1nk2K?bXLVE`L zZVwgciH6C(d!fDK|6}gW!=oy){_(JBMD#}7GB_g$QtEzANe&6?f zp7;6j2kAQZY<23KI;WPtP551@@L7c4oeG~!_=Z&Y-GqOZ3NIu4L|mtF^2^19=cU5) z39n3rcPD&8Dm;tuwW;u30|5Uh72ZJjvAE>q=(B?G<5J<%2>(|q{1L*(rNS!-e>W9= zHR122!ix#-imPXiKK%&KNrmSSJ~|biN%)vlc*|*kFHME7Cwy5dyq@rETnKdZd6Dqn zrNV0ozb+L%mhkIS;U$F6PlZPa=UqrgZg0X5!Zl3?o=te?RCosASEj;6f55Lwg|8-j zW-5FZ;j>cVlL_yL%d?I?cN4yUD!h#F%TnPN6FxE(o=^C+RCss7Ur&W+5#A10njL+1 z^#imlL{{;{4cne?&#l-@ZwZ> z4&hT$;hBU#lL~M7BjDRp;p++CkqWOTJc6$aIQqOucws8Mmhi_@;bRGZA{AajcvC7o zLU?m3yf@(m_!5VsPd4FarNT1^e;^euP6hnIRQPJbH>bj95iU~UlLHm?A{8G~I7cReTuhjnUbmZreep9&oH}X>Hk8ES*OC6)aQVYS z=yM(UrKI=5<)0NozsHfEM|u%1f7^+v{Xfo;-&6^mU|f43~dj2z^h7 zzLfNbhRbgo(tn1E<^QB_3YY&zi2M^B`leSw&!7y6pD7{q3>8y;9qAdAA@svT=zBZ# zrKD$2hR~lCLeEe!<>!%}K^a27?S$0vKgpqQdIj_h$`JZZA@mFtQ+^%k8I&RP_l3}( z>d=>xo;43WPrWc=OyRY&?X`D;oDeZ-Mp zN_qxmi2VCP=-vF4NBT7R>#Pv^a~%0iFM^&y86rO{e%$<3NBT7RYg5Sh|JjjWN_qxm zi2OA@Qsc+XUwNcYlfUi=p+DD=-}D0L8I&RNM~Be6`KylfY4TUM5c=~S`K6?1P=?6w z976BruRPMH$zO}Qr`qo#M}E`upl48q$bTb*-pyZiq)(H-t_YzY;m9u~J%cht{_x{c z^>_1E9_iEMueKrdmpSsAo&!CDGDQBiV^ih3`KylfY4X>U5c(2Fekti0lp*r(3!!)O zS03rpP7>Z+aH=49XDseM9Ko{8dN#H2G`OF{$<&<;X83J%cht{+irWdN+UN zkv>iSx+8@C8b^N9GoWWshR7csLht6UI?|`fU)@6JuXp5^lAb{sBENG8y_>)CNS`Ku zEjl{Yem6Mso2G!CK^Y?djSzY_f7OvbP5!zfgnqOmzm)V0$`JX(L;TOpUwNcYlfT-A z&{sI}oBjiO24#r+Z6W^a=C3-^r^#PaLg>dj@=Hn2pbU|JUkJUMzw$_*CV!n3LVt@R zziBe)8I&RN`-afF`KylfY4X>m5dXd1kzY!B24#r+H6i}v=C3@`r^#P;gwRiL43K^Y>ya|pegzw$_*CVwsJmKy(eIr5vH0zHE= zME)Bg^ltvDBYm3ubwvpML`Qxp=^2zE@`oRls=u4R@<^X1f3*#vuW{rzJqdaSWr+N3 zIjQp9{8dN#H2G^v2z{+1zm)V0$`JYYh0weCE06SP^4D1*^!GdRo1OqYgEB;Z-w=8? zf7OvbP5#={HPwC(Ir2+M&!7yEzvjqPdN+UNkv>iSx+8@CQAd8$)CNS`KuE&4;M{hoH@H$4V=24#r+H$v#${8dN# zH2Ld_5c(;O{8G|0C`05A5Ai=Yf8~)rP5x>dLjRm2zv)rXGblskZwv8XH-FWUK283b z5<>r?BfpgN49XDs_l3~A`74j~Y4X=uA@nah@|zw3J%chte%}y!H-FWUK284G6ym>i zj{H*6GblskuLPm{kE{XRARXFBqm9s)gsGDQ9xA@pwksv~`x{B=bL{TxSrDd`!M zA@YYGk*dF&zw$_*CV#aJp`Yi-Z+Z~)49XDs+q$I6ck@>r>C@z|DIxT({L{iZ`FXz~|Bev)#cu!ahyI+DLi#^Cgx<~Hb)-*|zq^IdyYfqaLw@HFdRKnl zZ^&Q7?_fIiTjuuvKIqR$F{J-*gwVV7LmlbU)DKsL(7WHoG6|8?t^I?|`9U#5i6zw5{^B|RtQ5c&6o(7W|Z9_iE6FK30&f8fY( zss%kKX%I+{=3GJUrKsTiXrmXg!qqJzvPiVP5p952>r*7{H95u z=cE)Oe{=}FTffwiK2817Erfo(BfpgNoD@RjcMhR<>z6#zr>S2S@!bqg{D0=iZ@L%s z49XDsZ-mgh^-CS;)6_3lgwTKK$S);5gEB<^aJ*i|)!(gO@<^YierX#*|CJ-ZsRr~6 z$`JY6@Y*X^zFWW4kv>iRG9`rm8%KUA=^2zE^6v|wck72d(x<6k&I+O5?8tAr2lNce z5cz#W=-vEXNBT7N!={5%?YG5|UrKrgWr+MWd|#>Kzi$4_BYm3ueMboW_m2Fg80Z<4 zA@WCu(7XAoj`V5rXSWdg7Ds+5=^2zE@;isnyZI}R^l9?fBE0h1wcn49{HBSZXHbU7 zee|$aR-BRK8gqNqnUnIOj!ISrk&kE6R4vU zC4}d^E%B3fJS{|zLx5yTT2=);TEVf_gl3W7d5WJ2-?b0m=cmFO2!B2mzJl-<6g;Wd zn*CGlyA?>Lq&({N34kHvb4LjMQis0j4$w~vrym_c-|W!Wk$yuseYX($6%KtV>E8^e z@0>y(^xT`YjePJXi#*bQ8&1EdW2*huYPua0K(`Ey+N8b1@Y~I$y{F5!j);XM`T;~< z*L>qWALBygd_y^)<6A~Vlyqw}U95Ol&Cu3p1RG-UEg!VDn(Z!-X10fZXt#H-w%b#k z=OdhU$2B(o9OwD9&hsu#d(}ra{Wz!H^JDw@2Iu)i=lN+)dyCV4%xMpG^x5s`Kh=3Y z!fAJ0YwI`1d48?)yo=Lb^}bC%&T02_#&3i3ydx$Ib3Dg=X19Af?F~+QqSHR@bDMsP z^ZYUA`B105d%aCR)oG9T)PCO4Y0q)m*E;Pk8*KVj&hv5W?B_k5_6Dat(P^LdiA}%7 zdH$I5e5ljj?TqhKr#-^)-;Pduj?=!@X?Jn_Hzj_)vi0xjv^O~IiB9{pO*Z`&=lNsK z^Px_A_m?*PRHr>+qy4<2)1KqBuXWm88f^Mi&hv4OKlXIm8=Uq;r+wNNHvcWo^T(X$ zL!I_+#~-IU?GcXuc68cvoc6U&yNeT#tDNWKHrx95blMx7_C%+Bny~4&IL{w*o)2}} zyT7sNr#kHs-`dYRI_)`5`&y^n=lEk!r@g^xPjuR+#clpuoac`@&xbng-Hty_ zb=o5w|Ly3s=Q!G4fkQ2)eXd ztB_%n7)-CzOtWkZ&%euLI+#o=9HtHU8ItfpJ4`ceu`xWqugSD!2bktKOzUkDL(_#o zXZKgz7@q&d9;5q@lj%EzDC4ho`}LZM{ZC@!l4yWE*~T`c57g49*%+SxH%O=2)@+OE1(Yh!qRN0aFaV8wU+YL94%O=2*8R5LBJF+Be*vIyd844FRTFwJ*K z&M@`JC&}@ua~z0bcOcF;1#~9%SxNx0b8KuwVeympYa7G!+nf9r0V}@k7uyOMHi^OX ze$6z?#_;^t$Re=9Kgsk-hiSt;>HPXnnrVxTf%rF>W|L{eVOnpK7@Ed^)P8Maczy?y z>0)5Tf7~s*AK#ud>twrs2H$^czSC?B&wrI%0t;M6zK<)uNsqNj45p`RrnNSP=U;3x zJ&a7xc9@pfBnH#X+mr>$Yz)tDXEI#~toRQ<+YXTLlKkED*n3HGuHmt+iKmcVV2ToA z*D3+hV{L3h;ZwE3y=@H7A8zu?BENh`;S8I^VEWY$$_iOFhUf3uWhnVJu;Pt`7}I-0 zhjbo$k7n9pV|f0HCeu-5`jEr4-X<|L{i9~O+Q#tw^Gv1(k!gWq8b2aA2$Svp8GJXk zC<{!pF+Bg5orVQw11laU#IQi6O=2*esF~K<7@q&U$@EGxeZXN_Vv`t5Pti=vYz)so z*JSFE>6s4Ge3!)X*w33mVtOog-;EsW`7JvPQ`8arOF~q#%dxQyg?(Vsr+eENo3AWEH)lC2MUA&wn4wo`jw5A=9~p70bSrk6WR8*nOP#H+!yt!CO{V|f0NCezOw!L*aZwB9B$ zn7#^h>8Un`=dZ-tGT{Vwk?BlAqD!sX!S0{I_X5p#nvLQ4H=2BVk?-FW-=xRdBnHzA z&9v6W@ciGKOgC%+(~b_)5}U+e`ZCaIfifGz^Os}wov=VPnZ8Ac;Q;wAi8T`sCy6-| zyCxoG3dkk)`AUHFSR30=cz0ZTtc~IMhnf670#>}eqi}{zVlaJ9GtIIwJbxkfFcMZ6 zPo}RCVpyR8=X2p6TdbM3*chIFy~(sEnT~Ln*4re8roRa7u{MV1A8s=J7+CQRim6pQ z*!?s3KBM_gvoSn>0d_eO7PyUkUnRt_K&4G$F#WS;T5Dr?{FgT4D=FnvlhZLu*te-2p$ zb^cf~ebHfBZ<82I3pLZ#HiqY4WimaQOwUtHEswSPXYl>uTV;W1HiqXPVDfzjSn*%f zPFcdNl{SgN^a;(h*2eJsS!5Ad;3hJC-eFo|lNd~gXr^U0hUfp?WO@{tp6f8pPa!ea zXHDObB)K#w#+@!>F7o`grhs~4w_sB;@K_t$Q1~HW%BsM|@ccJO9ay1^{3a`Y3DaiS zBnHz0%{0r#@che6rbm$JIS$hX-1Rd0WiZ|PwbHc3#_;@1lj$;G#dqL1!VH6Yo5W!H zux7g2#_;?%$s*|fjb!>C#Z=Z1ZojHc?197{lf<5EV;jw^J6B{LNfiA!!+L| zv8vs}NMcsI?m+Z31&FVJovj4O+QG&)6rK-E>DM-f=ksVNVTDJ?Zv`QS6*6oRgXuMz zX_k%Q`PC-Vfn++yVcLK@gyDXDh-TViV|adVlW9`}m>%gct+z=GO&0)Nda8}#`Jdrr zDbf8$$#f+lPPJ?I&*1wH&3BrO;rUf2-vaWzQSnWBtW9Dt?W~#B+8CanXENQo5lnyY zFfFl345ssdP79RT7@q$r&e9SVc$iF=6Jj_(zDr`&4p)-IoQYi%k2M9HO6*Zefb>`! z+fcZZR=Br~;rZQ7e&2lweup^(lj%Z23@bF?R%f`! zUZI(`*chIFyUFx)GQHkmT5ppWnjWB;uC_5ezlX_m^A})xxMFJ64tDagDvyiaBB=TKAh+%8*y=@H7zsclxGWlJp z_$4NT44cGY+CekTvN1gWD3j^N&%o4km^Rq^DhAVOK&PfHHiqZFi;EwLo=+sxIfNKa zQ16mhHRnYn(KTmWCN^cX$+q@}D#vJ5rr8*tUtp@zx&eH9IjU6JBnH#fKxhAIZ4A%f zii;$P{!JxQUJWz*S7MVGOmERl%WMqKf7oPt0hv}iO!Hk5+#XNr(TyZyj9M1ouQO&E z&p*`^@YAQj&Q$`~#~d5mP>F+Bg@ zCey!=>3D}}1HLz8^vhtHqnWnY7@mK+$#nO6Fzx9ut+z=Grtbiq-Cu2Ec>d;%M)#j1 z(~k*Jp1RuY*K8B}W@5jP#GY(p8`6hq>Cle1d88(T*^hwP$%f|5h*<=x{d~PPw7aXPy z_&!&-Uq>|478?WmA12doWIEhoT5ppWn*R8)_G=ph`yVFL_kb1O^SSK4wR3Ct&*1yG z<~z;C@cfzN5?G*ue4kT%lOAi67);OBOlxfn&%eTCnnR|=4$~5w#9;cvN6G?aHU{=T zOs4MuEB?!8wgcq5Bvxhc2uaM!z%}tJWEYs?T4Fz@1W1pyu?>auwZgq^4A1|o$*&9f z4RsXGut^N2jcb(^vTO{`-`8Zi6j<@?8*D2y;2VVD9{Z4H+G1m1|AQ=oo|lp7WQS?J zO=4(TpqZ|=F|hw(GChJ!&rwXRTGsBL!8g7}Szwxtf%^|8-^IX+|M;nGfl8aiVETY& zT5Dr?{xq@(EKo|OPdQ9WY!ZX%nVM;tjp6y1noNI3riBjEe3!)X*zZ0BiRrPfiTTxp zgx0f&EeO%Itc`6bd@nF%?OA_?= z&|%tO@0u7)zgev`ZLu*tKf`1?A6W6GPh`&%n%27{z0Cd77)k!1_hrpm*4Exo!Hi^Nsy=Gc#V|ad!$@I$)!1O?eX^Bl@FntZ^9Nsb;!}H%+ zXJ{HF)7gZWIo~C*YS{}(V%D;_iD}FSmX&p*Os`YEvD`zfZ8So_>?UT;cXgL1Qs$DY6DBcsc;WK>TGy1W+u z#ots74wC$VZ}-M+8B8cH(OU8@tHr!RGnZH=k@??~{A%61KtnV(*@zCrJ|&4=Vq+UN z`s`ip(>8|Z?_6ti?JZ!%za_*N&3v20V0x!!T5Mx@{uGmG37OU^rZiD;d&dCfCU#$9 zUy;Plv9S&5nOb^p8^iN+O@5o+0l&_QUt(^{ut^N2Zvvf4X4x2?|G^r=PBmmYj}XI7 z4ehLc8B9lNrY$yx=Z`a)_9N4)9j5g*iNSO~&2+Vm;rYjyOut?QrUxsg?AL0yUpqfE z`t=sEza>QPOxW0l^cXP7Z<>wa`7fCKt|Gq&6~Bb>D{T^k>8YA&t&M^Ee8 z@ozFMA=6riX}wKiXxc|JU2S7{{xFm2{$x5pF|}53cK-~%pDx!PYh!r+_V*17ya}xM z*Mt}rsI*B8roLucYh&R4pUHG2ncnL#EwM=qroA-NG8+T;|4gR)k!gR2X}(Kh)x+zS zfyAtbT@!D4&oIS{#9mK`u7_=GL*d(jNuTa*V|e~!Cclfx?{38}F&SjoBnHzSnrW7e z;rWA2rtQe|B!_83n{*!g(Nd*pi;aQ%pYIwyuLD;6OF|4MsJBTBO~-4dt8EO=f81nx z37JL}Q)>lh_s`&aoaQ^t#_;@sCf_#X+s9G1(k3yOu34fiP-|m&e$zXK1zrJG{BuGK z3zXO-2GiR#(=r>w^B*;tUPPvMIZX3i63b(ANuoVA{;49Bv!{J∥V(p7I2KK*9 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

9q1DADcj;ITcTpb)&e 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 z z5v}nzYy57PF`9)xvxRM0e^xmxtrLu_@iWx;Uxtbw=V663>7`tY-(-s)qxxwv|1<-p zledat!ir~!yu(g)tns~mX<>x(`o)aj2Y*{A>(4rVmNp4S*7yUP zw=^~lZ0>LH$3Mw`k&6FjFDIGpJWVp=2fmyAoAbv=9RIDz7C%tU*9T5E<7Yo!*~`B+ zTl{h=emNCCd-&}Brfl)wtVdAs)2xA8gpzXUsM0FJrD5AAef)ou3uo;;C%$t?}zM^UU}i9PdPblfM=JQnvVE z%gp@4mYMP8w*j*L!m>KBuj8Lg%PN25Dl>koRc3szJnu#bd)K8q@Z~O+%cfiL&9nLK aMyooq(#rd7DEwIym49Yd5w;c2lK%&x-KYfs literal 0 HcmV?d00001 From bf9d859f5b71713d29544a4caa50d8db03caa302 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 14:52:46 +1100 Subject: [PATCH 550/694] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 390a4e7..f576479 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ #### What the script does: * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager in DSM 7.2 and later **(newer models only?)**. * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(schedule the script to run boot)**. +* Optionally update IronWolf Health Monitor to v2.5.1 to support recent model IronWolf and IronWolf Pro drives. **(NAS with x86_64 CPUs only)** * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. @@ -103,6 +104,8 @@ ### Options when running the script --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater + -I, --ihm Update IronWolf Health Monitor to 2.5.1 to support + recent model IronWolf and IronWolf Pro drives. -h, --help Show this help message -v, --version Show the script version ``` From c7c7c291867ba1337cafc8e8773d358b2987def4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 14:53:04 +1100 Subject: [PATCH 551/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f576479..294ef0b 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ #### What the script does: * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). * Enables creating M.2 storage pools and volumes from within Storage Manager in DSM 7.2 and later **(newer models only?)**. * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(schedule the script to run boot)**. -* Optionally update IronWolf Health Monitor to v2.5.1 to support recent model IronWolf and IronWolf Pro drives. **(NAS with x86_64 CPUs only)** +* Optionally update IronWolf Health Monitor to v2.5.1 to support recent model IronWolf and IronWolf Pro drives. **(NAS with x86_64 CPUs only)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From b3da8802258c30efd2b64bac46aca44ef85ec867 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 14:54:50 +1100 Subject: [PATCH 552/694] Update CHANGES.txt --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 47eced7..d567f74 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.6.109 +- Added -I, --ihm option to update IronWolf Health Monitor to 2.5.1 to support recent model IronWolf and IronWolf Pro drives. + - For NAS with x86_64 CPUs only. + v3.5.108 - Prevent error message if /tmpRoot exists but does not contain /usr/syno/bin/synosetkeyvalue and /etc.defaults/synoinfo.conf. Issue #411 From 907dcc09b66aedd727e66a82af48dc655eab1a77 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:15:04 +1100 Subject: [PATCH 553/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index f41837f..dc8ef3d 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.108" +scriptver="v3.6.109" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -86,6 +86,9 @@ Options: --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater + -I, --ihm Update IronWolf Health Monitor to 2.5.1 to support + recent model IronWolf and IronWolf Pro drives. + For NAS with x86_64 CPUs only. -h, --help Show this help message -v, --version Show the script version @@ -108,8 +111,8 @@ EOF args=("$@") # Check for flags with getopt -if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ - ssd:,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ +if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ + ssd:,ihm,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do @@ -165,6 +168,9 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ -p|--pcie) # Enable creating volumes on M2 in unknown PCIe adaptor forcepci=yes ;; + -I|--ihm) # Update IronWolf Health Monitor + ihm=yes + ;; --autoupdate) # Auto update script autoupdate=yes if [[ $2 =~ ^[0-9]+$ ]]; then @@ -254,6 +260,9 @@ fi model=$(cat /proc/sys/kernel/syno_hw_version) modelname="$model" +# Get CPU platform_name +platform_name=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/synoinfo.conf platform_name) + # Show script version #echo -e "$script $scriptver\ngithub.com/$repo\n" @@ -268,7 +277,7 @@ smallfixnumber=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION smallfixnum # Show DSM full version and model if [[ $buildphase == GM ]]; then buildphase=""; fi if [[ $smallfixnumber -gt "0" ]]; then smallfix="-$smallfixnumber"; fi -echo "$model DSM $productversion-$buildnumber$smallfix $buildphase" +echo "$model $platform_name DSM $productversion-$buildnumber$smallfix $buildphase" # Convert model to lower case @@ -2241,6 +2250,50 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then fi +# Optionally update IronWolf Health Monitor +if [[ $platform_name == "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 Monitor." + fi + else + echo -e "\nSupport IronWolf Health Monitor already enabled." + fi + + # 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 + 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 Monitor." + else + echo "${Error}ERROR${Off} Failed to update IronWolf Health Monitor!" + fi + else + echo "IronWolf Health Monitor already updated." + fi + fi +fi + + #------------------------------------------------------------------------------ # Finished From 0c7d8953d08655cb8b6cd2430229ac78127a4c23 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:19:02 +1100 Subject: [PATCH 554/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index d567f74..22bb8cf 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ v3.6.109 -- Added -I, --ihm option to update IronWolf Health Monitor to 2.5.1 to support recent model IronWolf and IronWolf Pro drives. +- Added -I, --ihm option to update IronWolf Health Management to 2.5.1 to support recent model IronWolf and IronWolf Pro drives. - For NAS with x86_64 CPUs only. v3.5.108 From 88f5858349a4d352db99cd612ffded1dbc64a456 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:21:49 +1100 Subject: [PATCH 555/694] Update syno_hdd_db.sh v3.6.109 - Added -I, --ihm option to update IronWolf Health Management to 2.5.1 to support recent model IronWolf and IronWolf Pro drives. - For NAS with x86_64 CPUs only. --- syno_hdd_db.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index dc8ef3d..a7d5f60 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -86,7 +86,7 @@ Options: --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater - -I, --ihm Update IronWolf Health Monitor to 2.5.1 to support + -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. -h, --help Show this help message @@ -168,7 +168,7 @@ if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ -p|--pcie) # Enable creating volumes on M2 in unknown PCIe adaptor forcepci=yes ;; - -I|--ihm) # Update IronWolf Health Monitor + -I|--ihm) # Update IronWolf Health Management ihm=yes ;; --autoupdate) # Auto update script @@ -2250,7 +2250,7 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then fi -# Optionally update IronWolf Health Monitor +# Optionally update IronWolf Health Management if [[ $platform_name == "x86_64" ]]; then if [[ $ihm == "yes" ]]; then setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo support_ihm)" @@ -2259,10 +2259,10 @@ if [[ $platform_name == "x86_64" ]]; then /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 Monitor." + echo -e "\nEnabled support IronWolf Health Management." fi else - echo -e "\nSupport IronWolf Health Monitor already enabled." + echo -e "\nSupport IronWolf Health Management already enabled." fi # Check if dhm_tool needs updating @@ -2283,12 +2283,12 @@ if [[ $platform_name == "x86_64" ]]; then # 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 Monitor." + echo "Updated IronWolf Health Management." else - echo "${Error}ERROR${Off} Failed to update IronWolf Health Monitor!" + echo "${Error}ERROR${Off} Failed to update IronWolf Health Management!" fi else - echo "IronWolf Health Monitor already updated." + echo "IronWolf Health Management already updated." fi fi fi From e4977afadd051f14befcf42d0b0c5c87f970980f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:55:37 +1100 Subject: [PATCH 556/694] Update syno_hdd_db.sh - Installs IronWolf Health Management on '22 series and newer models that don't have IronWolf Health Management (untested). --- syno_hdd_db.sh | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a7d5f60..8d8347c 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -2265,30 +2265,40 @@ if [[ $platform_name == "x86_64" ]]; then echo -e "\nSupport IronWolf Health Management already enabled." fi - # 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 + 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 install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "a+x" bin/dhm_tool "$md5hash" - - # Check dhm_tool updated + else + # Check if dhm_tool needs updating dhm_version="$(dhm_tool --version | grep "Utility Version" | awk '{print $NF}')" - if [[ $dhm_version == "2.5.1" ]]; then - echo "Updated IronWolf Health Management." + 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 + 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 "${Error}ERROR${Off} Failed to update IronWolf Health Management!" + echo "IronWolf Health Management already updated." fi - else - echo "IronWolf Health Management already updated." fi fi fi From 8ee40db4dfaf5d7a3de37dfba3c627f5a55bebe6 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:55:45 +1100 Subject: [PATCH 557/694] Update CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 22bb8cf..9b50fa1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,7 @@ v3.6.109 - Added -I, --ihm option to 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 IronWolf Health Management on '22 series and nwer models that don't have IronWolf Health Management (untested). v3.5.108 - Prevent error message if /tmpRoot exists but does not contain /usr/syno/bin/synosetkeyvalue and /etc.defaults/synoinfo.conf. Issue #411 From 0ea90f96333a9ce6a79cd62a632515d64ea19b29 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:55:54 +1100 Subject: [PATCH 558/694] Update CHANGES.txt --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 9b50fa1..b321e47 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,7 @@ v3.6.109 - Added -I, --ihm option to 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 IronWolf Health Management on '22 series and nwer models that don't have IronWolf Health Management (untested). + - Installs IronWolf Health Management on '22 series and newer models that don't have IronWolf Health Management (untested). v3.5.108 - Prevent error message if /tmpRoot exists but does not contain /usr/syno/bin/synosetkeyvalue and /etc.defaults/synoinfo.conf. Issue #411 From be29a54cc4c4b119d6f68c64851190a10fb4a7d3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:57:12 +1100 Subject: [PATCH 559/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 294ef0b..134888b 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ #### What the script does: * Enables creating M.2 storage pools and volumes from within Storage Manager in DSM 7.2 and later **(newer models only?)**. * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(schedule the script to run boot)**. * Optionally update IronWolf Health Monitor to v2.5.1 to support recent model IronWolf and IronWolf Pro drives. **(NAS with x86_64 CPUs only)**. + * Installs IronWolf Health Management on '22 series and newer models that don't have IronWolf Health Management (untested). * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From 28b8710c573bb6bbf969aa85b0cb0ac0fe53ba71 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 15:57:31 +1100 Subject: [PATCH 560/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 134888b..ea6b488 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ #### What the script does: * Enables creating M.2 storage pools and volumes from within Storage Manager in DSM 7.2 and later **(newer models only?)**. * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(schedule the script to run boot)**. * Optionally update IronWolf Health Monitor to v2.5.1 to support recent model IronWolf and IronWolf Pro drives. **(NAS with x86_64 CPUs only)**. - * Installs IronWolf Health Management on '22 series and newer models that don't have IronWolf Health Management (untested). + * Installs IronWolf Health Management on '22 series and newer models that don't have IronWolf Health Management **(untested)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. From 8876f73299a2b1902b76858046e66829e2cb5aee Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:00:33 +1100 Subject: [PATCH 561/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 8d8347c..910efb5 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -70,7 +70,7 @@ Options: Do not use this option unless absolutely needed -w, --wdda Disable WD Device Analytics to prevent DSM showing 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 -e, --email Disable colored text in output scheduler emails -S, --ssd=DRIVE Enable write_mostly on internal HDDs so DSM primarily @@ -89,6 +89,7 @@ Options: -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 -v, --version Show the script version From 217a6c6c638515ea43d4b6ca407ab410a8bb1b5c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:01:38 +1100 Subject: [PATCH 562/694] Update README.md --- README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/README.md b/README.md index ea6b488..169d3b5 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,39 @@ ### Options when running the script recent model IronWolf and IronWolf Pro drives. -h, --help Show this help message -v, --version Show the script version + + -s, --showedits Show edits made to _host db and db.new file(s) + -n, --noupdate Prevent DSM updating the compatible drive databases + -r, --ram Disable memory compatibility checking (DSM 7.x only) + and sets max memory to the amount of installed memory + -f, --force Force DSM to not check drive compatibility + Do not use this option unless absolutely needed + -i, --incompatible Change incompatible drives to supported + Do not use this option unless absolutely needed + -w, --wdda Disable WD Device Analytics to prevent DSM showing + a false warning for WD drives that are 3 years old + DSM 7.2.1 and later already has WDDA disabled + -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor + -e, --email Disable colored text in output scheduler emails + -S, --ssd=DRIVE Enable write_mostly on internal HDDs so DSM primarily + reads from internal SSDs or your specified drives + -S automatically sets internal SSDs as DSM preferred + --ssd=DRIVE requires the fast drive(s) as argument, + or restore as the argument to reset drives to default + --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc + --ssd=restore + --restore Undo all changes made by the script (except -S --ssd) + To restore all changes including write_mostly use + --restore --ssd=restore + --autoupdate=AGE Auto update script (useful when script is scheduled) + AGE is how many days old a release must be before + 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 + -v, --version Show the script version ``` **Notes:** From 7c4f0dfa5a5a9c2d35758cc48848dd4c6f01a206 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:01:52 +1100 Subject: [PATCH 563/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 910efb5..d718b7c 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -88,7 +88,7 @@ Options: 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. + For NAS with x86_64 CPUs only Installs IHM on '22 series and newer models (untested) -h, --help Show this help message -v, --version Show the script version From fdf2efe7348b0228f7b78a93da51d18bb98d45d3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:02:17 +1100 Subject: [PATCH 564/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 169d3b5..ace41d2 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ ### Options when running the script AGE is how many days old a release must be before auto-updating. AGE must be a number: 0 or greater -I, --ihm Update IronWolf Health Monitor to 2.5.1 to support - recent model IronWolf and IronWolf Pro drives. + recent model IronWolf and IronWolf Pro drives -h, --help Show this help message -v, --version Show the script version From fef56aba7ff39590d8e794cd1a4d7390696a0c40 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:19:35 +1100 Subject: [PATCH 565/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index d718b7c..e5d43b9 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -264,6 +264,9 @@ 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 #echo -e "$script $scriptver\ngithub.com/$repo\n" @@ -278,7 +281,7 @@ smallfixnumber=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION smallfixnum # Show DSM full version and model if [[ $buildphase == GM ]]; then buildphase=""; fi if [[ $smallfixnumber -gt "0" ]]; then smallfix="-$smallfixnumber"; fi -echo "$model $platform_name DSM $productversion-$buildnumber$smallfix $buildphase" +echo "$model $arch DSM $productversion-$buildnumber$smallfix $buildphase" # Convert model to lower case @@ -2252,7 +2255,7 @@ fi # Optionally update IronWolf Health Management -if [[ $platform_name == "x86_64" ]]; then +if [[ $arch == "x86_64" ]]; then if [[ $ihm == "yes" ]]; then setting="$(/usr/syno/bin/synogetkeyvalue $synoinfo support_ihm)" if [[ $setting != "yes" ]]; then From 27364cfa35e49154563ec99b7b0257f3209121d0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:29:49 +1100 Subject: [PATCH 566/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e5d43b9..c6203f1 100755 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -2276,7 +2276,7 @@ if [[ $arch == "x86_64" ]]; then branch="main" file_url="https://raw.githubusercontent.com/${repo}/${branch}/bin/dhm_tool" # install_binfile - install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "a+x" bin/dhm_tool "$md5hash" + 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}')" From 7a0201068117c509cced61561f258ad11fa28c2e Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 18:22:01 +1100 Subject: [PATCH 567/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 97 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 87 insertions(+), 10 deletions(-) mode change 100755 => 100644 syno_hdd_db.sh diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh old mode 100755 new mode 100644 index 8871ea4..c6203f1 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.106" +scriptver="v3.6.109" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -70,10 +70,10 @@ Options: Do not use this option unless absolutely needed -w, --wdda Disable WD Device Analytics to prevent DSM showing 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 -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 -S automatically sets internal SSDs as DSM preferred --ssd=DRIVE requires the fast drive(s) as argument, @@ -86,6 +86,10 @@ Options: --autoupdate=AGE Auto update script (useful when script is scheduled) AGE is how many days old a release must be before 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 -v, --version Show the script version @@ -108,8 +112,8 @@ EOF args=("$@") # Check for flags with getopt -if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ - ssd:,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ +if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ + ssd:,ihm,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do @@ -165,6 +169,9 @@ if options="$(getopt -o Sabcdefghijklmnopqrstuvwxyz0123456789 -l \ -p|--pcie) # Enable creating volumes on M2 in unknown PCIe adaptor forcepci=yes ;; + -I|--ihm) # Update IronWolf Health Management + ihm=yes + ;; --autoupdate) # Auto update script autoupdate=yes if [[ $2 =~ ^[0-9]+$ ]]; then @@ -197,6 +204,7 @@ else fi +# shellcheck disable=SC2317 # Don't warn about unreachable commands in this function PS4func() { local lineno="$1" local i f='' @@ -253,6 +261,12 @@ fi model=$(cat /proc/sys/kernel/syno_hw_version) 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 #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 if [[ $buildphase == GM ]]; then buildphase=""; 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 @@ -956,10 +970,11 @@ getdriveinfo(){ # 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 - # 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 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 # Get drive GB size @@ -2134,12 +2149,20 @@ if [[ $nodbupdate == "yes" ]]; then # Add drive_db_test_url="127.0.0.1" #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" /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" elif [[ $url != "127.0.0.1" ]]; then # Edit drive_db_test_url= /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" fi @@ -2231,6 +2254,60 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then 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 + 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 + 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 From 7cfe2fc1df81dc3d7cb7f2ec6a00712a0fd78ac4 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 18:26:00 +1100 Subject: [PATCH 568/694] Change EOL to LF --- bin/dhm_tool.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bin/dhm_tool.txt b/bin/dhm_tool.txt index 30e0354..e07189f 100644 --- a/bin/dhm_tool.txt +++ b/bin/dhm_tool.txt @@ -1,12 +1,12 @@ -stx_ihm from QNAP firmware, renamed dhm_tool for Synology DSM - - SeaDragon_DHMr - Seagate drive utilities - Copyright (c) 2017-2021 Seagate Technology LLC and/or its Affiliates, All Rights Reserved - SeaDragon_DHMr Version: 2.5.1-2_2_3 X86_64 - Build Date: Oct 3 2022 - -MD5 cf67c1d5006913297f85ca7f9d1795ba -SHA-1 163b384afabc491c97f3aa4ee7916601a9a680dd -SHA-256 86dd0e3c5ded507d23dfeb2ca04a2e086c97a86e2ab96dc6fdeab686a8202795 -SHA-384 3d806909d445605787ceb155bc1555e01d02efe324378c9c71e6b53d91bba6bf8dbadef38dd882b43caf8dbd93eaff6c -SHA-512 a2d87d91fd4cc298708946c9a611027dce290ba17a48c65e712b5d7e72ba04c6b5303c90efeb178a8fc690241b405691a15cc88200ab3b28319198df6bd6ad16 +stx_ihm from QNAP firmware, renamed dhm_tool for Synology DSM + + SeaDragon_DHMr - Seagate drive utilities + Copyright (c) 2017-2021 Seagate Technology LLC and/or its Affiliates, All Rights Reserved + SeaDragon_DHMr Version: 2.5.1-2_2_3 X86_64 + Build Date: Oct 3 2022 + +MD5 cf67c1d5006913297f85ca7f9d1795ba +SHA-1 163b384afabc491c97f3aa4ee7916601a9a680dd +SHA-256 86dd0e3c5ded507d23dfeb2ca04a2e086c97a86e2ab96dc6fdeab686a8202795 +SHA-384 3d806909d445605787ceb155bc1555e01d02efe324378c9c71e6b53d91bba6bf8dbadef38dd882b43caf8dbd93eaff6c +SHA-512 a2d87d91fd4cc298708946c9a611027dce290ba17a48c65e712b5d7e72ba04c6b5303c90efeb178a8fc690241b405691a15cc88200ab3b28319198df6bd6ad16 From 5a13d38ffae6e4e95c6d5a3436a3c616204073b3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 20:59:18 +1100 Subject: [PATCH 569/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index b321e47..fec8574 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.6.110 +- Bug fix for not finding SAS expansion units. Issue #413 + v3.6.109 - Added -I, --ihm option to update IronWolf Health Management to 2.5.1 to support recent model IronWolf and IronWolf Pro drives. - For NAS with x86_64 CPUs only. From 0105a09d859b96e63b137fbad920e8e15eb50627 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:00:17 +1100 Subject: [PATCH 570/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c6203f1..4a39f04 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.109" +scriptver="v3.6.110" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1196,22 +1196,27 @@ fi # Expansion units -# eSATA and InfiniBand ports both appear in syno_slot_mapping as: -# Esata port count: 1 -# Eunit port 1 - RX1214 -# Only device tree models have syno_slot_mapping -if which syno_slot_mapping >/dev/null; then - eunitlist=($(syno_slot_mapping | grep 'Eunit port' | awk '{print $5}')) -else - # Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log - # Otherwise the new /var/log/diskprediction log is only created a midnight. - /usr/syno/bin/syno_disk_data_collector record - - # Get list of connected expansion units (aka eunit/ebox) - path="/var/log/diskprediction" - # shellcheck disable=SC2012 - file=$(ls $path | tail -n1) - eunitlist=($(grep -Eowi "([FRD]XD?[0-9]{3,4})(rp|ii|sas){0,2}" "$path/$file" | uniq)) +ebox_conected=$(synodisk --enum -t ebox) +if [[ $ebox_conected ]]; then + # Only device tree models have syno_slot_mapping + # eSATA and InfiniBand ports both appear in syno_slot_mapping as: + # Esata port count: 1 + # Eunit port 1 - RX1214 + if which syno_slot_mapping >/dev/null; then + # syno_slot_mapping does not find SAS eunits + eunitlist=($(syno_slot_mapping | grep 'Eunit port' | awk '{print $5}')) + fi + if [[ ${#eunitlist[@]} -eq "0" ]]; then + # Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log + # Otherwise the new /var/log/diskprediction log is only created a midnight. + /usr/syno/bin/syno_disk_data_collector record + + # Get list of connected expansion units (aka eunit/ebox) + path="/var/log/diskprediction" + # shellcheck disable=SC2012 + file=$(ls $path | tail -n1) + eunitlist=($(grep -Eowi "([FRD]XD?[0-9]{3,4})(rp|ii|sas){0,2}" "$path/$file" | uniq)) + fi fi # Sort eunitlist array into new eunits array to remove duplicates From 051ba36f9b229b23621e71edbf23e536efc776b8 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:10:44 +1100 Subject: [PATCH 571/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c6203f1..315cbbd 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.109" +scriptver="v3.6.110" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1196,22 +1196,27 @@ fi # Expansion units -# eSATA and InfiniBand ports both appear in syno_slot_mapping as: -# Esata port count: 1 -# Eunit port 1 - RX1214 -# Only device tree models have syno_slot_mapping -if which syno_slot_mapping >/dev/null; then - eunitlist=($(syno_slot_mapping | grep 'Eunit port' | awk '{print $5}')) -else - # Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log - # Otherwise the new /var/log/diskprediction log is only created a midnight. - /usr/syno/bin/syno_disk_data_collector record - - # Get list of connected expansion units (aka eunit/ebox) - path="/var/log/diskprediction" - # shellcheck disable=SC2012 - file=$(ls $path | tail -n1) - eunitlist=($(grep -Eowi "([FRD]XD?[0-9]{3,4})(rp|ii|sas){0,2}" "$path/$file" | uniq)) +ebox_conected=$(synodisk --enum -t ebox) +if [[ $ebox_conected ]]; then + # Only device tree models have syno_slot_mapping + # eSATA and InfiniBand ports both appear in syno_slot_mapping as: + # Esata port count: 1 + # Eunit port 1 - RX1214 + if which syno_slot_mapping >/dev/null; then + # syno_slot_mapping does not find SAS eunits + eunitlist=($(syno_slot_mapping | grep 'Eunit port' | awk '{print $5}')) + fi + if [[ ${#eunitlist[@]} -eq "0" ]]; then + # Create new /var/log/diskprediction log to ensure newly connected ebox is in latest log + # Otherwise the new /var/log/diskprediction log is only created a midnight. + /usr/syno/bin/syno_disk_data_collector record + + # Get list of connected expansion units (aka eunit/ebox) + path="/var/log/diskprediction" + # shellcheck disable=SC2012 + file=$(ls $path | tail -n1) + eunitlist=($(grep -Eowi "([FRD]XD?[0-9]{3,4})(rp|ii|sas){0,2}" "$path/$file" | uniq)) + fi fi # Sort eunitlist array into new eunits array to remove duplicates @@ -2291,7 +2296,7 @@ if [[ $arch == "x86_64" ]]; then branch="main" file_url="https://raw.githubusercontent.com/${repo}/${branch}/bin/dhm_tool" # install_binfile - install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "a+x" bin/dhm_tool "$md5hash" + install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "755" bin/dhm_tool "$md5hash" # Check dhm_tool updated dhm_version="$(dhm_tool --version | grep "Utility Version" | awk '{print $NF}')" From 53902ccd39b277ed937493bbb443624b3fbc3c49 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:14:11 +1100 Subject: [PATCH 572/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 4a39f04..315cbbd 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -2296,7 +2296,7 @@ if [[ $arch == "x86_64" ]]; then branch="main" file_url="https://raw.githubusercontent.com/${repo}/${branch}/bin/dhm_tool" # install_binfile - install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "a+x" bin/dhm_tool "$md5hash" + install_binfile dhm_tool "$file_url" /usr/syno/sbin/dhm_tool "755" bin/dhm_tool "$md5hash" # Check dhm_tool updated dhm_version="$(dhm_tool --version | grep "Utility Version" | awk '{print $NF}')" From f3ebcc82257b70d52f53993cc7605708584c5417 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 1 Jan 2025 12:13:05 +1100 Subject: [PATCH 573/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ace41d2..0e67ed6 100644 --- a/README.md +++ b/README.md @@ -229,6 +229,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | Flow | tsnyder | zhangchi198 | | leadadri | Gary Plumbridge | frogger1805 | ctrlaltdelete | | CannotTouch | Kevin Staude | Alistair Hathaway | 8347 | | BrattishPlaque | Chris Bunnell | dansimau | Bsih | From fa1762afb090fe3b741d366cdc8216ace50398d4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 1 Jan 2025 12:23:10 +1100 Subject: [PATCH 574/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e67ed6..c30815e 100644 --- a/README.md +++ b/README.md @@ -229,7 +229,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Flow | tsnyder | zhangchi198 | +| | | Will (war59312) | Christopher Maglio | +| Flow | Jake Morrison | tsnyder | zhangchi198 | | leadadri | Gary Plumbridge | frogger1805 | ctrlaltdelete | | CannotTouch | Kevin Staude | Alistair Hathaway | 8347 | | BrattishPlaque | Chris Bunnell | dansimau | Bsih | From a5f42a9943f12796c15fc8cc187bca1e3612119d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 23 Jan 2025 17:11:28 +1100 Subject: [PATCH 575/694] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c30815e..91554f4 100644 --- a/README.md +++ b/README.md @@ -229,7 +229,9 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Will (war59312) | Christopher Maglio | +| | | | Richard Wilhelm | +| Mika255 | Ralf Edelwein | Martin | Alexander Habisreitinger | +| jrn | Marcus Wojtusik | Will (war59312) | Christopher Maglio | | Flow | Jake Morrison | tsnyder | zhangchi198 | | leadadri | Gary Plumbridge | frogger1805 | ctrlaltdelete | | CannotTouch | Kevin Staude | Alistair Hathaway | 8347 | From 69d97b0e33dd37dce26cec3a8e56883483732b42 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:14:24 +1100 Subject: [PATCH 576/694] Update README.md --- README.md | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 91554f4..cec5ff7 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ #### What the script does: * Enables creating M.2 storage pools and volumes from within Storage Manager in DSM 7.2 and later **(newer models only?)**. * Including M.2 drives in PCIe adaptor cards like M2D20, M2D18, M2D17 and E10M20-T1 for DSM 7.2 and above **(schedule the script to run boot)**. * Optionally update IronWolf Health Monitor to v2.5.1 to support recent model IronWolf and IronWolf Pro drives. **(NAS with x86_64 CPUs only)**. - * Installs IronWolf Health Management on '22 series and newer models that don't have IronWolf Health Management **(untested)**. + * Also installs IronWolf Health Management on '22 series and newer models that don't have IronWolf Health Management **(untested)**. * Makes DSM recheck disk compatibility so rebooting is not needed if you don't have M.2 drives (DSM 7 only). * **If you have M.2 drives you may need to reboot.** * Reminds you that you may need to reboot the Synology after running the script. @@ -81,35 +81,6 @@ ### Options when running the script There are optional flags you can use when running the script: ```YAML - -s, --showedits Show edits made to _host db and db.new file(s) - -n, --noupdate Prevent DSM updating the compatible drive databases - -r, --ram Disable memory compatibility checking (DSM 7.x only) - and sets max memory to the amount of installed memory - -f, --force Force DSM to not check drive compatibility - Do not use this option unless absolutely needed - -i, --incompatible Change incompatible drives to supported - Do not use this option unless absolutely needed - -w, --wdda Disable WD Device Analytics to prevent DSM showing - a false warning for WD drives that are 3 years old - DSM 7.2.1 already has WDDA disabled - -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor - -e, --email Disable colored text in output scheduler emails - -S, --ssd=DRIVE Enable write_mostly on slow internal drives so DSM - runs from the fast internal drive(s). - -S automatically sets internal SSDs as DSM preferred - --ssd=DRIVE requires the fast drive(s) as argument, - or restore as the argument to reset drives to default - --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc - --ssd=restore - --restore Undo all changes made by the script (except -S --ssd) - --autoupdate=AGE Auto update script (useful when script is scheduled) - AGE is how many days old a release must be before - auto-updating. AGE must be a number: 0 or greater - -I, --ihm Update IronWolf Health Monitor to 2.5.1 to support - recent model IronWolf and IronWolf Pro drives - -h, --help Show this help message - -v, --version Show the script version - -s, --showedits Show edits made to _host db and db.new file(s) -n, --noupdate Prevent DSM updating the compatible drive databases -r, --ram Disable memory compatibility checking (DSM 7.x only) @@ -139,7 +110,7 @@ ### Options when running the script -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) + Also installs IHM on '22 series and newer models (untested) -h, --help Show this help message -v, --version Show the script version ``` From 0341b07f2569b8beae50bd0e4c171935062ad9e9 Mon Sep 17 00:00:00 2001 From: AgardnerAU <50199760+AgardnerAU@users.noreply.github.com> Date: Sun, 26 Jan 2025 13:43:39 +0800 Subject: [PATCH 577/694] Update README.md De-duplicated flag explanation in readme. --- README.md | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/README.md b/README.md index 91554f4..6bc0a3f 100644 --- a/README.md +++ b/README.md @@ -81,35 +81,6 @@ ### Options when running the script There are optional flags you can use when running the script: ```YAML - -s, --showedits Show edits made to _host db and db.new file(s) - -n, --noupdate Prevent DSM updating the compatible drive databases - -r, --ram Disable memory compatibility checking (DSM 7.x only) - and sets max memory to the amount of installed memory - -f, --force Force DSM to not check drive compatibility - Do not use this option unless absolutely needed - -i, --incompatible Change incompatible drives to supported - Do not use this option unless absolutely needed - -w, --wdda Disable WD Device Analytics to prevent DSM showing - a false warning for WD drives that are 3 years old - DSM 7.2.1 already has WDDA disabled - -p, --pcie Enable creating volumes on M2 in unknown PCIe adaptor - -e, --email Disable colored text in output scheduler emails - -S, --ssd=DRIVE Enable write_mostly on slow internal drives so DSM - runs from the fast internal drive(s). - -S automatically sets internal SSDs as DSM preferred - --ssd=DRIVE requires the fast drive(s) as argument, - or restore as the argument to reset drives to default - --ssd=sata1 or --ssd=sata1,sata2 or --ssd=sda etc - --ssd=restore - --restore Undo all changes made by the script (except -S --ssd) - --autoupdate=AGE Auto update script (useful when script is scheduled) - AGE is how many days old a release must be before - auto-updating. AGE must be a number: 0 or greater - -I, --ihm Update IronWolf Health Monitor to 2.5.1 to support - recent model IronWolf and IronWolf Pro drives - -h, --help Show this help message - -v, --version Show the script version - -s, --showedits Show edits made to _host db and db.new file(s) -n, --noupdate Prevent DSM updating the compatible drive databases -r, --ram Disable memory compatibility checking (DSM 7.x only) From 5124975f8479a68ed50b38f3d4ca73d15c2d112c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 2 Feb 2025 05:58:10 +1100 Subject: [PATCH 578/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cec5ff7..1c42fd5 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Richard Wilhelm | +| | | Daniel Meda | Richard Wilhelm | | Mika255 | Ralf Edelwein | Martin | Alexander Habisreitinger | | jrn | Marcus Wojtusik | Will (war59312) | Christopher Maglio | | Flow | Jake Morrison | tsnyder | zhangchi198 | From 5c5d71462abc997a658b36972301b84d98115ce7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Feb 2025 13:13:45 +1100 Subject: [PATCH 579/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c42fd5..d152d28 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Daniel Meda | Richard Wilhelm | +| | | Toregev | M. Verhoef | +| Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | | Mika255 | Ralf Edelwein | Martin | Alexander Habisreitinger | | jrn | Marcus Wojtusik | Will (war59312) | Christopher Maglio | | Flow | Jake Morrison | tsnyder | zhangchi198 | From 7ef70f75c088f9ba1a7e39f9adae8015e4ad041a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 15 Feb 2025 06:07:37 +1100 Subject: [PATCH 580/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d152d28..7275e96 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Toregev | M. Verhoef | +| | | Fabio Cecchinato | Jacek | +| Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | | Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | | Mika255 | Ralf Edelwein | Martin | Alexander Habisreitinger | | jrn | Marcus Wojtusik | Will (war59312) | Christopher Maglio | From 7b1dd854c602fb2759d594a5234fdc484a1cd087 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sat, 15 Feb 2025 16:42:06 +1100 Subject: [PATCH 581/694] Update my-other-scripts.md --- my-other-scripts.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index b465b69..91759fc 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -60,6 +60,9 @@ ### Synology recovery - **Synology_DSM_Telnet_Password** - Synology DSM Recovery Telnet Password of the Day generator. + +- **Syno_DSM_Extractor_GUI** + - Windows GUI for extracting Synology DSM 7 pat files and spk package files.               [Back to Contents](#contents) @@ -71,6 +74,9 @@ ### Other Synology scripts - **Video_Station_for_DSM_722** - Script to install Video Station in DSM 7.2.2 +- **SS_Motion_Detection** + - Installs previous Surveillance Station and Advanced Media Extensions versions so motion detection and HEVC are supported. + - **Synology_Config_Backup** - Backup and export your Synology DSM configuration. @@ -135,10 +141,13 @@ ### Synology dev - **Download_Synology_Archive** - Download all or part of the Synology archive. +- **Syno_DSM_Extractor_GUI** + - Windows GUI for extracting Synology DSM 7 pat files and spk package files. + - **ScriptNotify** - DSM 7 package to allow your scripts to send DSM notifications. - **DTC_GUI_for_Windows** - - GUI for DTC.exe for Window. + - GUI for DTC.exe for Windows.               [Back to Contents](#contents) From 3312b14be30d13c6549a1e7ef79169b699a1cad7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 21 Feb 2025 13:20:46 +1100 Subject: [PATCH 582/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d152d28..5ec1b67 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Toregev | M. Verhoef | +| | | | Fabio Petgola | +| lonestar6262 | Netchoice | Toregev | M. Verhoef | | Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | | Mika255 | Ralf Edelwein | Martin | Alexander Habisreitinger | | jrn | Marcus Wojtusik | Will (war59312) | Christopher Maglio | From 16264eb130933df31f45046de396a00ceb62ce57 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 21 Feb 2025 13:23:40 +1100 Subject: [PATCH 583/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7275e96..6e5ee11 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Fabio Cecchinato | Jacek | +| | | | Fabio Petgola | +| lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | | Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | | Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | | Mika255 | Ralf Edelwein | Martin | Alexander Habisreitinger | From d8ff2174c9f1d8143e19336969a6b43927efb0c8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 26 Feb 2025 16:39:27 +1100 Subject: [PATCH 584/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6e5ee11..2808c2b 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | | Fabio Petgola | +| | | Fabien Vallet | Fabio Petgola | | lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | | Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | | Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | From f21b27cc2d037e3362c05552be9d0921b1ea9e84 Mon Sep 17 00:00:00 2001 From: Ing Date: Sun, 2 Mar 2025 13:28:58 +0800 Subject: [PATCH 585/694] fixed SC2091 --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 315cbbd..dcdf331 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -126,7 +126,7 @@ if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ ;; --restore) # Restore changes from backups restore=yes - if $(echo "${args[@]}" | grep -q -- '--ssd=restore'); then + if echo "${args[@]}" | grep -q -- '--ssd=restore'; then ssd_restore=yes fi #break From 63650fcbff29c9ea992f7a0bf9f55c648e2c121f Mon Sep 17 00:00:00 2001 From: Ing Date: Mon, 3 Mar 2025 15:42:53 +0800 Subject: [PATCH 586/694] fixed SC2034 --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index dcdf331..22bc7c3 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -262,7 +262,7 @@ model=$(cat /proc/sys/kernel/syno_hw_version) modelname="$model" # Get CPU platform_name -platform_name=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/synoinfo.conf platform_name) +#platform_name=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/synoinfo.conf platform_name) # Get CPU arch arch="$(uname -m)" From 302b4c0af914e96e058980fa5e753c452c837d4f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:21:57 +1100 Subject: [PATCH 587/694] Update syno_hdd_db.sh Added support for M.2 volumes in PCIe adaptor card for DSM 7.1.1 --- syno_hdd_db.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 22bc7c3..5918e70 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -605,8 +605,8 @@ if [[ $buildnumber -gt 64570 ]]; then # DSM 7.2.1 and later #strgmgr="/var/packages/StorageManager/target/ui/storage_panel.js" strgmgr="/usr/local/packages/@appstore/StorageManager/ui/storage_panel.js" -elif [[ $buildnumber -ge 64561 ]]; then - # DSM 7.2 +elif [[ $buildnumber -ge 42962 ]]; then + # DSM 7.1.1 to 7.2 strgmgr="/usr/syno/synoman/webman/modules/StorageManager/storage_panel.js" fi vidfile="/usr/syno/etc.defaults/pci_vendor_ids.conf" @@ -731,7 +731,7 @@ if [[ $restore == "yes" ]]; then # DSM 7.2.1 and later strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" elif [[ $buildnumber -ge 64561 ]]; then - # DSM 7.2 + # DSM 7.1.1 to 7.2 strgmgrver="${buildnumber}${smallfixnumber}" fi if [[ -f "${strgmgr}.$strgmgrver" ]]; then @@ -2221,7 +2221,7 @@ fi # Enable creating pool on drives in M.2 adaptor card if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then - # DSM 7.2 and later + # DSM 7.1.1 and later if [[ ${#m2cards[@]} -gt "0" ]] || [[ $forcepci == "yes" ]]; then if grep -q 'notSupportM2Pool_addOnCard' "$strgmgr"; then @@ -2231,7 +2231,7 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then # DSM 7.2.1 and later strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" elif [[ $buildnumber -ge 64561 ]]; then - # DSM 7.2 + # DSM 7.1.1 to 7.2 strgmgrver="${buildnumber}${smallfixnumber}" fi From 7735a35bcfd6a2e00d72b09ed61ac1ed7c5feb06 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:23:18 +1100 Subject: [PATCH 588/694] Update CHANGES.txt --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index fec8574..e61a022 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.6.111 +- Added support for M.2 volumes for NVMe drives in PCIe adaptor cards for DSM 7.1.1 + v3.6.110 - Bug fix for not finding SAS expansion units. Issue #413 From ab010425ea3e4fe755b8ad105f2b327f2d1e03e3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:25:30 +1100 Subject: [PATCH 589/694] Update syno_hdd_db.sh --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5918e70..1d4b64b 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -730,7 +730,7 @@ if [[ $restore == "yes" ]]; then if [[ $buildnumber -gt 64570 ]]; then # DSM 7.2.1 and later strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" - elif [[ $buildnumber -ge 64561 ]]; then + elif [[ $buildnumber -ge 42962 ]]; then # DSM 7.1.1 to 7.2 strgmgrver="${buildnumber}${smallfixnumber}" fi @@ -2230,7 +2230,7 @@ if [[ -f "$strgmgr" ]] && [[ $buildnumber -gt 42962 ]]; then if [[ $buildnumber -gt 64570 ]]; then # DSM 7.2.1 and later strgmgrver="$(/usr/syno/bin/synopkg version StorageManager)" - elif [[ $buildnumber -ge 64561 ]]; then + elif [[ $buildnumber -ge 42962 ]]; then # DSM 7.1.1 to 7.2 strgmgrver="${buildnumber}${smallfixnumber}" fi From 457baa822f096e77da4e7ec1275ad2aa091e8f8e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:49:43 +1100 Subject: [PATCH 590/694] Update syno_hdd_db.sh Update version number. Issue #438 --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 1d4b64b..e4d5389 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.110" +scriptver="v3.6.111" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db From cc55a1cac40fa8e0d5a88c8b4047fdcd7ff4b177 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 6 Mar 2025 06:04:38 +1100 Subject: [PATCH 591/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2808c2b..ac48e53 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Fabien Vallet | Fabio Petgola | +| | Sven Bauer | Fabien Vallet | Fabio Petgola | | lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | | Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | | Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | From 94ca9ce944b7aa600590d278c854c10b1551419f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 11 Mar 2025 20:45:00 +1100 Subject: [PATCH 592/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ac48e53..9f3b316 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Sven Bauer | Fabien Vallet | Fabio Petgola | +| Jérôme MORIN | Sven Bauer | Fabien Vallet | Fabio Petgola | | lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | | Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | | Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | From 189f4ca0a9e24b9884650428ad29aec4bb237221 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 13 Mar 2025 08:38:05 +1100 Subject: [PATCH 593/694] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f3b316..eb95add 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,8 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| Jérôme MORIN | Sven Bauer | Fabien Vallet | Fabio Petgola | +| | | Jason DeCorte | Salovaara Antti Sakari | +| Jérôme MORIN | Sven Bauer | Fabien Vallet | Fabio Petgola | | lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | | Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | | Philipp Ehmeier | Adrian Playle | Daniel Meda | Richard Wilhelm | From 60826a0a819b16832106136e27cb6710035e1693 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 19 Mar 2025 02:17:16 +1100 Subject: [PATCH 594/694] Add files via upload --- images/ihm.png | Bin 0 -> 31828 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/ihm.png diff --git a/images/ihm.png b/images/ihm.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb85e7a38abca8df6991604cca3c87021e93dda GIT binary patch literal 31828 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 Date: Wed, 19 Mar 2025 02:26:13 +1100 Subject: [PATCH 595/694] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eb95add..0404b5d 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,11 @@ ### vendor_ids.txt

+### Ironwolf Health + +Ironwolf Health working with the latest version of Ironwolf Health Monitor. +

+
### Credits @@ -200,7 +205,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | Jason DeCorte | Salovaara Antti Sakari | +| | Craikeybaby | Jason DeCorte | Salovaara Antti Sakari | | Jérôme MORIN | Sven Bauer | Fabien Vallet | Fabio Petgola | | lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | | Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | From e32695a7254a8580155f2e2cec859b8bfc00e9d5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 21 Mar 2025 17:18:35 +1100 Subject: [PATCH 596/694] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0404b5d..7eabaff 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | Craikeybaby | Jason DeCorte | Salovaara Antti Sakari | +| Pat A Phillips | Craikeybaby | Jason DeCorte | Salovaara Antti Sakari | | Jérôme MORIN | Sven Bauer | Fabien Vallet | Fabio Petgola | | lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | | Dugan Audio LLC | MikeSx | Toregev | M. Verhoef | From c023fe4df99a0f601b603fd3f3c6dbae9195d1a0 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sun, 23 Mar 2025 07:04:19 +1100 Subject: [PATCH 597/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 91759fc..b53d47c 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -94,6 +94,9 @@ ### Other Synology scripts - **Synology_Download_Station_Chrome_Extension** - Download Station Chrome Extension. + +- **Seagate_lowCurrentSpinup** + - This script avoids the need to buy and install a higher wattage power supply when using multiple large Seagate SATA HDDs.               [Back to Contents](#contents) From d5fadf4056da4fc438ba4729302b748ed962e22e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:35:43 +1000 Subject: [PATCH 598/694] Create 2025_plus_models.md --- 2025_plus_models.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 2025_plus_models.md diff --git a/2025_plus_models.md b/2025_plus_models.md new file mode 100644 index 0000000..0461ded --- /dev/null +++ b/2025_plus_models.md @@ -0,0 +1,41 @@ +## 2025 series DS Plus models + +### Deleting and recreating your storage pool on unverified HDDs + +You obviously can't download Synology HDD db to a volume because you've just deleted your storage pool. So you'd first need to download Synology HDD db to a system folder and run it from there. + +1. Create and cd to /opt + ``` + sudo mkdir /opt && sudo chmod 775 /opt + ``` + +2. Create /opt + ``` + sudo mkdir -m775 /opt + ``` + +2. cd to /opt + ``` + cd /opt || (echo "Failed to CD to /opt"; exit 1) + ``` + +3. Download syno_hdd_db.sh to /opt + ``` + sudo curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh" + ``` + +4. Download syno_hdd_vendor_ids.txt to /opt + ``` + sudo curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt" + ``` + +5. Then set permissions on /opt/syno_hdd_db.sh + ``` + sudo chmod 750 /opt/syno_hdd_db.sh + ``` + +6. Finally run + ```sudo -s /opt/syno_hdd_db.sh``` + +7. You can now create your storage pool from Storage Manager + From 70e33cc7d2b450f4e65cce50824d55ff4540e0ec Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:36:48 +1000 Subject: [PATCH 599/694] Update 2025_plus_models.md --- 2025_plus_models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 0461ded..c7aee28 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -2,7 +2,7 @@ ## 2025 series DS Plus models ### Deleting and recreating your storage pool on unverified HDDs -You obviously can't download Synology HDD db to a volume because you've just deleted your storage pool. So you'd first need to download Synology HDD db to a system folder and run it from there. +You can't download Synology HDD db to a volume because you've just deleted your storage pool. So you'd first need to download Synology HDD db to a system folder and run it from there. 1. Create and cd to /opt ``` From dc70051410497e42aedd180f976716f8e315ef01 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:39:04 +1000 Subject: [PATCH 600/694] Update 2025_plus_models.md --- 2025_plus_models.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index c7aee28..f0f163a 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -34,8 +34,10 @@ ### Deleting and recreating your storage pool on unverified HDDs sudo chmod 750 /opt/syno_hdd_db.sh ``` -6. Finally run - ```sudo -s /opt/syno_hdd_db.sh``` +6. Finally run syno_hdd_db. You don't need any options at this point. + ``` + sudo -s /opt/syno_hdd_db.sh + ``` -7. You can now create your storage pool from Storage Manager +8. You can now create your storage pool from Storage Manager From 5fa2d5b753e4658a52863f44abda4123773b3167 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:39:39 +1000 Subject: [PATCH 601/694] Update 2025_plus_models.md --- 2025_plus_models.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index f0f163a..b614492 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -4,6 +4,8 @@ ### Deleting and recreating your storage pool on unverified HDDs You can't download Synology HDD db to a volume because you've just deleted your storage pool. So you'd first need to download Synology HDD db to a system folder and run it from there. +#### Via SSH + 1. Create and cd to /opt ``` sudo mkdir /opt && sudo chmod 775 /opt From a6231f86c68b53e11ead379624a2ad763fe36472 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:41:49 +1000 Subject: [PATCH 602/694] Update 2025_plus_models.md --- 2025_plus_models.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index b614492..05b9eac 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -4,6 +4,8 @@ ### Deleting and recreating your storage pool on unverified HDDs You can't download Synology HDD db to a volume because you've just deleted your storage pool. So you'd first need to download Synology HDD db to a system folder and run it from there. +You can do this via SSH or via a scheduled task. + #### Via SSH 1. Create and cd to /opt @@ -43,3 +45,17 @@ #### Via SSH 8. You can now create your storage pool from Storage Manager +#### Via a scheduled task + + +``` +sudo mkdir -m775 /opt +cd /opt || (echo "Failed to CD to /opt"; exit 1) +sudo curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh" +sudo curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt" +sudo chmod 750 /opt/syno_hdd_db.sh +sudo -s /opt/syno_hdd_db.sh +``` + +You can now create your storage pool from Storage Manager + From b3b10703fcf62b4153b0fe15272d17d1d6a9cfb0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:42:45 +1000 Subject: [PATCH 603/694] Update 2025_plus_models.md --- 2025_plus_models.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 05b9eac..5b16db0 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -49,12 +49,12 @@ #### Via a scheduled task ``` -sudo mkdir -m775 /opt +mkdir -m775 /opt cd /opt || (echo "Failed to CD to /opt"; exit 1) -sudo curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh" -sudo curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt" -sudo chmod 750 /opt/syno_hdd_db.sh -sudo -s /opt/syno_hdd_db.sh +curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh" +curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt" +chmod 750 /opt/syno_hdd_db.sh +/opt/syno_hdd_db.sh ``` You can now create your storage pool from Storage Manager From dd8fd54a992375186d3eaf33eae115f62734ec21 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:49:22 +1000 Subject: [PATCH 604/694] Update 2025_plus_models.md --- 2025_plus_models.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 5b16db0..5f7ae7a 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -47,15 +47,21 @@ #### Via SSH #### Via a scheduled task - -``` -mkdir -m775 /opt -cd /opt || (echo "Failed to CD to /opt"; exit 1) -curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh" -curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt" -chmod 750 /opt/syno_hdd_db.sh -/opt/syno_hdd_db.sh -``` +1. Go to **Control Panel** > **Task Scheduler** > click **Create** > **Scheduled Task** > **User-defined script**. +2. Enter a task name. +3. Select **root** as the user (The script needs to run as root). +4. Untick **Enable**. +5. Click **Task Settings**. +6. In the box under **User-defined script** paste the following: + ``` + mkdir -m775 /opt + cd /opt || (echo "Failed to CD to /opt"; exit 1) + curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh" + curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt" + chmod 750 /opt/syno_hdd_db.sh + /opt/syno_hdd_db.sh + ``` +7. Click **OK** to save the settings. You can now create your storage pool from Storage Manager From 3298971e79225ed92cc2c016c40ed37ac5d3ebb3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 05:58:18 +1000 Subject: [PATCH 605/694] Update 2025_plus_models.md --- 2025_plus_models.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 5f7ae7a..2196002 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -43,7 +43,8 @@ #### Via SSH sudo -s /opt/syno_hdd_db.sh ``` -8. You can now create your storage pool from Storage Manager +8. If Storage Manager is already open close then open it, or refresh the web page. +9. You can now create your storage pool from Storage Manager. #### Via a scheduled task @@ -52,7 +53,8 @@ #### Via a scheduled task 3. Select **root** as the user (The script needs to run as root). 4. Untick **Enable**. 5. Click **Task Settings**. -6. In the box under **User-defined script** paste the following: +6. Tick **Send run details by email** and enter your email address. +7. In the box under **User-defined script** paste the following: ``` mkdir -m775 /opt cd /opt || (echo "Failed to CD to /opt"; exit 1) @@ -61,7 +63,8 @@ #### Via a scheduled task chmod 750 /opt/syno_hdd_db.sh /opt/syno_hdd_db.sh ``` -7. Click **OK** to save the settings. - -You can now create your storage pool from Storage Manager - +8. Click **OK** > **OK** > type your password > **Submit** to save the scheduled task. +9. Now select the scheduld task and click RUn. +10. Check your emails to make sure the schedule task ran without any error. +11. If Storage Manager is already open close then open it, or refresh the web page. +12. You can now create your storage pool from Storage Manager. From d0d166f741772d552ca9037b9d6537b1183f1fc3 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 06:08:00 +1000 Subject: [PATCH 606/694] Update 2025_plus_models.md --- 2025_plus_models.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index 2196002..8117d0c 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -48,6 +48,12 @@ #### Via SSH #### Via a scheduled task +First setup email notifications (if you haven't already): + +1. Go to **Control Panel** > **Notification** > **Email** > click **Setup**. + +Then create the scheduled task: + 1. Go to **Control Panel** > **Task Scheduler** > click **Create** > **Scheduled Task** > **User-defined script**. 2. Enter a task name. 3. Select **root** as the user (The script needs to run as root). From 27fcdf0814a305030a4e2b0bc235970d8da99553 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 06:08:54 +1000 Subject: [PATCH 607/694] Update 2025_plus_models.md --- 2025_plus_models.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 8117d0c..de3e49a 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -70,7 +70,7 @@ #### Via a scheduled task /opt/syno_hdd_db.sh ``` 8. Click **OK** > **OK** > type your password > **Submit** to save the scheduled task. -9. Now select the scheduld task and click RUn. -10. Check your emails to make sure the schedule task ran without any error. +9. Now select the scheduld task and click **Run** > **OK**. +10. Check your emails to make sure the scheduled task ran without any error. 11. If Storage Manager is already open close then open it, or refresh the web page. 12. You can now create your storage pool from Storage Manager. From 6b35f5517aafdc631094145070d69a07f54cd855 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 06:11:23 +1000 Subject: [PATCH 608/694] Update 2025_plus_models.md --- 2025_plus_models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index de3e49a..f6ec618 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -67,7 +67,7 @@ #### Via a scheduled task curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh" curl -O "https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt" chmod 750 /opt/syno_hdd_db.sh - /opt/syno_hdd_db.sh + /opt/syno_hdd_db.sh -e ``` 8. Click **OK** > **OK** > type your password > **Submit** to save the scheduled task. 9. Now select the scheduld task and click **Run** > **OK**. From 53f3412617387ceb0f9a36b6bbbe339e913f0b08 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 06:44:24 +1000 Subject: [PATCH 609/694] Update 2025_plus_models.md --- 2025_plus_models.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index f6ec618..d6c32c9 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -1,4 +1,21 @@ -## 2025 series DS Plus models +## 2025 series or later Plus models + +### Setting up a new 2025 or later plus model with only unverified HDDs + +DSM won't install on a 2025 or later series plus model if you only have unverified HDDs. But we can get around that. + +1. Start telnet via http://:5000/webman/start_telnet.cgi + - Replace with the IP address of the Synology NAS. +3. Open a telnet client on your computer and log in to telnet with + ``` + user = root + pass = 101-0101 + ``` +5. Execute the following command: + ``` + while true; do touch /tmp/installable_check_pass; sleep 1; done + ``` +7. Refresh the web installation page and install DSM. ### Deleting and recreating your storage pool on unverified HDDs From 112eaed134d04358bfdd593a3c892b829b6da482 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 06:56:54 +1000 Subject: [PATCH 610/694] Update 2025_plus_models.md --- 2025_plus_models.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index d6c32c9..afbea63 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -13,9 +13,15 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs ``` 5. Execute the following command: ``` - while true; do touch /tmp/installable_check_pass; sleep 1; done + touch /tmp/installable_check_pass ``` 7. Refresh the web installation page and install DSM. +8. Then in the telnet window execute the following command + ``` + /usr/syno/bin/synosetkeyvalue support_disk_compatibility no + ``` +9. You can now create your storage pool from Storage Manager. + ### Deleting and recreating your storage pool on unverified HDDs From 9fd8e4b8ff802741898e009ebd7b8b1e810c05a4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 07:01:42 +1000 Subject: [PATCH 611/694] Update 2025_plus_models.md --- 2025_plus_models.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index afbea63..fa0825e 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -4,13 +4,11 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs DSM won't install on a 2025 or later series plus model if you only have unverified HDDs. But we can get around that. -1. Start telnet via http://:5000/webman/start_telnet.cgi - - Replace with the IP address of the Synology NAS. +1. Start telnet by entering `http://:5000/webman/start_telnet.cgi` into your browser's address bar. + - Replace `` with the IP address of the Synology NAS. 3. Open a telnet client on your computer and log in to telnet with - ``` - user = root - pass = 101-0101 - ``` + - `root` for the username + - `101-0101` for the password 5. Execute the following command: ``` touch /tmp/installable_check_pass From d8f58f92c30b27134c59c05e1392dc1eea823eb4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 07:10:29 +1000 Subject: [PATCH 612/694] Update 2025_plus_models.md --- 2025_plus_models.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index fa0825e..440494a 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -14,11 +14,12 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs touch /tmp/installable_check_pass ``` 7. Refresh the web installation page and install DSM. -8. Then in the telnet window execute the following command +8. Then in the telnet window, or via SSH, execute the following command ``` /usr/syno/bin/synosetkeyvalue support_disk_compatibility no ``` -9. You can now create your storage pool from Storage Manager. +9. If Storage Manager is already open close then open it, or refresh the web page. +10. You can now create your storage pool from Storage Manager. ### Deleting and recreating your storage pool on unverified HDDs From 22a7c84119f50e628f74fbdc80402466949b8fd0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 07:16:25 +1000 Subject: [PATCH 613/694] Update 2025_plus_models.md --- 2025_plus_models.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 440494a..27cb4f2 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -6,7 +6,7 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs 1. Start telnet by entering `http://:5000/webman/start_telnet.cgi` into your browser's address bar. - Replace `` with the IP address of the Synology NAS. -3. Open a telnet client on your computer and log in to telnet with +3. Open a telnet client on your computer and log in to telnet with: - `root` for the username - `101-0101` for the password 5. Execute the following command: @@ -14,7 +14,7 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs touch /tmp/installable_check_pass ``` 7. Refresh the web installation page and install DSM. -8. Then in the telnet window, or via SSH, execute the following command +8. Then in the telnet window, or via SSH, execute the following command: ``` /usr/syno/bin/synosetkeyvalue support_disk_compatibility no ``` From e118e80326406b56001cced786a1c894b3447b19 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 07:17:39 +1000 Subject: [PATCH 614/694] Update 2025_plus_models.md --- 2025_plus_models.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index 27cb4f2..4cf942d 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -2,6 +2,8 @@ ## 2025 series or later Plus models ### Setting up a new 2025 or later plus model with only unverified HDDs +Credit to Alex_of_Chaos on reddit + DSM won't install on a 2025 or later series plus model if you only have unverified HDDs. But we can get around that. 1. Start telnet by entering `http://:5000/webman/start_telnet.cgi` into your browser's address bar. From 27b982c933749bcc9dda72349a7f445aaf9a7d8f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 07:23:29 +1000 Subject: [PATCH 615/694] Update 2025_plus_models.md --- 2025_plus_models.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index 4cf942d..cb33a51 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -1,5 +1,10 @@ ## 2025 series or later Plus models +On 2025 series or later Plus models: +- You can migrate a storage pool on unverifed 3rd party HDDs from another Synology. +- You can setup the NAS with a Synology HDD or with a 3rd party SSD. +- But you **offically** cannot setup the NAS with only unverified 3rd party HDDs. Unoffically we can... + ### Setting up a new 2025 or later plus model with only unverified HDDs Credit to Alex_of_Chaos on reddit From 4210a7a0c7b7fa2cd923853a94d7ddc163de1f6b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 07:25:39 +1000 Subject: [PATCH 616/694] Update 2025_plus_models.md --- 2025_plus_models.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index cb33a51..5edc494 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -3,7 +3,8 @@ ## 2025 series or later Plus models On 2025 series or later Plus models: - You can migrate a storage pool on unverifed 3rd party HDDs from another Synology. - You can setup the NAS with a Synology HDD or with a 3rd party SSD. -- But you **offically** cannot setup the NAS with only unverified 3rd party HDDs. Unoffically we can... +- **Offically** you cannot install DSM with only unverified 3rd party HDDs. Unoffically we can... +- **Offically** you cannot create a storage pool with only unverified 3rd party HDDs. Unoffically we can... ### Setting up a new 2025 or later plus model with only unverified HDDs From f54185b3a2c8da9865adf114d9d0f3e62c066123 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 07:34:51 +1000 Subject: [PATCH 617/694] Update 2025_plus_models.md --- 2025_plus_models.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 5edc494..0da75d0 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -17,9 +17,9 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs 3. Open a telnet client on your computer and log in to telnet with: - `root` for the username - `101-0101` for the password -5. Execute the following command: +5. Execute the following command: (using a while loop in case DSM is running in a VM) ``` - touch /tmp/installable_check_pass + while true; do touch /tmp/installable_check_pass; sleep 1; done ``` 7. Refresh the web installation page and install DSM. 8. Then in the telnet window, or via SSH, execute the following command: From b5458797fafb94e442069d2acd4b603459d052a5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 09:17:19 +1000 Subject: [PATCH 618/694] Update 2025_plus_models.md --- 2025_plus_models.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index 0da75d0..30ad8c3 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -1,5 +1,16 @@ ## 2025 series or later Plus models +| Action | Works | Result | Solution | +|--------|--------------|--------|----------| +| Setup the NAS with Synology drive(s) | yes | | | +| Setup the NAS with 3rd party SSD(s) | yes | Lots of warnings | Synology HDD db | +| Migrate 3rd party drives from other Synology | yes | Lots of warnings | Synology HDD db | +| Replace migrated 3rd party drive(s) with 3rd party drive(s) | **No!** | | Synology HDD db | +| Expand migrated 3rd party storage pool with 3rd party drive(s) | **No!** | | Synology HDD db | +| Use 3rd party drive as hot spare | **No!** | | Synology HDD db | +| Create a cache with 3rd party SSD(s) | **No!** | | Synology HDD db | +| Delete and create storage pool on migrated 3rd party drive(s) | **No!** | | See Recreating storage pool | + On 2025 series or later Plus models: - You can migrate a storage pool on unverifed 3rd party HDDs from another Synology. - You can setup the NAS with a Synology HDD or with a 3rd party SSD. From 5623fb439c5b185a5d9fa01fd70fe8a5bc230b42 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 09:21:56 +1000 Subject: [PATCH 619/694] Update 2025_plus_models.md --- 2025_plus_models.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 30ad8c3..f55e4c9 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -2,8 +2,9 @@ ## 2025 series or later Plus models | Action | Works | Result | Solution | |--------|--------------|--------|----------| -| Setup the NAS with Synology drive(s) | yes | | | -| Setup the NAS with 3rd party SSD(s) | yes | Lots of warnings | Synology HDD db | +| Setup the NAS with Synology drives | yes | | | +| Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Synology HDD db | +| Setup the NAS with 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | | Migrate 3rd party drives from other Synology | yes | Lots of warnings | Synology HDD db | | Replace migrated 3rd party drive(s) with 3rd party drive(s) | **No!** | | Synology HDD db | | Expand migrated 3rd party storage pool with 3rd party drive(s) | **No!** | | Synology HDD db | From 0c206c531e4150e1f102a2fc8b5cdfc66f8baeff Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 09:24:43 +1000 Subject: [PATCH 620/694] Update 2025_plus_models.md --- 2025_plus_models.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index f55e4c9..4c90faa 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -4,12 +4,12 @@ ## 2025 series or later Plus models |--------|--------------|--------|----------| | Setup the NAS with Synology drives | yes | | | | Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Synology HDD db | -| Setup the NAS with 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | -| Migrate 3rd party drives from other Synology | yes | Lots of warnings | Synology HDD db | -| Replace migrated 3rd party drive(s) with 3rd party drive(s) | **No!** | | Synology HDD db | -| Expand migrated 3rd party storage pool with 3rd party drive(s) | **No!** | | Synology HDD db | +| Setup the NAS with unverified 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | +| Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Synology HDD db | +| Replace migrated 3rd party drives with 3rd party drives | **No!** | | Synology HDD db | +| Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Synology HDD db | | Use 3rd party drive as hot spare | **No!** | | Synology HDD db | -| Create a cache with 3rd party SSD(s) | **No!** | | Synology HDD db | +| Create a cache with 3rd party SSDs | **No!** | | Synology HDD db | | Delete and create storage pool on migrated 3rd party drive(s) | **No!** | | See Recreating storage pool | On 2025 series or later Plus models: From 14d7cdd3442d9e2b24a1d427f6a5caf2c3d0eedf Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 09:26:42 +1000 Subject: [PATCH 621/694] Update 2025_plus_models.md --- 2025_plus_models.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 4c90faa..78039c6 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -12,12 +12,6 @@ ## 2025 series or later Plus models | Create a cache with 3rd party SSDs | **No!** | | Synology HDD db | | Delete and create storage pool on migrated 3rd party drive(s) | **No!** | | See Recreating storage pool | -On 2025 series or later Plus models: -- You can migrate a storage pool on unverifed 3rd party HDDs from another Synology. -- You can setup the NAS with a Synology HDD or with a 3rd party SSD. -- **Offically** you cannot install DSM with only unverified 3rd party HDDs. Unoffically we can... -- **Offically** you cannot create a storage pool with only unverified 3rd party HDDs. Unoffically we can... - ### Setting up a new 2025 or later plus model with only unverified HDDs Credit to Alex_of_Chaos on reddit From cd6f0f47aa59ef193666400a5a871be5029da50f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 09:32:01 +1000 Subject: [PATCH 622/694] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7eabaff..9372e12 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ ### Description It also has a restore option to undo all the changes made by the script. +Works for 2025 series or later Plus models. See [2025_plus_models.md](https://github.com/007revad/Synology_HDD_db/blob/main/2025_plus_models.md) + #### What the script does: * Gets the Synology NAS model and DSM version (so it knows which db files to edit). From 5871921f2610568ea4f8eed77663ea7f0c564932 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 10:07:52 +1000 Subject: [PATCH 623/694] Update 2025_plus_models.md --- 2025_plus_models.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 78039c6..9b314e3 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -3,13 +3,13 @@ ## 2025 series or later Plus models | Action | Works | Result | Solution | |--------|--------------|--------|----------| | Setup the NAS with Synology drives | yes | | | -| Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Synology HDD db | +| Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Use Synology HDD db | | Setup the NAS with unverified 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | -| Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Synology HDD db | -| Replace migrated 3rd party drives with 3rd party drives | **No!** | | Synology HDD db | -| Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Synology HDD db | -| Use 3rd party drive as hot spare | **No!** | | Synology HDD db | -| Create a cache with 3rd party SSDs | **No!** | | Synology HDD db | +| Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Use Synology HDD db | +| Replace migrated 3rd party drives with 3rd party drives | **No!** | | Use Synology HDD db | +| Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use Synology HDD db | +| Use 3rd party drive as hot spare | **No!** | | Use Synology HDD db | +| Create a cache with 3rd party SSDs | **No!** | | Use Synology HDD db | | Delete and create storage pool on migrated 3rd party drive(s) | **No!** | | See Recreating storage pool | ### Setting up a new 2025 or later plus model with only unverified HDDs From eef8af1d2ebcf8fa0069b7d863f60c77c40a058a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 7 May 2025 10:11:36 +1000 Subject: [PATCH 624/694] Update 2025_plus_models.md --- 2025_plus_models.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index 9b314e3..5946061 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -1,5 +1,7 @@ ## 2025 series or later Plus models +### Unverified 3rd party drive limitations and unoffical solutions + | Action | Works | Result | Solution | |--------|--------------|--------|----------| | Setup the NAS with Synology drives | yes | | | @@ -12,6 +14,8 @@ ## 2025 series or later Plus models | Create a cache with 3rd party SSDs | **No!** | | Use Synology HDD db | | Delete and create storage pool on migrated 3rd party drive(s) | **No!** | | See Recreating storage pool | +
+ ### Setting up a new 2025 or later plus model with only unverified HDDs Credit to Alex_of_Chaos on reddit @@ -35,6 +39,7 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs 9. If Storage Manager is already open close then open it, or refresh the web page. 10. You can now create your storage pool from Storage Manager. +
### Deleting and recreating your storage pool on unverified HDDs From 3b399c001e4694aad65ae2a388650ba415a16687 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 8 May 2025 05:16:47 +1000 Subject: [PATCH 625/694] Update 2025_plus_models.md --- 2025_plus_models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 5946061..798118f 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -12,7 +12,7 @@ ### Unverified 3rd party drive limitations and unoffical solutions | Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use Synology HDD db | | Use 3rd party drive as hot spare | **No!** | | Use Synology HDD db | | Create a cache with 3rd party SSDs | **No!** | | Use Synology HDD db | -| Delete and create storage pool on migrated 3rd party drive(s) | **No!** | | See Recreating storage pool | +| Delete and create storage pool on migrated 3rd party drives | **No!** | | See Recreating storage pool |
From 8661c6fdae8c5b2fd8686a0b78ff7ce65e09b6bc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 9 May 2025 06:28:13 +1000 Subject: [PATCH 626/694] Update 2025_plus_models.md --- 2025_plus_models.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 798118f..a26cabd 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -5,13 +5,13 @@ ### Unverified 3rd party drive limitations and unoffical solutions | Action | Works | Result | Solution | |--------|--------------|--------|----------| | Setup the NAS with Synology drives | yes | | | -| Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Use Synology HDD db | +| Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Setup the NAS with unverified 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | -| Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Use Synology HDD db | -| Replace migrated 3rd party drives with 3rd party drives | **No!** | | Use Synology HDD db | -| Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use Synology HDD db | -| Use 3rd party drive as hot spare | **No!** | | Use Synology HDD db | -| Create a cache with 3rd party SSDs | **No!** | | Use Synology HDD db | +| Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Replace migrated 3rd party drives with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Use 3rd party drive as hot spare | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Create a cache with 3rd party SSDs | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Delete and create storage pool on migrated 3rd party drives | **No!** | | See Recreating storage pool |
@@ -115,3 +115,4 @@ #### Via a scheduled task 10. Check your emails to make sure the scheduled task ran without any error. 11. If Storage Manager is already open close then open it, or refresh the web page. 12. You can now create your storage pool from Storage Manager. + From a804bc00905701780eb515b261a00d3d77e178d0 Mon Sep 17 00:00:00 2001 From: Paul FIORENTINO Date: Fri, 9 May 2025 11:49:38 +0200 Subject: [PATCH 627/694] Update 2025_plus_models.md Add info about gradual replacement of migrated 3rd party drives with Synology ones --- 2025_plus_models.md | 1 + 1 file changed, 1 insertion(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index a26cabd..a32fb6f 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -9,6 +9,7 @@ ### Unverified 3rd party drive limitations and unoffical solutions | Setup the NAS with unverified 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | | Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Replace migrated 3rd party drives with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Gradually replace migrated 3rd party drives with Synology drives | probably | Warnings until the last 3rd party drive to be replaced | See [Question about Pool Migration and Drive Replacement on DS925+](https://github.com/007revad/Synology_HDD_db/discussions/468#discussioncomment-13086639) | | Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Use 3rd party drive as hot spare | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Create a cache with 3rd party SSDs | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | From 413ffd968596083e428a59734af19c8e121c92a4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 21 May 2025 05:57:21 +1000 Subject: [PATCH 628/694] Update 2025_plus_models.md --- 2025_plus_models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index a32fb6f..a0f1822 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -9,7 +9,7 @@ ### Unverified 3rd party drive limitations and unoffical solutions | Setup the NAS with unverified 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | | Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Replace migrated 3rd party drives with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | -| Gradually replace migrated 3rd party drives with Synology drives | probably | Warnings until the last 3rd party drive to be replaced | See [Question about Pool Migration and Drive Replacement on DS925+](https://github.com/007revad/Synology_HDD_db/discussions/468#discussioncomment-13086639) | +| Gradually replace migrated 3rd party drives with Synology drives | yes | Lots of warnings until all 3rd party drives replaced | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) See [Migration and Drive Replacement](https://github.com/007revad/Synology_HDD_db/discussions/468#discussioncomment-13086639) | | Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Use 3rd party drive as hot spare | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Create a cache with 3rd party SSDs | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | From 310090758da80e4b3a2940ed997ba1db63a38979 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 21 May 2025 05:59:15 +1000 Subject: [PATCH 629/694] Update 2025_plus_models.md --- 2025_plus_models.md | 1 + 1 file changed, 1 insertion(+) diff --git a/2025_plus_models.md b/2025_plus_models.md index a0f1822..265374d 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -8,6 +8,7 @@ ### Unverified 3rd party drive limitations and unoffical solutions | Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Setup the NAS with unverified 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | | Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Migrate unverified 3rd party drives and NVMe cache from other Synology | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Replace migrated 3rd party drives with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Gradually replace migrated 3rd party drives with Synology drives | yes | Lots of warnings until all 3rd party drives replaced | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) See [Migration and Drive Replacement](https://github.com/007revad/Synology_HDD_db/discussions/468#discussioncomment-13086639) | | Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | From 40672ad2f3f64f2fbffd1c11cf8580612ec00733 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 18 Jun 2025 08:49:20 +1000 Subject: [PATCH 630/694] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 9372e12..8ce6c40 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,10 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| Chris Black Media | Brent Bertram | Carsten Schmidt | Christopher Nichols | +| Roland Thätig | Sebastian Brandt | HFB2022 | jtrouzes | +| stove | Simon Küest | Oliver Weber | Kevin Randino | +| Alex Tripp | Peter Kleissner | Dominic Lee | Daniel Boecker | | Pat A Phillips | Craikeybaby | Jason DeCorte | Salovaara Antti Sakari | | Jérôme MORIN | Sven Bauer | Fabien Vallet | Fabio Petgola | | lonestar6262 | Netchoice | Fabio Cecchinato | Jacek | From bdd0f571421ad10de31c39b6a0edddf1f0b2efb2 Mon Sep 17 00:00:00 2001 From: Kaiyu Chen <56156916+cky008@users.noreply.github.com> Date: Thu, 19 Jun 2025 16:04:34 +0100 Subject: [PATCH 631/694] Update 2025_plus_models.md Have tried the provided steps but not working. After restarting the NAS, could create the storage pool. --- 2025_plus_models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 265374d..b9f6647 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -38,7 +38,7 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs ``` /usr/syno/bin/synosetkeyvalue support_disk_compatibility no ``` -9. If Storage Manager is already open close then open it, or refresh the web page. +9. If Storage Manager is already open close then open it, or refresh the web page. If refreshing the page or restarting Storage Manager is not working, try restarting your Synology NAS. 10. You can now create your storage pool from Storage Manager.
From 768249b0afc19a4dcbeab19a04ab3f098dd540e9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 20 Jun 2025 12:54:12 +1000 Subject: [PATCH 632/694] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8ce6c40..75580ad 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | bizIT Hirschberg | Alexander Ziemann | | Chris Black Media | Brent Bertram | Carsten Schmidt | Christopher Nichols | | Roland Thätig | Sebastian Brandt | HFB2022 | jtrouzes | | stove | Simon Küest | Oliver Weber | Kevin Randino | From 91ec2cd4d222e8396ec307569487bb08a45f507c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 25 Jun 2025 17:35:02 +1000 Subject: [PATCH 633/694] Update 2025_plus_models.md --- 2025_plus_models.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index b9f6647..6595128 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -5,10 +5,10 @@ ### Unverified 3rd party drive limitations and unoffical solutions | Action | Works | Result | Solution | |--------|--------------|--------|----------| | Setup the NAS with Synology drives | yes | | | -| Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Setup the NAS with 3rd party SSDs | yes | Lots of warnings | Remove warnings with [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Setup the NAS with unverified 3rd party HDDs | **No!** | | See Setup with unverifed HDDs | -| Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | -| Migrate unverified 3rd party drives and NVMe cache from other Synology | yes | Lots of warnings | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Migrate unverified 3rd party drives from other Synology | yes | Lots of warnings | Remove warnings with [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | +| Migrate unverified 3rd party drives and NVMe cache from other Synology | yes | Lots of warnings | Remove warnings with [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Replace migrated 3rd party drives with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | | Gradually replace migrated 3rd party drives with Synology drives | yes | Lots of warnings until all 3rd party drives replaced | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) See [Migration and Drive Replacement](https://github.com/007revad/Synology_HDD_db/discussions/468#discussioncomment-13086639) | | Expand migrated 3rd party storage pool with 3rd party drives | **No!** | | Use [Synology HDD db](https://github.com/007revad/Synology_HDD_db) | From 20c04c9a34f0785c73a7bd073dedc0f76bb62a9c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:05:20 +1000 Subject: [PATCH 634/694] Update my-other-scripts.md --- my-other-scripts.md | 1 + 1 file changed, 1 insertion(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index b53d47c..cf33f60 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -8,6 +8,7 @@ #### Contents - [Synology hardware restrictions](#synology-hardware-restrictions) - [How To Guides](#how-to-guides) - [Synology dev](#synology-dev) + ## ### Plex From 4a73547035931ccd91eb17d50a2c37c2723f0268 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:12:25 +1000 Subject: [PATCH 635/694] Update my-other-scripts.md --- my-other-scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index cf33f60..110ac55 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -9,7 +9,7 @@ #### Contents - [How To Guides](#how-to-guides) - [Synology dev](#synology-dev) -## +*** ### Plex From 56313477a4f35d5c85c46c13599404fbdc973261 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 14 Jul 2025 18:51:47 +1000 Subject: [PATCH 636/694] Update 2025_plus_models.md --- 2025_plus_models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 6595128..3049720 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -36,7 +36,7 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs 7. Refresh the web installation page and install DSM. 8. Then in the telnet window, or via SSH, execute the following command: ``` - /usr/syno/bin/synosetkeyvalue support_disk_compatibility no + /usr/syno/bin/synosetkeyvalue /etc.defaults/synoinfo.conf support_disk_compatibility no ``` 9. If Storage Manager is already open close then open it, or refresh the web page. If refreshing the page or restarting Storage Manager is not working, try restarting your Synology NAS. 10. You can now create your storage pool from Storage Manager. From bfc679092320fc2230241aff98cbe55cd4115c67 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Sep 2025 10:16:16 +1000 Subject: [PATCH 637/694] Update donator list in README.md Added new donators to the README file. --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 75580ad..34a7b67 100644 --- a/README.md +++ b/README.md @@ -207,7 +207,13 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | bizIT Hirschberg | Alexander Ziemann | +| | | EVOX S.R.L.S | Adam | +| Danny Schoonderwoert | Andrew Ward | nickcolea | Bruno | +| eColombel | LordGardenGnome | Dennis Struck | matthewslack | +| Adrien | Florian Hinhamer | Patrick Witon | Sonwoa1 | +| apbirch67 | Tim | Robert | Moritz Bloser | +| Jason Huang | James Welsh | robinhood1995 | Paul Fiorento | +| Gwystyl | Matt Hann | bizIT Hirschberg | Alexander Ziemann | | Chris Black Media | Brent Bertram | Carsten Schmidt | Christopher Nichols | | Roland Thätig | Sebastian Brandt | HFB2022 | jtrouzes | | stove | Simon Küest | Oliver Weber | Kevin Randino | From 8fdaa091786f41a644869342361b0330da68e11b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Sep 2025 10:41:45 +1000 Subject: [PATCH 638/694] Update donor names in README.md --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 34a7b67..6e0e81c 100644 --- a/README.md +++ b/README.md @@ -207,13 +207,14 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | | EVOX S.R.L.S | Adam | -| Danny Schoonderwoert | Andrew Ward | nickcolea | Bruno | -| eColombel | LordGardenGnome | Dennis Struck | matthewslack | -| Adrien | Florian Hinhamer | Patrick Witon | Sonwoa1 | -| apbirch67 | Tim | Robert | Moritz Bloser | -| Jason Huang | James Welsh | robinhood1995 | Paul Fiorento | -| Gwystyl | Matt Hann | bizIT Hirschberg | Alexander Ziemann | +| | EVOX S.R.L.S | Adam | Danny Schoonderwoert | +| Andrew Ward | nickcolea | Bruno | eColombel | +| LordGardenGnome | Dennis Struck | matthewslack | Adrien | +| Florian Hinhamer | Patrick Witon | Sonwoa1 | apbirch67 | +| Tim | Robert | Moritz Bloser | Jason Huang | +| James Welsh | robinhood1995 | Paul Fiorento | Gwystyl | +| Matt Hann | Marco Brenke | Martinus Humblet | Dirk Köhler | +| KryoFlux GmbH | Frederic Gobry | bizIT Hirschberg | Alexander Ziemann | | Chris Black Media | Brent Bertram | Carsten Schmidt | Christopher Nichols | | Roland Thätig | Sebastian Brandt | HFB2022 | jtrouzes | | stove | Simon Küest | Oliver Weber | Kevin Randino | From 14ff529c8c1e768ffaa73ec50f2000236f7079c1 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 3 Sep 2025 10:49:51 +1000 Subject: [PATCH 639/694] Update donor list in README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 6e0e81c..215530f 100644 --- a/README.md +++ b/README.md @@ -207,13 +207,13 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| -| | EVOX S.R.L.S | Adam | Danny Schoonderwoert | -| Andrew Ward | nickcolea | Bruno | eColombel | -| LordGardenGnome | Dennis Struck | matthewslack | Adrien | -| Florian Hinhamer | Patrick Witon | Sonwoa1 | apbirch67 | -| Tim | Robert | Moritz Bloser | Jason Huang | -| James Welsh | robinhood1995 | Paul Fiorento | Gwystyl | -| Matt Hann | Marco Brenke | Martinus Humblet | Dirk Köhler | +| EVOX S.R.L.S | Adam | Danny Schoonderwoert | Andrew Ward | +| nickcolea | Bruno | eColombel | LordGardenGnome | +| Dennis Struck | matthewslack | Adrien | Florian Hinhamer | +| Patrick Witon | Sonwoa1 | apbirch67 | Tim | +| Robert | Moritz Bloser | Jason Huang | James Welsh | +| robinhood1995 | Paul Fiorento | Gwystyl | Matt Hann | +| Robert Å ega | Marco Brenke | Martinus Humblet | Dirk Köhler | | KryoFlux GmbH | Frederic Gobry | bizIT Hirschberg | Alexander Ziemann | | Chris Black Media | Brent Bertram | Carsten Schmidt | Christopher Nichols | | Roland Thätig | Sebastian Brandt | HFB2022 | jtrouzes | From 1d6330d42a1fb3f2dfe5aebc62c7ef154a19ed61 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:55:16 +1000 Subject: [PATCH 640/694] Update the list of donators --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 215530f..047620e 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,7 @@ ### Donators | | | | | |--------------------|--------------------|----------------------|----------------------| +| | | | David Koch | | EVOX S.R.L.S | Adam | Danny Schoonderwoert | Andrew Ward | | nickcolea | Bruno | eColombel | LordGardenGnome | | Dennis Struck | matthewslack | Adrien | Florian Hinhamer | From b5b4b8c05d5c5940cda28f1156f9f6e51428f1f5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Sep 2025 12:52:00 +1000 Subject: [PATCH 641/694] Clarify compatibility for Plus models in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 047620e..5ea0e94 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ ### Description It also has a restore option to undo all the changes made by the script. -Works for 2025 series or later Plus models. See [2025_plus_models.md](https://github.com/007revad/Synology_HDD_db/blob/main/2025_plus_models.md) +Also works for 2025 series or later Plus models. See [2025_plus_models.md](https://github.com/007revad/Synology_HDD_db/blob/main/2025_plus_models.md) #### What the script does: From df29e74868a643f3282b0ac8c1635bf1ff1f86e1 Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 23 Sep 2025 09:14:23 +1000 Subject: [PATCH 642/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 110ac55..b867c6d 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -64,6 +64,9 @@ ### Synology recovery - **Syno_DSM_Extractor_GUI** - Windows GUI for extracting Synology DSM 7 pat files and spk package files. + +- **Synoboot_backup** + - Back up synoboot after each DSM update so you can recover from a corrupt USBDOM.               [Back to Contents](#contents) From c2ee5cf090c5541094765b69779a7f2e4303108a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Wed, 24 Sep 2025 07:27:41 +1000 Subject: [PATCH 643/694] Clarify DSM installation steps for 2025+ models Updated the steps for installing DSM on 2025 or later models to clarify telnet connection instructions. --- 2025_plus_models.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 3049720..90daebd 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -25,21 +25,23 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs DSM won't install on a 2025 or later series plus model if you only have unverified HDDs. But we can get around that. 1. Start telnet by entering `http://:5000/webman/start_telnet.cgi` into your browser's address bar. - - Replace `` with the IP address of the Synology NAS. -3. Open a telnet client on your computer and log in to telnet with: - - `root` for the username + - Replace `` with the IP address of the Synology NAS. +2. Open a telnet client (powershell, PuTTY etc) on your computer and connect to the Synology with 'telnet `. + - Replace `` with the IP address of the Synology NAS. +3. Log into telnet with: + - `root` for the login - `101-0101` for the password -5. Execute the following command: (using a while loop in case DSM is running in a VM) +4. Execute the following command: (using a while loop in case DSM is running in a VM) ``` while true; do touch /tmp/installable_check_pass; sleep 1; done ``` -7. Refresh the web installation page and install DSM. -8. Then in the telnet window, or via SSH, execute the following command: +5. Refresh the web installation page and install DSM. +6. Then in the telnet window, or via SSH, execute the following command: ``` /usr/syno/bin/synosetkeyvalue /etc.defaults/synoinfo.conf support_disk_compatibility no ``` -9. If Storage Manager is already open close then open it, or refresh the web page. If refreshing the page or restarting Storage Manager is not working, try restarting your Synology NAS. -10. You can now create your storage pool from Storage Manager. +7. If Storage Manager is already open close then open it, or refresh the web page. If refreshing the page or restarting Storage Manager is not working, try restarting your Synology NAS. +8. You can now create your storage pool from Storage Manager.
From c21891418fb2e8a4e903dc442045d35b30199ef2 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 26 Sep 2025 14:08:53 +1000 Subject: [PATCH 644/694] Update visitor count badge in README Replaced visitor count badge with a new format. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ea0e94..76b345d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Synology HDD db - +![Badge](https://hitscounter.dev/api/hit?url=https%3A%2F%2Fgithub.com%2F007revad%2FSynology_HDD_db&label=Visitors&icon=github&color=%23198754&message=&style=flat&tz=Australia%2FSydney) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/paypalme/007revad) [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) [![committers.top badge](https://user-badge.committers.top/australia/007revad.svg)](https://user-badge.committers.top/australia/007revad) From c868f8b1faed8a297762d7f921f9284f81eeb345 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 30 Sep 2025 12:45:57 +1000 Subject: [PATCH 645/694] Fix typo in section header of 2025_plus_models.md --- 2025_plus_models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 90daebd..33cbeb5 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -1,6 +1,6 @@ ## 2025 series or later Plus models -### Unverified 3rd party drive limitations and unoffical solutions +### Unverified 3rd party drive limitations and unofficial solutions | Action | Works | Result | Solution | |--------|--------------|--------|----------| From 82074f8f6b8257bb5cadc7e6c7387430abd6e69e Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:07:15 +1000 Subject: [PATCH 646/694] Update my-other-scripts.md --- my-other-scripts.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index b867c6d..d78d2f8 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -6,6 +6,7 @@ #### Contents - [Synology recovery](#synology-recovery) - [Other Synology scripts](#other-synology-scripts) - [Synology hardware restrictions](#synology-hardware-restrictions) +- [2025 plus models](#2025-plus-models) - [How To Guides](#how-to-guides) - [Synology dev](#synology-dev) @@ -136,6 +137,22 @@ ### Synology hardware restrictions               [Back to Contents](#contents) +### 2025 plus models + +- **Transcode_for_x25** + - Installs the modules needed for Plex or Jellyfin hardware transcoding in DS425+ and DS225+. + +- **2025 series or later Plus models** + - Unverified 3rd party drive limitations and unofficial solutions. + +- **Setup with only 3rd party drives** + - Setting up a new 2025 or later plus model with only unverified HDDs. + +- **Recreating storage pool on migrated drives** + - Deleting and recreating your storage pool on unverified HDDs. + +               [Back to Contents](#contents) + ### How To Guides - **Synology_SSH_key_setup** From 32b779235888f0f00c02bbc822bf824634284b6a Mon Sep 17 00:00:00 2001 From: 007revad <39733752+007revad@users.noreply.github.com> Date: Sat, 11 Oct 2025 12:35:02 +1100 Subject: [PATCH 647/694] Update my-other-scripts.md --- my-other-scripts.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/my-other-scripts.md b/my-other-scripts.md index d78d2f8..1e15460 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -1,4 +1,7 @@ -## All my scripts +## All my scripts, tools and guides + + + #### Contents - [Plex](#plex) From c3894d03fc015fc65fdf07f0f6fea03c01b68cc4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 11 Oct 2025 17:54:54 +1100 Subject: [PATCH 648/694] Update 2025 Plus models documentation for DSM 7.3 Updated the document to reflect changes in DSM 7.3 regarding restrictions for 2025 Plus models and provided solutions for unverified drives. --- 2025_plus_models.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/2025_plus_models.md b/2025_plus_models.md index 33cbeb5..b4de80b 100644 --- a/2025_plus_models.md +++ b/2025_plus_models.md @@ -1,6 +1,20 @@ ## 2025 series or later Plus models -### Unverified 3rd party drive limitations and unofficial solutions +### UPDATE 7 Oct 2025 + +**DSM 7.3** has removed the many of the restrictions that were in DSM 7.2.2 for 2025 Plus models. + +See https://kb.synology.com/en-global/DSM/tutorial/Drive_compatibility_policies + +The restrictions that remain in DSM 7.3 for 2025 Plus models are: +1. You cannot create a cache or volume on 3rd party NVMe drives. +2. You still see lots of warnings in storage manager when using unverified 3rd party drives. + +Both 1 and 2 can be solved with [Synology HDD db](https://github.com/007revad/Synology_HDD_db) + +
+ +### Unverified 3rd party drive limitations and unofficial solutions for DSM 7.2.2 | Action | Works | Result | Solution | |--------|--------------|--------|----------| @@ -18,7 +32,7 @@ ### Unverified 3rd party drive limitations and unofficial solutions
-### Setting up a new 2025 or later plus model with only unverified HDDs +### Setting up a new 2025 or later plus model with only unverified HDDs in DSM 7.2.2 Credit to Alex_of_Chaos on reddit @@ -45,7 +59,7 @@ ### Setting up a new 2025 or later plus model with only unverified HDDs
-### Deleting and recreating your storage pool on unverified HDDs +### Deleting and recreating your storage pool on unverified HDDs in DSM 7.2.2 You can't download Synology HDD db to a volume because you've just deleted your storage pool. So you'd first need to download Synology HDD db to a system folder and run it from there. From 3cc70413d7c128cc3fd545325a232d89d44a5ddc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 12 Oct 2025 10:59:39 +1100 Subject: [PATCH 649/694] Update compatibility information for DSM versions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 76b345d..c46d412 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ ### Description Add your SATA or SAS HDDs and SSDs plus SATA and NVMe M.2 drives to your Synology's compatible drive databases, including your Synology M.2 PCIe card and Expansion Unit databases. -The script works in DSM 7, including DSM 7.2, and DSM 6. +The script works in DSM 7, including DSM 7.1, 7.2 and 7.3, and DSM 6. It also has a restore option to undo all the changes made by the script. From cdbe73bb1ba1a083382d88cd93332b8b209bedd5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:32:47 +1100 Subject: [PATCH 650/694] Remove committers.top badge from README Removed the committers.top badge from the README file. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c46d412..1462346 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # Synology HDD db ![Badge](https://hitscounter.dev/api/hit?url=https%3A%2F%2Fgithub.com%2F007revad%2FSynology_HDD_db&label=Visitors&icon=github&color=%23198754&message=&style=flat&tz=Australia%2FSydney) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/paypalme/007revad) [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/007revad) -[![committers.top badge](https://user-badge.committers.top/australia/007revad.svg)](https://user-badge.committers.top/australia/007revad) + From 6e17fc73521c2fec0c8a3811fc4c1241c516006f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 27 Oct 2025 20:07:36 +1100 Subject: [PATCH 651/694] Add TRIM support for 3rd party SSDs in 2025 plus models Added information about enabling TRIM on 3rd party SSDs in 2025 plus models. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1462346..a585ac2 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ #### What the script does: * Or you can tell the script which internal drive(s) DSM should read from. * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. +* Makes DSM allow you to enable TRIM on 3rd party SSDs in 2025+ models. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). From fd65f925b1fada6ced24dca0bde18edc0b00620a Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 28 Oct 2025 09:12:30 +1100 Subject: [PATCH 652/694] Update README with TRIM usage instructions Clarified instructions for enabling TRIM on SSDs. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a585ac2..a9f370e 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ #### What the script does: * Or you can tell the script which internal drive(s) DSM should read from. * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. -* Makes DSM allow you to enable TRIM on 3rd party SSDs in 2025+ models. +* Makes DSM allow you to enable TRIM on 3rd party SSDs in 2025+ models. Don't use the `-f` or --force` option if you want to enable SSD TRIM. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). From 1e15d4f8c36f75e05aa50f2714b016deb428fce9 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 2 Nov 2025 13:19:45 +1100 Subject: [PATCH 653/694] Add export-ignore for .github directory --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index 629298a..8e69af8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -106,3 +106,4 @@ .gitattributes export-ignore .gitignore export-ignore .gitkeep export-ignore +.github/ export-ignore From 10f04df61e77c782e9821576e099c1d4ac74e228 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 4 Nov 2025 07:56:21 +1100 Subject: [PATCH 654/694] Add images/ to export-ignore in .gitattributes --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index 8e69af8..9d42190 100644 --- a/.gitattributes +++ b/.gitattributes @@ -107,3 +107,4 @@ .gitignore export-ignore .gitkeep export-ignore .github/ export-ignore +images/ export-ignore From 23561c9717fab4be8d52950bba0b07a6933785db Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:37:27 +1100 Subject: [PATCH 655/694] Add script to stop packages on NVMe volumes during shutdown Companion script for syno_hdd_db.sh to schedule as root to run at shutdown to stop packages that are installed on an NVMe volume. --- syno_hdd_shutdown.sh | 411 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 411 insertions(+) create mode 100644 syno_hdd_shutdown.sh diff --git a/syno_hdd_shutdown.sh b/syno_hdd_shutdown.sh new file mode 100644 index 0000000..01c94f1 --- /dev/null +++ b/syno_hdd_shutdown.sh @@ -0,0 +1,411 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2002,2207 +#------------------------------------------------------------------------------------ +# Companion script for syno_hdd_db +# Schedule companion script to run as root at shut-down +# +# https://www.synology-forum.de/threads/neue-version-7-3-2-86009.140586/post-1265124 +#------------------------------------------------------------------------------------ +# TODO +# Check running on DSM version that needs it +# What to do if @database is on the NVMe volume? + +scriptver="v1.0.0" +script=Synology_HDD_shutdown +#repo="007revad/Synology_HDD_db" +scriptname=syno_hdd_shutdown + +ding(){ + printf \\a +} + +# Save options used for getopt +args=("$@") + +if [[ $1 == "--trace" ]] || [[ $1 == "-t" ]]; then + trace="yes" +fi + +# Check script is running as root +if [[ $( whoami ) != "root" ]]; then + ding + echo -e "ERROR This script must be run as sudo or root!" + exit 1 # Not running as sudo or root +fi + +# Get NAS model +model=$(cat /proc/sys/kernel/syno_hw_version) +#modelname="$model" + + +# Show script version +#echo -e "$script $scriptver\ngithub.com/$repo\n" +echo "$script $scriptver" + +# Get DSM full version +productversion=$(synogetkeyvalue /etc.defaults/VERSION productversion) +buildphase=$(synogetkeyvalue /etc.defaults/VERSION buildphase) +buildnumber=$(synogetkeyvalue /etc.defaults/VERSION buildnumber) +smallfixnumber=$(synogetkeyvalue /etc.defaults/VERSION smallfixnumber) + +# Get CPU arch and platform_name +arch="$(uname -m)" +platform_name=$(synogetkeyvalue /etc.defaults/synoinfo.conf platform_name) + +# Show DSM full version and model +if [[ $buildphase == GM ]]; then buildphase=""; fi +if [[ $smallfixnumber -gt "0" ]]; then smallfix="-$smallfixnumber"; fi +echo "$model DSM $productversion-$buildnumber$smallfix $buildphase" + +# Show CPU arch and platform_name +echo "CPU $platform_name $arch" + +# Show options used +if [[ ${#args[@]} -gt "0" ]]; then + echo -e "Using options: ${args[*]}\n" +else + echo "" +fi + +# Check Synology has synonvme +if ! which synonvme >/dev/null; then + ding + echo "${model} does not have synonvme!" + exit 2 # NAS model does support NVMe +fi + +# Check Synology has libsynonvme.so.1 +if [[ ! -e /usr/lib/libsynonvme.so ]]; then + ding + echo "${model} does not have libsynonvme.so.1!" + exit 2 # NAS model does support NVMe +fi + +#set -x + +# Get script location +# https://stackoverflow.com/questions/59895/ +source=${BASH_SOURCE[0]} +while [ -L "$source" ]; do # Resolve $source until the file is no longer a symlink + scriptpath=$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd ) + source=$(readlink "$source") + # If $source was a relative symlink, we need to resolve it + # relative to the path where the symlink file was located + [[ $source != /* ]] && source=$scriptpath/$source +done +scriptpath=$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd ) +scriptfile=$( basename -- "$source" ) +echo "Running from: ${scriptpath}/$scriptfile" + +# Warn if script located on M.2 drive +scriptvol=$(echo "$scriptpath" | cut -d"/" -f2) +vg=$(lvdisplay | grep /volume_"${scriptvol#volume}" | cut -d"/" -f3) +md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) +if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then + ding + echo -e "WARNING Don't store this script on an NVMe volume!" + exit 3 # Script is stored on NVMe volume +fi + +shutdown_log="${scriptpath}/${scriptname}.log" +# Delete old shutdown_log +if [[ -f "$shutdown_log" ]]; then + rm "$shutdown_log" +fi + +progbar(){ + # $1 is pid of process + # $2 is string to echo + string="$2" + local dots + local progress + dots="" + while [[ -d /proc/$1 ]]; do + dots="${dots}." + progress="$dots" + if [[ ${#dots} -gt "10" ]]; then + dots="" + progress=" " + fi + echo -ne " ${2}$progress\r"; /usr/bin/sleep 0.3 + done +} + +progstatus(){ + # $1 is return status of process + # $2 is string to echo + # $3 line number function was called from + local tracestring + local pad + tracestring="${FUNCNAME[0]} called from ${FUNCNAME[1]} $3" + pad=$(printf -- ' %.0s' {1..80}) + [ "$trace" == "yes" ] && printf '%.*s' 80 "${tracestring}${pad}" && echo "" + if [[ $1 == "0" ]]; then + echo -e "$2 " + else + ding + echo -e "Line ${LINENO}: ERROR $2 failed!" + echo "$tracestring ($scriptver)" + if [[ $exitonerror != "no" ]]; then + exit 1 # Skip exit if exitonerror != no + fi + fi + exitonerror="" + #echo "return: $1" # debug +} + +package_status(){ + # $1 is package name + [ "$trace" == "yes" ] && echo "${FUNCNAME[0]} called from ${FUNCNAME[1]}" +# local code + synopkg status "${1}" >/dev/null + code="$?" + # DSM 7.2 0 = started, 17 = stopped, 255 = not_installed, 150 = broken + # DSM 6 to 7.1 0 = started, 3 = stopped, 4 = not_installed, 150 = broken + if [[ $code == "0" ]]; then + #echo "$1 is started" # debug + return 0 + elif [[ $code == "17" ]] || [[ $code == "3" ]]; then + #echo "$1 is stopped" # debug + return 1 + elif [[ $code == "255" ]] || [[ $code == "4" ]]; then + #echo "$1 is not installed" # debug + return 255 + elif [[ $code == "150" ]]; then + #echo "$1 is broken" # debug + return 150 + else + return "$code" + fi +} + +package_is_running(){ + # $1 is package name + [ "$trace" == "yes" ] && echo "${FUNCNAME[0]} called from ${FUNCNAME[1]}" + synopkg is_onoff "${1}" >/dev/null + code="$?" + return "$code" +} + +wait_status(){ + # Wait for package to finish stopping or starting + # $1 is package + # $2 is start or stop + [ "$trace" == "yes" ] && echo "${FUNCNAME[0]} called from ${FUNCNAME[1]}" + local num + if [[ $2 == "start" ]]; then + state="0" + elif [[ $2 == "stop" ]]; then + state="1" + fi + if [[ $state == "0" ]] || [[ $state == "1" ]]; then + num="0" + package_status "$1" + while [[ $? != "$state" ]]; do + sleep 1 + num=$((num +1)) + if [[ $num -gt "20" ]]; then + break + fi + package_status "$1" + done + fi +} + +package_stop(){ + # $1 is package name + # $2 is package display name + [ "$trace" == "yes" ] && echo "${FUNCNAME[0]} called from ${FUNCNAME[1]}" + # Docker can take 12 minutes to stop 70 containers + timeout 30m synopkg stop "$1" >/dev/null & + pid=$! + string="Stopping ${2}" + progbar "$pid" "$string" + wait "$pid" + progstatus "$?" "$string" "line ${LINENO}" + + # Allow package processes to finish stopping + wait_status "$1" stop & + pid=$! + string="Waiting for ${2} to stop" + progbar "$pid" "$string" + wait "$pid" + progstatus "$?" "$string" "line ${LINENO}" +} + +stop_packages(){ + # Check package is running + [ "$trace" == "yes" ] && echo "${FUNCNAME[0]} called from ${FUNCNAME[1]}" + if package_is_running "$pkg"; then + + # Stop package + package_stop "$pkg" "$pkg_name" + + # Check package stopped + if package_is_running "$pkg"; then + #stop_pkg_fail="yes" + ding + echo -e "Line ${LINENO}: ERROR Failed to stop ${pkg_name}!" +# echo "${pkg_name} status $code" + #process_error="yes" + return 1 + else + echo "$pkg" >> "$shutdown_log" + #stop_pkg_fail="" + fi + + if [[ $pkg == "ContainerManager" ]] || [[ $pkg == "Docker" ]]; then + # Stop containerd-shim + killall containerd-shim >/dev/null 2>&1 + fi +# else +# skip_start="yes" + fi +} + +skip_dev_tools(){ + # $1 is $package + [ "$trace" == "yes" ] && echo "${FUNCNAME[0]} called from ${FUNCNAME[1]}" + local skip1 + local skip2 + skip1="$(synogetkeyvalue "/var/packages/${package}/INFO" startable)" + skip2="$(synogetkeyvalue "/var/packages/${package}/INFO" ctl_stop)" + if [[ $skip1 == "no" ]] || [[ $skip2 == "no" ]]; then + return 0 + else + return 1 + fi +} + + +# Get list of volumes with shared folders +readarray -t shares_array < <(synoshare --enum | tail -n +5) +for share in "${shares_array[@]}"; do + +#echo "share: $share" # debug ################################################ + + if [[ $buildnumber -gt "64570" ]]; then + # DSM 7.2.1 and later + # synoshare --get-real-path is case insensitive + path="$(synoshare --get-real-path "$share" | cut -d"/" -f2)" + else + # DSM 7.2 and earlier + # synoshare --getmap is case insensitive + path="$(synoshare --getmap web_packages | grep volume | cut -d"[" -f2 | cut -d"]" -f1)" + # I could also have used: + # web_pkg_path=$(/usr/syno/sbin/synoshare --get web_packages | tr '[]' '\n' | sed -n "9p") + fi + + # Ignore external USB and eSATA volumes + if echo "$path" | grep -q -E 'volume[0-9]'; then + volumes_array+=("$path") + fi +done + +#echo -e "\nvolumes_array:" # debug ################## +#for v in "${volumes_array[@]}"; do echo "$v"; done # debug ################## +#echo -e "\n" # debug ################## + +# Sort array to remove duplicates +IFS=$'\n' +volumes_array_sorted=($(sort -u <<<"${volumes_array[*]}")) +unset IFS + +#echo -e "\nvolumes_array_sorted:" # debug ########### +#for v in "${volumes_array_sorted[@]}"; do echo "$v"; done # debug ########### +#echo -e "\n" # debug ########### + +#exit + +# Check there is an NVMe volume +nvme_vols=() +for vol in "${volumes_array_sorted[@]}"; do + +#echo "$vol" # debug ######################################################### + + vg=$(lvdisplay | grep /volume_"${vol#volume}" | cut -d"/" -f3) + md=$(pvdisplay | grep -B 1 -E '[ ]'"$vg" | grep /dev/ | cut -d"/" -f3) + if cat /proc/mdstat | grep "$md" | grep nvme >/dev/null; then + nvme_vols_qty=$((nvme_vols_qty +1)) + nvme_vols+=("$vol") + fi +done +if [[ $nvme_vols_qty -lt "0" ]]; then + ding + echo -e "No NVMe volumes found." + exit 4 # Script not needed +fi + + +#echo "nvme_vols_qty $nvme_vols_qty" # debug ###################### +#for v in "${nvme_vols[@]}"; do echo "$v"; done # debug ###################### +#echo "" # debug ###################### + +#exit + + +# Get list of packages installed on NVMe volume +if ! cd /var/packages; then + ding + echo -e "Failed to cd to /var/packages!" + exit 5 # Failed to cd to /var/packages +fi +declare -A package_names +declare -A package_names_rev +#package_infos=( ) +while IFS= read -r -d '' link && IFS= read -r -d '' target; do + if [[ ${link##*/} == "target" ]] && echo "$target" | grep -q 'volume'; then + # Check symlink target exists + if [[ -a "/var/packages${link#.}" ]] ; then + + # Skip broken packages with no INFO file + package="$(printf %s "$link" | cut -d'/' -f2 )" + if [[ -f "/var/packages/${package}/INFO" ]]; then + package_volume="$(printf %s "$target" | cut -d'/' -f1,2 )" + +#echo "package_volume: $package_volume" # debug ############################### + + # Check if package is on NVMe volume + # shellcheck disable=SC2076 + if [[ "/${nvme_vols[*]}" =~ "$package_volume" ]]; then + package_name="$(synogetkeyvalue "/var/packages/${package}/INFO" displayname)" + if [[ -z "$package_name" ]]; then + package_name="$(synogetkeyvalue "/var/packages/${package}/INFO" package)" + fi + +#echo "package_name: $package_name" # debug ############################### + + # Skip packages that are dev tools with no data + if ! skip_dev_tools "$package"; then + #package_infos+=("${package_volume}|${package_name}") + package_names["${package_name}"]="${package}" + package_names_rev["${package}"]="${package_name}" + fi + fi + fi + fi + fi +done < <(find . -maxdepth 2 -type l -printf '%p\0%l\0') + +#echo -e "\npackage_infos:" +#for p in "${package_infos[@]}"; do echo "$p"; done + +#echo -e "\npackage_names:" +#for p in "${package_names[@]}"; do echo "$p"; done + +#echo -e "\npackage_names_rev:" +#for p in "${package_names_rev[@]}"; do echo "$p"; done + + +# Loop through pkgs_sorted array and process package +for pkg in "${package_names[@]}"; do + pkg_name="${package_names_rev["$pkg"]}" + #process_error="" + stop_packages + +#echo "stop_package: $pkg" # debug ############################################ + +done + + + From df778820e68bf08df22b191746efe3a3f1ef3d79 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 5 Dec 2025 07:16:42 +1100 Subject: [PATCH 656/694] Add bug fix for DSM 7.3 database file issue Fixed a bug in DSM 7.3 and later regarding spaces in new database files. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index e61a022..78cf5aa 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.6.112 +- Bug fix for DSM 7.3 and later where new database files have a space after each : and , + v3.6.111 - Added support for M.2 volumes for NVMe drives in PCIe adaptor cards for DSM 7.1.1 From 3206fc60bbfe3188a1e7214731a976aeeeb701f7 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 5 Dec 2025 07:17:42 +1100 Subject: [PATCH 657/694] Add bug fix for DSM 7.3 database file issue Add compactdb function to optimize database files to fix a bug in DSM 7.3 and later regarding spaces in new database files. --- syno_hdd_db.sh | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index e4d5389..5638efe 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.111" +scriptver="v3.6.112" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1326,6 +1326,16 @@ backupdb(){ } +compactdb(){ + # Compact database file if needed (DSM 7.3 and later) + if grep -q ': ' "$1" && grep -q ', ' "$1"; then + jq -c . "$1" > "$1.compact" && chmod 644 "$1.compact" + jq -c . "$1.compact" > "$1" && chmod 644 "$1" + fi + return 0 +} + + # Backup host database file if needed for i in "${!db1list[@]}"; do backupdb "${db1list[i]}" ||{ @@ -1341,6 +1351,15 @@ for i in "${!db2list[@]}"; do done +# Compact DSM 7.3.2 database files if needed +for i in "${!db1list[@]}"; do + compactdb "${db1list[i]}" +done +for i in "${!db2list[@]}"; do + compactdb "${db2list[i]}" +done + + #------------------------------------------------------------------------------ # Edit db files @@ -1515,10 +1534,12 @@ while [[ $num -lt "${#hdds[@]}" ]]; do # Expansion Units for i in "${!eunitdb1list[@]}"; do backupdb "${eunitdb1list[i]}" &&\ + compactdb "${eunitdb1list[i]}" &&\ updatedb "${hdds[$num]}" "${eunitdb1list[i]}" done for i in "${!eunitdb2list[@]}"; do backupdb "${eunitdb2list[i]}" &&\ + compactdb "${eunitdb2list[i]}" &&\ updatedb "${hdds[$num]}" "${eunitdb2list[i]}" done #------------------------------------------------ @@ -1540,10 +1561,12 @@ while [[ $num -lt "${#nvmes[@]}" ]]; do # M.2 adaptor cards for i in "${!m2carddb1list[@]}"; do backupdb "${m2carddb1list[i]}" &&\ + compactdb "${m2carddb1list[i]}" &&\ updatedb "${nvmes[$num]}" "${m2carddb1list[i]}" done for i in "${!m2carddb2list[@]}"; do backupdb "${m2carddb2list[i]}" &&\ + compactdb "${m2carddb2list[i]}" &&\ updatedb "${nvmes[$num]}" "${m2carddb2list[i]}" done #------------------------------------------------ From 0d6a701aa15978dd836b2c02afa74d660faaea44 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 7 Dec 2025 11:24:10 +1100 Subject: [PATCH 658/694] Bug fix for DSM 7.2 and earlier Fixed hard coded web_packages instead of "$share" --- syno_hdd_shutdown.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_shutdown.sh b/syno_hdd_shutdown.sh index 01c94f1..40ea1e2 100644 --- a/syno_hdd_shutdown.sh +++ b/syno_hdd_shutdown.sh @@ -291,9 +291,9 @@ for share in "${shares_array[@]}"; do else # DSM 7.2 and earlier # synoshare --getmap is case insensitive - path="$(synoshare --getmap web_packages | grep volume | cut -d"[" -f2 | cut -d"]" -f1)" + path="$(synoshare --getmap "$share" | grep volume | cut -d"[" -f2 | cut -d"]" -f1)" # I could also have used: - # web_pkg_path=$(/usr/syno/sbin/synoshare --get web_packages | tr '[]' '\n' | sed -n "9p") + # web_pkg_path=$(/usr/syno/sbin/synoshare --get "$share" | tr '[]' '\n' | sed -n "9p") fi # Ignore external USB and eSATA volumes From 840c147edf93d1ea6a7fbf956f1ad71cf4dfca0c Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 11 Dec 2025 06:02:33 +1100 Subject: [PATCH 659/694] Update CHANGES.txt with version 3.6.113 details --- CHANGES.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 78cf5aa..e954a6b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,11 @@ +v3.6.113 +- Added check that DSM 7.3 db file was successfully compacted. +- Added drive's firmware version to messages. +- Improved checking if drive and firmware version were successfully added to db file. +- Bug fix for adding duplicate drive if 2 or more of the same drive model had different firmware versions. + - Also removes duplicate drive entries if they exist (before correctly editing the file). +- Bug fix adding size_gb to to drive firmware version entries instead of just the "default" key section. + v3.6.112 - Bug fix for DSM 7.3 and later where new database files have a space after each : and , From 8bbeaeec7d26b6900542b55e5568f4ca3b079d40 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 11 Dec 2025 10:04:08 +1100 Subject: [PATCH 660/694] Update script version and add duplicate check function v3.6.113 - Added check that DSM 7.3 db file was successfully compacted. - Added drive's firmware version to messages. - Improved checking if drive and firmware version were successfully added to db file. - Bug fix for adding duplicate drive if 2 or more of the same drive model had different firmware versions. - Also removes duplicate drive entries if they exist (before correctly editing the file). - Bug fix adding size_gb to to drive firmware version entries instead of just the "default" key section. --- syno_hdd_db.sh | 158 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 134 insertions(+), 24 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 5638efe..edff033 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.112" +scriptver="v3.6.113" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1327,12 +1327,98 @@ backupdb(){ compactdb(){ - # Compact database file if needed (DSM 7.3 and later) - if grep -q ': ' "$1" && grep -q ', ' "$1"; then - jq -c . "$1" > "$1.compact" && chmod 644 "$1.compact" - jq -c . "$1.compact" > "$1" && chmod 644 "$1" + # Compact database file if needed + local lines + lines=$(wc -l "$1" | cut -d" " -f1) + if (grep -q ': ' "$1" && grep -q ', ' "$1") || [[ $lines -gt 1 ]]; then + # DSM 7.3 and later or pretty-print style + cp -p "$1" "$1.tmp" && jq -c . "$1.tmp" > "$1" && chmod 644 "$1" && rm "$1.tmp" + + # Check database is now compact + lines=$(wc -l "$1" | cut -d" " -f1) + if (grep -q ': ' "$1" && grep -q ', ' "$1") || [[ $lines -gt 1 ]]; then + echo -e "${Error}ERROR${Off} Failed to compact ${1##*/}!" >&2 + return 1 + else + return 0 + fi fi - return 0 +} + + +# Python based function to remove duplicates using EOF method +check_and_merge_dupes(){ + local file="$1" + local count + local i + local array + + [[ -z "$file" ]] && { echo "ERROR No file specified"; return 1; } + + # Detect duplicate 2nd-level keys (drive models) in json (db) file + # jq removes the duplicates so we start with an array of drive models + readarray -t array < <(jq . "$file" | grep -e '^ "' | cut -d'"' -f2) + + # Loop through array of drives in db file checking for duplicates + for i in "${array[@]}"; do + # Check if more than 1 of each drive in db file + #count=$(grep -Eo "\"$i\"" "$file" | wc -l) + count=$(grep -Foc "$i" "$file") + if [[ $count -gt 1 ]]; then + + # Python 3 and 2.7 compatible HERE document + python < /dev/null; then + echo -e "Added ${Yellow}$hdmodel ($fwrev)${Off} to ${Cyan}$(basename -- "$2")${Off}" + editcount "$2" + else + echo -e "\n${Error}ERROR{Off} Failed to add $hdmodel ($fwrev) to $(basename -- "$2")${Off}" + fi else - echo -e "\n${Error}ERROR 6a${Off} Failed to update $(basename -- "$2")${Off}" + echo -e "\n${Error}ERROR 6a${Off} Failed to add $hdmodel ($fwrev) to $(basename -- "$2")${Off}" #exit 6 fi elif [[ $1 == "insert" ]]; then # model and default exists #if sed -i "s/\"$hdmodel\":{/\"$hdmodel\":{$fwstrng/" "$2"; then # insert firmware if sed -i "s/\"${hdmodel//\//\\/}\":{/\"${hdmodel//\//\\/}\":{$fwstrng/" "$2"; then # insert firmware - echo -e "Updated ${Yellow}$hdmodel${Off} in ${Cyan}$(basename -- "$2")${Off}" - #editcount "$2" + if jq -e --arg hdmodel "$hdmodel" --arg fwrev "$fwrev" \ + '.disk_compatbility_info[$hdmodel] | has($fwrev)' "$2" > /dev/null; then + echo -e "Updated ${Yellow}$hdmodel ($fwrev)${Off} in ${Cyan}$(basename -- "$2")${Off}" + #editcount "$2" + else + echo -e "\n${Error}ERROR{Off} Failed to update $hdmodel for ($fwrev) in $(basename -- "$2")" + fi else - echo -e "\n${Error}ERROR 6b${Off} Failed to update $(basename -- "$2")${Off}" + echo -e "\n${Error}ERROR 6b${Off} Failed to update $hdmodel for ($fwrev) in $(basename -- "$2")" #exit 6 fi @@ -1398,10 +1496,15 @@ editdb7(){ #if sed -i "s/{}/{\"$hdmodel\":{$fwstrng${default}}/" "$2"; then # empty #if sed -i "s/{}/{\"${hdmodel//\//\\/}\":{$fwstrng${default}}/" "$2"; then # empty if sed -i "s/{}/{\"${hdmodel//\//\\/}\":{$fwstrng${default}/" "$2"; then # empty - echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" - editcount "$2" + if jq -e --arg hdmodel "$hdmodel" --arg fwrev "$fwrev" \ + '.disk_compatbility_info[$hdmodel] | has($fwrev)' "$2" > /dev/null; then + echo -e "Added ${Yellow}$hdmodel ($fwrev)${Off} to ${Cyan}$(basename -- "$2")${Off}" + editcount "$2" + else + echo -e "\n${Error}ERROR{Off} Failed to add $hdmodel ($fwrev) to $(basename -- "$2")" + fi else - echo -e "\n${Error}ERROR 6c${Off} Failed to update $(basename -- "$2")${Off}" + echo -e "\n${Error}ERROR 6c${Off} Failed to add $hdmodel ($fwrev) to $(basename -- "$2")" #exit 6 fi fi @@ -1423,11 +1526,13 @@ updatedb(){ if [[ $dbtype -gt "6" ]]; then # db type 7 used from DSM 7.1 and later - if grep -q "$hdmodel"'":{"'"$fwrev" "$2"; then - echo -e "${Yellow}$hdmodel${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 + if jq -e --arg hdmodel "$hdmodel" --arg fwrev "$fwrev" \ + '.disk_compatbility_info[$hdmodel] | has($fwrev)' "$2" > /dev/null; then + echo -e "${Yellow}$hdmodel ($fwrev)${Off} already exists in ${Cyan}$(basename -- "$2")${Off}" >&2 else - common_string=\"size_gb\":$size_gb, - common_string="$common_string"\"compatibility_interval\":[{ + #common_string=\"size_gb\":$size_gb, + #common_string="$common_string"\"compatibility_interval\":[{ + common_string=\"compatibility_interval\":[{ common_string="$common_string"\"compatibility\":\"support\", common_string="$common_string"\"not_yet_rolling_status\":\"support\", common_string="$common_string"\"fw_dsm_update_status_notify\":false, @@ -1440,7 +1545,8 @@ updatedb(){ fwstrng="$fwstrng$common_string" fwstrng="$fwstrng"}]}, - default=\"default\":{ + #default=\"default\":{ + default=\"default\":{\"size_gb\":$size_gb, default="$default$common_string" default="$default"}]}}} @@ -1451,7 +1557,7 @@ updatedb(){ #echo "Edit empty db file:" # debug editdb7 "empty" "$2" - elif grep -q '"'"$hdmodel"'":' "$2"; then + elif jq -e --arg hdmodel "$hdmodel" '.disk_compatbility_info[$hdmodel]' "$2" >/dev/null; then # Replace "WD40PURX-64GVNY0":{ with "WD40PURX-64GVNY0":{"80.00A80":{ ... }}}, #echo "Insert firmware version:" # debug editdb7 "insert" "$2" @@ -1497,7 +1603,7 @@ updatedb(){ #if sed -i "s/$startstring/$startstring$string/" "$2"; then #if sed -i "s/${startstring//\//\\/}/${startstring//\//\\/}$string/" "$2"; then if sed -i "s/$startstring/$startstring${string//\//\\/}/" "$2"; then - echo -e "Added ${Yellow}$hdmodel${Off} to ${Cyan}$(basename -- "$2")${Off}" + echo -e "Added ${Yellow}$hdmodel$ ($fwrev){Off} to ${Cyan}$(basename -- "$2")${Off}" else ding echo -e "\n${Error}ERROR 8${Off} Failed to update $(basename -- "$2")${Off}" >&2 @@ -1535,11 +1641,13 @@ while [[ $num -lt "${#hdds[@]}" ]]; do for i in "${!eunitdb1list[@]}"; do backupdb "${eunitdb1list[i]}" &&\ compactdb "${eunitdb1list[i]}" &&\ + check_and_merge_dupes "${eunitdb1list[i]}" &&\ updatedb "${hdds[$num]}" "${eunitdb1list[i]}" done for i in "${!eunitdb2list[@]}"; do backupdb "${eunitdb2list[i]}" &&\ compactdb "${eunitdb2list[i]}" &&\ + check_and_merge_dupes "${eunitdb2list[i]}" &&\ updatedb "${hdds[$num]}" "${eunitdb2list[i]}" done #------------------------------------------------ @@ -1562,11 +1670,13 @@ while [[ $num -lt "${#nvmes[@]}" ]]; do for i in "${!m2carddb1list[@]}"; do backupdb "${m2carddb1list[i]}" &&\ compactdb "${m2carddb1list[i]}" &&\ + check_and_merge_dupes "${m2carddb1list[i]}" &&\ updatedb "${nvmes[$num]}" "${m2carddb1list[i]}" done for i in "${!m2carddb2list[@]}"; do backupdb "${m2carddb2list[i]}" &&\ compactdb "${m2carddb2list[i]}" &&\ + check_and_merge_dupes "${m2carddb2list[i]}" &&\ updatedb "${nvmes[$num]}" "${m2carddb2list[i]}" done #------------------------------------------------ From 71a5d9138388d0c82e56f282573d620dbf54badc Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Dec 2025 06:16:27 +1100 Subject: [PATCH 661/694] Update script to v3.6.114 v3.6.114 - Added syno_hdd_shutdown.sh to the auto update code. - Now if script is located on an NVMe volume it warns you and exits. Previously it just warned you and continued. - Bug fix for DSM 7.3 not disabling compatible drive database auto update. --- syno_hdd_db.sh | 173 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 128 insertions(+), 45 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index edff033..dc7f7c2 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.113" +scriptver="v3.6.114" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -257,6 +257,11 @@ if [[ $dsm -gt "6" ]]; then version="_v$dsm" fi +# Get DSM major and minor version +major=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION majorversion) +minor=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION minorversion) +dsmversion="$major$minor" + # Get Synology model model=$(cat /proc/sys/kernel/syno_hw_version) modelname="$model" @@ -301,7 +306,25 @@ fi # Get StorageManager version storagemgrver=$(/usr/syno/bin/synopkg version StorageManager) # Show StorageManager version -if [[ $storagemgrver ]]; then echo -e "StorageManager $storagemgrver\n"; fi +if [[ $storagemgrver ]]; then echo -e "StorageManager $storagemgrver"; fi + +# Get SynoOnlinePack version +if [[ $dsmversion -gt "72" ]]; then + # Is DSM 7.3 or later + if [[ -f /var/packages/SynoOnlinePack_v3/INFO ]]; then + SOPinfo="/var/packages/SynoOnlinePack_v3/INFO" + v2="_v3" + elif [[ -f /var/packages/SynoOnlinePack_v2/INFO ]]; then + SOPinfo="/var/packages/SynoOnlinePack_v2/INFO" + v2="_v2" + else + SOPinfo="/var/packages/SynoOnlinePack/INFO" + fi + SOPpkgver="$(/usr/syno/bin/synogetkeyvalue $SOPinfo version)" + echo -e "SynoOnlinePack$v2 version $SOPpkgver\n" +else + echo "" +fi # Show host drive db version if [[ -f "/var/lib/disk-compatibility/${model}_host_v7.version" ]]; then @@ -410,7 +433,9 @@ get_script_vol() { get_script_vol # sets $vol_name to /dev/whatever if grep -qE "^${vol_name#/dev/} .+ nvme" /proc/mdstat then + ding echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" + exit 3 fi @@ -502,6 +527,15 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | syslog_set warn "$script failed to copy $tag to script location" fi + # Copy new script companion sh file to script location + if ! cp -p "/tmp/$script-$shorttag/syno_hdd_shutdown.sh" "${scriptpath}/syno_hdd_shutdown.sh"; + then + copyerr=1 + echo -e "${Error}ERROR${Off} Failed to copy"\ + "$script-$shorttag sh file(s) to:\n $scriptpath/syno_hdd_shutdown.sh" + syslog_set warn "$script failed to copy syno_hdd_shutdown.sh to script location" + fi + # Copy new syno_hdd_vendor_ids.txt file vidstxt="syno_hdd_vendor_ids.txt" if [[ $scriptpath =~ /volume* ]]; then @@ -2278,60 +2312,109 @@ if ls /dev | grep -q "nv[cm]"; then fi -# Edit synoinfo.conf to prevent drive db updates -dtu=drive_db_test_url -url="$(/usr/syno/bin/synogetkeyvalue $synoinfo ${dtu})" -disabled="" -if [[ $nodbupdate == "yes" ]]; then - if [[ ! $url ]]; then - # Add drive_db_test_url="127.0.0.1" - #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" - /usr/syno/bin/synosetkeyvalue "$synoinfo" "$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" - elif [[ $url != "127.0.0.1" ]]; then - # Edit drive_db_test_url= - /usr/syno/bin/synosetkeyvalue "$synoinfo" "$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" +# Prevent drive db updates +if [[ $dsmversion -lt "73" ]]; then + # Edit synoinfo.conf to prevent drive db updates + dtu=drive_db_test_url + url="$(/usr/syno/bin/synogetkeyvalue $synoinfo ${dtu})" + disabled="" + if [[ $nodbupdate == "yes" ]]; then + if [[ ! $url ]]; then + # Add drive_db_test_url="127.0.0.1" + #echo 'drive_db_test_url="127.0.0.1"' >> "$synoinfo" + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$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" + elif [[ $url != "127.0.0.1" ]]; then + # Edit drive_db_test_url= + /usr/syno/bin/synosetkeyvalue "$synoinfo" "$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" fi - disabled="yes" - fi - # Check if we disabled drive db auto updates - url="$(/usr/syno/bin/synogetkeyvalue $synoinfo drive_db_test_url)" - if [[ $disabled == "yes" ]]; then - if [[ $url == "127.0.0.1" ]]; then - echo -e "\nDisabled drive db auto updates." + # Check if we disabled drive db auto updates + url="$(/usr/syno/bin/synogetkeyvalue $synoinfo drive_db_test_url)" + if [[ $disabled == "yes" ]]; then + if [[ $url == "127.0.0.1" ]]; then + echo -e "\nDisabled drive db auto updates." + else + echo -e "\n${Error}ERROR${Off} Failed to disable drive db auto updates!" + fi else - echo -e "\n${Error}ERROR${Off} Failed to disable drive db auto updates!" + echo -e "\nDrive db auto updates already disabled." fi else - echo -e "\nDrive db auto updates already disabled." + # Re-enable drive db updates + #if [[ $url == "127.0.0.1" ]]; then + if [[ $url ]]; then + # Delete "drive_db_test_url=127.0.0.1" line (inc. line break) + sed -i "/drive_db_test_url=*/d" "$synoinfo" + sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf + + # Check if we re-enabled drive db auto updates + url="$(/usr/syno/bin/synogetkeyvalue $synoinfo drive_db_test_url)" + if [[ $url != "127.0.0.1" ]]; then + echo -e "\nRe-enabled drive db auto updates." + else + echo -e "\n${Error}ERROR${Off} Failed to enable drive db auto updates!" + fi + else + echo -e "\nDrive db auto updates already enabled." + fi fi else - # Re-enable drive db updates - #if [[ $url == "127.0.0.1" ]]; then - if [[ $url ]]; then - # Delete "drive_db_test_url=127.0.0.1" line (inc. line break) - sed -i "/drive_db_test_url=*/d" "$synoinfo" - sed -i "/drive_db_test_url=*/d" /etc/synoinfo.conf + # Is DSM 7.3 or later + if [[ -f /var/packages/SynoOnlinePack_v3/INFO ]]; then + SOPinfo="/var/packages/SynoOnlinePack_v3/INFO" + elif [[ -f /var/packages/SynoOnlinePack_v2/INFO ]]; then + SOPinfo="/var/packages/SynoOnlinePack_v2/INFO" + else + SOPinfo="/var/packages/SynoOnlinePack/INFO" + fi + SOPpkgver="$(/usr/syno/bin/synogetkeyvalue $SOPinfo version)" - # Check if we re-enabled drive db auto updates - url="$(/usr/syno/bin/synogetkeyvalue $synoinfo drive_db_test_url)" - if [[ $url != "127.0.0.1" ]]; then - echo -e "\nRe-enabled drive db auto updates." + if [[ $nodbupdate == "yes" ]]; then + if [[ ${SOPpkgver:0:4} != "9999" ]]; then + # Prepend version with 9999 + /usr/syno/bin/synosetkeyvalue "$SOPinfo" version "9999$SOPpkgver" + disabled="yes" + fi + + # Check if we disabled drive db auto updates + SOPpkgver2="$(/usr/syno/bin/synogetkeyvalue $SOPinfo version)" + if [[ $disabled == "yes" ]]; then + if [[ $SOPpkgver2 -gt "$SOPpkgver" ]]; then + echo -e "\nDisabled drive db auto updates." + else + echo -e "\n${Error}ERROR${Off} Failed to disable drive db auto updates!" + fi else - echo -e "\n${Error}ERROR${Off} Failed to enable drive db auto updates!" + echo -e "\nDrive db auto updates already disabled." fi else - echo -e "\nDrive db auto updates already enabled." + # Re-enable drive db updates + if [[ ${SOPpkgver:0:4} == "9999" ]]; then + # Remove 9999 from version + /usr/syno/bin/synosetkeyvalue "$SOPinfo" version "${SOPpkgver:4}" + + # Check if we re-enabled drive db auto updates + SOPpkgver2="$(/usr/syno/bin/synogetkeyvalue $SOPinfo version)" + if [[ ${SOPpkgver2:0:4} != "9999" ]]; then + echo -e "\nRe-enabled drive db auto updates." + else + echo -e "\n${Error}ERROR${Off} Failed to enable drive db auto updates!" + fi + else + echo -e "\nDrive db auto updates already enabled." + fi fi fi From 437211520b8a283451c320cd800c9e7b30370450 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Dec 2025 06:17:52 +1100 Subject: [PATCH 662/694] Update CHANGES.txt for version 3.6.114 --- CHANGES.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index e954a6b..61604be 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,8 @@ +v3.6.114 +- Added syno_hdd_shutdown.sh to the auto update code. +- Now if script is located on an NVMe volume it warns you and exits. Previously it just warned you and continued. +- Bug fix for DSM 7.3 not disabling compatible drive database auto update. + v3.6.113 - Added check that DSM 7.3 db file was successfully compacted. - Added drive's firmware version to messages. From 4f34ffc5f179d3d81d188630dea09d4184cd0a74 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Dec 2025 08:42:16 +1100 Subject: [PATCH 663/694] Update script version to v3.6.115 --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index dc7f7c2..c0bce76 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.114" +scriptver="v3.6.115" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -435,7 +435,7 @@ if grep -qE "^${vol_name#/dev/} .+ nvme" /proc/mdstat then ding echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" - exit 3 + #exit 3 fi From a0d5c0636185cd99cf2fb00c7c3f361df42fa82e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Dec 2025 08:43:39 +1100 Subject: [PATCH 664/694] Bump version to v3.6.115 with bug fixes Updated version to v3.6.115 and added bug fixes. --- CHANGES.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 61604be..2b4afd6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,8 @@ -v3.6.114 +v3.6.115 - Added syno_hdd_shutdown.sh to the auto update code. - Now if script is located on an NVMe volume it warns you and exits. Previously it just warned you and continued. - Bug fix for DSM 7.3 not disabling compatible drive database auto update. +- Bug fix for script thinking it's on an NVMe volume if the HDD volume it's on has a NVMe cache. v3.6.113 - Added check that DSM 7.3 db file was successfully compacted. From d4742a54cb119b23f853449fb61fc76b337a4137 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Dec 2025 13:28:42 +1100 Subject: [PATCH 665/694] Update CHANGES.txt for v3.6.116 Moved NVMe warning code and fixed false warnings for HDD volumes. --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 2b4afd6..d648531 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.6.116 +- Moved the "Warn if script located on NVMe volume" code to after the "check for new script version code. Issue #540 +- Bug fix for incorrectly warning that the script is located on an NVMe volume when it is on a SHR HDD volume that has, or had, different HDD sizes. Issue #540 + v3.6.115 - Added syno_hdd_shutdown.sh to the auto update code. - Now if script is located on an NVMe volume it warns you and exits. Previously it just warned you and continued. From f6672d4d455119a2804f087abbefbf21ea6c5393 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sun, 14 Dec 2025 13:30:28 +1100 Subject: [PATCH 666/694] Update script version to v3.6.116 Moved NVMe warning code and fixed false warnings for SHR HDD volumes with mixed drive sizes. --- syno_hdd_db.sh | 52 ++++++++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c0bce76..a1b891a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.115" +scriptver="v3.6.116" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -414,31 +414,6 @@ echo "Running from: ${scriptpath}/$scriptfile" #echo "scriptver: $scriptver" # debug -# Warn if script located on M.2 drive -get_script_vol() { - local script_root vol_num vg_name - script_root="${scriptpath#/*}" - script_root="${script_root%%/*}" - if [[ $script_root =~ ^volume ]] - then - vol_num="${script_root:6}" - vg_name=$(lvs --noheadings --select=lv_name="volume_$vol_num" --options=vg_name) - vg_name="${vg_name// }" - vol_name=$(pvs --noheadings --select=vg_name="$vg_name" --options=pv_name) - vol_name="${vol_name// }" - else - vol_name=$(df --output=source "/$script_root" |sed 1d) - fi -} -get_script_vol # sets $vol_name to /dev/whatever -if grep -qE "^${vol_name#/dev/} .+ nvme" /proc/mdstat -then - ding - echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" - #exit 3 -fi - - cleanup_tmp(){ cleanup_err= @@ -610,6 +585,29 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | fi +# Warn if script located on M.2 drive +get_script_vol() { + local script_root vol_num vg_name + script_root="${scriptpath#/*}" + script_root="${script_root%%/*}" + if [[ $script_root =~ ^volume ]]; then + vol_num="${script_root:6}" + vg_name=$(lvs --noheadings --select=lv_name="volume_$vol_num" --options=vg_name) + vg_name="${vg_name// }" + # Only get first partition on volume group + vol_name=$(pvs --noheadings --select=vg_name="$vg_name" --options=pv_name | awk '{print $1}' | head -n 1) + else + vol_name=$(df --output=source "/$script_root" | sed 1d) # sed 1d = delete first line + fi +} +get_script_vol # sets $vol_name to /dev/whatever +if grep -qE "^${vol_name#/dev/} .+ nvme" /proc/mdstat; then + ding + echo -e "\n${Yellow}WARNING${Off} Don't store this script on an NVMe volume!" + exit 3 +fi + + #------------------------------------------------------------------------------ # Set file variables @@ -1400,7 +1398,7 @@ check_and_merge_dupes(){ count=$(grep -Foc "$i" "$file") if [[ $count -gt 1 ]]; then - # Python 3 and 2.7 compatible HERE document + # Python 3 and 2.7 compatible HERE document python < Date: Thu, 18 Dec 2025 21:12:44 +1100 Subject: [PATCH 667/694] Update my-other-scripts.md --- my-other-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/my-other-scripts.md b/my-other-scripts.md index 1e15460..9466f6f 100644 --- a/my-other-scripts.md +++ b/my-other-scripts.md @@ -105,6 +105,9 @@ ### Other Synology scripts - **Seagate_lowCurrentSpinup** - This script avoids the need to buy and install a higher wattage power supply when using multiple large Seagate SATA HDDs. + +- **Synology_created_date** + - Script to show you the created year and month of your Synology NAS or expansion unit.               [Back to Contents](#contents) From 79c7dfce2c002b02a099d63baa0c0ffe4dab1d70 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 3 Jan 2026 10:43:37 +1100 Subject: [PATCH 668/694] Update README for SSD TRIM support clarification --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a9f370e..c3eae4c 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ #### What the script does: * Or you can tell the script which internal drive(s) DSM should read from. * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. -* Makes DSM allow you to enable TRIM on 3rd party SSDs in 2025+ models. Don't use the `-f` or --force` option if you want to enable SSD TRIM. +* Makes DSM allow you to enable SSD TRIM on 3rd party SSDs and NVMes. Don't use the `-f` or --force` option if you want to enable SSD TRIM. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). From 7692e1b2105bcd0cc915d27fb5e0d86a93a72624 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 8 Jan 2026 07:54:04 +1100 Subject: [PATCH 669/694] Update README.md with SSD TRIM warnings --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c3eae4c..4e93104 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ #### What the script does: * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. * Makes DSM allow you to enable SSD TRIM on 3rd party SSDs and NVMes. Don't use the `-f` or --force` option if you want to enable SSD TRIM. + * Do ***NOT*** use TRIM on SSDs in RAID 5, RAID 6 or SHR with 3 or more SSDs unless you are certain your SSDs use [Method 1 mentioned here](https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list). + * Enabling TRIM on SSDs that use [Method 2](https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list) ***can result in data loss*** in RAID 5, RAID 6 and SHR with 3 or more drives. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). From 83f9948f0836a19efc0808ca71dc30acce171914 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 8 Jan 2026 11:25:09 +1100 Subject: [PATCH 670/694] Update syno_hdd_db.sh to v3.6.117 v3.6.117 - Added SSD TRIM warning of possible data loss if non-Synology SSDs or NVMes are in RAID 5, 6 or SHR with more than 3 drives. - See https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list --- syno_hdd_db.sh | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index a1b891a..c1ad6f7 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.116" +scriptver="v3.6.117" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1107,22 +1107,43 @@ m2_drive(){ fi } +is_ssd(){ + # $1 is sda, sata1 or nvme0 + # Show TRIM warning if SSD or NVMe in RAID 5 or 6 + if ! synodisk --isssd /dev/"$1" >/dev/null; then + # exit code 0 = is not SSD + # exit code 1 = is SSD + + # Ignore Synology SSDs/NVMe drives + brand="$(cat /sys/block/"$1"/device/vendor)" + + if grep -q "$1" /proc/mdstat | grep -E 'raid5|raid6'; then + if [[ $show_trim_warning != "yes" ]] && [[ $brand != "Synology" ]]; then + show_trim_warning="yes" + fi + fi + fi +} + 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 getdriveinfo "$d" + is_ssd "$d" fi ;; sas*) if [[ $d =~ sas[0-9][0-9]?[0-9]?$ ]]; then getdriveinfo "$d" + is_ssd "$d" fi ;; sata*) if [[ $d =~ sata[0-9][0-9]?[0-9]?$ ]]; then getdriveinfo "$d" + is_ssd "$d" # In case it's a SATA M.2 SSD in device tree model NAS # M.2 SATA drives in M2D18 or M2S17 @@ -1132,11 +1153,13 @@ for d in /sys/block/*; do nvme*) if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then m2_drive "$d" "nvme" + is_ssd "$d" fi ;; nvc*) # M.2 SATA drives (in PCIe M2D18 or M2S17 only?) if [[ $d =~ nvc[0-9][0-9]?$ ]]; then m2_drive "$d" "nvc" + is_ssd "$d" fi ;; esac @@ -2567,6 +2590,16 @@ if [[ -f /usr/syno/sbin/synostgdisk ]]; then # DSM 6.2.3 does not have synostgd fi fi +# Show TRIM warning if required +if [[ $show_trim_warning == "yes" ]]; then + ding + echo -e "\n${Error}WARNING${Off} Enabling SSD TRIM on drives in RAID 5, 6 or SHR with 3 more drives can" + echo "result in data loss if the SSD/NVMe drives marks trimmed blocks as released." + echo "SSDs that use Method 1 are okay. Do NOT enable TRIM for SSDs that use Method 2." + echo "See Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list here:" + echo "https://tinyurl.com/ssd-trim" +fi + # Show reboot message if required if [[ $dsm -eq "6" ]] || [[ $rebootmsg == "yes" ]]; then echo -e "\nYou may need to ${Cyan}reboot the Synology${Off} to see the changes." From f051eda588672b785537bf87c5d6f011b2915bb5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 8 Jan 2026 11:26:08 +1100 Subject: [PATCH 671/694] Update CHANGES.txt for v3.6.117 --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index d648531..224ee4b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.6.117 +- Added SSD TRIM warning of possible data loss if non-Synology SSDs or NVMes are in RAID 5, 6 or SHR with more than 3 drives. + - See https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list + v3.6.116 - Moved the "Warn if script located on NVMe volume" code to after the "check for new script version code. Issue #540 - Bug fix for incorrectly warning that the script is located on an NVMe volume when it is on a SHR HDD volume that has, or had, different HDD sizes. Issue #540 From 8e8ba93d8f7eaa8503030067972845399546b86d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:35:10 +1100 Subject: [PATCH 672/694] Add v3.6.118 changes to CHANGES.txt Updated version history with changes for v3.6.118. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 224ee4b..224c1b7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.6.118 +- Changed to enable creating M.2 storage pool and volume in Storage Manager after making DSM check disk compatibility. # GitHub issue #441 + v3.6.117 - Added SSD TRIM warning of possible data loss if non-Synology SSDs or NVMes are in RAID 5, 6 or SHR with more than 3 drives. - See https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list From 8ebe2fb58a70a931b9c64f3fe139243e13b18534 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:36:05 +1100 Subject: [PATCH 673/694] Update script to v3.6.118 v3.6.118 - Changed to enable creating M.2 storage pool and volume in Storage Manager after making DSM check disk compatibility. # GitHub issue #441 --- syno_hdd_db.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index c1ad6f7..be2f57a 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.117" +scriptver="v3.6.118" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -2590,10 +2590,18 @@ if [[ -f /usr/syno/sbin/synostgdisk ]]; then # DSM 6.2.3 does not have synostgd fi fi +# Enable creating M.2 storage pool and volume in Storage Manager # GitHub issue #441 +for d in /sys/block/nvme*; do + # $d is /sys/block/nvme0n1 etc + if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then + m2_pool_support "$d" + fi +done + # Show TRIM warning if required if [[ $show_trim_warning == "yes" ]]; then ding - echo -e "\n${Error}WARNING${Off} Enabling SSD TRIM on drives in RAID 5, 6 or SHR with 3 more drives can" + echo -e "\n${Warning}WARNING${Off} Enabling SSD TRIM on drives in RAID 5, 6 or SHR with 3 more drives can" echo "result in data loss if the SSD/NVMe drives marks trimmed blocks as released." echo "SSDs that use Method 1 are okay. Do NOT enable TRIM for SSDs that use Method 2." echo "See Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list here:" From f4052cde0ed86acb06d1b72eaffb878956c892bb Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:38:50 +1100 Subject: [PATCH 674/694] Update TRIM instructions for RAID configurations --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4e93104..1999988 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ #### What the script does: * Optionally disables Western Digital Device Analytics (aka WDDA) to prevent DSM showing a [warning for WD drives that are 3 years old](https://arstechnica.com/gadgets/2023/06/clearly-predatory-western-digital-sparks-panic-anger-for-age-shaming-hdds). * DSM 7.2.1 already has WDDA disabled. * Makes DSM allow you to enable SSD TRIM on 3rd party SSDs and NVMes. Don't use the `-f` or --force` option if you want to enable SSD TRIM. - * Do ***NOT*** use TRIM on SSDs in RAID 5, RAID 6 or SHR with 3 or more SSDs unless you are certain your SSDs use [Method 1 mentioned here](https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list). - * Enabling TRIM on SSDs that use [Method 2](https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list) ***can result in data loss*** in RAID 5, RAID 6 and SHR with 3 or more drives. + * Do ***NOT*** use TRIM on SSDs in RAID 5, RAID 6 or SHR with 3 or more SSDs unless you are certain your SSDs use TRIM [Method 1 mentioned here](https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list). + * Enabling TRIM on SSDs that use TRIM [Method 2](https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list) ***can result in data loss*** in RAID 5, RAID 6 and SHR with 3 or more drives. * Enables M2D20, M2D18, M2D17 and E10M20-T1 if present on Synology NAS that don't officially support them. * Newer NAS models may also need [Synology_enable_M2_card](https://github.com/007revad/Synology_enable_M2_card) * Checks that M.2 volume support is enabled (on models that have M.2 slots or PCIe slots). From e3bd37f7432e4a5fd324c8976c27b59a155cdfc8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:41:23 +1100 Subject: [PATCH 675/694] Update CHANGES.txt for version 3.6.118 --- CHANGES.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 224c1b7..3e36b2e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,5 @@ v3.6.118 -- Changed to enable creating M.2 storage pool and volume in Storage Manager after making DSM check disk compatibility. # GitHub issue #441 - -v3.6.117 +- Changed to enable creating M.2 storage pool and volume in Storage Manager after making DSM check disk compatibility. Issue #441 - Added SSD TRIM warning of possible data loss if non-Synology SSDs or NVMes are in RAID 5, 6 or SHR with more than 3 drives. - See https://kb.synology.com/en-global/DSM/tutorial/Why_is_SSD_TRIM_available_only_for_SSDs_in_the_compatibility_list From a457c5abcb5b2ba1a77f994cc8b3513f146d2b8e Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 20 Jan 2026 19:09:15 +1100 Subject: [PATCH 676/694] Update CHANGES.txt for version 3.6.119 - Bug fix for "cat: /sys/block//sys/block/sata1/device/vendor: No such file or directory" errors. Issue #554 --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 3e36b2e..1ec7095 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.6.119 +- Bug fix for "cat: /sys/block//sys/block/sata1/device/vendor: No such file or directory" errors. Issue #554 + v3.6.118 - Changed to enable creating M.2 storage pool and volume in Storage Manager after making DSM check disk compatibility. Issue #441 - Added SSD TRIM warning of possible data loss if non-Synology SSDs or NVMes are in RAID 5, 6 or SHR with more than 3 drives. From 14c25d9ffdd91870373f7234b38c8d5c567abf87 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Tue, 20 Jan 2026 19:09:45 +1100 Subject: [PATCH 677/694] Update script to version 3.6.119 v3.6.119 - Bug fix for "cat: /sys/block//sys/block/sata1/device/vendor: No such file or directory" errors. Issue #554 --- syno_hdd_db.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index be2f57a..b5b14a1 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.118" +scriptver="v3.6.119" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1131,19 +1131,19 @@ for d in /sys/block/*; do sd*|hd*) if [[ $d =~ [hs]d[a-z][a-z]?$ ]]; then getdriveinfo "$d" - is_ssd "$d" + is_ssd "$(basename -- "${d}")" fi ;; sas*) if [[ $d =~ sas[0-9][0-9]?[0-9]?$ ]]; then getdriveinfo "$d" - is_ssd "$d" + is_ssd "$(basename -- "${d}")" fi ;; sata*) if [[ $d =~ sata[0-9][0-9]?[0-9]?$ ]]; then getdriveinfo "$d" - is_ssd "$d" + is_ssd "$(basename -- "${d}")" # In case it's a SATA M.2 SSD in device tree model NAS # M.2 SATA drives in M2D18 or M2S17 @@ -1153,13 +1153,13 @@ for d in /sys/block/*; do nvme*) if [[ $d =~ nvme[0-9][0-9]?n[0-9][0-9]?$ ]]; then m2_drive "$d" "nvme" - is_ssd "$d" + #is_ssd "$(basename -- "${d}")" fi ;; nvc*) # M.2 SATA drives (in PCIe M2D18 or M2S17 only?) if [[ $d =~ nvc[0-9][0-9]?$ ]]; then m2_drive "$d" "nvc" - is_ssd "$d" + is_ssd "$(basename -- "${d}")" fi ;; esac @@ -1421,7 +1421,7 @@ check_and_merge_dupes(){ count=$(grep -Foc "$i" "$file") if [[ $count -gt 1 ]]; then - # Python 3 and 2.7 compatible HERE document + # Python 3 and 2.7 compatible HERE document python < Date: Fri, 23 Jan 2026 11:32:30 +1100 Subject: [PATCH 678/694] Add --reboot option for NAS DSM updates Added a new option to reboot the NAS after DSM updates if the build number has changed, specifically for NVMe volumes or PCIe cards requiring a second reboot. --- CHANGES.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 1ec7095..68791ab 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,8 @@ +v3.6.120 +- Added --reboot option to reboot the NAS after a DSM update where the build number has changed. + - Only needed if NVMe volume or PCIe card need a 2nd reboot after DSM update. + - Note: This version of the script needs to run once to create the file that tracks the DSM build number. + v3.6.119 - Bug fix for "cat: /sys/block//sys/block/sata1/device/vendor: No such file or directory" errors. Issue #554 From a9da09fc898a6597c461b44e94c4181b49b26e10 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 23 Jan 2026 11:33:18 +1100 Subject: [PATCH 679/694] Update script version to v3.6.120 and add reboot option Added a new option to reboot the NAS after DSM updates if the build number has changed, specifically for NVMe volumes or PCIe cards requiring a second reboot. --- syno_hdd_db.sh | 111 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 80 insertions(+), 31 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index b5b14a1..364d98f 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.119" +scriptver="v3.6.120" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -90,6 +90,9 @@ Options: recent model IronWolf and IronWolf Pro drives. For NAS with x86_64 CPUs only Installs IHM on '22 series and newer models (untested) + --reboot Reboot after a DSM update when build number has changed + Only needed if NVMe volume or PCIe card need a 2nd + reboot after DSM update -h, --help Show this help message -v, --version Show the script version @@ -113,7 +116,8 @@ args=("$@") # Check for flags with getopt if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ - ssd:,ihm,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:,reboot,help,version,debug \ -- "$@")"; then eval set -- "$options" while true; do @@ -181,6 +185,9 @@ if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ delay="0" fi ;; + --reboot) # Reboot once more after major DSM update + do_reboot="yes" + ;; -h|--help) # Show usage options usage ;; @@ -238,6 +245,7 @@ if [[ $color != "no" ]]; then Cyan='\e[0;36m' # ${Cyan} #White='\e[0;37m' # ${White} Error='\e[41m' # ${Error} + Warn='\e[47;31m' # ${Warn} Off='\e[0m' # ${Off} else echo "" # For task scheduler email readability @@ -251,6 +259,18 @@ if [[ $( whoami ) != "root" ]]; then exit 1 fi +detect_scheduler(){ + # Check if stdin is a terminal (interactive) + [ ! -t 0 ] && return 0 + + # Check parent process + local parent + parent=$(ps -p $PPID -o comm=) + [[ "$parent" =~ (systemd-run|sched|crond) ]] && return 0 + + return 1 +} + # Get DSM major version dsm=$(/usr/syno/bin/synogetkeyvalue /etc.defaults/VERSION majorversion) if [[ $dsm -gt "6" ]]; then @@ -306,7 +326,7 @@ fi # Get StorageManager version storagemgrver=$(/usr/syno/bin/synopkg version StorageManager) # Show StorageManager version -if [[ $storagemgrver ]]; then echo -e "StorageManager $storagemgrver"; fi +if [[ $storagemgrver ]]; then echo -e "- StorageManager $storagemgrver"; fi # Get SynoOnlinePack version if [[ $dsmversion -gt "72" ]]; then @@ -321,19 +341,20 @@ if [[ $dsmversion -gt "72" ]]; then SOPinfo="/var/packages/SynoOnlinePack/INFO" fi SOPpkgver="$(/usr/syno/bin/synogetkeyvalue $SOPinfo version)" - echo -e "SynoOnlinePack$v2 version $SOPpkgver\n" -else - echo "" + #echo -e "SynoOnlinePack$v2 version $SOPpkgver\n" + echo "- SynoOnlinePack$v2 version $SOPpkgver" +#else +# echo "" fi # Show host drive db version if [[ -f "/var/lib/disk-compatibility/${model}_host_v7.version" ]]; then - echo -n "${model}_host_v7 version " + echo -n "- ${model}_host_v7 version " cat "/var/lib/disk-compatibility/${model}_host_v7.version" echo -e "\n" fi if [[ -f "/var/lib/disk-compatibility/${model}_host.version" ]]; then - echo -n "${model}_host version " + echo -n "- ${model}_host version " cat "/var/lib/disk-compatibility/${model}_host.version" echo -e "\n" fi @@ -361,7 +382,7 @@ pause(){ # Check latest release with GitHub API syslog_set(){ - if [[ ${1,,} == "info" ]] || [[ ${1,,} == "warn" ]] || [[ ${1,,} == "err" ]]; then + if [[ ${1,,} == "info" || ${1,,} == "warn" || ${1,,} == "err" ]]; then if [[ $autoupdate == "yes" ]]; then # Add entry to Synology system log /usr/syno/bin/synologset1 sys "$1" 0x11100000 "$2" @@ -447,7 +468,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | echo -e "\n${Cyan}There is a newer version of this script available.${Off}" echo -e "Current version: ${scriptver}\nLatest version: $tag" scriptdl="$scriptpath/$script-$shorttag" - if [[ -f ${scriptdl}.tar.gz ]] || [[ -f ${scriptdl}.zip ]]; then + if [[ -f ${scriptdl}.tar.gz || -f ${scriptdl}.zip ]]; then # They have the latest version tar.gz downloaded but are using older version echo "You have the latest version downloaded but are using an older version" sleep 10 @@ -457,7 +478,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | sleep 10 else if [[ $autoupdate == "yes" ]]; then - if [[ $age -gt "$delay" ]] || [[ $age -eq "$delay" ]]; then + if [[ $age -gt "$delay" || $age -eq "$delay" ]]; then echo "Downloading $tag" reply=y else @@ -557,7 +578,7 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | cleanup_tmp # Notify of success (if there were no errors) - if [[ $copyerr != 1 ]] && [[ $permerr != 1 ]]; then + if [[ $copyerr != 1 && $permerr != 1 ]]; then echo -e "\n$tag ${scriptfile}$vids_txt$changestxt downloaded to: ${scriptpath}\n" syslog_set info "$script successfully updated to $tag" @@ -585,6 +606,16 @@ if ! printf "%s\n%s\n" "$tag" "$scriptver" | fi +# Show if running in shell or via task scheduler +if detect_scheduler; then + echo "Running via task scheduler" + sch_task="yes" +else + echo "Running in interactive shell" + sch_task="" +fi + + # Warn if script located on M.2 drive get_script_vol() { local script_root vol_num vg_name @@ -644,13 +675,20 @@ fi vidfile="/usr/syno/etc.defaults/pci_vendor_ids.conf" vidfile2="/usr/syno/etc/pci_vendor_ids.conf" +reboot_file="${scriptpath}/syno_hdd_reboot.txt" +if [[ ! -f "$reboot_file" ]]; then + echo "Do NOT delete this file!" > "$reboot_file" + echo "It is used to track if DSM has updated." >> "$reboot_file" + synosetkeyvalue "$reboot_file" dsm_build "$buildnumber" +fi + set_writemostly(){ # $1 is writemostly or -writemostly # $2 is sata1 or sas1 or sda etc local model # Show drive model - model="$(cat /sys/block/"${2}"/device/model | xargs)" + model="$(xargs < /sys/block/"${2}"/device/model)" echo -e "${Yellow}$model${Off}" if [[ ${1::2} == "sd" ]]; then @@ -694,8 +732,8 @@ if [[ $restore == "yes" ]]; then unset IFS echo "" - if [[ ${#dbbakfiles[@]} -gt "0" ]] || [[ -f ${synoinfo}.bak ]] ||\ - [[ -f ${dtb_file}.bak ]] || [[ -f ${adapter_cards}.bak ]] ; then + if [[ ${#dbbakfiles[@]} -gt "0" || -f ${synoinfo}.bak ||\ + -f ${dtb_file}.bak || -f ${adapter_cards}.bak ]] ; then # Restore synoinfo.conf from backup if [[ -f ${synoinfo}.bak ]]; then @@ -1012,7 +1050,7 @@ getdriveinfo(){ # Get drive GB size size_gb=$(get_size_gb "$1") if [[ -n "$size_gb" ]]; then # PR #187 - if [[ $hdmodel ]] && [[ $fwrev ]]; then + if [[ $hdmodel && $fwrev ]]; then if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then # Is SATA M.2 SSD nvmelist+=("${hdmodel},${fwrev},${size_gb}") @@ -1039,7 +1077,7 @@ getm2info(){ # Get drive GB size size_gb=$(get_size_gb "$1") - if [[ $nvmemodel ]] && [[ $nvmefw ]]; then + if [[ $nvmemodel && $nvmefw ]]; then nvmelist+=("${nvmemodel},${nvmefw},${size_gb}") drivelist+=("${nvmemodel}") fi @@ -1086,7 +1124,7 @@ m2_drive(){ # Check if is NVMe or SATA M.2 SSD if /usr/syno/bin/synodisk --enum -t cache | grep -q /dev/"$(basename -- "$1")"; then - if [[ $2 == "nvme" ]] || [[ $2 == "nvc" ]]; then + if [[ $2 == "nvme" || $2 == "nvc" ]]; then # Fix unknown vendor id if needed. GitHub issue #161 # "Failed to get disk vendor" from synonvme --vendor-get # causes "Unsupported firmware version" warning. @@ -1118,7 +1156,7 @@ is_ssd(){ brand="$(cat /sys/block/"$1"/device/vendor)" if grep -q "$1" /proc/mdstat | grep -E 'raid5|raid6'; then - if [[ $show_trim_warning != "yes" ]] && [[ $brand != "Synology" ]]; then + if [[ $show_trim_warning != "yes" && $brand != "Synology" ]]; then show_trim_warning="yes" fi fi @@ -1212,7 +1250,7 @@ fi # Exit if no drives found -if [[ ${#hdds[@]} -eq "0" ]] && [[ ${#nvmes[@]} -eq "0" ]]; then +if [[ ${#hdds[@]} -eq "0" && ${#nvmes[@]} -eq "0" ]]; then ding echo -e "\n${Error}ERROR${Off} No drives found!" && exit 2 fi @@ -1747,7 +1785,7 @@ enable_card(){ # $1 is the file # $2 is the section # $3 is the card model and mode - if [[ -f $1 ]] && [[ -n $2 ]] && [[ -n $3 ]]; then + if [[ -f $1 && -n $2 && -n $3 ]]; then backupdb "$adapter_cards" long backupdb "$adapter_cards2" long @@ -1788,7 +1826,7 @@ dts_m2_card(){ sed -i '/^};/d' "$2" # Append PCIe M.2 card node to dts file -if [[ $1 == E10M20-T1 ]] || [[ $1 == M2D20 ]]; then +if [[ $1 == E10M20-T1 || $1 == M2D20 ]]; then cat >> "$2" < Date: Fri, 23 Jan 2026 17:10:07 +1100 Subject: [PATCH 680/694] Document reboot option after DSM update Add reboot option for DSM update in README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 1999988..5126ab8 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,9 @@ ### Options when running the script recent model IronWolf and IronWolf Pro drives. For NAS with x86_64 CPUs only. Also installs IHM on '22 series and newer models (untested) + --reboot Reboot after a DSM update when build number has changed + Only needed if NVMe volume or PCIe card need a 2nd + reboot after DSM update -h, --help Show this help message -v, --version Show the script version ``` From d051109c4dadad37aadd719ddcfdb770ebae2e91 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 23 Jan 2026 17:33:08 +1100 Subject: [PATCH 681/694] Update README with additional help options --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5126ab8..f7fa3f5 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ ### Options when running the script For NAS with x86_64 CPUs only. Also installs IHM on '22 series and newer models (untested) --reboot Reboot after a DSM update when build number has changed + Only works if script is running from a boot-up schedule Only needed if NVMe volume or PCIe card need a 2nd reboot after DSM update -h, --help Show this help message From 553abedc45f2a6abc14c6da1762e10c4e6df41aa Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 12 Feb 2026 11:10:40 +1100 Subject: [PATCH 682/694] Update CHANGES.txt for v3.6.120 --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 68791ab..11560e8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,7 @@ v3.6.120 - Added --reboot option to reboot the NAS after a DSM update where the build number has changed. - Only needed if NVMe volume or PCIe card need a 2nd reboot after DSM update. - Note: This version of the script needs to run once to create the file that tracks the DSM build number. +- Bug fix for drive models with multiple consecutive spaces in model name. Issue #559 v3.6.119 - Bug fix for "cat: /sys/block//sys/block/sata1/device/vendor: No such file or directory" errors. Issue #554 From 1324b62ce9245986309dafb7c76193cd99b86813 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 12 Feb 2026 11:12:46 +1100 Subject: [PATCH 683/694] Change whitespace trimming method for drive model --- syno_hdd_db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 364d98f..fed0553 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -1026,7 +1026,7 @@ getdriveinfo(){ # Get drive model hdmodel=$(cat "$1/device/model") - hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space + hdmodel=$(echo "$hdmodel" | sed 's/^[[:space:]]//;s/[[:space:]]$//') # trim leading and trailing white space # Fix dodgy model numbers fixdrivemodel "$hdmodel" From d25dd700b2de7888d1155bff4f379fdaa57a5df5 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 12 Feb 2026 15:19:26 +1100 Subject: [PATCH 684/694] Update script version and improve whitespace trimming --- syno_hdd_db.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index fed0553..2bad69d 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.120" +scriptver="v3.6.121" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1026,7 +1026,7 @@ getdriveinfo(){ # Get drive model hdmodel=$(cat "$1/device/model") - hdmodel=$(echo "$hdmodel" | sed 's/^[[:space:]]//;s/[[:space:]]$//') # trim leading and trailing white space + hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space # Fix dodgy model numbers fixdrivemodel "$hdmodel" From 68ec8ead61b645d46c5b7c5cd000fa00963891b0 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Thu, 12 Feb 2026 15:23:30 +1100 Subject: [PATCH 685/694] Bump version to v3.6.121 and add --reboot option Updated version number to v3.6.121 and added new option. --- CHANGES.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 11560e8..88e1814 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,8 +1,7 @@ -v3.6.120 +v3.6.121 - Added --reboot option to reboot the NAS after a DSM update where the build number has changed. - Only needed if NVMe volume or PCIe card need a 2nd reboot after DSM update. - Note: This version of the script needs to run once to create the file that tracks the DSM build number. -- Bug fix for drive models with multiple consecutive spaces in model name. Issue #559 v3.6.119 - Bug fix for "cat: /sys/block//sys/block/sata1/device/vendor: No such file or directory" errors. Issue #554 From ca75ef2dbca4f1ebceb2bece9fb3bc726808e312 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 13 Feb 2026 09:20:05 +1100 Subject: [PATCH 686/694] Update CHANGES.txt for version 3.6.122 Added bug fixes for drive models and NVMe drives with multiple consecutive spaces. --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 88e1814..ff41c94 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.6.122 +- Bug fix for drive models with multiple consecutive spaces in model name. Issue #559 +- Bug fix for nvme drives with multiple consecutive spaces in firmware version. + v3.6.121 - Added --reboot option to reboot the NAS after a DSM update where the build number has changed. - Only needed if NVMe volume or PCIe card need a 2nd reboot after DSM update. From b095f29ed77dbb61635c5f42534a26b922eccdf8 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 13 Feb 2026 09:20:50 +1100 Subject: [PATCH 687/694] Update script version and enhance whitespace handling Updated script version and improved whitespace trimming for drive model and firmware revision. --- syno_hdd_db.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 2bad69d..af48343 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.121" +scriptver="v3.6.122" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -1026,7 +1026,8 @@ getdriveinfo(){ # Get drive model hdmodel=$(cat "$1/device/model") - hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space + #hdmodel=$(printf "%s" "$hdmodel" | xargs) # trim leading and trailing white space (also replaces multiple spaces in model with 1 space) + hdmodel="$(printf "%s" "$hdmodel" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" # trim leading and trailing white space # Fix dodgy model numbers fixdrivemodel "$hdmodel" @@ -1066,13 +1067,15 @@ getdriveinfo(){ getm2info(){ # $1 is /sys/block/nvme0n1 etc nvmemodel=$(cat "$1/device/model") - nvmemodel=$(printf "%s" "$nvmemodel" | xargs) # trim leading and trailing white space + #nvmemodel=$(printf "%s" "$nvmemodel" | xargs) # trim leading and trailing white space (also replaces multiple spaces in model with 1 space) + nvmemodel="$(printf "%s" "$nvmemodel" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" # 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 + #nvmefw=$(printf "%s" "$nvmefw" | xargs) # trim leading and trailing white space (also replaces multiple spaces in model with 1 space) + nvmefw="$(printf "%s" "$nvmefw" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" # trim leading and trailing white space # Get drive GB size size_gb=$(get_size_gb "$1") From 923533fb24c3172395366d2151b580b628e6950d Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 14 Feb 2026 03:20:26 +1100 Subject: [PATCH 688/694] Fix options in getopt command --- syno_hdd_db.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index af48343..331f09b 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -116,8 +116,7 @@ args=("$@") # Check for flags with getopt if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ - ssd:,ihm,restore,showedits,noupdate,nodbupdate,m2,force,\ - incompatible,ram,pcie,wdda,email,autoupdate:,reboot,help,version,debug \ + ssd:,ihm,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,reboot,help,version,debug -- "$@")"; then -- "$@")"; then eval set -- "$options" while true; do From ae78f33140c2e4549e4123f2f62795efa71245ce Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 14 Feb 2026 18:03:12 +1100 Subject: [PATCH 689/694] Fix syntax error in getopt command --- syno_hdd_db.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 331f09b..bc33207 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -117,7 +117,6 @@ args=("$@") # Check for flags with getopt if options="$(getopt -o SIabcdefghijklmnopqrstuvwxyz0123456789 -l \ ssd:,ihm,restore,showedits,noupdate,nodbupdate,m2,force,incompatible,ram,pcie,wdda,email,autoupdate:,reboot,help,version,debug -- "$@")"; then - -- "$@")"; then eval set -- "$options" while true; do case "$1" in From 6083dab02ee45c614dc0d3d618b9f1afeb541a50 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 14 Feb 2026 18:18:58 +1100 Subject: [PATCH 690/694] Update for v3.6.122 --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index ff41c94..3005bc8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,7 @@ v3.6.122 - Bug fix for drive models with multiple consecutive spaces in model name. Issue #559 - Bug fix for nvme drives with multiple consecutive spaces in firmware version. +- Bug fix for options not working. Issue #559 and #563 v3.6.121 - Added --reboot option to reboot the NAS after a DSM update where the build number has changed. From e144b176d8ea0c59c518fe80ee10aa7022db8501 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 20 Feb 2026 08:07:18 +1100 Subject: [PATCH 691/694] Add v3.6.123 changes for WD Ultrastar drives Added a new version entry for v3.6.123 with a bug fix for WD Ultrastar drives. --- CHANGES.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 3005bc8..40da098 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +v3.6.123 +- Bug fix for WD Ultrastar drives that have "WDC " before the model name. Issue #559 + v3.6.122 - Bug fix for drive models with multiple consecutive spaces in model name. Issue #559 - Bug fix for nvme drives with multiple consecutive spaces in firmware version. From b2da9bdb44da3f2aa286cab5afd26da12e672b0b Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Fri, 20 Feb 2026 08:08:02 +1100 Subject: [PATCH 692/694] Update script version to v3.6.123 and improve help text Bug fix for WD Ultrastar drives that have "WDC " before the model name. Issue #559 --- syno_hdd_db.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index bc33207..4e3041d 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.122" +scriptver="v3.6.123" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -91,8 +91,9 @@ Options: For NAS with x86_64 CPUs only Installs IHM on '22 series and newer models (untested) --reboot Reboot after a DSM update when build number has changed - Only needed if NVMe volume or PCIe card need a 2nd - reboot after DSM update + Only works if script is running from a boot-up schedule + Only needed if NVMe volume or PCIe card need a 2nd + reboot after DSM update -h, --help Show this help message -v, --version Show the script version @@ -1002,9 +1003,15 @@ fixdrivemodel(){ hdmodel=${hdmodel#"Hitachi "} # Remove "Hitachi " from start of model name hdmodel=${hdmodel#"SAMSUNG "} # Remove "SAMSUNG " from start of model name hdmodel=${hdmodel#"FUJISTU "} # Remove "FUJISTU " from start of model name + + # Remove any leading spaces + var=$(echo "$var" | sed -e 's/^[[:space:]]*//') elif [[ $1 =~ ^'APPLE HDD '.* ]]; then # Old drive brands hdmodel=${hdmodel#"APPLE HDD "} # Remove "APPLE HDD " from start of model name + + # Remove any leading spaces + var=$(echo "$var" | sed -e 's/^[[:space:]]*//') fi } From c86e67b0a4bfea2dd075057a9e0181993413b32f Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 21 Feb 2026 10:37:43 +1100 Subject: [PATCH 693/694] Update CHANGES.txt for version 3.6.124 Added bug fixes for SATA M.2 drives in version 3.6.124. --- CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 40da098..fe91b64 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +v3.6.124 +- Bug fix for script trying to set write_mostly on SATA M.2 drives. Issue #567 +- Bug fix for script trying to use nvme command to get SATA M.2 drives' vendor id. Issue #567 + v3.6.123 - Bug fix for WD Ultrastar drives that have "WDC " before the model name. Issue #559 From 16344299bc2ea39a005103caf4e73b465845d5e4 Mon Sep 17 00:00:00 2001 From: Dave Russell <39733752+007revad@users.noreply.github.com> Date: Sat, 21 Feb 2026 10:43:40 +1100 Subject: [PATCH 694/694] Update script to v3.6.124 - Bug fix for script trying to set write_mostly on SATA M.2 drives. Issue #567 - Bug fix for script trying to use nvme command to get SATA M.2 drives' vendor id. Issue #567 --- syno_hdd_db.sh | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/syno_hdd_db.sh b/syno_hdd_db.sh index 4e3041d..14086d3 100644 --- a/syno_hdd_db.sh +++ b/syno_hdd_db.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.6.123" +scriptver="v3.6.124" script=Synology_HDD_db repo="007revad/Synology_HDD_db" scriptname=syno_hdd_db @@ -693,29 +693,37 @@ set_writemostly(){ if [[ ${1::2} == "sd" ]]; then # sda etc # md0 DSM system partition - echo "$1" > /sys/block/md0/md/dev-"${2}"1/state - # Show setting - echo -n " $2 DSM partition: " - cat /sys/block/md0/md/dev-"${2}"1/state + if [[ -d /sys/block/md0/md/dev-"${2}"1 ]]; then + echo "$1" > /sys/block/md0/md/dev-"${2}"1/state + # Show setting + echo -n " $2 DSM partition: " + cat /sys/block/md0/md/dev-"${2}"1/state + fi # md1 DSM swap partition - echo "$1" > /sys/block/md1/md/dev-"${2}"2/state - # Show setting - echo -n " $2 Swap partition: " - cat /sys/block/md1/md/dev-"${2}"2/state + if [[ -d /sys/block/md1/md/dev-"${2}"2 ]]; then + echo "$1" > /sys/block/md1/md/dev-"${2}"2/state + # Show setting + echo -n " $2 Swap partition: " + cat /sys/block/md1/md/dev-"${2}"2/state + fi else # sata1 or sas1 etc # md0 DSM system partition - echo "$1" > /sys/block/md0/md/dev-"${2}"p1/state - # Show setting - echo -n " $2 DSM partition: " - cat /sys/block/md0/md/dev-"${2}"p1/state + if [[ -d /sys/block/md0/md/dev-"${2}"p1 ]]; then + echo "$1" > /sys/block/md0/md/dev-"${2}"p1/state + # Show setting + echo -n " $2 DSM partition: " + cat /sys/block/md0/md/dev-"${2}"p1/state + fi # md1 DSM swap partition - echo "$1" > /sys/block/md1/md/dev-"${2}"p2/state - # Show setting - echo -n " $2 Swap partition: " - cat /sys/block/md1/md/dev-"${2}"p2/state + if [[ -d /sys/block/md1/md/dev-"${2}"p2 ]]; then + echo "$1" > /sys/block/md1/md/dev-"${2}"p2/state + # Show setting + echo -n " $2 Swap partition: " + cat /sys/block/md1/md/dev-"${2}"p2/state + fi fi } @@ -1136,7 +1144,11 @@ m2_drive(){ # Fix unknown vendor id if needed. GitHub issue #161 # "Failed to get disk vendor" from synonvme --vendor-get # causes "Unsupported firmware version" warning. - get_vid /dev/"$(basename -- "$1")" + + # Skip for models without nvme command + if which synonvme >/dev/null; then + get_vid /dev/"$(basename -- "$1")" + fi # Get M2 model and firmware version getm2info "$1" "$2"

`s4O$g% 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