Proxmox: Adding an SSD and Configuring Backups

With all my VMs and containers moved over to the new Proxmox machine, the old server was finally free and so was its hardware. It had been running on an Inland 1 TB NVMe SSD that was more than a few years old, but still usable. Rather than let it sit around, I figured it would make a great secondary drive for the new server, especially for backups.

Adding the SSD

Hardware Installation

I pulled the SSD out of the old machine and opened up the mini PC. The case was straightforward to open, and the empty M.2 slot was easy to spot. I inserted the SSD, secured it with a screw, and added a thermal pad on top for good measure.

Drive Configuration

With the drive installed, I reassembled the mini PC and booted it up. From a root shell, I ran lsblk to identify the new drive. In my case, it showed up as nvme1n1, still containing the old partitions from when it was the boot drive in the previous machine.

To clean it up, I went to: Node → Disks → (select drive) → Wipe Disk
Once wiped, I clicked Initialize Disk with GPT to give it a fresh partition table.

I planned to split the drive into two halves — one for backups and one for VM storage — but decided to reboot first. When the machine came back up, the drive names had swapped (nvme1n1 became nvme0n1), which threw me off for a moment. Apparently this is normal behavior depending on PCIe enumeration order.

Since the Proxmox UI doesn’t support partitioning NVMe drives directly, I switched back to the shell and created two partitions manually:

parted /dev/nvme0n1 --script mklabel gpt
parted /dev/nvme0n1 --script mkpart primary 0% 500GB
parted /dev/nvme0n1 --script mkpart primary 500GB 100%

A quick lsblk confirmed the new partitions.

Adding the Drive to Proxmox

For the VM storage, I wanted an LVM-Thin pool. I went to Node → Disks → LVM-Thin → Create: Thinpool. I selected the first new partition, gave it a name, and then clicked “Create”. Proxmox reformatted the partition and added it to the storage list. Now, when creating a new VM, I can choose secondary-storage as the disk location.

Next I wanted to add the second partition to be used for backups. I went to Node → Disks → Directory → Create: Directory. I selected the second partition, named it, set the filesystem to ext4, and clicked “Create”. Similar to before, this reformatted the partition and added it to the storage list.

Setting up backups

With the new drive ready, I set up an automated backup schedule. I wanted all my machines backed up, so I went to: Datacenter → Backup → Add.

  • Storage: local-backups (the new backup drive)
  • Mode: Stop
  • Schedule: sat *-1..7 04:00
  • Selection Mode: All
  • Compression: ZSTD

In the “Retention” tab, I configured how many backups to keep, then clicked “Create”.

Finally, I selected the new backup job and clicked “Run now” to test it. Once it completed successfully, everything was set.

The new Proxmox box now has all the initial setup I need to run my critical containers. From here, I’m planning to explore additional containers and continue growing the homelab.

Proxmox: Restoring VMs

With my new Proxmox host set up, it was time to bring over my existing VMs and containers. Since I had already experimented with Proxmox on my old desktop, I had a handful of machines ready to go — Home Assistant, a few LXCs, and some supporting services. I might do a separate post on how those were originally set up, but this felt like the perfect chance to test the backup and restore process for real.

I’d configured backups during my initial Proxmox trial, but you never really know how reliable a backup system is until you have to depend on it. My plan was simple: copy the backups to a USB drive, plug it into the new machine, and see how smoothly the restore process went.

Setting up the USB

I had a 32 GB USB drive lying around that seemed big enough for the backups. It was formatted as NTFS from its previous life in Windows, but since I’d be using it between Linux servers, I decided to reformat it as ext4.

With the new server still on my workbench, I plugged the drive in and opened a root shell through the Proxmox web UI. Running lsblk gave me a list of all attached drives, and I identified the USB stick by its size (sda).

After unmounting it just to be safe (unmount /dev/sda1), I wiped the old filesystem:

wipefs -a /dev/sda

Then created a fresh ext4 filesystem:

mkfs.ext4 /dev/sda

A quick lsblk confirmed the drive now had a clean ext4 filesystem at the root, with no partitions — exactly what I wanted.

Configuring the drive for use

Next, I moved the USB stick to the old Proxmox server so I could copy the backups onto it. This machine had multiple drives, so the USB showed up as sdb. Another lsblk made it easy to spot.

Before I could access it, I needed to mount it:

mkdir -p /mnt/usb
mount /dev/sdb /mnt/usb

With the drive mounted, I added it to Proxmox as a storage location: Datacenter → Storage → Add → Directory

  • ID: usb-backup
  • Directory: /mnt/usb
  • Content: Backup

Once added, it appeared in the sidebar and was ready to use.

Creating the backup

My existing backups were a few days old, so I figured I might as well generate a fresh one. I selected my Home Assistant VM and went to: Backup → Backup Now

  • Storage: usb-backup
  • Mode: Stop
  • Compression: ZSTD

When the backup finished, I shut down the VM so that it would not make any further updates and not conflict with the new VM I was going to restore.

Back in the root shell, I unmounted the USB drive:

umount /mnt/usb

The first attempt hung for a bit, so I canceled it and tried again. The second attempt returned immediately. With the backup created, it was time to try restoring it.

Restoring the backup

On the new Proxmox host, I repeated the same steps as before: identify the USB drive, mount it, and add it as a storage directory. Once that was done, I selected “usb-backup” in the sidebar and opened the “Backups” tab. The backup file appeared right away.

Clicking “Restore” brought up the restore dialog. I changed the storage to local-lvm so the VM would be created in the right place, and I made sure the VM ID matched the original. Everything else I left at the defaults.

After the restore completed, I opened the VM’s “Hardware” tab and double‑checked the network device. I wanted the MAC address to match the old machine so my router would assign the same IP. Once that was set, I booted the VM.

To my surprise, it came up without any issues. The router recognized it, assigned the correct IP, and Home Assistant picked up right where it left off. All my devices and automations continued running as if nothing had ever changed. I was genuinely impressed with how smooth the process was.

With the first restore successful, I unmounted the USB drive again and repeated the process for my three LXC containers (Nginx Proxy Manager, AdGuard, and Uptime Kuma). I only needed to mount and unmount the USB drive — the rest of the setup didn’t need to be repeated each time. Just like the VM, each restore was quick and uneventful. It gave me a lot more confidence in Proxmox’s backup system — it just works.

Proxmox Setup

A couple months ago, my Home Assistant instance — which had been running happily on a Raspberry Pi — suddenly stopped responding. After some digging, I discovered the SD card had died and taken the whole system with it. I’d been meaning to try Proxmox for a while, and this felt like the perfect excuse to finally jump in.

I had an old desktop in the basement, so I installed Proxmox on it and spun up a Home Assistant VM along with a few containers. It worked surprisingly well, but the machine only had 2 cores (4 threads) and 16 GB of RAM. After getting a taste of what Proxmox could do, I wanted something with more headroom — and this time I wanted to document the process properly instead of stumbling through it.

Choosing the Hardware

I looked at a few mini pcs and ended up finding a KAMRUI Pinova P2 Mini PC on sale for about $500. It looked like a great fit for a compact homelab node:

  • 12 cores / 16 threads
  • 32 GB DDR4
  • 1 TB NVMe SSD
  • Windows 11 Pro preinstalled (OEM key – I saved it just in case, though I don’t expect to use it)

For the price, it seemed like a solid Proxmox box, so I grabbed it.

Preparing for the Install

With the hardware picked out, the next step was getting Proxmox onto a USB stick so I could install it. The first step was to download the latest Proxmox VE ISO (9.1 at the time of writing) from proxmox.com. I flashed it onto a USB drive using Balena Etcher.

With the installer ready, it was time to convince the Mini PC to actually boot from USB.

Installing Proxmox

When I first powered it on, the machine went straight into Windows without giving me a chance to enter the BIOS. After some digging, I found the” Advanced Startup Options” menu in Windows, which let me reboot into “Windows Recovery” which then gave me an option to reboot directly into the BIOS.

Once there, I changed the boot order so USB devices were first. After saving and rebooting, the Proxmox installer finally appeared.

I followed along with a great walkthrough from WunderTech (https://www.youtube.com/watch?v=lFzWDJcRsqo). The installation steps were straightforward:

  • Select Graphic Installer
  • Accept EULA
  • Select Disk to install on
    • I only have the SSD it came with installed
    • In “Options” you can select the file system
      • I stuck with ext4 since it’s simple and reliable, and I didn’t need anything more advanced for this setup
  • Set country and timezone
  • Create root password + email
    • This is the root password we will use to access the proxmox instance
    • The email is used for admin notifications
  • Set network settings
    • If we want to choose a specific management interfaces we can, otherwise just select the first one
    • Set the IP Address (CIDR) which we want the host to request
      • We still need to set up a DHCP assignment on the router later on
      • Im using 192.168.1.10
    • Set hostname to some internal host name
      • this will be the name of the node in the interface
      • Im using proxmox2.lan
    • Set Gateway and DNS server to our router IP
  • Review all the selected settings and click Install
  • After the install, reboot the machine

First Boot & Basic Setup

After rebooting, Proxmox displayed the URL for the web interface. I opened it, accepted the self‑signed certificate warning, and logged in as root using the password set up previously.

I then switched to “dark mode” by clicking on my profile in the top right corner, selecting “color theme” and then selecting “Proxmox Dark”.

Running the Post‑Install Script

Next, I used the “PVE Post Install” script from community-scripts.org. I selected the node (proxmox2), opened a shell and ran the “PVE Post Install” script. This was very similar to what was shown in the video referenced earlier but the questions were worded a bit differently.

  • I didnt have to update sources because it told me they were already set
    • but if they were not I would have told it to do so
  • Disable enterprise repo?
    • Yes
  • Disable ceph repo?
    • Yes
  • Add no-subscription repo?
    • Yes
  • Add PveTest repo?
    • No
  • Disable subscription nag?
    • Yes
  • Disable high availability?
    • Yes
  • Disable corosync?
    • Yes (this seem to be related to high availability)
  • Update Proxmox?
    • Yes

After it finished, I rebooted and confirmed there were no pending updates.

Setting Up DHCP Reservation

Next, I wanted to create a DHCP reservation on my router. I prefer to give my homelab machines static DHCP leases so their IPs never change, which helps keep things predictable. Oddly, I couldn’t find the device listed under the IP it was using. Eventually I realized I needed to search byMAC address. To find the MAC address I ran ip link in the root shell and then looked for vmbr0 -> link/ether <MAC>. I later figured out you could also find this under under Node → Network → nic0 → Alternative Name.

Once I had the MAC, I found the DHCP entry (under a different IP), set it to static, and updated it to the IP I wanted. It turned out the router had already given it a different IP, which explained why I couldn’t find it at first.

Notification Setup

Finally, Proxmox can send alerts for backups, errors, and updates, so I wanted to make sure I’d actually see them. I created a dedicated email account on my personal mail server and used that to configure SMTP. I went to Datacenter → Notifications → Notification Targets → Add → SMTP and filled out the settings.

  • Endpoint name: Rirak-Mail-Server
  • Server: mail.rirak.com
  • Username: [email protected]
  • Password: <email password>
  • From Address: [email protected]
  • Recipient: root@pam
    • This means the root user. Others could be added too.

After saving, I sent a test email to confirm everything worked. Then I updated the default matcher: Notification Matchers → Default Matcher → Modify → Targets to Notify → Select Rirak-Mail-Server.

Wrap Up

What started as a dead SD card turned into a full Proxmox rebuild — and a much more capable homelab node. The KAMRUI Mini PC has plenty of headroom, and the setup process was smoother than I expected once I got past the BIOS quirks.

Next up, I’ll migrate my Home Assistant VM and start moving the rest of my services over. I’m also planning to document the VM setup, backups, and container configuration as I go.