diff --git a/hdddb/all/usr/bin/hdddb.sh b/hdddb/all/usr/bin/hdddb.sh index d40c010..ecd833a 100755 --- a/hdddb/all/usr/bin/hdddb.sh +++ b/hdddb/all/usr/bin/hdddb.sh @@ -29,7 +29,7 @@ # /var/packages/StorageManager/target/ui/storage_panel.js -scriptver="v3.5.98" +scriptver="v3.5.101" 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,9 +114,18 @@ 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 - break + if $(echo "${args[@]}" | grep -q -- '--ssd=restore'); then + ssd_restore=yes + fi + #break ;; -s|--showedits) # Show edits done to host db file showedits=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 @@ -566,6 +570,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 +738,35 @@ 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 + md0="/sys/block/md0/md/dev-" + md1="/sys/block/md1/md/dev-" + if [[ ${idrive::2} == "sd" ]]; then + # sda etc + # 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 + # 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 + done + fi + else echo "Nothing to restore." fi @@ -1727,43 +1798,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) @@ -2201,4 +2235,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 \ No newline at end of file +exit diff --git a/hdddb/install.sh b/hdddb/install.sh index b1288f1..49dfbb9 100755 --- a/hdddb/install.sh +++ b/hdddb/install.sh @@ -23,7 +23,7 @@ After=multi-user.target [Service] Type=oneshot RemainAfterExit=yes -ExecStart=/usr/bin/hdddb.sh -nfrewp +ExecStart=/usr/bin/hdddb.sh -nfreS [Install] WantedBy=multi-user.target diff --git a/ups/install.sh b/ups/install.sh new file mode 100755 index 0000000..d9c4c1f --- /dev/null +++ b/ups/install.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env ash +# +# Copyright (C) 2023 AuxXxilium and Ing +# +# This is free software, licensed under the MIT License. +# See /LICENSE for more information. +# + +if [ "${1}" = "late" ]; then + echo "Installing addon ups - ${1}" + mkdir -p "/tmpRoot/usr/arc/addons/" + cp -vf "${0}" "/tmpRoot/usr/arc/addons/" + + FILE="/tmpRoot/usr/syno/bin/synoups" + [ ! -f "${FILE}.bak" ] && cp -f "${FILE}" "${FILE}.bak" + + sed -i 's|/usr/syno/sbin/synopoweroff.*$|/usr/syno/sbin/synopoweroff|g' "${FILE}" + +elif [ "${1}" = "uninstall" ]; then + echo "Installing addon ups - ${1}" + + FILE="/tmpRoot/usr/syno/bin/synoups" + [ -f "${FILE}.bak" ] && mv -f "${FILE}.bak" "${FILE}" +fi diff --git a/ups/manifest.yml b/ups/manifest.yml new file mode 100644 index 0000000..b7fa5b4 --- /dev/null +++ b/ups/manifest.yml @@ -0,0 +1,19 @@ +version: 1 +name: ups +description: "Force UPS to shut down in standby mode." +system: false +beta: false +all: + install-script: "install.sh" + copy: "" +apollolake: true +broadwell: true +broadwellnk: true +broadwellnkv2: true +broadwellntbap: true +denverton: true +geminilake: true +purley: true +v1000: true +r1000: true +epyc7002: true \ No newline at end of file