My dear hardware wizzards, could you please advice me?
My plan is to build a home server/workstation/NAS around Ryzen.
Currently looking at: Ryzen 1700 AsRock motherboard, probably Taichi, ECC memory as much as possible 1x NVME disk 2x SSD disk 8x HDD disk
I would like to run linux as host, probably Ubuntu, and these guest OSes via virtualization, running : 1. Debian as my personal linux for my needs 2. Windows 10 for work - programming, intensive compiling (using Visual Stuio etc), this VM should be on nvme disk 3. NAS (FreeNas or NAS4FREE) with access to some HDDs directly (ZFS) 4. Possibly second NAS for another person, not sure about this 5. Possibly other Linux VMs or Docker for running some applications in isolation
This server/workstation will be accessd mostly remotely, either via SSH or RemoteDesktop (RDP into Windows, something also into Host OS)
Questions:
Is Ubuntu suitable as Host OS? I dont have any experience with Level 1 Hypervisors, I was thinking ubuntu is most user friendly and can do everything, am I right? I would like to be able to SSH into the host OS, as well as run graphical desktop and connect to it via some remote desktop mechanism, TeamViewer or something..
What software for virtualization would you recommend? The WIndows has to run in VM Ware Player, it is already existing VM, but rest will be created, so I can use other VM software as well..
Is HDD passthrough possible? I heard Ryzen has some problems with passthrough... Currently I have nas4free on dedicated machine and I would like to migrate into one guest, it is having 4 HDD formated with ZFS. In order for ZFS to work properly it needs to have access to hardware, so passthrough is important I beleive.
What about GPU? I know ryzen doesnt have integrated GPU like Intel, what should I use? I dont intend to play games at all, but I would like to access this remotely from a 4K devices.
What do you think about the overall architecture/idea? Would you change it or do you think it is ok?
Just be aware, there are caveats with virtualizing FreeNAS:
Not sure if this extends to NAS4Free, but even though they're two separate projects split from the same original OS, I would expect it to be applicable to both.
Yeah Ubuntu can do that.
For Linux OSes, I would use Linux Containers with Virtual Machine Manager. For Windows, I personally use QEMU with Virtual Machine Manager, but as you've mentioned, you need it to run in VM Ware Player.
Yes, you can passthrough entire block devices to the VM. The problems with RyZen are IOMMU grouping issues and that shouldn't affect your ability to passthrough HDDs. That's more so for GPUs and other PCI-e devices. The NVMe drive would be a PCI-e device, but I wouldn't pass that through to the Windows VM anyway. I'd just stick the virtual HDD file on that drive and be done with it.
It should work. Giving direct access for ZFS is the only thing that might be troublesome. What you could do is install ZFS to the host machine, setup the 8 HDD disks with that and import the zpool, then attach that as one large device to the NAS4Free VM. This way you can be sure ZFS is managing the devices directly so it works as intended with checksums and scrubs. Though I'd definitely read that article above. The issue with that setup is that then NAS4Free is trying to do ZFS as well as the host system. So you'd need to disable that somehow. Possibly by just removing the zpool in NAS4Free and importing it as some other file system.
I wouldn't make a separate NAS VM for someone else. Just create a user for them in NAS4Free and separate the two users' files with a separate volume created in the GUI. Unless they need separate plugins and you don't want to see those for your user. There is inherent performance overhead regarding VMs. This is why Linux Containers are nice. They don't emulate the hardware for the OS in the container, which is where the overhead comes from.
For remoting into the host OS, you can use Remmina Remote Desktop Client if you are on Linux. It has support for RDP as well and remembers connections so you can just double click to access something. On the Host OS, you can use either VNC (Virutal Network Computing), or XDMCP (X Remote Session). I've never used either of those though so GLHF.