備份腳本
Borg 是一款功能豐富的去重存檔軟體,內建版本控制功能。我們提供了一個模板 bash 腳本,可作為 cron 任務每日/每週執行來備份您的文件和資料庫。我們建議您在執行此腳本之前閱讀 Borg 的快速指南。
此腳本假設您已將第二個硬碟連接至您的伺服器以進行現場備份,以及通過 ssh 訪問遠端機器以存儲您的第三份異地副本。BorgBase 是異地備份的一個替代選擇,並具有具有競爭力的定價結構。您可以完全跳過異地備份,通過刪除模板腳本中的相關行。
資料庫備份存儲在您的 Immich 上傳資料夾的 database-backup
子目錄中。資料庫然後與您的資產一起使用 Borg 進行備份和版本控制。這確保了每個快照中的資料庫備份與您的資產保持同步。
信息
此腳本將備份您的資料庫以及您的照片/視頻庫。與 Immich 內建的自動資料庫備份工具相比,這是冗餘的。使用此腳本備份資料庫有兩個優勢:
- 此腳本通過版本控制備份更高效地利用存儲空間,而不是生成多份備份。
- 資料庫備份與圖書館備份同時進行,確保資料庫與圖書館的備份始終保持同步。
因此,如果您正在使用此腳本,可以安全地在管理面板中關閉內建的自動資料庫備份,以節省存儲空間。
先決條件
- Borg 需要安裝在您的伺服器以及遠端機器上。您可以在 這裡 找到 Borg 的安裝指南。
- (可選)要以非 root 用戶身份運行此腳本,您應該將您的用戶名添加到 docker 組。
- 要非交互地運行此腳本,請設置您的伺服器到遠端機器的無密碼 ssh。如果您跳過上一步,請確保此步驟由您的 root 帳戶完成。
要初始化 Borg 存儲庫,請執行以下命令一次。
Borg 設置
UPLOAD_LOCATION="/path/to/immich/directory" # Immich 資料庫位置,配置在您的 .env 文件中
BACKUP_PATH="/path/to/local/backup/directory"
mkdir "$UPLOAD_LOCATION/database-backup"
borg init --encryption=none "$BACKUP_PATH/immich-borg"
## 遠端設置
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
borg init --encryption=none "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg"
根據需要編輯以下腳本並將其添加到您的 crontab。注意,此腳本假設您的路徑中沒有 :
, @
, 或 "
字符。如果存在這些字符,您需要適當地對路徑進行轉義和/或重命名。
Borg 備份模板
#!/bin/sh
# 路徑
UPLOAD_LOCATION="/path/to/immich/directory"
BACKUP_PATH="/path/to/local/backup/directory"
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
### 本地備份
# 備份 Immich 資料庫
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# 對於像 Borg 或 Restic 這樣的去重備份程序,壓縮內容可能增加備份大小,使得 去重變得困難。如果使用不同的備份程序或仍希望壓縮,可以改用以下命令:
# docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | /usr/bin/gzip --rsyncable > "$UPLOAD_LOCATION"/database-backup/immich-database.sql.gz
### 附加本地 Borg 存儲庫
borg create "$BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$BACKUP_PATH"/immich-borg
borg compact "$BACKUP_PATH"/immich-borg
### 附加遠端 Borg 存儲庫
borg create "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg
borg compact "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg
恢復
要從備份恢復,使用 borg mount
命令。
從本地備份恢復
BACKUP_PATH="/path/to/local/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
從遠端備份恢復
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
您可以在 /tmp/immich-mountpoint
的單獨子目錄中找到可用的快照。恢復您需要的文件,然後使用 borg umount /tmp/immich-mountpoint
卸載 Borg 存儲庫。