1 / 17
Framework NAS/media server with battery backup — image 1
1 / 17

Framework NAS/media server with battery backup

Order a print of this model

We calculate the final price from your selected file. You review and accept it before payment.

Saved on this device.

Model information

Category
Computers
License
Creative Commons — Attribution — Noncommercial

I wanted somewhere to securely backup my ever-growing pile of photos and documents, so I designed this small file/media server around the Framework 13 motherboard/battery. They're used in a pair for dual redundancy. Its main features are:

  • Very low idle power at ~12-14W (measured at the wall, with 3x SSDs)

  • Comes with its own UPS! Can run completely on internal battery power, for power outage resilience

  • Up to 56TB per server (or more as >8TB 2.5" SSDs are released in the future)

I ended up going with a Framework 13 motherboard since it has a highly efficient built-in UPS (just plug in the battery!) and has plenty of IO in the form of M.2 and USB C/Thunderbolt. Disks are powered from 2 of the motherboard's USB C ports (providing 7.5W+15W power, which is enough for around 2-3 SSDs per port), and the remaining 2 ports are exposed for data/charging.

It's also possible to swap the nvme SSD for a proper 2242 M.2 ethernet controller (on the A/E-key slot). However this will require some case redesign and add more idle power draw (due to a bug in the ASM1166 SATA controller power management when plugged into the M-key slot).

Features

  • Storage

    • 6x SATA bays for 2.5" disks up to 9.5mm thick, or 4x bays for 15mm disks. (There is enough internal volume for you to design your own 6x 15mm drive cage if you want.)

    • 1x NVMe SSD

  • Power

    • Idle power ~12-14W at the wall (tested with 2x SATA SSDs + NVMe SSD + ethernet + battery trickle charging)

    • fully battery-backed, reducing the risk of data corruption due to power loss

    • battery can be charge limited to 50% in BIOS to significantly improve battery longevity

    • SATA disk power provided by USB C ports (1 port can do 5V 3A, the rest 5V 1.5A). Custom DIY USB C to SATA power cables are required

  • External IO

    • 2x USB C/Thunderbolt ports exposed for USB charging/data, or powering additional internal drives.

  • Compute

    • plenty of compute power/RAM, depending on the Framework 13 motherboard chosen (especially coming from my previous raspberry pi server). Upgradable in the future if necessary

    • Intel/AMD iGPU hardware acceleration for media transcoding

  • Cooling

    • negative pressure cooling - motherboard fan draws in air from the end of the case, over and under the motherboard and battery, and exhausts it through the side

    • dust filter slots are provided

Hardware to buy

  • Computer parts

    • Framework 13 motherboard + RAM

    • Framework 13 battery

    • NVMe SSD for system disk (optional - you can install the OS on the SATA disks if you want)

    • SATA disks (your choice of HDD or SSD)

  • Other electronics

    • M.2 to 6x SATA (ASM1166 chipset) - there's quite a few of these on aliexpress/ebay. Consider updating the chipset firmware before use (optional, instructions online)

    • 40mm fan (to cool the ASM1166 chipset) - make sure it runs on 5V power

    • M.2 A/E key to M key adapter (an adapter with good cable shielding is recommended)

  • Cabling

    • (6x) SATA data cables (recommended 25cm length)

    • DIY USB C to SATA power cable parts:

      • (1x-3x) Molex to SATA power cables (1-to-2 or 1-to-3 adapter recommended, make sure the SATA connector is the crimped type, not molded)

      • (1x-3x) 2-pin molex connectors (male + female)

      • (1x-3x) USB C male plugs supporting 3A current (requires either some passive 5.1K pull-down resistors, or ones with an active emarker chip - both will work, according to my testing. Just don't get the ones with 56K pullup resistors, since those will limit you to USB A spec 0.9A current)

      • 3-pin or 4-pin fan power connector (female), for your 40mm fan

  • Fittings

    • Screws (torx head)

      • (6x) M3x5 (pan head)

      • (2x) M3x16 (pan head)

      • (18x) M2x4 (countersunk)

      • (8x) M3x8 (countersunk)

      • (8x) M3x14 (countersunk)

      • per HDD

        • (4x) M3x5 (pan head)

    • Threaded brass inserts

      • (16x) threaded insert M2(OD3.2mm)x2.5

      • (13x) threaded insert M2(OD3.2)x3

      • (6x) threaded insert M3(OD4.2)x4

      • (10x) threaded insert M3(OD4.6)x5.7

3D printed parts list + fittings

  • Top

    • (4x) HDD cage side

      • (8x) M3x8 (countersunk) - holds the HDDs to the top panel

      • (4x per HDD) M3x5 (pan head) - holds the HDD cage panels to the HDDs

    • top panel left

      • (2x) M3x14 (countersunk)

      • (2x) M2x4 (countersunk)

    • top panel right

      • (2x) M3x14 (countersunk)

      • (2x) M2x4 (countersunk)

  • Screw blocks

    • bottom

      • (8x) threaded insert M2(OD3.2mm)x2.5

    • top

      • (8x) threaded insert M2(OD3.2mm)x2.5

  • Midframe

    • (6x) motherboard washer

      • (6x) M3x5 (pan head)

    • 40mm fan guard

      • (2x) M3x16 (pan head)

    • midframe left

      • (4x) threaded insert M3(OD4.6)x5.7 - for securing the top/bottom panels

      • (2x) threaded insert M3(OD4.2)x4 - for the motherboard

      • (5x) threaded insert M2(OD3.2)x3 - for securing the battery clasps

    • midframe right

      • (4x) threaded insert M3(OD4.6)x5.7 - for securing the top/bottom panels

      • (4x) threaded insert M3(OD4.2)x4 - for the motherboard + M.2 A/E key adapter

      • (5x) threaded insert M2(OD3.2)x3 - for securing the battery clasps

    • midframe power switch

    • midframe M.2 stopper with 40mm fan

      • (2x) threaded insert M3(OD4.6)x5.7 - for the 40mm fan

  • Battery

    • battery top left

      • (2x) M2x4 (countersunk)

    • battery top right

      • (2x) M2x4 (countersunk)

    • battery bottom left

      • (2x) M2x4 (countersunk)

      • (1x) threaded insert M2(OD3.2)x3

    • battery bottom mid

      • (2x) M2x4 (countersunk)

      • (1x) threaded insert M2(OD3.2)x3

    • battery bottom right

      • (2x) M2x4 (countersunk)

      • (1x) threaded insert M2(OD3.2)x3

  • Bottom panel

    • bottom panel left

      • (2x) M3x14 (countersunk)

      • (2x) M2x4 (countersunk)

    • bottom panel right

      • (2x) M3x14 (countersunk)

      • (2x) M2x4 (countersunk)

Suggested print settings

  • material: PLA

  • layer height: 0.2mm

  • nozzle: 0.4mm

  • no supports required (but check part orientation before printing)

DIY USB C cable assembly instructions

  • Preparing the Molex to SATA power connector

    • remove the 12V cables from the SATA connector

    • remove the molex crimped pins from the 4-pin housing

    • insert the molex pins into the 2-pin housing (female)

  • Preparing the USB C end

    • solder some wires to the USB C plug

    • additionally solder the fan header to the USB C plug

    • crimp on molex headers to the wires, and attach the 2-pin molex body housing (male)

    • attach some heatshrink

Assembly instructions

  • N.B. some of the photos show an older iteration of the case, but the assembly steps are pretty similar. Here's my recommended order:

    • assemble the midframe first - heat-set the threaded inserts, and then join both halves together by fixing them to the screw block

    • attach the battery blocks, and then screw in the battery

    • screw in the motherboard (using the plastic washers) and plug in the battery (this can be a bit fiddly)

    • plug the M.2 to SATA extension into the M.2 A/E key adapter, and slot it into the case. Plug the M.2 connector into the motherboard

    • screw the 40mm fan onto the M.2 stopper, and slot it into the case above

    • attach the HDD cage side panels to your HDDs. Screw in the HDDs to the top panel

    • attach the top and bottom panels

Notes

  • This can be a bit challenging to print, since it is a large multi-part model which requires sub-millimeter dimensional accuracy. Here are some tips from my own experience making this:

    • X/Y steps/mm - double check your X/Y steps/mm since the amount travelled can be slightly different from the theoretical number calculated from your motor/belt steps (e.g. I got a ~0.5mm difference per 1800mm travelled, probably due to manufacturing tolerances/thermal shrinkage)

    • extruder pressure calibration - setting up Klipper pressure advance/Marlin linear advance is very highly recommended

    • bed levelling/bed material - the midframe halves are large and have thin sections which can be prone to warping/curling. Make sure the bed is level. An enclosed chamber is highly recommended even for PLA printing, since it virtually eliminates warping. Pre-heating with a hairdryer to 35C is highly recommended.

  • The M.2 SATA adapter is intentionally plugged into Wifi/Bluetooth M.2 slot. This limits the bandwidth to 1GB/sec (PCIe 2.0 x1 link). You can plug it into main SSD M.2 for PCIe 3.0 x4, but this causes significantly more CPU power draw due to a bug in the ASM1166 causing the PCIe link to remain busy and the CPU to never drop below C2 idle state. Plugging it through the chipset's PCIe lanes allows the CPU to sleep properly.

  • The ASM1166 can overheat and cause SATA errors/lock up if stressed for multiple hours (e.g. when running btrfs balance). This is why a 40mm cooling fan was added.

  • If installing Debian, make sure to use the --force-extra-removable flag when installing GRUB. This prevents your OS becoming unbootable if you ever remove the system drive and put it back. This seems to be a quirk of Debian vs Framework's UEFI implementation.

  • Some nut inserts are a bit duplicated and should get unified in a future update, i.e. M3 nut inserts outer diameters are mixed between 4.2 and 4.6mm, and M2 nut insert lengths are mixed between 2.5 and 3mm.

Tags