はじめに
Linux(Debian)からQNAPにSSH経由でrsyncを使ってバックアップを行うメモです。
未解決
共有ディレクトリ(/backup)に対してadministrator権限のユーザに読み書きのアクセス権を与えましたが、以下のエラーが出ました。
administrator権限のユーザのホームディレクトリにはバックアップできるので、何かが足りないと思われます。
rsync: mkdir "/backup" failed: Permission denied (13)
環境
- Debian 12 bookworm
- rsync 3.2.7-1
- ssh-keygen
- OpenSSH_9.2p1 Debian-2+deb12u2, OpenSSL 3.0.11 19 Sep 2023
- QNAP TS-873A / AZ
- QTS 5.1.6.2722
ディレクトリ構成です。
/home/backup/ - backup.sh - id_ed25519.pub - id_ed25519 - log.txt
手順
1. QNAPでバックアップ用の専用アカウントを作成する。(管理者adminで行う場合は不要)
2. QNAPでSSHを有効にする。(1のユーザにアクセス許可する。)
3. LinuxでSSH鍵を生成する。
4. QNAPに作った1のユーザに公開鍵を登録する。
5. スクリプトをテストする。
QNAPでSSHを有効にする
QNAPでSSHを有効にします。
また、「アクセス許可の編集」でユーザにアクセス権を与えます。
LinuxでSSH鍵を生成する
作業ディレクトリに移動して、LinuxでSSH鍵をカレントディレクトリに生成します。
パスフレーズ無しとします。
公開鍵はid_ed25519.pub、秘密鍵はid_ed25519となります。
cd /home/backup ssh-keygen -t ed25519 -f ./id_ed25519
QNAPの対象ユーザに公開鍵を登録する
QNAPのバックアップ用の専用アカウントに公開鍵を登録します。
id_ed25519.pubの内容をコピペします。



スクリプトを作成する
バックアップ用スクリプト(backup.sh)を作成します。
#!/bin/bash
# NASの設定
NAS_HOST="192.168.1.100"
NAS_USER="admin"
#NAS_USER="qnap_user"
# /home/backupuser(ホームディレクトリ)の下に作成する場合は、/(スラッシュ)は不要
#NAS_DIR="/backup"
NAS_DIR="backup"
# バックアップするディレクトリ
SOURCE_DIR="/data"
# ログファイル
LOG_FILE="/home/backup/log.txt"
# SSH秘密鍵のパス
SSH_KEY="/home/backup/id_ed25519"
# SSHのポート番号
SSH_PORT="22"
# rsyncコマンドのオプション
# 同期(--deleteあり)
#RSYNC_OPTS1="-avzho --delete --progress -e "
#RSYNC_OPTS1="-avzho --delete -e "
# 差分
#RSYNC_OPTS1="-avzho --progress -e "
RSYNC_OPTS1="-avzho -e "
# StrictHostKeyCheckingで問い合わせ無効
RSYNC_OPTS2="ssh -p ${SSH_PORT} -i ${SSH_KEY} -o StrictHostKeyChecking=no"
# ログファイルに日時を記録
echo "================ $(date) =================" >> "${LOG_FILE}"
# rsyncコマンドを実行
/usr/bin/rsync ${RSYNC_OPTS1} "${RSYNC_OPTS2}" ${SOURCE_DIR} ${NAS_USER}@${NAS_HOST}:${NAS_DIR} 2>&1
# 終了コードを確認
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Backup completed successfully." >> "${LOG_FILE}"
else
echo "$(date '+%Y-%m-%d %H:%M:%S') Backup failed." >> "${LOG_FILE}"
fi
テストする
スクリプト(backup.sh)をテストします。
QNAPのFile Stationでコピーされているか確認します。
sudo bash backup.sh
または、
cd /home/backup sudo chmod 755 backup.sh sudo ./backup.sh
cronに登録する
rootのcronに登録します。
sudo crontab -e
1日に1回、バックアップします。
30 4 * * * /home/backup/backup.sh



Comments