AllGeneral ITNSXOMVStorage & BackupTrueNASVCFvRealizevSphereVVF Lab
OMV 7 on Dell R620 — Part 2: Kernel, ZFS, 10Gb Networking and ESXi Integration

Part 1 got OMV installed and running on the R620. This part covers everything that turns it into a high-performance ZFS storage server feeding ESXi over a 20Gbps LACP bond — kernel replacement, network config, ZFS pool creation, NFS export, and ongoing monitoring.

The R620 has 384 GB of DDR3 — most of that becomes ZFS ARC (RAM cache). With 10 SAS drives in 5 mirrored pairs and sync writes disabled, this box absorbs VM write spikes almost entirely in memory.

Phase 2 — Kernel Preparation and ZFS

Replace the stock Debian kernel with the Proxmox PVE kernel for native ZFS support

Step 2.1 — Enable OMV-Extras

ZFS and kernel management are community features outside the default OMV repo. SSH in as root and run:

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

Step 2.2 — Install the Kernel Management Plugin

In the OMV Web GUI, go to System → Plugins, search for kernel, and install openmediavault-kernel. Wait for the terminal window to confirm completion.

Step 2.3 — Install the Proxmox PVE Kernel

  1. Go to System → Kernel.
  2. Click the Proxmox “P” icon (Install Proxmox Kernel) in the toolbar.
  3. Select version 6.17 (or the latest -pve listed) and click Install. Do not close the window until it finishes.

Step 2.4 — Set Default Kernel and Reboot

  1. In System → Kernel, find the -pve entry and click the checkmark icon to set it as default.
  2. Reboot from the power menu top-right.

Step 2.5 — Verify and Install ZFS Plugin

  1. After reboot, confirm the -pve kernel has a checkmark in the Running column.
  2. Go to System → Plugins, search zfs, install openmediavault-zfs.
  3. Hard-refresh (Ctrl+F5) — a ZFS menu should now appear under Storage.

Phase 2 Checklist

  • OMV-Extras installed successfully
  • Running kernel ends in -pve
  • ZFS menu visible under Storage in the sidebar

Phase 3 — Network and 10Gb Optimization

20Gbps LACP bond on the X520 ports with VLAN xx and 9000 MTU end-to-end

Step 3.1 — Create the LACP Bond

  1. Go to Network → Interfaces → Create → Bond.
  2. Name: bond0. Slaves: eno1 and eno2 (the 10GbE X520 ports).
  3. Mode: IEEE 802.3ad LACP. Transmit hash policy: layer2+3. MTU: 9000.
  4. IPv4: Disabled. Save and Apply.

Step 3.2 — Create the VLAN xx Interface

  1. Create → VLAN. Parent: bond0. VLAN ID: 48. MTU: 9000.
  2. IPv4 Static: x.x.x.100 / x.x.x.x. Leave gateway and DNS blank.
  3. Save and Apply.
Adding a gateway to this interface can cause management lockouts. Leave it blank.

Step 3.3 — Force LACP Fast Rate

OMV defaults to slow mode (30s heartbeats). Force 1-second heartbeats to match the MikroTik:

ip link set bond0 down && echo 1 > /sys/class/net/bond0/bonding/lacp_rate && ip link set bond0 up # Verify cat /proc/net/bonding/bond0 | grep "LACP rate" # Expected: LACP rate: fast

Step 3.4 — Persist LACP Fast Rate Across Reboots

Automate it via System → Scheduled Tasks → Create. Set execution to At reboot, user root, command:

ip link set bond0 down && echo 1 > /sys/class/net/bond0/bonding/lacp_rate && ip link set bond0 up

Phase 3 Checklist

  • cat /proc/net/bonding/bond0 shows Speed: 20000 Mbps
  • cat /proc/net/bonding/bond0 shows LACP rate: fast
  • ping -M do -s 8972 x.x.x.1 returns successful replies

Phase 4 — ZFS Pool and Performance Tuning

5.3TB usable pool across 5 mirrored pairs with RAM-backed write cache

Step 4.1 — Clear Old RAID Metadata

# Stop ghost arrays mdadm --stop /dev/md126 mdadm --stop /dev/md127 # Wipe RAID superblocks mdadm --zero-superblock /dev/sd[a-j] # If drives still appear busy, force-wipe the first 100MB for d in a b c d e f g h i j; do dd if=/dev/zero of=/dev/sd$d bs=1M count=100 conv=fdatasync; done
Run lsblk first to confirm drive letters. Make sure your BOSS card OS disk is not in the sd[a-j] range before wiping.

Step 4.2 — Create the Pool

zpool create -f -o ashift=12 esxi_datastore mirror /dev/sda /dev/sdb mirror /dev/sdc /dev/sdd mirror /dev/sde /dev/sdf mirror /dev/sdg /dev/sdh mirror /dev/sdi /dev/sdj
ashift=12 sets 4K block alignment for modern SAS drives. This cannot be changed after pool creation.

Step 4.3 — Performance Tuning

# Disable sync — RAM becomes the primary write target zfs set sync=disabled esxi_datastore # Match ESXi VMDK block size zfs set recordsize=64k esxi_datastore # LZ4 compression — fast, typically saves 20-30% on VM data zfs set compression=lz4 esxi_datastore # Disable access time stamps zfs set atime=off esxi_datastore
sync=disabled means data in the RAM write buffer is lost on hard power loss. A UPS with NUT integration is essential — covered in the Monitoring section below.

Step 4.4 — Increase the Dirty Data Write Buffer to 16 GB

nano /etc/modprobe.d/zfs.conf

Add:

options zfs zfs_dirty_data_max=17179869184

Then regenerate initramfs:

update-initramfs -u

Step 4.5 — Register the Pool in OMV

  1. Storage → ZFS → Pools — Import esxi_datastore.
  2. Under the Datasets tab, create a filesystem named esxi_dataset. Save and Apply.
  3. Storage → File Systems — mount /esxi_datastore/esxi_dataset. Save and Apply.

Phase 4 Checklist

  • zpool status shows 5 mirror VDEVs, state: ONLINE
  • zfs get sync,recordsize esxi_datastore returns disabled and 64K
  • Dataset esxi_dataset listed as Mounted in OMV File Systems

Phase 5 — NFS to ESXi

Expose ZFS storage to the ESXi host over the 10Gb storage VLAN

Step 5.1 — Create the Shared Folder

Go to Storage → Shared Folders → Create. Name: Datastore_NFS. File System: esxi_datastore/esxi_dataset. Relative Path: /. Save and Apply.

Step 5.2 — Configure the NFS Export

  1. Go to Services → NFS → Shares → Create.
  2. Shared folder: Datastore_NFS. Client: x.x.0.0/16.
  3. Extra options: rw,no_root_squash,no_subtree_check,insecure
  4. Save and Apply.
no_root_squash gives ESXi administrative control over its VM files. insecure allows ESXi to connect from high-numbered ports NFS would otherwise reject.

Step 5.3 — ESXi Storage Network

  1. In ESXi, go to Networking → VMkernel adapters → Add VMkernel adapter.
  2. Port group: your 10GbE SFP+ port group. VLAN ID: 48. MTU: 9000.
  3. IPv4 Static: x.x.x.10 / x.x.x.x. Leave gateway blank.

Step 5.4 — Mount the NFS Datastore in ESXi

  1. Storage → New Datastore → Mount NFS datastore.
  2. Name: OMV_ZFS_DATASTORE. NFS Server: x.x.x.100.
  3. NFS Share: /export/Datastore_NFS. NFS Version: NFS 3. Click Finish.

Phase 5 Checklist

  • Datastore appears in ESXi with Normal status
  • vmkping -d -s 8972 x.x.x.100 from ESXi SSH confirms the Jumbo path works
  • Creating a folder in the datastore from ESXi confirms NFS permissions are correct

Monitoring and Maintenance

ZFS Health and Monthly Scrubs

# Trigger a scrub zpool scrub esxi_datastore # Check pool health — state ONLINE, all error columns at 0 zpool status

Schedule scrubs in OMV under Storage → ZFS → Pools → Scrub Schedule.

ARC Cache Statistics

# Live cache hit rate — aim for 90%+ arcstat # Real-time throughput per mirror pair, updates every 5s zpool iostat -v 5

Bond and Network Health

cat /proc/net/bonding/bond0 # LACP rate: fast # MII Status: up on both eno1 and eno2

UPS Integration

Because sync=disabled keeps writes in RAM, a hard power cut loses that buffer. Install openmediavault-nut and configure it under Services → UPS to shut down gracefully on low battery.

Performance Troubleshooting

  1. Jumbo frames broken? Run vmkping -d -s 8972 x.x.x.100 from ESXi. Failure means a switch port reverted to MTU 1500.
  2. Pool too full? ZFS drops performance above 80% used. Check with zpool list.
  3. Dirty data limit active? Run cat /sys/module/zfs/parameters/zfs_dirty_data_max — should return 17179869184.

Next in this series

Part 3 — Dashboard & Monitoring →