FreeBSD+ZFS Without Drives

This weekend I decided to set up a single-drive FreeBSD+ZFS system, and prove that you CAN remove (and replace) the only drive in a root ZFS pool without service interruption.

Recap of the video

  • Prequisite: A standard FreeBSD 12.0 install with root on ZFS, where the root pool is smaller than the amount of system memory. (in my case: 8GB system memory, 4GB root pool)
  • Replace existing drive with a memory-backed block device
  • Physically remove the existing drive
  • Verify the system still works
  • Physically attach new drive to system
  • Replace memory-backed block device with new drive
  • Bonus: Reboot system, verify it boots from new drive.

Scripts used in the demonstration are provided as a GitHub Gist.

Introduction: Venus, the FreeBSD dev box

(Also known as: The Mini-ITX quarter-depth chassis that could fit a Micro-ATX mainboard)

I’ll be using this system for my FreeBSD hacking, but this post focus on the system hardware.

The story of this system started when I ordered my Super Micro quarter-depth (SC505-203B) Atom-based firewall named Kuiper from Nextron. The chassis specifications state it’s 24.9cm deep and 43.7cm wide (9.8″ and 17.2″ respectively), and would only fit mini-ITX boards.

As I was also interested in a Xeon E3v5 virtualization server, and would prefer it to be quarter-depth as well, I was a little disappointed that Super Micro didn’t have any mini-ITX mainboards for that platform. Nextron helpfully suggested that they could check if the Super Micro X11SSL-F mainboard (micro-ATX) would fit when building my firewall, as they had it on hand. It has the dimensions 24.4cm by 24.4 cm (9.6″ by 9.6″). I was not expecting it to fit as the depth of the mainboard was a mere 5 mm (0.2″) less than the chassis.

A few days later, when the firewall was built, they reported back: It fits! But they would have to sacrifice one of two 2×2.5″ drive bays. It was also a very, very snug fit, as can be seen in the image below. Excellent! I only need two data drives in that system anyway, and COULD use them as root drives if necessary.

Snug Fit 2

Snug fit! This is NOT the I/O side!

I was happy. Now, considering this chassis was designed for Atom systems, the PSU would probably not be capable of powering a 80W CPU, for not to mention the potential cooling trouble. Nextron suggested getting a 45W CPU, but I decided to pay the premium of getting a low-powered CPU, the Xeon E3-1240L, with a TDP of only 25W.

System Parts
Chassis SuperChassis CSE-505-203B
Mainboard Super Micro X11SSL-F
CPU Xeon E3-1240L
RAM 32GB: 2x 16GB DDR4 2133MHz ECC Unbuffered DIMM
HDD 2x Seagate Laptop Thin SSHD HDD/SSD Hybrid – 500GB SATA3 5400RPM 2.5″
SSD 2x Supermicro SATADOM 64GB MLC – Vertical (added later)

Picture Gallery

Please note the pictures above were taken at different points throughout my process of modifying the system. The final setup (for now) has two SATADOMs and two SSHD’s, and is shown in this posts featured image, and is the last entry in the gallery above.

I should probably also mention that the chassis ‘curvature’/apparent bending seen in some of the photos is a trick of the lens.

Introduction: Kuiper, PFSense Firewall

This system is a 1U quarter-depth Super Micro, Intel Atom-based system. Its name is slightly irregular considering my server naming scheme is planets orbiting Sol, but I figure “Kuiper” isn’t too hard to associate with a firewall, as the Kuiper belt encapsulates our solar system.

Low power consumption and threading was important when deciding on which hardware to get for this sytem. I expect it to push 1gbps (inter-VLAN) without too much trouble. It has five ethernet ports, where one is dedicated for IPMI. WAN has a dedicated ethernet port, and I’ll be setting up LAGG between at least two ports for the LAN side, for more efficient routing between VLANs, once the 16-port switch arrives.

System Parts
Chassis SuperChassis CSE-505-203B
Mainboard Super Micro A1SAI-2550F
CPU Intel Atom C2550 (14W, embedded)
SSD 1x Innodisk 32GB InnoLite LP Vertical (for 1U) SATADOM MLC

I did a very simple network benchmark (iperf -c hostname -p 20000 -t 60 -P 1 -L 20000 -w 1m -t 30 -i 5), which showed about 600 Mbit/s  bandwidth. Kuiper’s CPU load was hovering around 10% during the test. I’ll have to do more scientific tests later, as I haven’t made any effort to find the actual bottleneck for this test.

Meet HOMER the file server


This is HOMER. His full name is Heavy Overkill of Mandatory Expectations and Requirements. His task is to store all the household files, including those of Sideshow Bob (my ESXi server) using a combination of iSCSI, NFS and CIFS. Once in production, he’ll be running FreeNAS.

With the  SuperChassis 826BE16-R920LPB 2U storage chassis, he’s smaller than expected on the outside. But it’s the inside which counts:


Homer Dissection

These are Homers internal components. If you want a really good look, you should click the image to see it in full resolution.
MainboardSupermicro motherboard X9SRL-F (Single Xeon E5 6xSATA 8xDIMM LGA2011)
CPUIntel Xeon E5-1620 v2 (4-core, 3.7GHz)
RAM: SM Hynix 16GB DDR3-1866 2Rx4 ECC REG DIMM x4 (64 GB total)
HBA: Supermicro PCIe SAS 6Gbps contr, 8int, IR, RAID 0, 1 & 1E, LSI2308
Extra NIC: Supermicro PCI-e 2-port Intel i350 Gigabit Ethernet LAN card, Low-Pro
SSD: 2x Samsung SSD SM843 Series 2.5″ 120GB SATA 6Gbps
HDD: 12x Western Digital RE Enterprise 2TB, SATA3 (comparison chart)


Homer I/O ports

This is the back side of Homer’s chassis. There’s a redundant PSU, PS/2 ports for mouse & keyboard, 100Mbit/s ethernet port dedicated for the IPMI KVM over LAN feature, a serial port, VGA port, and two 1gbps onboard ethernet ports.

This picture shows a temporary hook-up of the server in a new rack. It’ll be much prettier once I get a hold of properly sized cables and do some cable management! But that’s for another post.


I’m currently in the process of doing many performance tests on him, which will be posted separately as they complete. Stay tuned!