Nextcloud データを個別にバックアップおよび復元するにはどうすればよいですか? (バージョン管理 / スナップショット)

Nextcloud データを個別にバックアップおよび復元するにはどうすればよいですか? (バージョン管理 / スナップショット)

複数のユーザーが Nextcloud インストールを操作する場合は常に、エラーが発生する可能性があります。家族が古い写真を削除したり、同僚が誤ってタスクやカレンダー イベントをチェックしたりして、他のユーザーに問題が発生する可能性もあります。

完全なファイルシステムのスナップショットまたは Nextcloud ディレクトリ全体のバックアップが利用可能な場合は、それらを使用してサーバー全体の古い状態を復元できます。これは、システム全体がクラッシュした場合には問題ありません。

しかし、問題がしばらく経ってから認識され、その間にユーザーが他のデータを変更していた場合は問題になります。その場合、古いデータを救出してすべての進行状況を破棄するか、現在の状態を維持するかを選択する必要があります。

Nextcloud ドキュメントインストール全体を復元する方法のみを説明します。

Nextcloud のすべてのデータ (ファイル、メッセージ、カレンダー、タスクなど) をよりインテリジェントに自動的にバックアップし、独立して復元できるようにする方法はありますか? (オンライン状態でも可能でしょうか?)

答え1

オンライン状態を復元するには、実際には完全なディスク バックアップが必要になります (もちろん、増分的に実行することもできます)。

もちろん、ユーザーインタラクションを通じて実際に変化するものは

  1. データベース(すべてのユーザー情報、ファイルのメタデータ、権限などを含む)
  2. データストア
  3. nextcloud 自体(更新される可能性があります)。

3. は、nextcloud をバックアップするたびに 3 つすべての完全バックアップを要求するだけで「解決」できます (データベース形式は下位互換性がない可能性があります)。

典型的なコンテナ化された nextcloud セットアップでは、2 つまたは 3 つのコンテナがあります。

  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

カレンダー、メッセージなど
理論的にはデータベース ダンプでは、1 つ以上の INSERT クエリを使用してカレンダー エントリなどを作成する必要があります。
正しい INSERT を見つけて、現在のデータベースに再挿入するだけです。(それを試す前に、現在の状態をバックアップすることをお勧めします)

私の意見では、ゴミ箱とバージョンは、ユーザーにとってデータを復元するための優れたオプションを提供します。

ファイルとゴミ箱
デフォルトでは、ゴミ箱が有効になっています。ユーザーがファイルを削除すると、そのファイルはゴミ箱に移動します。config/config.phpエントリを使用して、ゴミ箱内のファイルを保存する期間を指定できますtrashbin_retention_obligation' => 'auto, 128',(詳細はマニュアルを参照してください)。ただし、使用可能なスペース/ユーザー クォータが 50% を下回ると、または管理がocc trashbin:expire;occ trashbin:cleanup手動で実行されている場合は、それより早くクリーンアップされる可能性があります (またはユーザーの選択により)。
カレンダーは使用していないので、削除されたカレンダー エントリもゴミ箱に移動し、復元できる可能性がありますが、わかりません。

ファイルとバージョン
もう 1 つは、「バージョン nextcloud アプリ」で、ファイルの古いバージョンを復元するオプションが追加されます。年齢は で設定できます 'versions_retention_obligation' => 'auto, 128',。nextcloudconfig.phpアプリ セクションで有効にします。このアプリは使用したことはありませんが、シャドウ コピーのようなものだと思います。

単一ファイルの復元
暗号化を使用しておらず、ローカル アカウントのみを使用している限り、ユーザー データはディレクトリに保存されますnextcloud/data/username。Active Directory/OpenLDAP に接続している場合、ディレクトリはnextcloud/data/uuidデータベースで解決できる UUID です。( SELECT ldap_dn FROM oc_ldap_user_mapping WHERE owncloud_name='$U_ID')
ファイルは、バックアップされたユーザー ディレクトリから手動で復元し、現在のユーザー データ ディレクトリにコピーできます。その後、すべてのファイルをスキャンするようにしてくださいocc files:scan

暗号化が有効になっている場合は - :) 頑張ってください。

関連情報