{" services services "}

…lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla elementum, eros at sagittis facilisis, ante est rutrum ligula, at interdum eros sapien vel magna.

🗄 バックアップ 統合管理メモ(1/2)
📅 最終更新: 2026年3月30日
✅ 主な変更: 173.0.0.x対応 / VPSバックアップ廃止
📋 バックアップ対象一覧
対象 内容 保存先 世代
NC ユーザーデータ /mnt/maguro/nextclouddata SM-storage/backup/nextcloud/latest_data/ 差分rsync
NC MariaDB DBダンプ SM-storage/backup/nextcloud/日付/ 7世代
NC config.php 設定ファイル SM-storage/backup/nextcloud/日付/ 7世代
NC custom_apps カスタムアプリ SM-storage/backup/nextcloud/日付/ 7世代
hirame netplan /etc/netplan/ SM-storage/backup/hirame/日付/ 5世代
hirame systemd /etc/systemd/system/ SM-storage/backup/hirame/日付/ 5世代
hirame home /home/hirame/ SM-storage/backup/hirame/日付/ 5世代
GitHubリポジトリ コード全体 wanperochance-code/mikyun-cloud Git履歴
💾 Nextcloud バックアップ
スクリプト情報
  • パス: /opt/mikyun/bin/nc_backup.sh
  • ログ: /var/log/nc_backup.log
  • 手動実行: bash /opt/mikyun/bin/nc_backup.sh
処理の流れ
  1. メンテナンスモード ON
  2. MariaDB ダンプ
  3. config.php バックアップ
  4. custom_apps バックアップ
  5. ユーザーデータ同期(rsync差分)
  6. メンテナンスモード OFF
  7. 古いバックアップ削除(7世代保持)
🖥️ hirame PC バックアップ
スクリプト情報
  • パス: /opt/mikyun/bin/remote_backup.sh
  • ログ: /var/log/remote_backup.log
  • 接続先: hirame@173.0.0.10(新ファブリック)
  • 認証: SSH鍵認証 + sudo rsync
バックアップ内容
  • netplan設定: /etc/netplan/
  • systemd設定: /etc/systemd/system/
  • Dockerコンテナ一覧
  • ホームディレクトリ(.cache除外)
⏰ 自動実行
時刻 スクリプト 内容
毎日 3:00 nc_backup.sh Nextcloud完全バックアップ
毎日 4:00 remote_backup.sh hirameバックアップ
crontab -l | grep -E “nc_backup|remote_backup”
🗄 バックアップ 統合管理メモ(2/2)
📦 GitHub リポジトリ管理
項目 内容
アカウント wanperochance-code
リポジトリ mikyun-cloud
URL git@github.com:wanperochance-code/mikyun-cloud.git
公開設定 Private
認証 SSH鍵(/root/.ssh/id_ed25519)
プッシュ方法
cd /root/mikyun-cloud git add . git commit -m “変更 $(date +%Y-%m-%d)” git push origin main
含まれているもの
  • app/ – 顧客・運営ポータル本体
  • mikyun-portal/ – VPNエンジン
  • scripts/backup/ – バックアップスクリプト
除外されているもの(.gitignore)
  • venv/ __pycache__/ – 仮想環境
  • privatekey / publickey / keys/ – 秘密鍵
  • passphrase.csv – 顧客パスフレーズ
  • data/ issued/ logs/ – 実データ・ログ
⚠️ 重要: mikyun-portalの実体は /opt/mikyun-portal/ で稼働。GitHubは手動同期が必要。
💽 保存先構成
パス 実体 容量
/srv/storage/SM-storage/ Supermicro NFS(173.0.0.1) 66TB
/srv/storage/backup/ R640ローカル 2.2TB
NFSマウント(R640 fstab)
173.0.0.1:/srv/storage/nextcloud-data /srv/storage/SM-storage nfs defaults,_netdev,noatime,nofail 0 0 173.0.0.1:/srv/storage/nextcloud/backup /mnt/backup nfs defaults,_netdev 0 0
🔧 トラブルシューティング
バックアップ失敗時
# NFSマウント確認 df -h | grep SM-storage sudo mount -a # hirame接続確認 ssh hirame@173.0.0.10 “hostname” ping -I 173.0.0.9 173.0.0.10 # ログ確認 tail -100 /var/log/nc_backup.log tail -100 /var/log/remote_backup.log # 手動実行 bash -x /opt/mikyun/bin/nc_backup.sh bash -x /opt/mikyun/bin/remote_backup.sh
定期確認項目
  • NFSマウント: df -h | grep 173.0.0
  • 最新バックアップ: ls -lt /srv/storage/SM-storage/backup/nextcloud/ | head -3
  • 世代管理: 指定世代以上が残っていないか確認
  • GitHub同期: cd /root/mikyun-cloud && git status
📌 運用ルール:
– GitHubはコード管理のみ
– ユーザーデータはSupermicroバックアップが本体
– 173.0.0.x ファブリック経由でバックアップ実行
– VPSバックアップは廃止済み
✅ バックアップ必須確認項目
🔍 日次確認(毎日実施)
1. NFSマウント状態確認
df -h | grep 173.0.0
✅ 正常な出力例:
173.0.0.1:/srv/storage/nextcloud-data     66T  2.8T   63T   5% /srv/storage/SM-storage
173.0.0.1:/srv/storage/nextcloud/backup   66T  2.8T   63T   5% /mnt/backup
❌ マウントされていない場合:
sudo mount -a df -h | grep 173.0.0
2. 最新バックアップ確認
# Nextcloud最新バックアップ(24時間以内) ls -lt /srv/storage/SM-storage/backup/nextcloud/ | head -5 # hirame最新バックアップ(24時間以内) ls -lt /srv/storage/SM-storage/backup/hirame/ | head -5
3. バックアップログ確認
# Nextcloudバックアップログ(エラーチェック) tail -50 /var/log/nc_backup.log | grep -i error # hirameバックアップログ(エラーチェック) tail -50 /var/log/remote_backup.log | grep -i error # 正常完了確認 tail -5 /var/log/nc_backup.log tail -5 /var/log/remote_backup.log
4. cron実行確認
# cron設定確認 crontab -l | grep -E “nc_backup|remote_backup” # cron実行ログ確認 grep -E “nc_backup|remote_backup” /var/log/syslog | tail -10
📊 週次確認(毎週実施)
1. 世代管理確認
# Nextcloud世代数確認(7世代以下であること) ls -d /srv/storage/SM-storage/backup/nextcloud/202* | wc -l # hirame世代数確認(5世代以下であること) ls -d /srv/storage/SM-storage/backup/hirame/202* | wc -l
2. ストレージ容量確認
# Supermicro NFS容量確認(空き60TB以上推奨) df -h /srv/storage/SM-storage/ # R640ローカル容量確認 df -h /srv/storage/backup/
3. hirame接続確認
# hirame SSH接続テスト ssh hirame@173.0.0.10 “hostname && uptime” # hirame到達性確認 ping -I 173.0.0.9 -c 3 173.0.0.10
4. GitHub同期確認
# リポジトリ状態確認 cd /root/mikyun-cloud git status # 最新コミット確認 git log –oneline -5 # 未プッシュの確認 git log origin/main..HEAD
🚨 緊急復旧コマンド
Nextcloud完全復旧
# 1. メンテナンスモードON docker exec -u www-data nextcloud-stack-app-1 php occ maintenance:mode –on # 2. 最新バックアップ確認 LATEST=$(ls -td /srv/storage/SM-storage/backup/nextcloud/202* | head -1) echo “復元元: $LATEST” # 3. データベース復元 docker exec -i nextcloud-stack-db-1 \ mariadb -u nextcloud -pStrongPassword123! nextcloud \ < $LATEST/nextcloud_db_*.sql # 4. config.php復元 docker cp $LATEST/config.php nextcloud-stack-app-1:/var/www/html/config/ # 5. custom_apps復元 docker exec nextcloud-stack-app-1 rm -rf /var/www/html/custom_apps/* docker cp $LATEST/custom_apps/. nextcloud-stack-app-1:/var/www/html/custom_apps/ # 6. ユーザーデータ復元(時間がかかる) rsync -avz –delete \ /srv/storage/SM-storage/backup/nextcloud/latest_data/ \ /mnt/maguro/nextclouddata/ # 7. 権限修正 docker exec nextcloud-stack-app-1 chown -R www-data:www-data /var/www/html # 8. メンテナンスモードOFF docker exec -u www-data nextcloud-stack-app-1 php occ maintenance:mode –off # 9. 動作確認 curl -s https://cloud.k2-o.net/status.php | grep installed
hirame設定復元
# 1. 最新バックアップ確認 LATEST=$(ls -td /srv/storage/SM-storage/backup/hirame/202* | head -1) echo “復元元: $LATEST” # 2. netplan復元 scp $LATEST/netplan/* hirame@173.0.0.10:/tmp/ ssh hirame@173.0.0.10 “sudo cp /tmp/*.yaml /etc/netplan/ && sudo netplan apply” # 3. systemd復元 scp $LATEST/systemd/* hirame@173.0.0.10:/tmp/ ssh hirame@173.0.0.10 “sudo cp /tmp/*.service /etc/systemd/system/ && sudo systemctl daemon-reload” # 4. Docker確認 ssh hirame@173.0.0.10 “docker ps -a”
NFSマウント修復
# R640側 sudo umount /srv/storage/SM-storage sudo umount /mnt/backup sudo mount -a df -h | grep 173.0.0 # Supermicro側(必要な場合) ssh katuo@173.0.0.1 sudo exportfs -ra sudo exportfs -v | grep 173.0.0
⚡ 手動バックアップ実行
Nextcloud即時バックアップ
bash /opt/mikyun/bin/nc_backup.sh tail -50 /var/log/nc_backup.log
hirame即時バックアップ
bash /opt/mikyun/bin/remote_backup.sh tail -50 /var/log/remote_backup.log
GitHub即時プッシュ
cd /root/mikyun-cloud git add . git commit -m “手動バックアップ $(date +%Y-%m-%d_%H:%M)” git push origin main
📋 チェックリスト一覧
頻度 確認項目 コマンド 正常基準
毎日 NFSマウント df -h | grep 173.0.0 2行表示
最新バックアップ ls -lt /srv/…/backup/nextcloud/ | head -5 24時間以内
エラーログ tail -50 /var/log/nc_backup.log | grep -i error 出力なし
cron実行 crontab -l | grep backup 2行表示
毎週 世代数 ls -d /…/nextcloud/202* | wc -l 7以下
容量 df -h /srv/storage/SM-storage/ 空き60TB以上
hirame接続 ssh hirame@173.0.0.10 hostname hirame-X58A-UD3R
GitHub同期 cd /root/mikyun-cloud && git status clean
⚠️ 重要:
– 毎日のチェックは朝5時以降に実施(cron実行後)
– エラーが出た場合は即座に原因調査
– NFSマウント異常は全バックアップ停止を意味する
– 世代数が増えすぎている場合は手動削除検討
✅ クイック確認コマンド(全項目一括):
# 1行で主要項目を確認 echo “=== NFSマウント ===” && df -h | grep 173.0.0 && \ echo -e “\n=== 最新バックアップ ===” && ls -lt /srv/storage/SM-storage/backup/nextcloud/ | head -3 && \ echo -e “\n=== エラーログ ===” && tail -20 /var/log/nc_backup.log | grep -i error && \ echo -e “\n=== 世代数 ===” && echo “NC: $(ls -d /srv/storage/SM-storage/backup/nextcloud/202* 2>/dev/null | wc -l)世代” && \ echo “hirame: $(ls -d /srv/storage/SM-storage/backup/hirame/202* 2>/dev/null | wc -l)世代”
⏰ バックアップタイマー管理
📅 自動実行スケジュール
時刻 タスク スクリプト 実行方式
毎日 3:00 Nextcloud完全バックアップ /opt/mikyun/bin/nc_backup.sh cron
毎日 4:00 hirameバックアップ /opt/mikyun/bin/remote_backup.sh cron
📌 実行順序の理由:
– Nextcloud(3:00)を先に実行してメンテナンスモード中の負荷を避ける
– hirame(4:00)はNextcloud完了後に実行し、リソース競合を回避
🔍 cron設定確認
現在のcron設定表示
crontab -l
バックアップ関連のみ表示
crontab -l | grep -E “nc_backup|remote_backup”
✅ 正常な出力例:
0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1
0 4 * * * /bin/bash /opt/mikyun/bin/remote_backup.sh >> /var/log/remote_backup.log 2>&1
cron実行履歴確認
# 本日のcron実行ログ grep CRON /var/log/syslog | grep -E “nc_backup|remote_backup” | tail -10 # 直近3日分のcron実行 grep CRON /var/log/syslog* | grep -E “nc_backup|remote_backup” | tail -20
次回実行予定時刻確認
# cronが有効か確認 systemctl status cron # 次回実行時刻の計算(手動) date -d “tomorrow 03:00” “+次回Nextcloud: %Y-%m-%d %H:%M” date -d “tomorrow 04:00” “+次回hirame: %Y-%m-%d %H:%M”
⚙️ cron設定変更
cron編集開始
crontab -e
実行時刻の変更例
例1: Nextcloudを深夜2時に変更
# 変更前 0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1 # 変更後 0 2 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1
例2: 週1回(日曜)に変更
# 変更後(日曜の午前3時のみ) 0 3 * * 0 /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1
例3: 1日2回実行(3:00と15:00)
# 午前3時 0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1 # 午後3時 0 15 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1
cronフォーマット解説
# 分 時 日 月 曜日 コマンド # 0 3 * * * /path/to/script.sh # # 分 : 0-59 # 時 : 0-23 # 日 : 1-31 # 月 : 1-12 # 曜日 : 0-7 (0と7は日曜、1は月曜) # * : 全て # 例 0 3 * * * # 毎日3:00 0 3 * * 0 # 毎週日曜3:00 0 3 1 * * # 毎月1日3:00 0 */6 * * * # 6時間ごと 30 2 * * 1-5 # 平日の2:30
🔧 トラブルシューティング
問題1: cronが実行されない
原因調査:
# cronサービス状態確認 systemctl status cron # cronログ確認 grep CRON /var/log/syslog | tail -20 # スクリプトの実行権限確認 ls -l /opt/mikyun/bin/nc_backup.sh ls -l /opt/mikyun/bin/remote_backup.sh
解決策:
# cronサービス再起動 sudo systemctl restart cron # 実行権限付与 sudo chmod +x /opt/mikyun/bin/nc_backup.sh sudo chmod +x /opt/mikyun/bin/remote_backup.sh # cron再読み込み crontab -l | crontab –
問題2: スクリプトは実行されるがバックアップ失敗
原因調査:
# バックアップログ確認 tail -100 /var/log/nc_backup.log tail -100 /var/log/remote_backup.log # 手動実行してエラー確認 bash -x /opt/mikyun/bin/nc_backup.sh bash -x /opt/mikyun/bin/remote_backup.sh
問題3: ログに何も出力されない
cron設定確認:
crontab -l | grep -E “nc_backup|remote_backup”
⚠️ 確認ポイント:
– リダイレクト(>> と 2>&1)が正しく設定されているか
– ログファイルパスが正しいか
– ログディレクトリの書き込み権限があるか
修正例:
# ログ出力なし(NG) 0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh # 正しいログ出力設定(OK) 0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1
問題4: PATH環境変数エラー
原因: cronは最小限のPATHで実行されるため、コマンドが見つからない場合がある 解決策:
# crontabの先頭にPATHを追加 crontab -e # 以下を追加 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1 0 4 * * * /bin/bash /opt/mikyun/bin/remote_backup.sh >> /var/log/remote_backup.log 2>&1
📊 実行状況監視
本日の実行確認
# 今日実行されたか確認 grep “$(date +%Y-%m-%d)” /var/log/nc_backup.log | tail -5 grep “$(date +%Y-%m-%d)” /var/log/remote_backup.log | tail -5 # 成功メッセージ確認 grep “正常完了\|完了しました\|SUCCESS” /var/log/nc_backup.log | tail -3 grep “正常完了\|完了しました\|SUCCESS” /var/log/remote_backup.log | tail -3
過去7日間の実行履歴
# Nextcloud実行履歴 for i in {0..6}; do date=$(date -d “$i days ago” +%Y-%m-%d) count=$(grep “$date” /var/log/nc_backup.log | grep -c “完了\|SUCCESS”) echo “$date: $count回実行” done # hirame実行履歴 for i in {0..6}; do date=$(date -d “$i days ago” +%Y-%m-%d) count=$(grep “$date” /var/log/remote_backup.log | grep -c “完了\|SUCCESS”) echo “$date: $count回実行” done
次回実行までの残り時間
# 次回Nextcloud実行まで next_run=$(date -d “tomorrow 03:00” +%s) now=$(date +%s) hours=$(( ($next_run – $now) / 3600 )) echo “Nextcloud: 残り ${hours}時間” # 次回hirame実行まで next_run=$(date -d “tomorrow 04:00” +%s) now=$(date +%s) hours=$(( ($next_run – $now) / 3600 )) echo “hirame: 残り ${hours}時間”
🚀 高度な設定
メール通知の設定
# crontabの先頭に追加 MAILTO=admin@example.com 0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup.sh >> /var/log/nc_backup.log 2>&1
⚠️ 注意: メール通知にはMTA(postfix等)の設定が必要です。現在未設定の場合は外部SMTP設定タスク完了後に設定してください。
ログローテーション設定
# /etc/logrotate.d/mikyun-backup を作成 sudo tee /etc/logrotate.d/mikyun-backup << ‘EOF’ /var/log/nc_backup.log /var/log/remote_backup.log { daily rotate 30 compress delaycompress missingok notifempty create 0644 root root } EOF # 手動でローテーション実行(テスト) sudo logrotate -f /etc/logrotate.d/mikyun-backup
実行時間の監視
# バックアップ所要時間を記録するラッパースクリプト cat << ‘EOF’ > /opt/mikyun/bin/nc_backup_timed.sh #!/bin/bash start=$(date +%s) /bin/bash /opt/mikyun/bin/nc_backup.sh end=$(date +%s) duration=$((end – start)) echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – 実行時間: ${duration}秒” >> /var/log/nc_backup_time.log EOF chmod +x /opt/mikyun/bin/nc_backup_timed.sh # crontabをこちらに変更 # 0 3 * * * /bin/bash /opt/mikyun/bin/nc_backup_timed.sh >> /var/log/nc_backup.log 2>&1
✅ 確認チェックリスト
項目 確認コマンド 正常基準
cron設定存在 crontab -l | grep backup 2行表示
cronサービス systemctl status cron active (running)
スクリプト権限 ls -l /opt/mikyun/bin/*.sh -rwxr-xr-x
ログ出力設定 crontab -l | grep “>>” リダイレクトあり
本日実行確認 grep “$(date +%Y-%m-%d)” /var/log/nc_backup.log ログあり
実行成功確認 grep “完了” /var/log/nc_backup.log | tail -1 24時間以内
ログファイル存在 ls -lh /var/log/*backup*.log ファイル存在
ログサイズ確認 du -h /var/log/*backup*.log 異常肥大なし
✅ 一括確認スクリプト:
#!/bin/bash echo “=== cron設定 ===” crontab -l | grep -E “nc_backup|remote_backup” echo -e “\n=== cronサービス ===” systemctl is-active cron echo -e “\n=== 本日の実行 ===” echo “Nextcloud: $(grep “$(date +%Y-%m-%d)” /var/log/nc_backup.log | grep -c “完了”)回” echo “hirame: $(grep “$(date +%Y-%m-%d)” /var/log/remote_backup.log | grep -c “完了”)回” echo -e “\n=== 最終実行時刻 ===” echo “Nextcloud: $(grep “完了” /var/log/nc_backup.log | tail -1 | cut -d’ ‘ -f1-2)” echo “hirame: $(grep “完了” /var/log/remote_backup.log | tail -1 | cut -d’ ‘ -f1-2)” echo -e “\n=== 次回実行まで ===” next=$(($(date -d “tomorrow 03:00” +%s) – $(date +%s))) echo “Nextcloud: $((next / 3600))時間後”
💾 バックアップ・監視 完全版
R640 バックアップ体制
スケジュール
時刻対象保存先世代数通信経路
毎日 3:00Nextcloud全体/mnt/backup(SM NFS)7世代173.0.0.1(NFS)
毎日 15:00Nextcloud全体/mnt/backup(SM NFS)7世代173.0.0.1(NFS)
毎日 4:00バックアップ→hiramehirame:/srv/backup/5世代173.0.0.10(SSH)
バックアップスクリプト: /opt/mikyun/bin/nextcloud_backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d-%H%M%S)
BACKUP_DIR=”/mnt/backup/nextcloud-backup-${DATE}”
SOURCE_DIR=”/srv/storage/SM-storage”

# Nextcloud メンテナンスモード ON
docker exec nextcloud-stack-app-1 php occ maintenance:mode –on

# バックアップ実行
rsync -avz –delete ${SOURCE_DIR}/ ${BACKUP_DIR}/

# Nextcloud メンテナンスモード OFF
docker exec nextcloud-stack-app-1 php occ maintenance:mode –off

# 7世代より古いバックアップ削除
find /mnt/backup/ -name “nextcloud-backup-*” -type d -mtime +7 -exec rm -rf {} \;

# Telegram通知
curl -X POST “https://api.telegram.org/bot${BOT_TOKEN}/sendMessage” \
-d “chat_id=${CHAT_ID}” \
-d “text=✅ R640 Nextcloud Backup Completed: ${DATE}”

cron設定: /etc/cron.d/nextcloud-backup
# 毎日3:00と15:00にバックアップ実行
0 3 * * * root /opt/mikyun/bin/nextcloud_backup.sh
0 15 * * * root /opt/mikyun/bin/nextcloud_backup.sh
hirame バックアップ受信
スケジュール
時刻送信元受信先世代数通信経路
毎日 4:00R640 /mnt/backup/srv/backup/r640/5世代173.0.0.10(SSH)
R640側スクリプト: /opt/mikyun/bin/remote_backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
REMOTE_USER=”backup”
REMOTE_HOST=”173.0.0.10″
REMOTE_DIR=”/srv/backup/r640/${DATE}”
SOURCE_DIR=”/mnt/backup/nextcloud-backup-*”

# SSH経由でhirameへバックアップ
ssh ${REMOTE_USER}@${REMOTE_HOST} “mkdir -p ${REMOTE_DIR}”

# 最新バックアップのみ転送
LATEST_BACKUP=$(ls -td ${SOURCE_DIR} | head -1)
rsync -avz -e “ssh -i /root/.ssh/id_ed25519” \
${LATEST_BACKUP}/ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/

# hirameで5世代より古いバックアップ削除
ssh ${REMOTE_USER}@${REMOTE_HOST} \
“find /srv/backup/r640/ -type d -mtime +5 -exec rm -rf {} \;”

# Telegram通知
curl -X POST “https://api.telegram.org/bot${BOT_TOKEN}/sendMessage” \
-d “chat_id=${CHAT_ID}” \
-d “text=✅ R640→hirame Remote Backup Completed: ${DATE}”

cron設定: /etc/cron.d/remote-backup
# 毎日4:00にhirameへ遠隔バックアップ
0 4 * * * root /opt/mikyun/bin/remote_backup.sh
Supermicro RAID監視
RAID1 構成
項目内容
RAID名md0
構成Samsung 476.9GB + Crucial 465.8GB
状態[2/2] [UU](正常)
監視方式systemd timer(mdadm-watch.timer)
通知先Telegram
監視スクリプト: /usr/local/bin/mdadm-watch.sh
#!/bin/bash
MD_STATUS=$(cat /proc/mdstat | grep -A2 “md0” | grep “\[UU\]”)

if [ -z “$MD_STATUS” ]; then
# RAID degraded検出
curl -X POST “https://api.telegram.org/bot${BOT_TOKEN}/sendMessage” \
-d “chat_id=${CHAT_ID}” \
-d “text=🚨 ALERT: Supermicro RAID1 (md0) DEGRADED!”
fi

systemd timer設定
# /etc/systemd/system/mdadm-watch.timer
[Unit]
Description=RAID1 monitoring timer

[Timer]
OnBootSec=5min
OnUnitActiveSec=30min

[Install]
WantedBy=timers.target

# 有効化
systemctl enable mdadm-watch.timer
systemctl start mdadm-watch.timer

# 状態確認
systemctl status mdadm-watch.timer

R640 NVMe SMART監視
NVMe構成
項目内容
デバイス/dev/nvme0n1
型番Samsung 970 EVO Plus 1TB
マウント先/mnt/nvme-cache
用途Nextcloud/MariaDB/Redis高速化
監視方式systemd timer(nvme-watch.timer)
通知先Telegram
監視スクリプト: /usr/local/bin/nvme-watch.sh
#!/bin/bash
NVME_DEV=”/dev/nvme0n1″
HEALTH=$(nvme smart-log ${NVME_DEV} | grep “critical_warning” | awk ‘{print $3}’)

if [ “$HEALTH” != “0x00” ]; then
# SMART警告検出
curl -X POST “https://api.telegram.org/bot${BOT_TOKEN}/sendMessage” \
-d “chat_id=${CHAT_ID}” \
-d “text=🚨 ALERT: R640 NVMe SMART Warning Detected!”
fi

# 使用量監視(80%超えで警告)
USAGE=$(df -h /mnt/nvme-cache | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
if [ “$USAGE” -gt 80 ]; then
curl -X POST “https://api.telegram.org/bot${BOT_TOKEN}/sendMessage” \
-d “chat_id=${CHAT_ID}” \
-d “text=⚠️ WARNING: R640 NVMe Usage ${USAGE}% (threshold: 80%)”
fi

systemd timer設定
# /etc/systemd/system/nvme-watch.timer
[Unit]
Description=NVMe SMART monitoring timer

[Timer]
OnBootSec=10min
OnUnitActiveSec=1h

[Install]
WantedBy=timers.target

# 有効化
systemctl enable nvme-watch.timer
systemctl start nvme-watch.timer

# 状態確認
systemctl status nvme-watch.timer

バックアップ確認コマンド
R640 ローカルバックアップ確認
# 最新バックアップ確認
ls -lth /mnt/backup/ | head -10

# 世代数確認
ls -ld /mnt/backup/nextcloud-backup-* | wc -l

# バックアップサイズ確認
du -sh /mnt/backup/nextcloud-backup-*

hirame リモートバックアップ確認
# SSH経由で確認
ssh backup@173.0.0.10 “ls -lth /srv/backup/r640/”

# 世代数確認
ssh backup@173.0.0.10 “ls -ld /srv/backup/r640/* | wc -l”

# 最新バックアップのサイズ
ssh backup@173.0.0.10 “du -sh /srv/backup/r640/$(date +%Y%m%d)”

バックアップリストア手順(緊急時)
# 1. Nextcloud停止
docker compose -f /opt/nextcloud-stack/docker-compose.yml down

# 2. 現在のデータ退避
mv /srv/storage/SM-storage /srv/storage/SM-storage.old

# 3. バックアップからリストア
BACKUP_DATE=”20260330-030000″
rsync -avz /mnt/backup/nextcloud-backup-${BACKUP_DATE}/ /srv/storage/SM-storage/

# 4. 権限修正
chown -R www-data:www-data /srv/storage/SM-storage

# 5. Nextcloud起動
docker compose -f /opt/nextcloud-stack/docker-compose.yml up -d

# 6. メンテナンスモード解除
docker exec nextcloud-stack-app-1 php occ maintenance:mode –off

監視ダッシュボード
Telegram通知一覧
通知種別トリガー頻度
✅ R640 Backup完了nextcloud_backup.sh成功毎日3:00/15:00
✅ R640→hirame完了remote_backup.sh成功毎日4:00
🚨 RAID1 DegradedSupermicro md0異常30分毎チェック
🚨 NVMe SMART警告R640 NVMe異常1時間毎チェック
⚠️ NVMe使用率警告使用率80%超過1時間毎チェック
✅ バックアップ体制完備:
– R640: 日次2回(3:00/15:00)7世代保持
– hirame: 日次1回(4:00)5世代保持(オフサイト)
– RAID監視: 30分毎自動チェック
– NVMe監視: 1時間毎自動チェック
– 全通知Telegram連携済み