diff --git a/02-DECISIONS/0256-a-machines-hardware-condition-is-read-by-one-module-on-every-machine-and-a-fault-is-said-through-its-health.md b/02-DECISIONS/0256-a-machines-hardware-condition-is-read-by-one-module-on-every-machine-and-a-fault-is-said-through-its-health.md index c386ba6e..26e99be0 100644 --- a/02-DECISIONS/0256-a-machines-hardware-condition-is-read-by-one-module-on-every-machine-and-a-fault-is-said-through-its-health.md +++ b/02-DECISIONS/0256-a-machines-hardware-condition-is-read-by-one-module-on-every-machine-and-a-fault-is-said-through-its-health.md @@ -168,12 +168,16 @@ as not read, never as cool. Nothing here conflicts with GENESIS. - The module installs a package (`smartmontools`) for `smartctl`, and runs two processes of its own as root, each writing one file under the runtime directory and nothing else. It does not run `smartd`. - **A drive is not woken by the module, as far as the drive can say so.** Each read is asked with - `-n standby`, and smartctl stops without reading when the drive says it is in standby or asleep (an ATA - drive by its power mode, a SAS drive or one the operating system powered down by smartctl's own words). - smartctl is told the drive's kind (`-d nvme`, `sat` or `scsi`) where it is known, so it does not probe a - drive to find out. A drive that cannot say whether it is asleep (a USB bridge that does not pass the - question on) is not read at all, and is said as not read. What remains: a drive of a kind the module - cannot tell is read with smartctl's own detection. + `-n standby`, and smartctl stops without reading when the drive says it is in standby or asleep. An ATA + drive says it by its power mode (STANDBY, STANDBY_Y, SLEEP). A SAS drive, or one the operating system + powered down, says it in smartctl's own words, "Device is in mode, exit(2)", where a SAS mode + holds spaces (STANDBY BY TIMER, STANDBY_Y BY COMMAND, LOW POWER); the module takes every such mode, and + an idle mode never stops smartctl. smartctl is told the drive's kind (`-d nvme`, `sat` or `scsi`) where + it is known, so it does not probe a drive to find out. A drive behind USB is always told `sat`: one + behind a USB-to-NVMe enclosure or a vendor's own bridge does not answer to it, and is said as not read. + A drive that cannot say whether it is asleep (a USB bridge that does not pass the question on) is not + read at all, and is said as not read. What remains: a drive of a kind the module cannot tell (a virtual + disk, a memory card) is read with smartctl's own detection. - **Reading a drive may keep it from spinning down.** Reading SMART from an awake drive can restart its standby timer, so a drive read more often than its timer is set for never reaches standby. Whether the servers' drives are set to spin down is not known: no mesh tool reads a drive's standby timer or power @@ -184,7 +188,12 @@ as not read, never as cool. Nothing here conflicts with GENESIS. longer than an hour can still be kept awake. Reading the power mode and the timer is a follow-up for this module's tools. - **A drive that stops answering may look asleep**, and is then HIGH after a day, never unhealthy (rule - 4). A drive whose read hangs instead is unhealthy within a minute of its bound. + 4). A drive whose read hangs instead is unhealthy in about two to three minutes: its read is said once + it is past its 52 s bound, and the health check needs two looks 60 s apart to be unhealthy. +- **Known limits of a stuck read.** A smartctl stuck in the kernel cannot be ended, and outlives the + drive reader: a restarted reader starts a new read of that drive, which may stick beside the first. The + reads of all drives run at once, with no cap per controller or bridge; a server with many drives on one + controller asks it all at once, once an hour. ## Follow-ups