This is a list of lessons that I’ve learned while playing around with my computer setup during the last 6-7 years or so.

  • USB connected storage is a bad idea when you are using BTRFS.
  • USB connected storage is still a bad idea when you are using ZFS, but it is at least much more resilient.
  • USB drive enclosures are a total crapshoot when it comes to the quality. Some are good, some will have random issues.
  • SMR based hard drives can be unusably slow for certain workloads.
  • Desktop PC-s use quite a lot of power when sitting mostly idle (50+ watts).
  • You might be OK with Intel QuickSync for your transcoding needs, try it out before opting for a much more powerful hardware configuration.
  • Some hard drives are very, very loud. If you live in an apartment, keep this in mind, otherwise you will start trying to rationalise the purchase of 8TB SSD-s to make your setup quieter.
  • ZFS snapshotting with a tool like Sanoid is invaluable.
  • You will need to use your offline backups, don’t think that you can get away without having some.
  • Five nines uptime is perfectly doable in a homelab environment, if you are willing to move the decimal point.
  • It’s all fun and games until you have actual people using services on your server.
  • Who needs a fancy monitoring setup when you have your friends and family members yelling that the server is down?
  • VM-s are great for service isolation, but terrible for flexibility and efficiency.
  • Containers, if kept up to date, are an amazing way to manage your numerous services.
  • BTRFS is one of the few filesystem options on 32-bit ARM CPU based machines that can still provide data integrity benefits.
  • Some workloads, such as databases and services with lots of random I/O, require an SSD to perform well.
  • If your workload is very heavily dependent on random I/O, then the “pro” branded SSD-s are actually worth the money.
  • SSD power usages can vary wildly, some may require 5V@1A, some up to 5V@1.8A. This will be problematic for hosts that cannot supply much power through the USB ports, such as a Raspberry Pi.
  • Armbian is great for SBC-s that support it.
  • Try running your database on a slow machine first. Any optimizations you will make will be very noticeable and your database will fly once you move it to a more powerful machine.
  • Old laptops are a great way to start your self-hosting adventure, especially if you can limit the fan noise with a tool like thinkfan.
  • External hard drives, such as the WD Elements or WD MyBook, are a great way to build multi-terabyte storage setups without breaking the bank.
  • Raspberry Pi 4 specs sound good on paper, but its limited I/O capabilities prevent it from doing too many things at once.
  • When setting up your system, document every command and installed package for future reference. You never know when it may come in handy.
  • Configure your setup for when you get hacked.
  • Things will break at the most inconvenient time.
  • Some computers can be very temperamental. However, it might be easier to handle the quirks of one system rather than getting a replacement and learning about its quirks the hard way.
  • Some workloads, such as Heritrix, might not run well on all platforms, such as arm64 or armhf.
  • The original Raspberry Pi 1 B+ is just too slow for most useful workloads in 2021, even when overclocked.
  • Having a filesystem that can protect from data corruption is a must-have.
  • Only use ZFS SLOG and L2ARC devices if you are absolutely sure that your workloads will benefit from them. If your current ZFS ARC cache hit rate is already over 90+%, then it probably is not worth it.
  • Netdata is both beautiful and useful.
  • OS support cycles mean nothing and can be changed on a whim.
  • If you want a stable ZFS setup, use a distro that has a stable kernel version. Debian and Ubuntu are great for this purpose.
  • Update and restart as often as possible. It’s much easier to rule out what broke your setup if the amount of changes that have built up is small.
  • Automate the way you deploy configuration changes to your server.