<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>blog.n11n [tag: backups]</title>
  <link>https://blog.n11n.ca</link>
  <description>Nicholas' blog</description>
  <language>en</language>
  <atom:link href="https://blog.n11n.ca/rss.xml" rel="self" type="application/rss+xml" />

  <item>
    <title>How I backup</title>
    <pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate>
    <link>https://blog.n11n.ca/backups</link>
    <guid>https://blog.n11n.ca/4</guid>
    <description>An overview of how I backup my important data.</description>
    <content:encoded><![CDATA[<p>When I started to build my <a href="https://blog.n11n.ca/2">homelab</a>, backups were a core part of the design. I wanted to be sure my data was available and wouldn't be lost in an emergency. Having a reliable backup plan has already saved me more than once.</p> <p>Here's my workflow for any data I can't afford to lose.</p> <h2>3-2-1-1 strategy</h2> <ul> <li> <strong>Three</strong> (<strong>3</strong>) copies of the data (well four counting production) </li><li> <strong>Two</strong> (<strong>2</strong>) different formats </li><li> <strong>One</strong> (<strong>1</strong>) copy off-site (encrypted in the <em>cloud</em>) </li><li> <strong>One</strong> (<strong>1</strong>) copy offline (encrypted on a secure device) </li> </ul> <h2>Nightly backups</h2> <p>Before migrating to <a href="https://www.proxmox.com/en/">Proxmox</a>, incremental backups were generated using <a href="https://linux.die.net/man/1/rsync">rsync</a> in a <a href="https://linux.die.net/man/8/cron">cron</a> job that looked like:</p> <pre><code>30 4 * * * rysnc_script.sh || alert "Backup: ERROR"</code></pre> <p><code>rsync_script.sh</code> handled the configuration, and any services that needed to be stopped and restarted. In the event of a failure, <code>alert</code> would send a message to my notification service using <a href="https://linux.die.net/man/1/curl">curl</a>.</p> <p>Now, this is managed with <a href="https://www.proxmox.com/en/products/proxmox-backup-server/overview">Proxmox Backup Server</a> running in a separate VM. Daily snapshots are retained for the last 30 days, while monthly snapshots are kept for the last six months.</p> <h2>Off-site / Offline export</h2> <p>Every two weeks I run a script that:</p> <ol> <li> Creates a compressed archive (tar.gz) of the latest snapshot </li><li> Encrypts it using AES-256 </li><li> Uploads the encrypted archive to the cloud </li><li> Notifies me the archive is ready to be moved offline </li> </ol> <p>In the past this ran every week. However, I noticed most of my really important data wasn't changing much week over week. Moving to a bi-weekly schedule has been a good blend of convenience and data integrity so far.</p> <h2>Testing</h2> <p>Making sure to test my backups has been crucial. I do it in two ways:</p> <ol> <li> <strong>Checksum validation:</strong> this is automated and runs every night, notifying me of any problems. </li><li> <strong>Restore drill:</strong> once a month, I spin up a new VM using my latest off-site archive and confirm everything starts correctly. </li> </ol> <p>I keep a simple "restore checklist" in a repository (along with a printed copy) so anyone can follow it step-by-step.</p> <p>Being able to really trust my backups has helped turn any scary situation into a routine confidence boost.</p>         <div class="tags"><a href="https://blog.n11n.ca/tag/backups">backups</a> <a href="https://blog.n11n.ca/tag/cron">cron</a> <a href="https://blog.n11n.ca/tag/data">data</a> <a href="https://blog.n11n.ca/tag/homelab">homelab</a> <a href="https://blog.n11n.ca/tag/rsync">rsync</a></div> <br>]]></content:encoded>
  </item>
</channel>
</rss>
