]> ###2022.12.21 - Set max version to 6.12.0-beta3 - Removed Unraid-Plugin-Helper ###2022.07.21 - Version detection from package via GitHub API - Save md5 in packages directory ###2022.07.19 - Fixed bug for ZFS in Plugin Update Helper ###2022.07.17 - Necessary changes for unRAID 6.11+ ###2022.05.06 - When notifications via Mail is setup don't send message about download progress anymore ###2022.04.11 - Removed warning message from console on boot ###2022.01.31 - Added automatic scrub from all ZFS pools after unclean shutdown - Added option to turn of automatic scrub after unclean shutdown to settings file ###2022.01.20 - Changed back to Kernel detection instead of unRAID version detection - Changed to Github Releases for ZFS Packages ###2021.08.23 - Added the Plugin Update Helper from ich777 ###2020.11.14 - Made changes regarding modules instroduced in 6.9.0-beta35 ###2020.10.23 - Added the ability to download unstable builds of ZFS by having a file named /boot/config/plugins/unRAID6-ZFS/USE_UNSTABLE_BUILDS ###2020.06.19 - Updated the version number to clear things up. The plugin does not need to be updated for new builds - the plugin checks for available builds on boot ###2020.01.09 - Rewrote the plugin so it does not need to be updated everytime unRAID is upgraded. It checks if there is already a new build available and installs that - For simplicity sake I removed support for versions older than 6.6.6 ###2019.12.11 - Updated for unRAID 6.8.0 (kernel 4.19.88) ###2019.12.07 - Updated for unRAID 6.8.0-rc9 (kernel 4.19.88) ###2019.12.05 - Updated for unRAID 6.8.0-rc8 (kernel 4.19.87) ###2019.11.23 - Updated for unRAID 6.8.0-rc7 (kernel 5.3.12) ###2019.11.07 - Updated for unRAID 6.8.0-rc6 (kernel 5.3.11) ###2019.11.01 - Updated for unRAID 6.8.0-rc5 (kernel 5.3.8) ###2019.10.24 - Updated for unRAID 6.8.0-rc4 (kernel 5.3.7) ###2019.10.12 - No changes for unRAID 6.8.0-rc3 (kernel 5.3.6) ###2019.10.12 - Updated for unRAID 6.8.0-rc1 (kernel 5.3.6) - Updated to zfs-0.8.2 ###2019.07.11 - Updated for unRAID 6.7.2 (kernel 4.19.56) ###2019.06.24 - Updated for unRAID 6.7.1 (kernel 4.19.55) - Updated to zfs-0.8.1 - Removed SPL - The SPL source is now included in the ZFS repository removing the need for separate packages ###2019.05.16 - Updated for unRAID 6.7.0 (kernel 4.19.41) - Updated to spl-0.7.13 / zfs-0.7.13 ###2019.03.07 - Just a version bump to align with 6.6.7 (same kernel 4.18.20) ###2018.12.05 - Updated for unRAID 6.6.6 (kernel 4.18.20) - Updated to Zfs and Spl 0.7.12 ###2018.11.10 - Updated for unRAID 6.6.5 (kernel 4.18.17) ###2018.10.22 - Updated for unRAID 6.6.3 (kernel 4.18.15) ###2018.10.14 - Updated for unRAID 6.6.2 (kernel 4.18.14) ###2018.09.28 - Updated for unRAID 6.6.1 (kernel 4.18.10) ###2018.09.21 - Updated for unRAID 6.6.0 (kernel 4.18.8) - Updated to zfs and spl 0.7.11 ###2018.05.16 - Updated for unRAID 6.5.2 (kernel 4.14.40) - Updated to zfs and spl 0.7.9 ###2018.04.25 - Updated for unRAID 6.5.1 (kernel 4.14.35) - Updated to zfs and spl 0.7.8 ###2018.03.14 - Updated for unRAID 6.5.0 (kernel 4.14.26) ###2018.02.07 - Updated for unRAID 6.4.1 (kernel 4.14.16) - Updated to zfs and spl 0.7.6 - Stopped using custom bzmodules ###2018.01.16 - Updated for unRAID 6.4 (big thanks to rinseaid) - Updated to zfs and spl 0.7.5 (kernel 4.14.13) - Removed support for 6.2.X and 6.3.0 ###2017.10.11 - Updated to zfs and spl 0.7.2 (kernel 4.9.30) - A collection of great features got added in the 0.7 branch: https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0 ###2017.05.27 - Updated for unRAID 6.3.5 (kernel 4.9.30) - Removed support for 6.2.1 ###2017.05.21 - Updated for unRAID 6.3.4 (kernel 4.9.28) - Removed support for 6.1.9 and 6.2.0 ###2017.03.31 - Updated for unRAID 6.3.3 (kernel 4.9.19) ###2017.02.20 - Updated for unRAID 6.3.2 (kernel 4.9.10) ###2017.02.05 - Updated for unRAID 6.3.1 (kernel 4.9.8) ###2017.02.05 - Updated for unRAID 6.3 (kernel 4.9.7) - Updated to spl-0.6.5.9 / zfs-0.6.5.9 - Removed all 6.3 rc versions ###2016.11.07 - Updated to 6.2.4 (kernel 4.4.30) - Removed all 6.2 rc versions ###2016.10.25 - Updated to 6.2.2 (kernel 4.4.26) - Removed 6.1.8 ###2016.10.25 - Updated to 6.3.rc3 (kernel 4.8.3) ###2016.09.13 - Updated to 6.2.1 (kernel 4.4.23) ###2016.09.13 - Updated to spl-0.6.5.8 / zfs-0.6.5.8 - Updated to 6.2.0-stable (kernel 4.4.19) ###2016.09.13 - Updated to 6.2.0-rc5 (kernel 4.4.19) - Removed support for all 6.2.0 beta versions ###2016.08.23 - Updated to 6.2.0-rc4 (kernel 4.4.18) - Removed support for 6.2.0 beta 18-19 ###2016.07.14 - Updated to 6.2.0-rc2 (kernel 4.4.15) ###2016.07.12 - Updated to 6.2.0-rc1 (kernel 4.4.14) ###2016.06.14 - Updated to 6.2.0-beta23 (kernel 4.4.13) ###2016.06.10 - Updated to 6.2.0-beta22 (kernel 4.4.13) - Remove support for 6.1.7 - Update to spl-0.6.5.7 / zfs-0.6.5.7 ###2016.04.06 - Updated to 6.2.0-beta21 (kernel 4.4.6) ###2016.03.31 - Updated to 6.2.0-beta20 (kernel 4.4.6) - Updated to zfs 0.6.5.6 and spl 0.6.5.6 - Removed support for 6.1.4 - 6.1.6 ###2016.03.21 - remove support for 6.1.2 - 6.1.3 ###2016.03.21 - Update to 6.2.0-beta19 (kernel 4.4.5) ###2016.03.12 - Only download needed tgz (Thanks gfjardim) - Remove old tgz ###2016.03.11 - Change plugin to support unRAID 6.1.2 - 6.2.0-beta18 (kernel 4.4.4) - Update to spl-0.6.5.5 / zfs-0.6.5.5 ###2016.03.06 - update to unRAID 6.1.9 (kernel 4.1.18) ###2016.02.10 - update to unRAID 6.1.8 (kernel 4.1.17) ###2016.01.18 - Remove old packages ###2016.01.18 - Change path of the zfs tools ###2016.01.18 - update to unRAID 6.1.7 (kernel 4.1.15) ###2015.11.18 - document unRAID 6.1.5 - 6.1.6 (no change in kernel) ###2015.11.18 - update to unRAID 6.1.4 (kernel 4.1.13) ###2015.10.24 - update to spl-0.6.5.3 / zfs-0.6.5.3 ###2015.09.21 - update to unRAID 6.1.3 (kernel 4.1.7) ###2015.09.20 - update to spl-0.6.5.1 / zfs-0.6.5.1 ###2015.09.19 - OpenZFS version 0.6.5 for unRAID 6.1.2 (and all versions running kernel 4.1.5-unRAID) **ZFS for unRAID 6** The native Linux kernel port of the ZFS filesystem. Allows you to use ZFS format on non Array disks. This plugin is console only (no GUI)! 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 mP+LK0nEAgTYvmcvo26fyQcN28lOxFDlM6qKtYaKslJKiosQzaiuqaW8sgrnPSLC55TQeVrnZDHz mss4rldXImsbtnPpnfexbdfHBIHBGMPfb/gxvfI7EqnbvJ2Lb7uXvS1JInlZCR7+5ZUUdu5AZG3D Nr5381/w3hOGno5tW/HA5Cvold+ByDtrNzCu4gH2NLUQWAMIn1JVrDVUlJVSUlyEaMYLS1dSXlmF VwURhH1UwQi0pEMGFhYw4bxvE7OWyqf/wVur15EVD1CFtHMcU9CZay46A2st0598mcXvryM7HiPS nEoz5OgeXHX+MELnqHh0IavqNxOzFhFoSYWccFQPyr57GmnnmP7UKyyrqycrFuAVRPiEkqGKMUJF WSlnDuqHeO914TurKJ9eRdo5jBgQPqOqiAjp0BFYg4iQDh2xwAIKCKpK6Dwxa0CEZDokKxbgVYkY EVrSIYlYAKqknSewBhEBFBDSoSMWWFSV0HligUVVERE+o+DVE4tZKq68mNOP64toxjtrNzJ+2lz2 NDUTswav/AsjglclYkTwquzPiOBViRgRvCr7MyJ4VSJGBK/K/owIXpWIEcGr8mVGIO08bXKymTFx NAN7dUWcc5p2ngl/fJDnlqygdW42RoTDkVdlT2MzZx/fn8qfXUJgDeK9VxFhw9ad3DD3cVaub6A5 lUIVEA4PCiKQHY/Tr3s+N4++kG6d2qGqiO6DiKCqLK+rZ/uevXhVRDgsqIIRoUPrPAYUFiAiqCoi gmgGGapKREQ4nKkqEREh8n/80SG09T7rVQAAAABJRU5ErkJggiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA= download() { # Download ZFS package if wget -q -nc --show-progress --progress=bar:force:noscroll -O "&packages;/${KERNEL_V%%-*}/${LAT_PACKAGE}" "${DL_URL}/${LAT_PACKAGE}" ; then wget -q -nc --show-progress --progress=bar:force:noscroll -O "&packages;/${KERNEL_V%%-*}/${LAT_PACKAGE}.md5" "${DL_URL}/${LAT_PACKAGE}.md5" if [ "$(md5sum &packages;/${KERNEL_V%%-*}/${LAT_PACKAGE} | awk '{print $1}')" != "$(cat &packages;/${KERNEL_V%%-*}/${LAT_PACKAGE}.md5 | awk '{print $1}')" ]; then echo echo "----ERROR - ERROR - ERROR - ERROR - ERROR - ERROR - ERROR----" echo "-----------------------CHECKSUM ERROR!-----------------------" rm -rf &plugin; &emhttp; exit 1 fi echo echo "----Successfully downloaded ZFS package, please wait...!-----" else echo echo "----ERROR - ERROR - ERROR - ERROR - ERROR - ERROR - ERROR----" echo "-----------------Can't download ZFS package------------------" rm -rf &plugin; &emhttp; exit 1 fi } check() { if ! ls -1 &packages;/${KERNEL_V%%-*}/ | grep -q "${PACKAGE}" ; then echo echo "---------Downloading ZFS v$(echo $LAT_PACKAGE | cut -d '-' -f2), please wait...!----------" echo "---This could take some time, please don't close this window!---" download else echo echo "----------------ZFS v$(echo $LAT_PACKAGE | cut -d '-' -f2) found locally!-----------------" fi } install() { # Install ZFS /sbin/installpkg "&packages;/${KERNEL_V%%-*}/${PACKAGE}*.tgz" /sbin/depmod -a } activate() { # Enable ZFS and import all ZFS pools /sbin/modprobe zfs zpool import -a >/dev/null 2>&1 # Fix for the icon chmod 755 /usr/local/emhttp/plugins/unRAID6-ZFS/ } get_versions() { # Check if unstable versions are available and fall back to stable if no unstable detected if [ "$UNSTABLE_BUILDS" == "true" ]; then AVAIL_V="$(wget -qO- https://api.github.com/repos/Steini1984/unRAID6-ZFS/releases/tags/${KERNEL_V} | jq -r '.assets[].name' | grep "${PACKAGE}" | grep -E -v '\.md5$' | sort -V)" if [ -z "$(echo "$AVAIL_V" | grep -E "rc|beta")" ]; then echo echo "--------------No unstable version from ZFS for---------------" echo "---Kernel v${KERNEL_V%%-*} found, falling back to stable!----" sed -i '/unstable_packages=/c\unstable_packages=false' "&plugin;/settings.cfg" AVAIL_V="$(echo "$AVAIL_V" | grep -v -E "rc|beta")" else AVAIL_V="$(echo "$AVAIL_V" | grep -E "rc|beta")" fi else AVAIL_V="$(wget -qO- https://api.github.com/repos/Steini1984/unRAID6-ZFS/releases/tags/${KERNEL_V} | jq -r '.assets[].name' | grep -E "${PACKAGE}" | grep -E -v '\.md5$' | sort -V | grep -v -E "rc|beta")" fi } # Define Variables KERNEL_V="$(uname -r)" PACKAGE="zfs" DL_URL="https://github.com/Steini1984/unRAID6-ZFS/releases/download/$KERNEL_V" # Create packages directory if non existent if [ ! -d "&packages;/${KERNEL_V%%-*}" ]; then mkdir -p "&packages;/${KERNEL_V%%-*}" fi # Create settings file if not found if [ ! -f "&plugin;/settings.cfg" ]; then echo 'check_for_updates=true unstable_packages=false unclean_shutdown_scrub=true' > "&plugin;/settings.cfg" fi # Add missing entries to settings file if not exists if [ ! "$(grep "unclean_shutdown_scrub=" &plugin;/settings.cfg)" ]; then echo "unclean_shutdown_scrub=true" >> &plugin;/settings.cfg fi # Get variables for update check and unstable builds UPDATE_CHECK="$(cat &plugin;/settings.cfg | grep "check_for_updates" | cut -d '=' -f2)" UNSTABLE_BUILDS="$(cat &plugin;/settings.cfg | grep "unstable_packages" | cut -d '=' -f2)" # Move old package directory to new package directory to be compliant with 6.11 if find &packages; -maxdepth 1 -type f -name "*.tgz" 2>/dev/null ; then if [ ! -d "&packages;/${KERNEL_V%%-*}" ]; then mkdir -p "&packages;/${KERNEL_V%%-*}" fi mv $(find &packages; -maxdepth 1 -type f -name "*.tgz") &packages;/${KERNEL_V%%-*}/ 2>/dev/null fi # Get local package version if available CUR_V="$(ls -p &packages;/${KERNEL_V%%-*} 2>/dev/null | grep -E -v '\.md5' | sort -V | tail -1)" # Check if update check is enabled and set version if [ "$UPDATE_CHECK" != "true" ]; then if [ -z "$CUR_V" ]; then get_versions LAT_PACKAGE="$(echo "$AVAIL_V" | sort -V | tail -1)" if [ -z "$LAT_PACKAGE" ]; then echo echo "----ERROR - ERROR - ERROR - ERROR - ERROR - ERROR - ERROR----" echo "---Can't get latest ZFS version and found no local package---" rm -rf &plugin; &emhttp; exit 1 fi else LAT_PACKAGE="${CUR_V}" fi else get_versions LAT_PACKAGE="$(echo "$AVAIL_V" | sort -V | tail -1)" if [ -z "$LAT_PACKAGE" ]; then if [ -z "$CUR_V" ]; then echo echo "----ERROR - ERROR - ERROR - ERROR - ERROR - ERROR - ERROR----" echo "---Can't get latest ZFS version and found no local package---" rm -rf &plugin; &emhttp; exit 1 else LAT_PACKAGE="${CUR_V}" echo echo "---Can't get latest ZFS version, using local ZFS package v$(echo $LAT_PACKAGE | cut -d '-' -f2)!---" fi fi fi # Check for old packages rm -rf $(ls -d &packages;/* | grep -v "${KERNEL_V%%-*}") rm -rf $(find &packages;/${KERNEL_V%%-*}/ -type f -maxdepth 1 | grep -v "${KERNEL_V%%-*}") rm -rf $(find &packages;/${KERNEL_V%%-*}/ -type f -maxdepth 1 | grep -v "${LAT_PACKAGE}") # Check for old packages and if ZFS is available locally check # Check if package is already installed, if not install it, and activate it if ! modinfo zfs -0 >/dev/null 2>&1 ; then echo echo "----------Installing ZFS v$(echo $LAT_PACKAGE | cut -d '-' -f2), please wait...!----------" install >/dev/null activate >/dev/null echo echo "----------Installation of ZFS v$(echo $LAT_PACKAGE | cut -d '-' -f2) successful!----------" echo else activate >/dev/null echo echo "----------Installation of ZFS v$(echo $LAT_PACKAGE | cut -d '-' -f2) successful!----------" echo fi # Get zpools and scrub them if unclean shutdown was detected depending if enabled or not if [ "$(grep "unclean_shutdown_scrub=" &plugin;/settings.cfg | cut -d '=' -f2)" == "true" ]; then #Create scrub_finish-notify.sh mkdir -p /etc/zfs/zed.d cat << EOF > /etc/zfs/zed.d/scrub_finish-notify.sh #!/bin/bash healthy="\$("\${ZPOOL}" status -x "\${ZEVENT_POOL}" | grep "'\${ZEVENT_POOL}' is healthy")" if [ -z "\${healthy}" ]; then extra="-i alert -l https://forums.unraid.net/topic/41333-zfs-plugin-for-unraid/" message="ZFS Scrub for Pool: \${ZEVENT_POOL} finished! Pool degraded! Click this message to go to the ZFS support thread on the unRAID Forums!" else message="ZFS Scrub for Pool: \${ZEVENT_POOL} finished! Pool is healthy!" fi /usr/local/emhttp/plugins/dynamix/scripts/notify -e "unRAID-ZFS" -d "\${message}" \${extra} EOF chmod 755 /etc/zfs/zed.d/scrub_finish-notify.sh echo "zed -d /etc/zfs/zed.d" | at now > /dev/null 2>&1 if [ ! $(pidof emhttpd) ] && [ -f /boot/config/forcesync ]; then ZPOOLS="$(zpool list -o name | tail -n +2)" echo echo "Unclean shutdown detected, starting ZFS Scrub for Pool(s): ${ZPOOLS//$'\n'/, }!" echo /usr/local/emhttp/plugins/dynamix/scripts/notify -e "unRAID-ZFS" -d "Unclean shutdown detected, started Scrub for Pool(s): ${ZPOOLS//$'\n'/, }!" while read -r line do echo "zpool scrub $line" | at now > /dev/null 2>&1 done <<< "${ZPOOLS}" fi fi echo "+==============================================================================" echo "| Uninstalling OpenZFS" echo "+==============================================================================" # Remove plugin related files rm -rf &emhttp; rm -rf &plugin; echo echo "OpenZFS plugin uninstalled. ZFS will be active until next reboot!"