Unraid to Proxmox VE Migration: Your Pre-Migration Checklist

Unraid to Proxmox VE 9.2 migration checklist covering Docker LXCs, ZFS pools, and PBS backups. Run the audit before touching a disk so you never lose your backup window.

Proxmox PulseProxmox Pulse
10 min read
zfs-poolsdocker-lxcproxmox-vepbs-backuphomelab
A sleek server rack, hard drives, cables, a bridge, water pools, backup drives, dark, moody studio setting, dramatic lighting, colour palette, mood, camera angle, lens.

If you are moving a homelab from Unraid to Proxmox VE 9.2, the checklist that matters is smaller than you think: Docker LXCs, ZFS pools, and PBS backups. This post turns that migration into a repeatable checklist you can run before you touch a single disk, so you do not have to guess your way through the swap.

The outcome is straightforward: you get a documented, testable path from Unraid’s single-disk simplicity to Proxmox’s container and VM world, without losing your backup window or your Docker stack.

Key Takeaways

  • Checklist first — run the audit before you touch a single disk; Unraid’s parity recovery is not your friend when you are in a hurry.
  • ZFS scrub — a full pool scrub on your new Proxmox host should finish in a few hours, not a few days; if it takes longer, your pool is not ready.
  • Docker LXC — Docker inside an unprivileged LXC fails with overlay and cgroup issues; your checklist must include a privileged container test run.
  • PBS backup — your PBS target should be tested with a restore, not just a backup success, or you have an untested safety net.
  • Tradeoff — Unraid’s single-disk simplicity is real; Proxmox’s ZFS complexity is the tradeoff, and you should choose it with eyes open.

Why Unraid Runs Out of Steam Before Proxmox Does

Unraid’s single-disk simplicity is a genuine advantage for homelab owners who want a storage layer that does not require a pool rebuild. That advantage fades as your homelab grows into Docker stacks, VMs, and backup jobs that need more than one disk and a single service account.

Unraid’s parity recovery is a genuine tradeoff. Parity rebuilds take hours, and if you have a single disk failure, you are waiting for a rebuild that may not complete cleanly. Proxmox’s ZFS pools give you a scrub cycle measured in hours, not days, and a failure domain that is visible in a single command.

How to Audit the ZFS Pool Before Migration

Run the audit on the new Proxmox host before you move anything. The audit covers pool state, ARC health, and scrub status, which is what you will want to verify every time you add a disk to the pool.

zfs status

That command returns the pool’s state, including any failed mirrors or scrub failures. If you see UNAVAIL or a scrub in progress with no completion date, your pool is not ready for migration.

zfs list

This lists every dataset with its size, used, and mountpoint. You want the new pool to have enough headroom for your Docker LXCs, your VMs, and your PBS backup target.

zfs scrub

Run a scrub on your new Proxmox ZFS pool before you write anything to it. On a typical 4-disk mirror pool, a scrub takes a few hours, not a few days. If your scrub takes more than a day, your pool is not ready for production.

How to Audit ARC Health and Scrub Schedule

ARC health is the other half of the ZFS audit. The scrub schedule and ARC health are what you want to verify before you add a PBS backup job, because that is what your backup will depend on.

zfs get all tank

This lists every pool property, including scrub interval, scrub date, and scrub duration. You want to see a scrub interval that matches your homelab’s maintenance window, not a scrub that has been running for a week.

zfs get all tank | grep scrub

This filters the scrub properties. You want to see a scrub interval that matches your homelab’s maintenance window, not a scrub that has been running for a week.

zfs get all tank | grep -i scrub

This is the most reliable form, since ZFS properties are case-sensitive in some versions. You want to see a scrub interval that matches your homelab’s maintenance window, not a scrub that has been running for a week.

How to Set Up Docker LXCs for Production

Docker LXCs are the heart of most homelab migrations. The checklist here is smaller than you think: a privileged container, a test run, and a backup test.

pve-update

This updates your Proxmox package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pveupgrade

This upgrades your Proxmox packages, which is what you want to verify before you create a container. You want to see a clean upgrade with no failures, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a container. You want to see a clean list with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-index

This rebuilds your package index, which is what you want to verify before you create a container. You want to see a clean index with no pending packages, or you will be chasing a package failure mid-migration.

pve-update-list

This lists your pending package updates, which is what you want to verify before you create a

Share
Proxmox Pulse

Written by

Proxmox Pulse

Sysadmin-driven guides for getting the most out of Proxmox VE in production and homelab environments.

Related Articles

View all →