]> ###2026.10.19 - Front-panel bay layout: Supermicro backplanes (recognised by Supermicro's SAS address prefix 50030480 or an SMC SES vendor, and their bay count) are drawn as the chassis front with Supermicro's printed bay numbers: SC846/SC847 front (BPN-SAS3-846EL, 24 bays, 4 columns of 6), SC836 (BPN-SAS3-836EL, 16 bays) and SC826 (BPN-SAS3-826EL, 12 bays, numbered 1-12), bay 0 (or 1) at the bottom left, counting up each column. SC216 (24 bays in a row) can be picked by hand. - Each shelf's layout can be changed on the page (Auto, a chassis, or the plain grid in SES order); the choice is kept in /boot/config/plugins/storage-topology/layouts.json. - Bays show the Unraid assignment (Parity, Data, Cache/pool) and the locate LED. - The slow-link note names each drive with its rate, maximum and bay (or HBA port), instead of a fixed "e.g. 6 Gb/s on 12 Gb/s" example, and says what to check. - When storcli declines an IT-mode HBA ("Failed to get enclosure information", e.g. some 9400-16i setups) and the kernel's view covers it, this is one note instead of three collection warnings. A tri-mode HBA's own VirtualSES device is no longer shown as an enclosure. The collector no longer reports exit 255 as a signal. ###2026.10.18 - Throughput and link utilization: each controller and shelf shows read/write rates (from the kernel's disk counters around each collection) and the share of its SAS link capacity (1.2 GB/s per 12G lane). - Bays are tied to their disks through each disk's cached identification page (VPD 83h port addresses), so Unraid disk names, devices and throughput show even while a disk is spun down (storcli's per-drive detail is still skipped then). Nothing is sent to the drives. ###2026.10.17 - Network: an LACP bond member is also flagged when the switch side is not in sync/collecting/distributing, or when this side uses default or expired partner information. - Network: transceiver alarm/warning flags stay on the lane they name (a flag for a lane without a reading is no longer shown on another lane). - Network: a collection that cannot read any interface keeps the last good data (the page says the collector failed); a failed ethtool query on a port is reported. - Network: per-queue/per-priority driver counters of more drivers are left out of the totals. - Both collectors only remove their own stale staging folders. Diagnostics README says interface names, PCI and disk device names are kept when anonymising. ###2026.10.16 - Per-drive storcli detail is also skipped while an unassigned device (devs.ini) is spun down, so the page never wakes one. - HBA port labels wrap within the SAS address's last 16 bits (no 5-digit address tail near FFFF). - Acknowledge/Unacknowledge reloads without ?refresh=1, so it no longer forces a new storcli/sg_ses collection. - Drive error counters are always shown as numbers. Kernel-only HBAs show their PCI address. - Network collector notes a crashed command in its error file, like the storage collector. ###2026.10.15 - SAS2 HBAs (9207/9211/9217...) with storcli installed: no more "Collection: controller 0: No Controller found" warning; storcli does not support SAS2 cards, so a note says so and the card's mode reads "kernel view, not supported by storcli". - Shelf PSU/subenclosure part numbers no longer show NUL padding (e.g. EMC "000B0027\x00\x00..."). ###2026.10.14 - Storage: a controller whose storcli data has no controller status (some OEM IT-mode firmware, e.g. Inspur's SAS3008) is no longer critical. The status shows as "not reported", with one note that storcli returned only partial data for that controller. When storcli also gives no ports for it, they are taken from the kernel's view of the same HBA (matched by SAS or PCI address), so its ports, connectors and the cable to the expander show. A status that storcli does report and that is not Optimal is still critical. - Storage: a PSU element whose status is Unsupported, Unknown or similar (e.g. on an expander card that has no power supply) no longer raises its flag bits (such as DC over-voltage) as a warning, as for fans already. - Storage: "single path to the controller" is a note instead of a warning: one cable is the usual setup. It now says so, and that a second path only matters if the enclosure has a second module you meant to cable. ###2026.10.13 - Storage: a bay's two SES fault flags are told apart. "Fault sensed" (the shelf detected a problem) is a warning: check the drive and, for SATA drives, the interposer. "Fault requested" (host software turned the fault LED on, the shelf found nothing) is a note with the sg_ses command that clears it (the page never runs it). Bays show which flag is set, also in their tooltip. - Storage: a NetApp shelf cabled with one cable ("only 1 of 2 I/O modules answer SES") is a note, "single path", when the server reaches it over one path (storcli does not report it as Multipath, or the kernel sees one of its expanders and each drive once). It stays a warning when the shelf is multipath or its cabling cannot be told. ###2026.10.12a - Firmware table: shelf PSUs grouped by part number, so different PSU hardware revisions on their own firmware are not shown as a mismatch. ###2026.10.12 - Storage: enclosures where "sg_ses --json --join" fails are read page by page instead (configuration, status, element descriptors and additional element status) and joined the way sg_ses does, so they show instead of "no SES data". sg_ses 2.86 (sg3_utils 1.48) crashes in --json --join on enclosures without an element descriptor page, such as the EMC KTN-STL3. Nothing changes where --join works. - Storage: with sg_ses 2.88, enclosures without element descriptors (for which it writes "<null>") are named from the configuration page as intended. - Both pages: Acknowledge works in the browser again. It posted multipart form data, which the webGUI never answers; it now posts URL-encoded data like the rest of the webGUI, and shows a failure next to the link instead of a popup. - Diagnostics: the README says how each enclosure was read; serial numbers inside the SES configuration page's vendor-specific bytes are anonymised too. - README: storcli supports SAS3/SAS3.5 HBAs only; SAS2 HBAs (SAS2008/2308, e.g. 9211-8i, 9207-8i) are shown from the kernel view, without chip temperature. ###2026.10.11 - Storage: drives that are in no enclosure bay (on an HBA PHY, on an expander PHY without an SES bay, or on a MegaRAID controller without an enclosure or in a virtual one such as EID 252) are listed under "Directly attached drives" with port, Unraid name, model, size, temperature and link rate; HBA ports to a single drive show that drive. - Storage: link rates are checked against what both ends support (expander PHY maximum, 6 Gb/s for SATA), so SATA drives and SAS2 expanders at 6 Gb/s are no longer flagged. - Storage: HBA connectors (4 PHYs each, derived): lanes linked, rates, ports and devices per connector, wide ports called out, unused PHYs listed per connector, a warning for a connector that is only partly linked to an expander, and a note when two connectors go to the two expanders of one dual-expander backplane. - Storage: enclosures that only support the SES short status page (USB drive boxes, simple backplanes) are shown with their status and disks instead of collection errors; USB enclosures are labelled as such, and a system without SAS controllers says so. - Storage: enclosures without element descriptors (e.g. EMC KTN-STL3) are named from the SES configuration page: LCC A/B as I/O modules with their firmware, "Power Supply B", sensors grouped by subenclosure. PSU problems in plain words ("no AC input"); a shelf fault LED that another problem explains is noted on the shelf instead of repeated. - Storage: empty shelf serial, I/O module and PSU sections are hidden; PSUs that are not installed are dimmed; fans and PSUs that are "Not installed" or "Unknown" are not flagged. - Both pages: problems can be acknowledged (stored in acks.json on the flash drive); acknowledged problems are listed apart and do not count toward the page status until what they report changes. - Both pages: "Download diagnostics" gives a .tar.gz of the collected data with versions, anonymised by default. - Both pages: collection errors are no longer listed twice. ###2026.10.10a - Network: no PCIe link-speed notes for cards whose ports are all down (unused cards often train down while idle). - Network: module table wraps lane readings instead of scrolling sideways. ###2026.10.10 - New page: Tools > System Information > Network Topology. Per physical NIC: PCIe link vs capability, temperature, driver/firmware (and PSID and flash firmware via `mstflint q` on Mellanox/NVIDIA cards when mstflint is installed), and per port: link, FEC, MTU, ring sizes, bond/bridge/VLAN membership, error and drop counters with growth since an earlier collection, transceiver module details and DOM readings against the module's thresholds, and LLDP neighbours (when lldpd/ulldpd is running). Bonds show mode, hash policy, LACP rate, aggregators, partner and churn. Problems list flags degraded PCIe links, FEC off on 100G optics, module alarms, growing errors, bond member issues and ring sizes below the maximum. Read-only, cached 60 s, one collection at a time. ###2026.10.09b - Support link now points to the Unraid forum thread. ###2026.10.09a - Install message: report storcli correctly (it said "not found" when only some of the searched paths were missing). ###2026.10.09 - Initial release. rm -f $(ls &plgPATH;/&name;-*.txz 2>/dev/null | grep -v '&version;') &packageURL; &md5; echo "" echo "Storage Topology &version; installed: Tools > System Information > Storage Topology and Network Topology" command -v sg_ses >/dev/null || echo "Note: sg_ses (sg3_utils) was not found, so enclosure health will be missing." found= for b in /sbin/storcli /usr/sbin/storcli /usr/local/sbin/storcli /usr/bin/storcli /usr/local/bin/storcli \ /sbin/storcli64 /usr/sbin/storcli64 /usr/local/sbin/storcli64 /opt/MegaRAID/storcli/storcli64; do [ -x "$b" ] && found=$b && break done [ -n "$found" ] && echo "Using storcli: $found" \ || echo "Note: storcli was not found. Broadcom/LSI controller and per-drive detail needs it; the kernel view is used instead." command -v lldpctl >/dev/null || echo "Note: lldpctl was not found, so the network page has no LLDP neighbours (the LLDP plugin, ulldpd, provides it)." echo "" removepkg &package; rm -rf &plgPATH; /var/local/storage-topology /var/run/storage-topology.lock /var/run/storage-topology-net.lock /var/run/storage-topology-acks.lock echo "Storage Topology removed."