Hardware failures and RMAs
Seventeen faults in a fleet built from used enterprise gear, and the check each one left behind.
Node0’s hardware story starts with a purchase decision: thirteen ex-datacenter Supermicro chassis bought as cheap pulls, plus drives sold as refurbished and never run. Everything in this theme follows from that. Buying used buys you capacity at a price that makes a home datacenter possible, and it buys you a defect rate no one would accept from new hardware, firmware you cannot change, and parts whose history you do not know.
The order is roughly the order of a build. Two days before the racks were touched, a NixOS install on a small host taught the first lesson of the set (1.6), and it is the theme’s shape in miniature: a symptom that appeared only under load, read as dying hardware, that turned out to be a configuration artefact. Then the three days of bring-up, 20260901 to 20260903 (1.1), with their bill of dead parts, the board that needed two replacements before it was right (1.2), and a vendor tool that under-reported and nearly cost real money (1.3). From 20260906 the fleet was carrying data, and the faults changed character: hosts that hung with nothing left to say (1.4), network cards that failed in several unrelated ways in the same week (1.7, 1.8), drives and bays and controllers that each lied in their own dialect (1.9, 1.10, 1.11), a transfer switch that answered everything except the question that mattered (1.12). The middle of the month brought a hypervisor fenced by a five-day-old warning nobody was reading (1.13), a drive that died at 297 hours into a pool that did not care (1.14), half a KVM that stopped accepting keystrokes (1.15), and a laptop that still switches itself off every five days (1.16). Two of these are still open.
What they have in common is not the hardware. It is that in almost every case something was reporting healthy while being broken: a link up at a hundredth of its speed, a SMART table with no column for the failure, a management card answering every command but the one that matters, a log line watched on one host that was true of four. The counter-habit runs through the whole theme: identify parts by serial rather than by slot or letter, substitute a known-good part rather than reason about a suspect one, and end a job with a check’s output rather than a person’s confidence (1.5, 1.17). The last lesson, added on 20260922 at Christoph’s request, is the count the others add up to: storage failed early and more than anything else, and new storage earns trust by time under load, not by a health check at rest (1.18).
One more thing runs through the theme without a lesson of its own. Almost every incident here was diagnosed by an agent, and an agent iterates on configuration in seconds but pays for every step that needs hands with a person’s time and a host outage around it. The diagnoses that took a week (1.2, 1.7) took a week for that reason. The practice that came out of it, rule 24, is to exhaust what software can rule out first and then batch the hands-on work into one ordered visit.
Declined #
- A macOS quirk that writes hidden companion files onto FAT32 media and breaks firmware updates. The triggering incident was a desktop 3D printer, out of scope here, and the mechanism has not yet recurred on Node0’s own USB media prep.
- A macOS installer that crashes when built across too large a version gap: documented on Christoph’s personal laptops, with no Node0 device tied to it.
- A Ceph hard drive condemned in one bay and then cleared twice on retest, in two bays on two hosts, 20260904 to 20260907. It is inconclusive, held as an unresolved marginal case, and it changed nothing that lesson 1.17’s testing discipline does not already cover.
- A slot-7 NVMe capacity expansion on unraid1, 20260910 to 20260911: a routine addition in a maintenance window, with no fault, no new check and no rule.
- A hypervisor’s original RAID card, dead on arrival during initial bring-up: one of the three cards already counted in lesson 1.1’s dead-on-arrival figures, not a separate story.
- Two servers’ management controllers returning 401 to Redfish despite correct IPMI credentials. This is open and uncosted, and those hosts sit outside this theme’s device list.
- PDU fuses that give no visible sign of having blown, and the topology and terminology of UPS battery packs, are real hardware lessons. They belong to power and environment.
- A bare-metal reinstall reproduced a byte-identical system closure. It is a strong result, but it demonstrates software determinism rather than a hardware failure, so it sits with operations. The power-off mystery from the same host is lesson 1.16.
The lessons, in order
- 1.1What thirteen pulled servers actually cost20260901 to 20260903as-is
- 1.2Board damage an elimination tree cannot see: ceph7's three motherboards20260902 to 20260911after redaction
- 1.3A settings dump that skips a whole menu20260903as-is
- 1.4Ceph hosts hang with no OS-side trace20260906as-is
- 1.5Identity lives on the drive or the card, never the board20260905 to 20260919after redaction
- 1.6Two NICs on one installer subnet look exactly like a crashing host20260830 to 20260831after redaction
- 1.7Three X540 NICs die in one week, three different reasons20260907 to 20260910after redaction
- 1.8The USB network adapter that was actually a flash drive in disguise20260908after redaction
- 1.9HGST drives hide their worst counters, and a reboot can fake a SMART page20260909 to 20260910after redaction
- 1.10A dirty bay connector wears two different disguises20260906 to 20260912after redaction
- 1.11An NVMe controller can die and leave no evidence20260910 and 20260917after redaction
- 1.12ats6's application link died on its own management card20260908 to 20260911after redaction
- 1.13A five-day-old battery warning fenced a hypervisor20260915after redaction
- 1.14A raidz3 absorbed an 18 TB drive's sudden death without losing a byte20260915after redaction
- 1.15Half a KVM stopped taking keystrokes, and the fix is a new KVM20260918, open as of 20260920after redaction
- 1.16A laptop loses power exactly every five days, and the reason is out of Linux's reach20260906 to ongoing, open as of 20260920after redaction
- 1.17Proving an RMA: what Node0 learned by doing it20260904 to 20260916 (the resulting policy is ongoing)after redaction
- 1.18Give storage time to prove itself20260901 to 20260917as-is
Source: node0 lessons v0.1, section 1. Sanitized: checklist v0.1, 20260921; voice pass 20260921. Part of oznog.com/node0.
