藍圖風格插畫:硬碟裡留一份備份,再往上同步到加了鎖的雲端,左下時鐘指著四點半

n8n 備份做兩份:本機硬碟+加密同步到 Google Drive

自架 n8n 的備份怎麼做:每天自動打包到本機硬碟,再用 rclone 加密同步到 Google Drive。包含舊硬碟體檢、權限設定、自建 Google OAuth 的踩坑,以及壞掉時怎麼還原。

n8n 架好、也能從外面連了(見〈不開 port 也能從外面連回家:用 Cloudflare Tunnel 架 n8n〉),接下來要想的是 n8n 備份:主機壞掉怎麼辦?

我的做法是備份兩份:每天凌晨 4 點半自動打包一份到主機裡的 1TB 硬碟,再加密同步一份到 Google Drive。

本機那份還原快,雲端那份防整台主機壞掉。版本以 2026 年 10 月為準(rclone 1.75)。

先幫舊硬碟做體檢

備份要放在另一顆硬碟,而舊硬碟最怕的就是壞。先用 lsblk 確認硬碟代號(避免之後格式化錯顆),再做健康檢查:

lsblk
sudo apt install -y smartmontools
sudo smartctl -H /dev/sda
sudo smartctl -A /dev/sda | grep -E "Reallocated_Sector|Current_Pending|Offline_Uncorrectable|Power_On_Hours"

我的硬碟結果是 PASSED、壞軌 0,累計運轉約 21,600 小時。沒問題,但年紀不小,所以更需要第二份備份。

這顆硬碟剛好本來就是 Linux 用的 ext4 格式,裡面還有以前留下的舊資料。

刪除大量小檔案時畫面沒有任何進度,看起來像當機,其實是傳統硬碟本來就慢。可以另開一個視窗跑 df -h,看用量有沒有在下降。

Claude 判讀舊硬碟的健康檢查:PASSED、壞軌 0、累計運轉 21,641 小時

開機自動掛載,記得加 nofail

把硬碟掛載到 /mnt/backup,並設定開機自動掛載。先用 sudo blkid 查硬碟的 UUID,再在 /etc/fstab 加一行:

UUID=你的硬碟UUID  /mnt/backup  ext4  defaults,nofail  0  2

nofail 的意思是:哪天這顆硬碟壞了或拔掉了,系統照樣開得了機,n8n 也照樣跑。

n8n 備份第一份:每天自動打包到本機

備份程式放在 /usr/local/bin/n8n-backup.sh,流程是:

  1. 暫停 n8n(不到 1 秒),避免打包到一半資料又被改掉
  2. 打包 data、compose.yaml、.env
  3. 重新啟動 n8n
  4. 刪掉 14 天前的舊檔
  5. 加密同步到 Google Drive(下一節設定)

排程用 cron,每天 04:30 執行,紀錄寫到 /var/log/n8n-backup.log。在 /etc/cron.d/n8n-backup 寫一行:

30 4 * * * root /usr/local/bin/n8n-backup.sh >> /var/log/n8n-backup.log 2>&1

備份檔的權限要鎖起來

備份檔裡有 n8n 的加密金鑰。我第一次做好的備份檔權限是 -rw-r--r--,任何帳號都讀得到。

解法是在程式開頭加 umask 077,之後產生的檔案只有 root 能讀。

修正舊檔時又卡了一次:資料夾改成只有 root 能進之後,sudo chmod 600 /mnt/backup/n8n/*.tar.gz 會失敗。

因為 * 是由一般帳號展開的,它進不了資料夾,就看不到檔案。改成讓 root 來展開:

sudo sh -c 'chmod 600 /mnt/backup/n8n/*.tar.gz'

n8n 備份第二份:用 rclone 加密同步到 Google Drive

rclone 是一個把檔案同步到各種雲端硬碟的工具。設定時會跳出警告:rclone 內建的共用 Google 授權將在 2026 年停用。

所以要自己在 Google Cloud 建一個授權用戶端。

Google Cloud 主控台裡為 rclone 建立的專案,專案編號已遮蔽

1. 在 Google Cloud 建立自己的授權

  1. 建立一個專案,啟用 Google Drive API
  2. OAuth 同意畫面選「外部」,範圍只加 drive.file,這樣 rclone 只碰得到自己建立的檔案
  3. 建立「電腦版應用程式」用戶端,ID 和密鑰存進密碼管理器
  4. 一定要發布應用程式,不然授權每 7 天就會失效,備份會默默停掉

我的「發布」按鈕一開始是灰的。要先到「品牌」頁填首頁網址、隱私權政策網址和已授權網域,我剛好用自己的網站填。

不要上傳 Logo,會觸發人工審查。

2. 設定 rclone:主機沒有瀏覽器怎麼登入

跑 sudo rclone config 建立一個叫 gdrive 的 Google Drive 遠端,填入自己的用戶端 ID 和密鑰、範圍選 drive.file。

接下來要用 Google 帳號登入授權,但伺服器沒有瀏覽器。rclone 會給一行 rclone authorize ...,把它拿到平常用的電腦執行(電腦也要裝 rclone),在瀏覽器登入後,再把結果貼回主機。登入時會看到「Google 尚未驗證這個應用程式」,因為是自己建的,點「進階 → 繼續」就好。

如果中途離開、重設時出現名稱衝突,是上一次已經存了一個舊的,先刪掉再建:

sudo rclone config delete gdrive

3. 再包一層加密

再建一個 crypt 類型的遠端,叫 gdrive-crypt,指向 gdrive:n8n-backup,設兩組密碼並存進密碼管理器。

之後在 Google Drive 上看到的是亂碼檔名,內容也加密了。這兩組密碼弄丟,雲端的備份就解不開。

Google Drive 的 n8n-backup 資料夾,加密後的備份檔名都是亂碼

4. 加進備份程式

把 rclone sync 加在備份程式最後。順序是「打包完先重啟 n8n,再上傳」,不讓 n8n 等上傳。隔天早上看紀錄:

04:30:02 本機備份完成:n8n-2026-10-13_0430.tar.gz
04:30:06 已同步到 Google Drive

檢查與還原

cat /var/log/n8n-backup.log
sudo ls -lh /mnt/backup/n8n
sudo rclone ls gdrive-crypt:

從本機備份還原

cd ~/n8n
docker compose down
sudo mv data data.old
sudo tar -xzf /mnt/backup/n8n/n8n-YYYY-MM-DD_HHMM.tar.gz -C ~/n8n
docker compose up -d

主機整台壞掉:從 Google Drive 還原

  1. 新主機裝好 Ubuntu、Docker、rclone
  2. 用密碼管理器裡的用戶端 ID、密鑰和兩組加密密碼,重建 gdrive 和 gdrive-crypt
  3. 下載備份、解壓、啟動
sudo rclone copy gdrive-crypt:n8n-YYYY-MM-DD_HHMM.tar.gz /tmp/
mkdir -p ~/n8n && sudo tar -xzf /tmp/n8n-*.tar.gz -C ~/n8n && cd ~/n8n && docker compose up -d

之後再重新安裝 cloudflared 連上 Tunnel。這也是為什麼密碼管理器裡的那幾組金鑰和密碼比備份檔本身還重要。

每月維護

Ubuntu 的安全更新會自動裝,但 n8n、Docker、cloudflared、rclone 不會。我在 Google 日曆設了每個月第一個週六提醒,跑這幾行:

sudo apt update && sudo apt upgrade -y
sudo /usr/local/bin/n8n-backup.sh
cd ~/n8n && docker compose pull && docker compose up -d && docker image prune -f
sudo rclone selfupdate
cat /var/log/n8n-backup.log

更新 n8n 之前先手動備份一次,更新壞了可以馬上還原。

參考資料

這是舊電腦家用伺服器系列的第 4 篇。

上一篇:〈不開 port 也能從外面連回家:用 Cloudflare Tunnel 架 n8n〉;

下一篇〈不買 NAS、不重灌:人不在家,把舊電腦升級成家庭影音中心〉已經上架,寫的是人不在家,把跑 n8n 的舊電腦加上影音串流和檔案中心。