ZPool, SMART, and UPS Status Report with TrueNAS Config Backup

Original Script By: joeschmuck
Modified By: bidelu0hm, melp, fohlsso2, onlinepcwizard, ninpucho, isentropik, rotx, dak180
Last Edited By: dak180

Current Version: v1.8

Preview of the output here:
When a resilver is in progress:
After the resilver is done:
When a scrub is in progess:


First a note for Scale users: the script mostly works on Scale. The one remaining issue is that Scale does not include the bc program that it uses to do most of its math; see the following bug reports for references: #5, #6, NAS-115175. I leave adding bc to Scale as an exercise for the user.


You should also configure your smart tests otherwise the script will not include smart test results and will generate an additional error unless you checked Hide Standard Error in the cron job.

Getting Started

Place the script under a user /root or in one of your pools.

Create a Cron Job with the following configuration:

Description: Run Smart Report
Command: /path/to/script/ -c /path/to/script/report.cfg
Run as: root
Schedule: Daily
Hide Standard Output: **Checked**
Hide Standard Error: **Unchecked**
Enabled: **Checked**

Click Submit and then Run Now.

A configuration file will be generated at /path/to/script/report.cfg

At a minimum, enter an email address for the report to be sent to and set defaultFile to 0 in the generated config file. Feel free to edit other user parameters as needed. Backup has been disabled by default so if it is required please set to true.

Once you have updated the config file, click Run Now again to generate your first report.



  • With smartctl 7.4+ use the new features.
  • Add a wear leveling stat to the SAS table for SAS SSDs.

v1.8 (dak180)

  • Accommodate both SSD and HDD temp settings
  • Keep SAS drives in their own section
  • Improved support for SAS and NVMe
  • Remove all awk
  • Add support for per drive overrides

v1.7.5 (dak180)

  • Add initial support for SAS drives

v1.7 (dak180)

  • Refactor to reduce dependence on awk
  • Use a separate config file
  • Add support for conveyance test

v1.6.5 (rotx)

  • HTML boundary fix, proper message ids, support for dma mailer
  • Better support for NVMe and SSD
  • Support for new smartmon-tools

v1.6 (isentropik)

  • Actually fixed the broken borders in the tables.
  • Split the SMART table into two tables, one for SSDs and one for HDDs.
  • Added several options for SSD reporting.
  • Modified the SSD table in order to capture relevant (seemingly) SSD data.
  • Changed ‘include SSD’ default to true.
  • Cleaned up minor formatting and error handling issues (tried to have the cell fill with “N/A” instead of non-sensical values).

v1.5 (ninpucho)

  • Added Frag%, Size, Allocated, Free for ZPool status report summary.
  • Added Disk Size, RPM, Model to the Smart Report
  • Added if statment so that if “Model Family” is not present script will use “Device Model”
    for brand in the SMART Satus report details.
  • Added Glabel Status Report
  • Removed Power-On time labels and added “:” as a separator.
  • Added Power-On format to the Power-On time Header.
  • Changed Backup deafult to false.

v1.4 (onlinepcwizard)

  • fixed the broken border on zpool status summary header
  • in statusOutput changed grep to scrub: instead of scrub
  • added elif for resilvered/resilver in progress and scrub in progress with (hopefully) som useful info fields
  • changed the email subject to include hostname and date & time
  • aaand fixed the parser


  • Added scrub duration column
  • Fixed for FreeNAS 11.1 (thanks reven!)
  • Fixed fields parsed out of zpool status
  • Buffered zpool status to reduce calls to script


  • Added switch for power-on time format
  • Slimmed down table columns
  • Fixed some shellcheck errors & other misc stuff
  • Added .tar.gz to backup file attached to email
  • (Still coming) Better SSD SMART support


  • Config backup now attached to report email
  • Added option to turn off config backup
  • Added option to save backup configs in a specified directory
  • Power-on hours in SMART summary table now listed as YY-MM-DD-HH
  • Changed filename of config backup to exclude timestamp (just uses datestamp now)
  • Config backup and checksum files now zipped (was just .tar before; now .tar.gz)
  • Fixed degrees symbol in SMART table (rendered weird for a lot of people); replaced with a *
  • Added switch to enable or disable SSDs in SMART table (SSD reporting still needs work)
  • Added most recent Extended & Short SMART tests in drive details section (only listed one before, whichever was more recent)
  • Reformatted user-definable parameters section
  • Added more general comments to code


  • Initial release
1 Like