Reference hardware: TS-253D with a QM2-2P-244A-A1
Everything here was observed on the project’s reference box in October 2026 unless it says otherwise. It is the ground truth for defaults and tests; other models are expected to differ in counts, not in kind.
Platform
| Item | Value |
|---|---|
| NAS | QNAP TS-253D, Intel Celeron J4125 (4C, 10 W TDP, Tjunction 105 °C per Intel ark), one 70 mm chassis fan, 2 SATA bays |
| OS | OpenMediaVault 8.5 on Debian 13 (Trixie), Proxmox kernel 7.0.x-pve (headers: proxmox-headers-*) |
| Boot disk | USB SSD (sdc; non-removable flag, so it shows up as an sdX disk). Not a fan source since 2026-10-17: qnapd skips disks on a USB path |
| Internal eMMC | 4 GB (mmc-…), holds the original QTS firmware; ignored by the plugin |
| Expansion | QM2-2P-244A-A1 in the PCIe slot: 2 × M.2 NVMe, ASMedia ASM1812 switch (1b21:1812), own fan, PIC firmware 1.13 |
| Drivers | qnap8528-dkms 1.27, qm2mod-dkms 1.1 (plugin release packages, 2026-10-18; hand-built 1.24 before), loaded by the Drivers page |
qnap8528 on this box
- Chip check passes without
skip_hw_check(dmesg:IT8528 EC device found successfully), contrary to the upstream list of ENE-EC models. - Model detection:
MB=70-0Q05H0201+ backplane70-1QY570111→device model is TS-253D(kernel log only; not in sysfs). - hwmon
qnap8528:fan1_input,pwm1,temp1_input(chassis, ≈21–28 °C idle),temp6_input(backplane, ≈25–32 °C). No junk channels. - LEDs:
status,usb,hdd1,hdd2,panel_brightness. hdd1 = bay 1 = SATA port 1 (ata1), hdd2 = bay 2 =ata2(verified by lighting each LED and by reading from one disk only). - VPD strings are NUL padded to 32 bytes; VPD reads cost ~5 ms per byte
(
qnapd infotook 1.9 s uncached, 0.14 s with the per-boot cache). - EC firmware
Q04WE018; CPLD reads0xff(not present). BIOS from DMI (Q04WAR09); DMI product/serial fields are “Default string”. ec/power_recoverywas 2 (restore last state): after an unplanned power cut the box powered itself back on.
Buttons
Input device qnap8528 (event4 on the reference box): Reset (rear
pinhole) = BTN_1, USB Copy (front) = BTN_2, chassis open = BTN_0
(not tested). Press and release are separate events; a 7 s Reset hold
measured correctly. The power button is ACPI and shuts the box down.
Buzzer
The buzzer is the PC-speaker line: the in-tree pcspkr driver (loaded by
default) drives it through its input device
/dev/input/by-path/platform-pcspkr-event-spkr. An EV_SND/SND_TONE
event of 1000 Hz, then 0 after 0.2 s, beeps audibly (2026-10-18).
qnap8528 has no buzzer interface, and none is needed.
qm2mod on this card
swap=0(exact model match), 2 slots, 2 temperature sensors (one per slot, ≈28–38 °C), I2C adapter number appears in LED names (qm2-<n>:{green,red}:slot{1,2}).- Slot 1 = switch downstream port
02:00.0=nvme0, slot 2 =02:08.0=nvme1(verified by lighting each LED and by reading from nvme0 only). - LEDs are all off until something sets them; the PIC drives nothing itself.
- Brightness 2 (qm2mod’s “PIC blink”, register value 3) blinks slowly,
red or green; register value 2 blinks fast (PIC 1.13, retested
2026-10-20; an earlier “stays dark” result did not reproduce). A
bicolour slot with green on and red blinking looks red/green
alternating. qnapd uses red 1 with the
timertrigger for Locate. fan_defaulthands the fan to the PIC, which idles it at PWM 64 / ≈1260 RPM.
Measured fan curves
PWM written vs RPM, 15 s per step, idle system:
| PWM | 255 | 192 | 128 | 96 | 80 | 64 | 56 | 48 | 40 | 32 | 16 | 8 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chassis (70 mm) | 3631 | 2804 | 1905 | 1407 | 1191 | 944 | 786 | 663 | 546 | 397 | 342 | stall |
| QM2-2P-244A-A1 | 5860 | 4740 | 3320 | 2440 | 1840 | 1260 | 880 | stall | 0 | 0 | 0 | 0 |
- Chassis fan stalls between PWM 16 and 8 and restarts only at 32.
- QM2 fan stalls at 48 and barely restarts at 48 (160 RPM).
- qnap8528 stores PWM as a percentage, so read-back drifts (128 → 127, 56 → 53).
- QM2 RPM comes in 60 RPM steps.
Noise (listener at the box)
- QM2 fan at 64: not audible over the chassis fan at 48. Audible from 96.
- Chassis around 1300 RPM (PWM ≈86) at idle was acceptable.
- What was distracting: the chassis fan jumping with CPU bursts, and the QM2 fan at full speed (≈5900 RPM) for a few seconds on every restart. Both are fixed (see fan-control.md).
Temperatures and load seen
- CPU package idles 45–52 °C; bursty background load (ZFS kworkers, an open OMV dashboard) spikes single samples to 60–68 °C.
- An open OMV dashboard with many widgets kept two php-fpm workers at ≈80 % of a core. Close or navigate away from it when measuring.
- HDDs (WD 12 TB) 33–39 °C, NVMe 40–42 °C, QM2 slot sensors 37–38 °C.
Disks and pools
- 2 × 12 TB SATA disks in a ZFS mirror; 2 × NVMe on the QM2 in a ZFS mirror.
- OMV spindown configured (APM 1, 10 min), applied at boot by
smartctl-hdparm(Standby timer set to 120). Anything callingsmartctlwithout-n standbywakes them (a tempmon setup did), and even-n standbyqueries on an awake disk restart its standby timer: with qnapd polling every 60 s the idle disks never slept (2026-10-17). Fixed in 8.0.1 (idle disks are not queried); they now reach standby 12–14 min after their last wake. OMV’s smartd here still uses power mode Never and wakes them every 30 min; Standby would let them stay asleep. The general list: ../disk-sleep.md. - The USB boot SSD runs hot: smartd logged 62 °C. The chassis fans cannot cool it, so it is not a fan source.