0x0lor1n@Hísilómë

channel: cyberia link: opus mp3
files: list

worklog Custom NAS #2: Hardware list

$ series: Custom NAS on ZFS and MSI B250M PRO-VD #2 ← #1→

The build

Core

#PartModelPrice CHFWhereConditionBoughtInstalled
1MotherboardMSI B250M PRO-VD57.19AliExpressrefurbished29.12.202428.04.2025
2CPUIntel Core i5-6600T32.59AliExpressrefurbished02.03.202528.04.2025
3CPU coolerXilence I250PWM12.70Galaxus.chnew13.03.202528.04.2025
4RAMCorsair CMK32GX4M2A2666C16R30Ricardo.chnew27.03.202528.04.2025
5NVMe boot #1Samsung PM9B1 2230 256 GB55.51AliExpressnew03.03.202510.10.2026
6NVMe boot #2Samsung PM9B1 2230 256 GB42.59AliExpressnew11.10.2026-
7PCIe x1 #1ASM1182e (PCIe x1 → 2x M.2)10.09AliExpressnew27.09.202610.10.2026
8PCIe x16ASM2824 (PCIe x16 → 4x M.2)74.52AliExpressnew27.09.2026-
9M.2Intel JL82599EN (M.2 → SFP+)31.39AliExpressnew26.09.2026-
10PSUbe quiet! Pure Power 12 M 550 W68.45Galaxus.chused08.10.2026-
11CaseThermaltake Divider 200 TG Air65Ricardo.chnew01.03.202528.04.2025

Total: CHF 480

Utilities

#PartModelPrice CHFWhere
U1CableSFP+ DAC Cable, 3 m11.23AliExpress
U2AdapterMolex → SATA-had it
U3CableSATA, 5 pcs6.80AliExpress
U4MountSteel three-storey cage for 3.5" SATA10.59AliExpress
U5Splitter4-pin 1→2 on SYS_FAN1.70AliExpress
U6Mount50x M3x5 / 6-32 flat-head screws2.75AliExpress
U7PadsSelf-adhesive silicone pads, 10x2 mm, 50 pcs1.49AliExpress
U8Cable tiesSelf-locking nylon cable ties1.54AliExpress

Total: CHF 36

Data drives

#PartModelPrice CHFWhereConditionBoughtInstalled
S1NVMe fast #1Samsung PM9A1 1 TB-had itused--
S2NVMe fast #2Samsung PM981a 1 TB-had itused--
S3HDD tank #1Seagate IronWolf 6 TB200.99AliExpressnew26.09.2026-
S4HDD tank #2–32x Seagate IronWolf 6 TB2x 202.39AliExpressnew30.09.2026-
S5HDD backup #1Seagate Barracuda 6 TB-had itused--
S6HDD backup #2Seagate Barracuda 6 TB139.12Amazon.frnew24.03.2025-

Total: CHF 745

Build total: CHF 1 261

Not in the build

Debugging gear

Bought for bring-up and troubleshooting; not part of the final build.

#PartModelPrice CHFWhere
D1USB expansion card4-port USB 3.0 PCIe6.87AliExpress
D2Keyboard adapterPS/2 male → USB-A female2.36AliExpress
D3Front-panel adapterUSB 2.0 9-pin → USB-C (Type-E)2.48AliExpress
D4Video adapterVGA → HDMI7.60Amazon.fr

Total: CHF 19

Failures

Parts that died in service and were replaced.

#PartModelPrice CHFWhereConditionBoughtInstalledReplacedCause
F1PSULC-Power LC420-1231.90Galaxus.chnew13.03.202528.04.202512.10.2026A short circuit made it unstable

Total: CHF 31.90

Note: everything below describes the final configuration, not the current one: 4x NVMe on the ASM2824; tank as 6x 6 TB IronWolf raidz1 on the onboard SATA ports; warm backup (18 TB + 2x 6 TB) in an external box with its own power supply, attached through the free PCIe x1 slot.

Layout

PoolDrivesRole
rpool2x NVMe 256 GB, mirror (PCIe x1 → ASM1182e)OS
fast4x NVMe 1 TB, two mirrors (ASM2824), ~1.8 TiB usableJellyfin, TorrServer, Nix cache, etc.
tank6x IronWolf 6 TB, raidz1, ~27 TiB usablemain storage
backup1x 18 TB CMR + 2x Barracuda SMR 6 TB, stripe, ~27 TiB usable (external box)warm backup of tank

Failure model and tiers

EventWhat saves youWhat you lose
1 drive in tankresilvernothing, pool degraded but alive
2nd drive during resilverwarm backupdata since the last zfs send
drive in warm backuptanknothing, send it again
everything at once (PSU, lightning, ransomware, fire)nothingeverything outside the partial cold copy

Cold, partial: documents, KeePass databases and 2FA exports on a Kingston IronKey; photo archive on an external HDD.

Appendix A: rebuild time after a drive swap

Ranges from Synology and TrueNAS forum reports plus arithmetic on average HDD throughput (~140 MB/s for 6 TB CMR). Conditions: idle array, CMR drives, raidz1 ~70 % full.

ArrayRAID5 (mdadm, Synology)SHR-1raidz1 (ZFS)
6x 6 TB10–16 h10–18 h5–9 h
6x 10 TB16–28 h18–30 h9–15 h
6x 16 TB24–40 h26–45 h14–24 h

(Multiply times: ×3–5 for SMR drives, ×1.5 if the array is under load during rebuild.)

Legend:

  • RAID5/SHR read the whole disk, time does not depend on fill. raidz1 resilvers only allocated blocks: an empty pool takes minutes, a full one is RAID5.
  • DSM throttles rebuild speed by default ("Balanced"/"Low impact"); in "Low impact" 6 TB stretches to 2–3 days.
  • A read error on a surviving drive mid-rebuild: mdadm kicks the drive and the array collapses; ZFS marks one file as damaged and carries on.

Our tank (6x 6 TB, ~70 %): ~4 TB of data per drive, resilver 6–8 h.

Sources:

  • https://sraidcalculator.com/blog/synology-nas-rebuild-time
  • https://community.synology.com/enu/forum/1/post/140325
  • https://forums.truenas.com/t/long-resilver-time-tl-dr/29218
  • https://www.truenas.com/community/threads/drive-size-and-resilvering-times.95917
  • https://louwrentius.com/zfs-resilver-performance-of-various-raid-schemas.html

Appendix B: power draw and running cost

Estimate from component datasheets. Wall figures assume ~87 % PSU efficiency at 10–20 % load (80+ Gold).

ComponentIdleLoad
i5-6600T + B250M + 2x DDR414 W45 W
6x IronWolf 6 TB (tank, spinning / standby)24 W / 5 W32 W
4x NVMe2.5 W8 W
ASM2824 switch5 W6 W
ASM1182e adapter1.5 W1.5 W
ASM1166 (PCIe x1 → eSATA, warm box)2 W2 W
82599EN + DAC6 W6 W
Fans (200 + 120 + CPU)3 W4 W
DC total~58 W (tank standby: ~39 W)~105 W
At the wall~67 W (tank standby: ~45 W)~121 W
Warm box, own PSU (18 TB + 2x 6 TB), at the wall~2 W (standby, pool exported)~25 W (during zfs recv)

(Measured figures with a wall meter: separate worklog after the build.)

Load = scrub or nightly zfs send; runs a few hours a day at most. Scenarios include the warm box: standby except 2 h of nightly send, ~4 W average. tank spins down after inactivity (planned, timeout to be tuned against spin-up count in SMART).

SIG tariff 2026, Profil Simple, Électricité Vitale Vert 10 % (reference product), VAT included:

Itemct/kWh
Energy11.24
Grid use11.35
Cantonal levy (13.2 % of grid use)1.50
Federal renewable surcharge2.49
Federal electricity reserve0.44
Solidarity costs0.05
Total27.1

Meter fee (CHF 7.24/month) is fixed per household and not attributed to the NAS.

ScenarioAverage drawkWh/yearCHF/yearCHF/month
Idle 24/7, tank spinning71 W62216914.0
Idle 24/7, tank standby49 W4291169.7
14 h standby + 8 h spinning + 2 h load63 W55215012.5
Load 24/7 (upper bound)146 W127934728.9

Source: https://media.sig-ge.ch/documents/tarifs_reglements/electricite/tarifs/tarifs_electricite_tous_clients.pdf

Appendix C: deferred to the next build

Each needs different hardware or does not pay off at this size.

FeatureWhat it solvesWhy not nowWhat it takes
ECC RAMBit flips in RAM before ZFS checksums the block; ZFS cannot detect theseB250M / i5-6600T do not support ECCW680 or C246 board + Xeon E / i3 with ECC, or AM4/AM5 board with ECC UDIMM validated (ASRock Rack); ECC UDIMM
ZFS special vdev on its own NVMe mirrorMetadata and small blocks on SSD: directory listings, find, rsync scans, small-file datasets stop touching HDDMedia-heavy pool at 30 TB, ARC 32 GB covers hot metadata; losing special loses the pool, so it must be a mirror, and all four M.2 slots on the ASM2824 are taken by fast2x NVMe (~1 % of pool size, 256–512 GB) on a dedicated mirror; special_small_blocks per dataset
Hot pluggingSwap a failed drive without powering down; no resilver interruption from a rebootDivider 200 has fixed cages, no backplane; drives are cabled directlyCase with hot-swap bays and SATA backplane (or a 5-in-3 cage), AHCI hot-plug enabled in BIOS, zpool replace by /dev/disk/by-id
Cold backup of tankFull offline copy in another building: fire, theft, ransomware, operator errorPartial cold only: KeePass DBs + 2FA export on Kingston IronKey, photo archive on an external HDD2x 18 TB or a second NAS at another site; rotate monthly; zfs send to it, then export and unplug
UPSClean shutdown on power loss; no interrupted resilver or scrub; HDD heads park under power, not on a crashZFS itself survives a power cut (transactional, copy-on-write); the remaining risk is mechanical and a mid-resilver cut on raidz1600–900 VA line-interactive (APC Back-UPS, Eaton Ellipse), USB, NUT on NixOS with services.ups; ~CHF 150–250
L2ARCSecond-level read cache on NVMe when the working set does not fit in ARCARC 32 GB is not saturated by a media workload; L2ARC only helps once ARC hit rate drops; L2ARC headers consume ARCOne NVMe (no mirror needed, loss is harmless), zpool add tank cache, persistent since ZFS 2.0; add after seeing arcstat hit rate < 90 %

← back to all logs