mirror_zfs/cmd/zed/zed.d
Brian Behlendorf 6b95031f56
zed: Add deadman-slot_off.sh zedlet
Optionally turn off disk's enclosure slot if an I/O is hung
triggering the deadman.

It's possible for outstanding I/O to a misbehaving SCSI disk to
neither promptly complete or return an error.  This can occur due
to retry and recovery actions taken by the SCSI layer, driver, or
disk.  When it occurs the pool will be unresponsive even though
there may be sufficient redundancy configured to proceeded without
this single disk.

When a hung I/O is detected by the kmods it will be posted as a
deadman event.  By default an I/O is considered to be hung after
5 minutes.  This value can be changed with the zfs_deadman_ziotime_ms
module parameter.  If ZED_POWER_OFF_ENCLOSURE_SLOT_ON_DEADMAN is set
the disk's enclosure slot will be powered off causing the outstanding
I/O to fail.  The ZED will then handle this like a normal disk failure.
By default ZED_POWER_OFF_ENCLOSURE_SLOT_ON_DEADMAN is not set.

As part of this change `zfs_deadman_events_per_second` is added
to control the ratelimitting of deadman events independantly of
delay events.  In practice, a single deadman event is sufficient
and more aren't particularly useful.

Alphabetize the zfs_deadman_* entries in zfs.4.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #16226
2024-05-29 10:46:41 -07:00
..
.gitignore systemd mount generator and tracking ZEDLET 2018-04-06 14:11:09 -07:00
all-debug.sh zed: lets: all-debug: printenv -> env 2022-04-01 17:59:06 -07:00
all-syslog.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
data-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
deadman-slot_off.sh zed: Add deadman-slot_off.sh zedlet 2024-05-29 10:46:41 -07:00
generic-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
history_event-zfs-list-cacher.sh.in Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
Makefile.am zed: Add deadman-slot_off.sh zedlet 2024-05-29 10:46:41 -07:00
pool_import-led.sh Enclosure LED fixes 2017-02-10 16:09:45 -08:00
README Fix broken URL 2017-02-15 11:15:38 -08:00
resilver_finish-notify.sh OpenZFS 5997 - FRU field not set during pool creation and never updated 2016-08-12 13:06:48 -07:00
resilver_finish-start-scrub.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
scrub_finish-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
statechange-led.sh zed: Allow autoreplace and fault LEDs for removed vdevs 2023-09-18 16:25:58 -07:00
statechange-notify.sh Change ZEVENT_POOL_GUID to ZEVENT_POOL to display pool names 2022-12-13 17:26:10 -08:00
statechange-slot_off.sh zed: fix typo in variable ZED_POWER_OFF_ENCLO*US*RE_SLOT_ON_FAULT 2023-12-08 16:32:35 -08:00
trim_finish-notify.sh Add ShellCheck's --enable=all inside cmd/ 2022-01-06 16:07:54 -08:00
vdev_attach-led.sh Fix statechange-led.sh & unnecessary libdevmapper warning 2016-10-25 11:05:30 -07:00
vdev_clear-led.sh Multipath autoreplace, control enclosure LEDs, event rate limiting 2016-10-19 12:55:59 -07:00
zed-functions.sh Add Gotify notification support to ZED 2024-01-09 09:49:30 -08:00
zed.rc zed: Add deadman-slot_off.sh zedlet 2024-05-29 10:46:41 -07:00

Shell scripts are the recommended choice for ZEDLETs that mostly call
other utilities and do relatively little data manipulation.

Shell scripts MUST work on both bash and dash.

Shell scripts MUST run cleanly through ShellCheck:
  http://www.shellcheck.net/

General functions reside in "zed-functions.sh".  Use them where applicable.

Additional references that may be of use:

  Google Shell Style Guide
  https://github.com/google/styleguide/blob/gh-pages/shell.xml

  Dash as /bin/sh
  https://wiki.ubuntu.com/DashAsBinSh

  Common shell script mistakes
  http://www.pixelbeat.org/programming/shell_script_mistakes.html

  Filenames and Pathnames in Shell: How to do it Correctly
  http://www.dwheeler.com/essays/filenames-in-shell.html

  Autoconf: Portable Shell Programming
  https://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell

Please BE CONSISTENT with the existing style, check for errors,
minimize dependencies where possible, try to be portable,
and comment anything non-obvious.  Festina lente.