The plan was to build a powerful enough home server that I could run a decent amount of virtual machines on top of the hypervisor and have different virtual environments to suit different purposes (media server, home theater, dev environment, network / VPN gateway).
Maintaining them as independent virtual machines gives you the benefits you’d expect – being able to use one physical server to provide you with as many virtual servers as you need. Overprovisioning allows you to allocate more CPU and memory resources than you actually have, and have them dynamically scale up and down to meet the needs of the workload running at that particular time. Transcoding? give the majority of the CPU time and memory resource to the media server for instance.
Tying in nicely with the choice to go down the hypervisor route is the use of LVM (Logical Volume Manager). This is essentially virtualisation of your physical storage. It allows you to provision your physical disks, which don’t have to be identical in any sense, into a pool of logical volumes. These can be assigned to a single physical volume, spread across many, moved resized etc. at will.
Physically I’ve got 3 drives in this server, a 256GB Samsung 840 Pro SSD, and 2x1TB standard SATA HDDs.
The SSD was designated for the operating systems root partitions to be sure they are as performant as possible. The HDDs are carved up between 1TB of data storage, and 1TB for snapshots to back up the virtual machines and to provide non performance critical generic storage (swapspace, local storage).
Arch linux running Xen 4.5.0
Running as lean as possible with 512mb of allocated RAM and a 40GB root partition.
Guest #1 Media Center (HVM)
Windows 8.1 running as a media center
* PCI passthrough of HD6850 video card for 3d acceleration
* USB passthrough of wireless keyboard
Guest #2 Media Server (HVM)
Ubuntu server 15.04 running as a media server
* Sickrage for triggering downloads of new episodes of TV shows
* Couchpotato for doing the same thing with Movies
* Sabnzbd for downloading from newsgroups
* Transmission for downloading from torrent sites
* Plex media server for indexing media, and making it accessable outside of the LAN (transcoding when needed)
Guest #4 (Still to build) VPN/Network Management Server (HVM)
Arch server running OpenVPN to allow connections in to home LAN.
* Network monitoring (nethogs, iftop, tcpdump etc.)
* Quality of service to dedicate a percentage of traffic to BitTorrent / Newsgroups – so we don’t have to manually configure each client with a limit, and to prioritise things like Skype/SSH/OpenVPN
* Default gateway / Firewall – all traffic from LAN will enter via eth1 and leave via eth0 to router.