Nextcloud資料如何獨立備份與還原? (版本控制/快照)

Nextcloud資料如何獨立備份與還原? (版本控制/快照)

每當多個使用者與 Nextcloud 安裝互動時,就有可能發生錯誤。家庭成員可能會刪除舊照片,或者同事可能會意外勾選任務或日曆事件,從而給其他用戶帶來問題。

當整個 Nextcloud 目錄的完整檔案系統快照或備份可用時,它們可用於還原整個伺服器的舊狀態。如果系統完全崩潰,那就很好。

但是,如果過了一段時間才發現問題,而用戶修改了其他數據,那麼問題就出現了。然後,必須在拯救舊資料和銷毀所有進度或保持當前狀態之間做出選擇。

Nextcloud 文件僅描述恢復整個安裝的方法。

有沒有一種方法可以更聰明地自動備份所有 Nextcloud 資料(檔案、訊息、日曆、任務等),以便可以獨立復原? (甚至可能處於線上狀態?)

答案1

恢復線上狀態確實需要完整磁碟備份(當然可以增量完成)。

當然,透過使用者互動實際改變的事情是

  1. 資料庫(包含所有使用者資訊、文件元資料、權限…)
  2. 資料儲存
  3. nextcloud 本身(因為它可能會更新)。

我們可以「解決」3.,只需在每次備份 nextcloud 時要求對所有三個內容進行完整備份(資料庫格式可能不向後相容)。

在典型的容器化 nextcloud 設定中,您將擁有兩個或三個容器:

  1. 資料庫容器“DB”,需要先啟動(通常運行 postgresql)
  2. 實際運行nextcloud“NC”的容器,它連接到DB中的資料庫,並將資料目錄掛載為外部磁碟區“V”
  3. (反向代理允許輕鬆地將 nextcloud 隱藏在 HTTPS 後面,並將 SSL 憑證處理與 nextcloud 容器分開)

現在,定期備份包括

  1. 停止 nextcloud,或至少凍結 NC,或完全停止 NC
  2. 製作 V 的備份(可以很好地增量備份 – 任何現代備份實用程式都可以做到這一點),
  3. 告訴資料庫進行備份 ( pg_backup_start),這將以一致的狀態啟動備份(資料庫確保新操作不會影響備份的狀態)
  4. 啟動第 3 步後,若要恢復功能,請重新啟動 nextcloud(或解凍,或重新啟動 NC)
  5. 讓資料庫將轉儲寫入檔案 ( pg_backup_stop);確保您知道哪個資料備份屬於哪個資料庫備份(應該從時間和日期清楚)

一般來說,由於實際的 nextcloud 容器不會很大,無論如何,因為它既不包含資料本身也不包含資料庫,因此將其與資料和資料庫備份一起保存也是有意義的。

然後可以在完全不同的(虛擬)機器上完成恢復,方法是啟動資料庫容器的副本,恢復資料庫備份,同時解壓縮資料備份,然後在資料庫啟動後使用資料啟動 nextcloud 容器安裝。


事實上,由於容器在運行時(podman,還有 Docker)允許您進行獨立網絡,因此您可以根據需要並行運行任意數量的資料庫伺服器;與用於支援快照的資料磁碟區的檔案系統(ZFS、btrfs 以及 LVM 快照+XFS 精簡配置、bcachefs...)一起,您可以與目前狀態並行地探索舊狀態,而不會受到它們的干擾。

答案2

日曆、訊息等
理論上資料庫轉儲應該使用一個或多個 INSERT 查詢建立日曆條目等。
您只需要找到正確的 INSERT 並嘗試將它們重新插入目前資料庫中。 (在嘗試之前我會備份當前狀態)

在我看來,垃圾箱和版本為用戶恢復資料提供了很好的選擇。

文件和垃圾箱
預設情況下,垃圾箱處於啟動狀態。當使用者刪除文件時,該文件將被放入垃圾箱。您可以使用config/config.php以下條目指定垃圾箱中文件的保存期限:(trashbin_retention_obligation' => 'auto, 128',有關詳細信息,請參閱手冊)。但是,如果可用空間/使用者配額低於 50%,或者 adming 正在手動運行,則可能會提前清理occ trashbin:expire;occ trashbin:cleanup。 (或由用戶選擇)
我不使用日曆,也許刪除的日曆條目也會以垃圾箱結束,並且可以恢復 - 我不知道。

檔案及版本
另一件事是“版本 nextcloud 應用程式”,它添加了恢復舊版本文件的選項。年齡可以用 'versions_retention_obligation' => 'auto, 128',in設定config.php。在 nextcloud 應用程式部分啟用它。我沒用過這個應用程序,應該就像影子副本一樣。

恢復單一文件
只要您不使用加密,並且僅使用本機帳戶,用戶資料就會儲存在該nextcloud/data/username目錄中。如果您連接到活動目錄/openldap,則該目錄是nextcloud/data/uuid可以在資料庫中解析的uuid。 ( SELECT ldap_dn FROM oc_ldap_user_mapping WHERE owncloud_name='$U_ID')
可以從備份的使用者目錄中手動還原檔案並將其複製到目前使用者資料目錄中。確保隨後掃描所有文件occ files:scan

如果啟用加密 - :) 祝你好運。

相關內容