Home server upgrade
An opportunity to give my homeserver a major update presented itself as I found an online listing for a 4U tall server chassis, even if I don’t have a rack to put it into.
The case fit my homeserver needs pretty much perfectly and it did not cost all too much, 76€ with shipping.


- 16x HDD slots on the front
- Backplanes with SFF-8087 connectors
- 2x 5.25″ slots
- Bracket for 3x 120mm fans
- 2x 80mm exhaust fans
- ATX power supply
- Normal ATX motherboard mounts
My previous server was an itx size motherboard as a part of a dual system build, built into a huge tower with my main personal computer. First idea was to just move that old itx system into this new chassis and upgrade it then sometime later.
However, I found more used hardware at more or less bargain prices so I ended up giving my server pretty much a complete overhaul during this process. Deciding to do so caused this process to drag on for about thee months, most of that spent as I waited for cables and small parts to arrive.


New homeserver ✨












Simply put, the idea was to have a single, central data vault, that I could access from all my devices.
At least on paper, the idea to have a high level of virtualization did seem good as that could allow me to create backups of the virtual server and create a system which could be less dependent on the hardware it is running on.
Also, if the virtual server runs into issues, I can remotely log into a host OS and reboot even completely frozen server.
I chose VirtualBox as my software for running the virtual server, I chose it because I was somewhat familiar with it, even as I know that as a type2 hypervisor it is not the most efficient use of my hardware. This is something I might look to improve at some point, maybe.
I know Proxmox and other operating systems made for virtualization do exist but I have never used any of those.
_,met$$$$$gg. ubuntu@vbox
,g$$$$$$$$$$$$$$$P. OS: Debian 12 bookworm
,g$$P"" """Y$$.". Kernel: x86_64 Linux 6.1.0-27-amd64
,$$P' `$$$. Uptime: 9d 10h 15m
',$$P ,ggs. `$$b: Packages: 1746
`d$$' ,$P"' . $$$ Shell: bash 5.2.15
$$P d$' , $$P Disk: 30T / 56T (53%)
$$: $$. - ,d$$' CPU: Intel Core i3-8100 @ 4x 3.6GHz
$$\; Y$b._ _,d$P' GPU: VMware SVGA II Adapter
Y$$. `.`"Y$$$$P"' RAM: 3253MiB / 11063MiB
`$$b "-.__
`Y$$
`Y$$.
`$$b.
`Y$$b.
`"Y$b._
`""""
Filesystem Size Used Avail Use% Mounted on
udev 5.4G 0 5.4G 0% /dev
tmpfs 1.1G 3.0M 1.1G 1% /run
/dev/sda1 78G 35G 39G 48% /
tmpfs 5.5G 0 5.5G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
A_DRIVE 1.9T 431G 1.4T 24% /home/ubuntu/mnt/a
B_DRIVE 3.7T 2.2T 1.6T 59% /home/ubuntu/mnt/b
C_DRIVE 238G 131G 108G 55% /home/ubuntu/mnt/c
D_DRIVE 7.3T 4.5T 2.9T 61% /home/ubuntu/mnt/disk3
E_DRIVE 7.3T 6.2T 1.2T 85% /home/ubuntu/mnt/disk1
F_DRIVE 5.5T 4.9T 599G 90% /home/ubuntu/mnt/disk2
G_DRIVE 2.8T 811G 2.0T 30% /home/ubuntu/mnt/g
H_DRIVE 7.3T 3.7T 3.7T 51% /home/ubuntu/mnt/h
I_DRIVE 3.7T 3.1T 641G 83% /home/ubuntu/mnt/i
J_DRIVE 17T 3.8T 13T 23% /home/ubuntu/mnt/j
config_ssd 112G 17G 95G 16% /home/ubuntu/mnt/config_ssd
tmpfs 1.1G 56K 1.1G 1% /run/user/1000
Having “ubuntu” as an username on a debian machine feels a bit cursed but I can keep using my hardcoded scripts. Anyway…
Second hand first ☝️
Almost everthing on this machine is bought used and second hand. I bought a faulty set of MB+CPU+RAM+M.2 SSD+Noctua cooler for 50€ and it turned out to be the MB that was faulty. So I had to order another one from Aliexpress. That one I paid 69€ for, including shipping.
So that MB and some cables are the only “new” parts.
All the hard drives I have bought used too. I now have total of 11 drives with combined capacity of 56TB and I have paid around 10€/TB for all of that. I think that pretty good, considering that none of the drives have been in terrible condition or have had too much hours on them.

As a SATA expansion card I have one of these cards from aliexpress. I know they are not really that great but for a pretty much single user server running HDDs it has been working just fine for me. I have had few similar cards for a couple of years now and they haven’t given me much trouble at all. 16 port card matched the case very well too 🙂
Whats running 🖥️
On this server I use docker to run each service separate, in addition to these I do have a few scripts that run in their own tmux sessions but more on them later. Here’s a list of what is currently running in docker
- Home Assistant
- Plex
- Sonarr
- Radarr
- Bazarr
- Prowlarr x2
- Apache-php
- Deconz
- Dockupdater
- Glances
- Gluetun
- QbitTorrent
- InfluxDB
- Grafana
- Muximux
- MySpeed
- Nginx Reverse Proxy
- OpenVPN & OpenVPN-UI
- Owncloud
- PiHole
- Portainer
- Tautulli
- VnStat
- Octoprint

Plex
- Docker user permissions were a little hassle
- new claim token and fresh install
- access to drives
- config folder can be on a separate ssd

Docker in VM
Running docker in a VM and on drives that were not owned by the host was a little hassle at some points.
What I did learn is that you can’t run docker on a NTFS filesystem as that does not do owner/user permissions at all.
USB device passthrough
I needed the debian VM have access to USB devices of the windows machine. Spesifically the serial port for the LCD display and the Conbee 2 zigbee adapter. Using the USB device filter from VirtualBox settings I eventually got them to work. It was not easy as windows doesn’t want to let go of those devices. Having the VM start at windows startup and taking control of those devices then and there seems to work pretty ok. Which means that if the debian machine drops one of those USB devices I have to reboot the entire machine. But that’s fine.
Other notes I have made
- permission and disk mounts belonging to vboxsf group was not accessible from docker root
- root had to be added to this group
usermod -a -G examplegroup exampleusername
- Adding
-e PUID=0 -e PGID=0
to some docker images fixed this in some cases - DNS was problem at first, but not related to being a VM I think
- Nginx proxy had to be reinstalled, I love/hate this, it does work after you get it to work
- Nginxproxy can NOT be on a NTFS drive, found out the hard way.
- Had to reinstall autoremove-torrents python script.
- had to run python3 setup.py install again as a root
- WMIC was not installed by default on windows
- Unused GUI loads cpu/gpu way too much sometimes
- stop ui with
service gdm3 stop
- stop ui with
VirtualBox USB device filter:
- Plug in USB device
- Start VirtualBox gui
- add device to usb filter
- start vm
- vm shuold take over the USB devices
- Should, as meantioned earlier. Works better at startup with windows.
Have VM start with windows so everything starts up automatically, for now everything has been working somewhat fine for months.


Also I did learn that there are two kinds of these stupid SFF-8087 to SATA cables, forward and reverse breakout ones. They look absolutely identical. But as I have the SFF-8087 connector on the case backplane and SATA connectors on my SATA card, I of course needed the reverse breakout cables, and I got the wrong ones first.
Sites which had tips for this process or something related to it:
- https://stackoverflow.com/questions/33368206/arduino-virtualbox-serial-port
- https://www.howtogeek.com/50787/add-a-user-to-a-group-or-second-group-on-linux/
- https://stackoverflow.com/questions/63334515/docker-in-virtualbox-cannot-access-shared-folders
- https://github.com/jerrymakesjelly/autoremove-torrents
- https://www.reddit.com/r/unRAID/comments/180ou0b/psa_if_you_cant_login_to_qbittorrent_pass/
- https://techcommunity.microsoft.com/blog/windows-itpro-blog/how-to-install-wmic-feature-on-demand-on-windows-11/4189530

Next time: a lack rack and another 4U case 🙂