Proxmox Setup v2 - moving root onto an SSD and away from the ZFS array


After the migration to the new HP Microserver, there have been a few teething issues:

  • ZFS is very slow with 8GB RAM
  • I want to move Proxmox to SSD, along with all the VMs
  • I want storage to be placed onto the 3TB drives with ZFS
  • I’ve been running out of memory because of the ZFS ARC cache, I can’t even ssh into VMs

I’ve ordered 16GB of ram for this server, as I was running out of space currently. The plan is to provision 1GB of ram to ZFS for slow file transfers, VMs will be on the SSD for faster reaction times.

Steps

  • Backup VMs to a spare 500GB drive I have laying around
  • Put SSD into port 1, move HDDS to port 3 & 4 as ports 1 & 2 are 6Gbps, 3,4 and ODB are 3Gbps
  • Additionally, there is no option to select the boot order when using the microserver in AHCI mode, so port 1 for the boot drive.
  • Install Proxmox onto SSD with ext4 as filesystem
  • As before, setup no-subscription repos, apt update && apt dist-upgrade
  • Setup linux bridges again & reboot

    Restore VMs

  • Mount 500GB that has the VM backups HDD to /mnt/
  • Copy VMs to /var/lib/vz/dump/ this places them into “local”
  • From GUI restore VMs to local-lvm

Create ZFS Mirror pool from CLI

Format the drives

root@sequoya:/# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                            8:0    0 119.2G  0 disk 
├─sda1                         8:1    0  1007K  0 part 
├─sda2                         8:2    0   512M  0 part 
└─sda3                         8:3    0 118.8G  0 part 
  ├─pve-root                 253:0    0  29.5G  0 lvm  /
  ├─pve-swap                 253:1    0     7G  0 lvm  [SWAP]
  ├─pve-data_tmeta           253:2    0     1G  0 lvm  
  │ └─pve-data-tpool         253:4    0  65.5G  0 lvm  
  │   ├─pve-data             253:5    0  65.5G  0 lvm  
  │   ├─pve-vm--100--disk--0 253:6    0    32G  0 lvm  
  │   ├─pve-vm--101--disk--0 253:7    0    16G  0 lvm  
  │   ├─pve-vm--105--disk--0 253:8    0    32G  0 lvm  
  │   ├─pve-vm--102--disk--0 253:9    0    20G  0 lvm  
  │   └─pve-vm--103--disk--0 253:10   0    20G  0 lvm  
  └─pve-data_tdata           253:3    0  65.5G  0 lvm  
    └─pve-data-tpool         253:4    0  65.5G  0 lvm  
      ├─pve-data             253:5    0  65.5G  0 lvm  
      ├─pve-vm--100--disk--0 253:6    0    32G  0 lvm  
      ├─pve-vm--101--disk--0 253:7    0    16G  0 lvm  
      ├─pve-vm--105--disk--0 253:8    0    32G  0 lvm  
      ├─pve-vm--102--disk--0 253:9    0    20G  0 lvm  
      └─pve-vm--103--disk--0 253:10   0    20G  0 lvm  
sdb                            8:16   0 465.8G  0 disk 
└─sdb1                         8:17   0 465.8G  0 part 
sdc                            8:32   0   2.7T  0 disk 
├─sdc1                         8:33   0  1007K  0 part 
├─sdc2                         8:34   0   512M  0 part 
└─sdc3                         8:35   0   2.7T  0 part 
sdd                            8:48   0   2.7T  0 disk 
├─sdd1                         8:49   0  1007K  0 part 
├─sdd2                         8:50   0   512M  0 part 
└─sdd3                         8:51   0   2.7T  0 part 

My 3TB drives are mapped to /dev/sdc and /dev/sdd, fist step is to partition them.

root@sequoya:/# fdisk /dev/sdc

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-3, default 3): 

Partition 3 has been deleted.

Command (m for help): d
Partition number (1,2, default 2): 

Partition 2 has been deleted.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): g
Created a new GPT disklabel (GUID: 02DC54A3-4E42-4EF6-8337-0BC6414A1E81).

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Do this for both disks, leave them unformatted.

Create a new mirrored ZFS pool called ‘zfs’ with the drives:

zpool create zfs mirror /dev/sdc /dev/sdd

Setup compression:

zfs set compression=lz4 zfs

Make a directory, for a directory style Proxmox datastore:

mkdir -p /zfs/data

My ZFS pool automounted to /zfs and does so at boot, there are no fstab rules for it.

Add a directory datasore in proxmox mounted from /zfs/data, and create a zfs-thin and attach it to the ‘zfs’ pool.

Done!

Conclusion

  • Performance is now substantially better and RAM usage is down.
  • ZFS ARC Cache no longer needs maximum limits set, it seems to be much more reasonable. I imagine this is due to the fact that the data in the ZFS pool is accessed infrequently.

Still to do

  • Still, need to setup GPU passthrough.
  • Still waiting on the 16GB RAM upgrade to arrive…

Related

PfSense DNS Resolver with PiHole DNS forwarder for network-wide ad-blocking

Configuring Unbound on PfSense as a DNS Resolver to register DHCP hostnames on localdomain and using PiHole as a DNS Forwarder to perform network-wide ad-blocking.

Setting up a Greylog server for central logging with Ansible

Learning how to use Ansible through setting up a Graylog server for centralised syslogging.

Proxmox host migration; new Home Server day

A workbook of migrating Proxmox to a new host for the first time.

Migrating Docker from Digital Ocean to home

Moving my docker containers to a new host at home.

Setting up a VLAN with PfSence

A quick introduction to setting up VLANs with PfSence for a guest network.

Simulating Spin-Echo Metabolite NMR / MR Spectra with PyGamma (VeSPA)

How to simulate MR metabolite spectra with PyGamma, including binning and plotting.

Converting a BBC Micro keyboard to USB with an Arduino Micro (ATmega 32U4)

Using an Arduino to turn a BBC Micro keyboard to be USB compatible.