Skip to content

Data Center in a Bag Part 10: External Storage, Backups, and Recovery

For Part 10 of the Data Center in a Bag project, I finally put the external 1 TB drive to work.

Up to this point, most of the project had focused on networking, virtualization, routing, security testing, and portable services.

But there was still an obvious gap:

What happens if I need to recover one of these systems?

The answer was to add dedicated external storage and turn it into a Proxmox backup target.

Preparing the External Drive

The drive was previously formatted for macOS, so the first step was identifying it carefully before making any changes.

The Proxmox host showed two 1 TB disks:

sda  931.5G  Internal Proxmox disk
sdb  931.5G  External 1 TB drive

The important part here was making absolutely sure I was working with the external disk.

After confirming /dev/sdb was the correct device, I removed the previous filesystem metadata and created a new GPT partition table.

The drive was then formatted as ext4:

mkfs.ext4 -L travel-storage /dev/sdb1

I created a dedicated mount point:

mkdir -p /mnt/travel-storage

and mounted the drive there:

mount /dev/sdb1 /mnt/travel-storage

The result was roughly 916 GB of usable storage.

Making the Mount Persistent

A manually mounted disk is not very useful if it disappears after a reboot.

I retrieved the filesystem UUID:

blkid /dev/sdb1

and added the drive to /etc/fstab using the UUID instead of the device name.

The mount entry looks like:

UUID=1ff2c691-e0a7-41e0-a8cb-0f3b2b6bd7d6 /mnt/travel-storage ext4 defaults,nofail 0 2

I used nofail because this is an external USB drive.

If I ever boot the travel server without the drive attached, I do not want the missing disk to interfere with startup.

After reloading systemd and testing the mount, the drive came back successfully at:

/mnt/travel-storage

Adding the Drive to Proxmox

Next, I added the mount into Proxmox as a Directory storage target.

The storage was named:

travel-storage

and configured to hold:

  • Backup files
  • ISO images
  • Container templates

I intentionally did not use the external drive for live VM or container disks.

The internal Proxmox storage still handles the running workloads.

The external drive is there for recovery and portable storage.

Testing a Real Backup

Simply adding a backup destination was not enough.

I wanted to prove that Proxmox could actually write a usable backup to it.

I selected CT105, one of the containers in the isolated pentest lab, and performed a manual snapshot backup using the new travel-storage target.

The backup completed successfully and created a VZDump archive under:

/mnt/travel-storage/dump/

Proxmox returned:

TASK OK

At that point I knew the external drive could successfully receive backups.

But a backup is only useful if it can be restored.

Testing the Restore

The next step was restoring the CT105 backup as a completely separate container.

Instead of overwriting the original CT105, I restored the backup as:

CT115

The restored system was placed back on the normal internal Proxmox storage.

The restore completed successfully:

TASK OK

The container booted normally and the recovered filesystem and configuration were intact.

Avoiding an IP Conflict

Because this was a side-by-side restore test, the original CT105 was still running.

The restored container inherited the original address:

172.22.50.20/24

That would create an IP conflict if both containers were started at the same time.

For the test, I changed the restored container to:

172.22.50.21/24

The isolated pentest lab does not use a default gateway for this system, so the restored container remained isolated.

From Kali, I tested connectivity:

ping -c 4 172.22.50.21

The restored container responded successfully with zero packet loss.

That was enough to prove the recovery path worked.

An Interesting Recovery Detail

The restored system also preserved the Docker configuration from the original environment.

The Juice Shop container was still configured to bind to:

172.22.50.20:3000

Since the temporary restore had been changed to .21, the application did not immediately start on the new address.

In a real disaster recovery scenario, however, the original system would normally be unavailable and the restored system would likely keep the original IP.

So the preserved configuration was actually what I would expect from a faithful recovery.

The only reason the application binding became an issue was because this was a side-by-side test environment.

What Part 10 Added

The Data Center in a Bag now has:

  • 1 TB of dedicated external storage
  • persistent ext4 storage mounted on the Proxmox host
  • a dedicated Proxmox backup target
  • support for backups, ISOs, and container templates
  • a successful VZDump backup
  • a successful container restore
  • a validated recovery workflow
  • proof that the restored system boots and is reachable

This was an important addition to the project.

The travel kit is no longer just capable of running services.

It can now recover them too.

For a portable environment that includes pfSense, Linux systems, Docker workloads, security tools, and an isolated pentest lab, having a recovery path matters just as much as building the systems in the first place.

The next step will be deciding how far I want to take the backup strategy — scheduled jobs, retention policies, or possibly additional storage options.

For now, the Data Center in a Bag has its first tested backup and recovery workflow.

Leave a Reply

Your email address will not be published. Required fields are marked *