Hi all, a few months ago I got started with selfhosting. Installed Ubuntu Server on a HP EliteDesk 705 G3 Mini. It’s been great, running Jellyfin, Tandoor, Calibre-Web, and Miniflux. Everything is local access only.
The machine came with 1TB SSD and currently about 80% of that is taken. I’ve been searching around for good options to expand. While I’m relatively comfortable on the software side of things, I’m very inexperienced with and somewhat intimidated by hardware (but would love to learn a bit more).
What would be the most prudent way to expand storage? Is it simply replacing the existing SSD? Should I think of adding a NAS instead?
Buying new hardware would be ok, my only hard requirement is that I don’t want to run proprietary software/OS.
Buy a server HDD with lots of TBs for your data and use the SSD only for your OS.
Thank you!
Could I ask why a server HDD and not a desktop HDD?
They are designed for permanent operation.
My low cost solution has been adding external mechanical disks. Those go up to several TB for cheap, so I put two and sync them with rsync weekly in case one suddenly fails.
As others have wisely said, keep the fast SSD for your OS, media rarely changes and is usually accessed sequentially, it can live in slower disks.
It won’t make streaming slower unless you have multiple clients streaming, as in several.
I find the network to be the bottleneck - my gigabit network connection saturates with 3 streams, and I’m using a conventional hard drive for my media (OS is on an M2 drive). This doesn’t seem to affect the video quality though.
Frankly SSD is overrated for common stuff, there are other bottlenecks that usually hit us first, such as network or processing.
As you build out, make sure you consider backup in your costs, don’t spend your money just on storage.
Also, since you have a mini there may only be room for one drive internally and almost no cooling. Larger drives will have issues with heat.
I second that advice. When choosing the HDD, make sure it is NAS-grade.
Yes, the consensus here seems to be that for media it is fine to choose a HDD. Won’t it make streaming from Jellyfin slower?
HDD is cheap and enough, but SSD is silent.
Not unless you choose really slow hard drives, or stream very high bitrate media. Most hard drives can easily do 100MB/s sequentially (i.e. reading a large file, such as long video files). Meanwhile high-bitrate 4K video is only about 50Mbit/s, so about 6MB/s.
No. People here grossly underestimate the performance of hdds. Streaming is an easy task for hdds.
No. Keep all the software running on SSDs while using HDDs for storing the video files themselves. You’ll never max their transfer speed out especially considering you’re not sharing with friends and family.
Add a second SSD, if the motherboard has a SATA port (I assume your current one is an NVMe drive). A SATA SSD is still more than fast enough as a second drive.
Moving to a bigger SSD also isn’t too difficult, as long as you have a system where you can have both the old and new SSD connected at the same time. It can be a different system if needed. Download Clonezilla onto a USB stick with Ventoy on it, and boot into it. Just make sure you have backups and do the clone in the correct direction (don’t clone the blank new drive onto the old one!!)
Thank you for the suggestion, I’ll have to open up the machine to see if the motherboard has a SATA port. Adding a second SSD doesn’t sound too hard assuming it is possible.
HP EliteDesk 705 G3 Mini
Probably has a pretty standard motherboard which most probably has SATA ports (looks like this on mine, the cables look like this and the PSU should have some spare power connectors). Once you have those, just plug in and you should be good to go. Not sure if SATA is hot-pluggable though; better to power off first.
It depends on how important your data is to you. Me personally, I just run a jellyfin server with dubiously acquired tv shows and movies. Which is to say that if I lost everything in a catastrophic failure, I wouldn’t much care, so I decided to get a refurbished 14tb USB connected external HDD.
If you run anything more important, you should listen to others who might have a more robust solution
I’ve considered this as well, as I already back my data up regularly. However, I read online that external disks aren’t good for long-term access. Have you run into any issues with that?
Like I said, I didn’t buy it expecting it to last forever, but I haven’t run into any problems yet and I’ve only had the drive for about a year now. We’ll see how it holds up when it hits real long term numbers.
External failure rates are hit and miss because frankly, they often get abused.
I’ve had some last for 10 years, other for 2, and I’m not kind to mine.
I’d say they have 2 issues to deal with: temp and being dropped. The cases have no cooling, and larger drives need greater cooling than smaller drives.
I currently have 2 external drives (4 TB each) I use for local redundancy. When sync happens, they get quite warm, so I keep an old 80mm case fan on them. These are 5 year old drives that have been running this way for 3 years. SMART doesn’t report any errors or high temps, but without the fan I’m sure it would.
Probably the easiest solution would be to just chuck a larger disk in the system and retain the original drive for the operating system. If you do not need the high speed of an SSD, you may be able to get more storage space for the money by going with a spinning disk. 7200RPM drives are fast enough for most applications, though you may run into issues streaming 4K (or higher) resolution video.
Another option would be to start building out a storage pool using some type of RAID technology. On my own server, I use ZFS for the data partition. It is basically a software RAID. I use a RAID-Z1 configuration, which stripes the data over multiple disks (three in my case) and uses a parity calculation to provide data redundancy. It also has the advantage that it can be expanded to new disks dynamically and does not require that all disks are the same size. Initial setup does require more work and you are now monitoring multiple physical disks, but having a unified storage pool and redundancy is a nice way to go.
Any way you go, just make sure you have good backups. Drives fail, and sometimes even early in their life. Backblaze reports can be an interesting read when looking at drive options, as they really do put the drives through the wringer.
7200RPM drives are fast enough for most applications, though you may run into issues streaming 4K (or higher) resolution video.
This is highly unlikely as even the highest bitrate 4k content is going to cap out at around 12MB/s while spinning drives can transfer at 120MB/s per drive. I’d say that 99% of people hosting their own media servers are still solely relying on spinning disks for storage as SSDs are still extremely expensive per TB comparatively and don’t really offer any advantages for storing bulk media at this point.
Can confirm, I have tens of terabytes of content and stream 4K content regularly from 7200 rpm drives. Never an issue, even in the slightest. Always buttery smooth playback without buffering, even on WiFi.
Thanks for that link to the blackblaze reports, definitely good to have, I always assume that a drive can fail any moment anyways.
Starting to build a storage pool sounds like a fun project, do you have suggestions of some hardware to start with that could later be expanded?
I’m not sure if data redundancy is necessary for my use case, as I don’t need to guarantee 24/7 accessibility.
It’s been a few of years since did my initial setup (8 apparently, just checked); so, my info is definitely out of date. Looking at the Ubuntu site they still list Ubuntu 16.04, but I think the info on setting it up is still valid. Though, it looks like they only list setting up a mirror or a stripe set without parity. A mirror is fine, but you trade half your storage space for complete data redundancy. That can make sense, but usually not for a self hosting situation. A stripe set without parity is only useful for losing data, never use this. The option you’ll want is a raidz, which is a stripe set with parity. The command will look like:
zpool create zpool raidz /dev/sdb /dev/sdc /dev/sdd
This would create a zpool named “zpool” from the drives at
/dev/sdb
,/dev/sdc
and/dev/sdd
.I would suggest spending some time reading up on the setup. It was actually pretty simple to do, but it’s good to have a foundation to work with. I also have this link bookmarked, as it was really helpful for getting rolling snapshots setup. As with the data redundancy given by RAID, it does not replace backups; but, can be used as part of a backup strategy. They also help when you make a mistake and delete/overwrite a file.
Finally, to answer your question about hardware, my recollection and experience has been that ZFS is not terribly demanding of CPU. I ran a Intel Core i3 for most of the server’s life and only upgraded when I realized that I wanted to game servers on it. Memory is more of an issue. The minimum requrement most often cited is 8GB, but I also saw a rule of thumb that you want 1GB of memory for each TB of storage. In the end, I went with 8GB of RAM, as I only had 4TB of storage (3 2TB disks in a RAIDZ1). But, also think about what other workloads you have on the system. When built, I was only running NextCloud, NGinx, Splunk, PiHole and WordPress (all in docker containers). And the initial 8GB of RAM was doing just fine. When I started running game servers, I stared to run into issues. I now have 16GB and am mostly fine. Some game servers can be a bit heavy (e.g. Minecraft, because fucking Java), but I don’t normally see problems. Also, since the link I provided mentioned it, skip ECC memory. it’s almost never worth the cost, and for home use that “almost never” gets much closer to “actually never”.
When choosing disks, keep in mind that you will need a minimum of 2 disks and you effectively lose the storage space of one of the disks in the pool to parity storage (assuming all disks are the same size). Also, it is best for all of the disks to be the same size. You can technically use different size disks in the same pool; but, the larger disks get treated as the same size as the smaller disks. So long as the pool is healthy, read speeds are better than a single disk as the read can be spread out among the pool. But, write speeds can be slower, as the parity needs to be calculated at write time. Otherwise, you’re pretty free to choose any disks which will be recognized by the OS. You mention that 1TB is filling up; so, you’ll want to pick something bigger. I mentioned using spinning disks, as they can provide a lot more space for the money. Something like a 14TB WD Red drive can be had for $280 ($20/TB). With three of those in a RAIDZ1 pool, you get ~28TB of storage and can tolerate one disk failure , without losing data. With solid state disks, you can expect costs closer to $80/TB. Though, there is a tradeoff in speed. So, you need to consider what type of workloads you expect the storage pool to handle. Video editing on spinning rust is not going to be fun. Streaming video at 4k is probably OK, though 8k is going to struggle.
A couple other things think about are space in the chassis, drive connections and power. Chassis space is pretty obvious, you gotta put the disks in the box. Technically, you don’t have to mount the disks, they can just be sitting at the bottom of the case, but this can cause problems with heat shortening the lifespan of the drives. It’s best to have them properly mounted and fans pushing air over them. Drive connections are one of those, you either have the headers or you don’t. Make sure your motherboard can support 3 more drives with the chosen interface (SATA, NVMe, etc.) before you get the drives. Nothing sucks more than having a fancy new drive only to be unable to plug it into the motherboard. Lastly, drives (and especially spinning drives) can be power hungry. Make sure your power supply can support the extra power requirements.
Good luck whatever route you pick.
Appreciate the detailed writeup and for highlighting the tradeoffs. Useful information for the DIY build approach
If you don’t yet have a USB adapter for using NVMe SSDs over USB-3 ports, I’d suggest to buy such a thing first, since they not just make for a simple yet (decently) fast storage expansion solution, but are very useful in all sorts of situations.