134 lines
4.9 KiB
Markdown
134 lines
4.9 KiB
Markdown
|
|
---
|
||
|
|
title: Park a Proxmox Guest on the NAS and Re-Adopt It
|
||
|
|
type: runbook
|
||
|
|
tags:
|
||
|
|
- proxmox
|
||
|
|
- storage
|
||
|
|
aliases: []
|
||
|
|
related:
|
||
|
|
- [[omv-add-nfs-share]]
|
||
|
|
- [[environment]]
|
||
|
|
- [[proxmox-onboard-node]]
|
||
|
|
- [[proxmox-create-ubuntu-vm]]
|
||
|
|
- [[pi-nas-omv-runbook]]
|
||
|
|
updated: 2026-08-14
|
||
|
|
---
|
||
|
|
# Park a Proxmox Guest on the NAS and Re-Adopt It
|
||
|
|
|
||
|
|
Shut a guest down, archive the whole thing to pi-nas, rebuild or replace the node, then bring the guest back on **any** node in the cluster. This is the Proxmox equivalent of registering an orphaned VM from an ESXi datastore, and it is the supported way to free a node for rebuild without shared runtime storage.
|
||
|
|
|
||
|
|
The archive is self-contained and carries no reference to its origin host, so it can be restored to a different node, a different VMID, different storage, or a freshly reinstalled machine.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
The `pinas-backup` storage must exist. It was added 2026-08-14 and is visible on all five cluster nodes:
|
||
|
|
|
||
|
|
| Setting | Value |
|
||
|
|
|---|---|
|
||
|
|
| Type | NFS, `vers=3` |
|
||
|
|
| Server | `192.168.1.245` (pi-nas) |
|
||
|
|
| Export | `/export/pvebackup` |
|
||
|
|
| Backing disk | `sdc1` — the 19 TB-free drive, deliberately not `sdd1` (PeerTube) |
|
||
|
|
| Content | `backup` |
|
||
|
|
| Mount point | `/mnt/pve/pinas-backup` |
|
||
|
|
|
||
|
|
Confirm before starting:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pvesm status | grep pinas-backup
|
||
|
|
```
|
||
|
|
|
||
|
|
Creating or recreating this share is covered in [[omv-add-nfs-share]]. General NAS build is [[pi-nas-omv-runbook]].
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. Park the guest
|
||
|
|
|
||
|
|
`--mode stop` shuts the guest down cleanly, archives it, and leaves it stopped.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# container
|
||
|
|
vzdump 111 --mode stop --storage pinas-backup --compress zstd
|
||
|
|
|
||
|
|
# VM
|
||
|
|
vzdump 105 --mode stop --storage pinas-backup --compress zstd
|
||
|
|
```
|
||
|
|
|
||
|
|
Note the archive name it prints. Files land in `/mnt/pve/pinas-backup/dump/`:
|
||
|
|
|
||
|
|
```
|
||
|
|
vzdump-lxc-111-2026_08_14-10_22_31.tar.zst # container
|
||
|
|
vzdump-qemu-105-2026_08_14-10_45_02.vma.zst # VM
|
||
|
|
```
|
||
|
|
|
||
|
|
Compression is significant — a 50 GB container typically lands near 1.5 GB.
|
||
|
|
|
||
|
|
List what is parked:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pvesm list pinas-backup
|
||
|
|
```
|
||
|
|
|
||
|
|
## 2. Remove the guest from the source node
|
||
|
|
|
||
|
|
Only once the archive is verified present and non-zero. This is the destructive step.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pct destroy 111 # container
|
||
|
|
qm destroy 105 # VM
|
||
|
|
```
|
||
|
|
|
||
|
|
Skip this entirely if the plan is to wipe the node anyway.
|
||
|
|
|
||
|
|
## 3. Rebuild the node
|
||
|
|
|
||
|
|
Node rebuild is [[proxmox-onboard-node]]. The archive is untouched by anything done to the node.
|
||
|
|
|
||
|
|
## 4. Adopt it back
|
||
|
|
|
||
|
|
Run this **on the node you want the guest to live on**. The VMID and target storage are free choices — they do not have to match the original.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# container
|
||
|
|
pct restore 111 pinas-backup:backup/vzdump-lxc-111-2026_08_14-10_22_31.tar.zst \
|
||
|
|
--storage local-lvm
|
||
|
|
|
||
|
|
# VM
|
||
|
|
qmrestore pinas-backup:backup/vzdump-qemu-105-2026_08_14-10_45_02.vma.zst 105 \
|
||
|
|
--storage local-lvm
|
||
|
|
```
|
||
|
|
|
||
|
|
To clone rather than move, restore under a new VMID and leave the original in place.
|
||
|
|
|
||
|
|
## 5. Start and verify
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pct start 111 && pct status 111
|
||
|
|
qm start 105 && qm status 105
|
||
|
|
```
|
||
|
|
|
||
|
|
Verify the service itself, not just that the guest is running. For anything with a web front end, follow [[headless-browser-page-verification]].
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Things that will bite you
|
||
|
|
|
||
|
|
**Containers cannot live-migrate in PVE 9 at all.** This is a hard platform limitation, not a configuration gap. Restart migration is the only option for LXC. VMs live-migrate normally when storage is shared.
|
||
|
|
|
||
|
|
**Bind mounts and device mount points are not captured.** `vzdump` skips their contents. Anything reached through a bind mount, a `lxc.mount.entry`, or virtiofs must be moved separately. This applies directly to recon-vm, whose `nav`, `kiwix` and `library` shares are virtiofs from the host — see [[navi-recon-separation]].
|
||
|
|
|
||
|
|
**Passthrough does not survive relocation.** USB devices, PCI passthrough and custom `args:` reference host-specific paths. Guests using them need those recreated on the target node before they will start.
|
||
|
|
|
||
|
|
**`sdc` has no redundancy.** It is a single ext4 drive. An archive parked there dies with the drive — acceptable for a staging area you are actively pulling back from, not acceptable as the only copy of something. Only `sda`/`sdb` on pi-nas are mirrored.
|
||
|
|
|
||
|
|
**Space is shared.** `/export/pvebackup` and `/export/arr` sit on the same physical drive, so the ~19 TB free is not exclusively yours.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Why not shared runtime storage
|
||
|
|
|
||
|
|
Running guests directly off NFS was considered and rejected: container volumes are raw images, NFS snapshots require qcow2, so `pct snapshot` / `pct rollback` stops working — and that rollback path is what [[fleet-patch-audit]] depends on for safe patching. It would also make pi-nas a single point of failure for every guest on every node simultaneously.
|
||
|
|
|
||
|
|
Ceph was considered for the same goal. It needs a dedicated whole drive per node, and three of five nodes have no free drive bay; it also costs ~4 GB RAM per OSD on two nodes that are hard-capped at 32 GB. See [[fleet-storage-memory-upgrade]].
|