systemdシャットダウン画面でハングアップするSUSEサーバーを診断する
systemdジョブと前回の起動ジャーナルを使用して、遅いサービス、マウント、またはストレージの依存関係を特定し、原因を隠蔽することなく修正します。
信頼性の高い Nextcloud バックアップを作成するには、ユーザーアクティビティを一時停止し、データベースをエクスポートし、Restic を使用してそのエクスポートデータとアプリケーションおよびデータディレクトリをキャプチャします。この作業を root 権限のスクリプトに記述し、cron でスケジュール設定してください。スケジュール設定に頼る前に、スナップショットを確認し、テスト復元を実行してください。
この例では、DebianまたはUbuntuサーバー、Nextcloudの直接インストール先/var/www/nextcloud、別のデータディレクトリ/srv/nextcloud-data、およびMariaDBを想定しています。これらの値を実際のパスとデータベース名に置き換えてください。手順は、2026年10月にNextcloud 35管理マニュアルとRestic 0.19.1ドキュメントに基づいて検証済みです。

Nextcloudのバックアップガイドでは、設定、データ、データベース、テーマ、およびカスタムアプリが保持すべき重要な部分として挙げられています。アプリケーションディレクトリ全体をバックアップすると、通常は設定とバンドルされているアプリも含まれますが、カスタムアプリ、テーマ、またはデータディレクトリがサーバー上の別の場所に存在するかどうかを確認してください。Resticコマンドには、それぞれのパスを個別に指定してください。
メンテナンスモードでは、バックアップの実行中に既存のセッションがロックされ、新規ログインができなくなります。これにより、データベースやファイルが様々なタイミングで変更される可能性が低くなりますが、その間はNextcloudが利用できなくなります。データストアが大きい場合は、比較的静かな時間帯にジョブをスケジュールしてください。サーバーにデータディレクトリに直接書き込む外部ワーカーやスクリプトがある場合は、それらも一時停止してください。
Nextcloudの公式バックアップ手順書には、構成要素とデータベースのエクスポートオプションが説明されています。この手順ではMariaDBを使用します。PostgreSQL、MySQL、またはSQLiteを使用する場合は、該当マニュアルのデータベースセクションにある対応するダンプおよびリストアコマンドを使用してください。
ResticとMariaDBクライアントは、お使いのディストリビューションの信頼できるパッケージソースを使用してインストールしてください。リポジトリは、別のディスクまたはリモートバックアップターゲットに選択してください。Nextcloudサーバー上にのみ保存されたリポジトリでは、サーバーまたはそのストレージの損失から保護されません。リポジトリをバックアップ対象のディレクトリ内に配置しないでください。
Resticはリポジトリデータを暗号化しますが、復元するにはリポジトリのパスワードが必要です。パスワードファイルを作成し、承認されたパスワードマネージャーなど、サーバー外の保護された場所にコピーを保管してください。パスワードを紛失すると、暗号化されたリポジトリを読み取ることができなくなります。パスワードをコマンドライン、crontab、またはスクリプトに直接記述することは避けてください。
sudo install -d -m 700 /root/.config/restic
sudo install -m 600 /dev/null /root/.config/restic/nextcloud-password
sudo install -m 600 /dev/null /root/.config/restic/nextcloud.env
選択したResticパスワードをパスワードファイルに安全に保管してください。リポジトリの場所とパスワードファイルのパスを環境ファイルに記述してください。
RESTIC_REPOSITORY=/mnt/backup/nextcloud
RESTIC_PASSWORD_FILE=/root/.config/restic/nextcloud-password
リモートバックエンドの場合は、そのバックエンドのドキュメントに記載されているリポジトリのURLと認証情報を使用し、権限を制限して保存してください。Resticのリポジトリ設定とサポートされているパスワードファイル環境変数については、リポジトリ準備ガイドに記載されています。新しいリポジトリは、実行ごとにではなく、一度だけ初期化してください。
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init

/root/.my.cnfMariaDB の認証情報も保護する必要があります。データベースのユーザー名、パスワード、ホスト名を記述した、root 権限で読み取り可能なクライアント オプション ファイル (例: ) を作成し、そのパーミッションを に設定します600。以下のスクリプトは、そのファイルを に渡すmariadb-dumpため、データベースのパスワードがプロセス引数に表示されません。
以下の内容を として保存してください/usr/local/sbin/nextcloud-restic-backup。 と を調整してNC_DATA_DIRにDB_NAME合わせてくださいconfig/config.php。このスクリプトは、メンテナンスモードを有効にし、MariaDB をエクスポートし、アプリケーション、データ、および一時的な SQL ダンプをバックアップした後、後続のコマンドが失敗した場合でもメンテナンスモードを無効にします。
#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf
set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0
mountpoint -q /mnt/backup || {
echo "Backup target is not mounted" >&2
exit 1
}
install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0
cleanup() {
if [[ "$maintenance_on" -eq 1 ]]; then
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
logger -t nextcloud-restic "Could not disable maintenance mode"
fi
rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction --default-character-set=utf8mb4 "$DB_NAME" > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"
restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud
所有権とパーミッションを設定して、rootユーザーのみがスクリプトを編集または実行できるようにし、メンテナンス時間中に手動でテストしてください。このmountpointチェックにより、バックアップディスクが見つからない場合に、大量のリポジトリがサーバーのローカルファイルシステムに密かに送信されるのを防ぎます。リポジトリがローカルにマウントされているのではなくリモートにある場合は、このチェックをバックエンド用の信頼性の高いチェックに置き換えてください。
初回実行前にパスを確認してください。データフォルダが既に 内にある場合は/var/www/nextcloud、サンプルパスが正しいと想定せず、Nextcloud の設定から実際のデータディレクトリを使用してください。また、アプリケーションディレクトリ外に保存されているカスタムアプリやテーマが明示的に含まれていることを確認してください。

手動実行が成功したら、root crontab エントリを追加しますsudo crontab -e。この例では、スクリプトのフルパスを使用して毎日午前 2 時 30 分にジョブを開始し、トラブルシューティングのために出力を記録します。
30 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1
Cronは限られた環境しか提供しないため、スクリプトは明示的に設定を行いPATH、Resticの設定自体を読み込みます。お使いのディストリビューションでcronが有効になっていること、およびこの時間がNextcloudのバックグラウンドジョブランナーや他のメンテナンスタスクと重複していないことを確認してください。Linuxのcrontabマニュアルには、スケジュールの形式とcronが提供する環境について記載されています。
ジョブが/var/log/nextcloud-restic.log正常に終了したことを確認し、最近のスナップショットを一覧表示することで、ジョブが正しく実行されたことを確認します。
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic snapshots'
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic check'
Restic の通常のcheck検証機能は、リポジトリの構造を検証します。データ全体の読み取りには時間がかかり、リモートリポジトリではかなりの帯域幅を消費する可能性があります。restic check --read-data定期的にスケジュールするか、時間をかけて部分的にチェックするように設定してください。詳細については、Restic のリポジトリ整合性に関するドキュメントを--read-data-subset参照してください。
スナップショットの一覧表示は復元テストではありません。最新のスナップショットを別のスクラッチディレクトリに復元しrestic restore latest --target /tmp/nextcloud-restore-test、アプリファイル、データディレクトリ、SQLダンプが存在することを確認してください。テストとして、稼働中のインストール環境に復元しないでください。実際の復元を行うには、ファイルとデータベースを1つのセットとして復元してください。Nextcloudの復元手順では、データベースの再作成とクライアント同期に関する考慮事項について説明しています。
この設定では、再現可能な暗号化スナップショットが提供されますが、cron は自身の障害を監視しず、Restic は保持ポリシーを決定しません。ログを確認するか、失敗した実行に対するアラートを設定し、リポジトリ認証情報の別のコピーを保持し、定期的に復旧テストを実施してください。メンテナンス期間が長すぎる場合は、変更中のファイルをリアルタイムでバックアップするのではなく、ストレージプラットフォーム向けに設計された、調整されたファイルシステムスナップショットとデータベース整合性のあるエクスポートを使用してください。

systemdジョブと前回の起動ジャーナルを使用して、遅いサービス、マウント、またはストレージの依存関係を特定し、原因を隠蔽することなく修正します。
firewall-cmd を使用してアクティブゾーンを検査し、HTTP を安全に許可し、SSH アクセスを維持し、SLES 15 でルールが再読み込み後も有効であることを確認します。
PAMの障害が発生した原因を、サービス、アカウントポリシー、またはIDプロバイダーに特定し、正常に動作する管理者セッションを維持しながら、適切なSLES構成を修復します。
セキュアブートを無効にせずに、カスタムSLES 15カーネルモジュールをロードします。実行中のカーネルと一致させ、.koファイルに署名し、MOKキーを登録し、ロードが成功したことを確認します。
NextcloudのファイルとMariaDBをまとめてバックアップし、cronを使って暗号化されたResticスナップショットをスケジュール設定し、稼働中のサーバーにリスクを負わせることなく復旧を検証します。
Zimbra Community Editionの個々のメールボックスをエクスポートし、そのTGZバックアップを検証し、既存のメールを上書きすることなく、不足しているアイテムを復元します。
システムツリーの準備、ブート統合、デプロイメントチェック、ロールバックなど、仮想マシン上でDebianベースのOSTreeデスクトップを作成およびテストする方法を学びます。
Keycloakとトークン認証を使用してJitsi Meetルームを開始できるのは承認済みのアカウントのみとし、必要に応じてゲスト参加も可能にする。
ONLYOFFICE DocSpaceをActive DirectoryまたはOpenLDAPに接続し、ユーザーとグループを安全にインポートし、アカウントフィールドをマッピングし、信頼性の高い同期をスケジュールします。
ONLYOFFICE Document Serverにカスタムフォントをインストールし、永続的なDockerマウントと直接コピーを比較し、フォントリストを再構築して、結果を検証します。