数年前から自宅で使用しているQNAP TS-230をNFSでローカルネットワーク内のUbuntu 22.04にマウントし、定期的に同期する手順を調べて実施しました。
Qiitaなどの技術ブログを調べましたが、結局Claudeに手順を説明してもらった方法が一番わかりやすかったので、自分用へのメモです。
1. QNAP TS-230側の設定
1.1. QTS管理画面にアクセス
ブラウザでNASサーバの管理画面にアクセスし、管理者でログインします。
1.2. NFSサービスの有効化
1.3. NFS共有フォルダの作成・設定
- コントロールパネル → 権限設定 → 共有フォルダー
- 共有するフォルダをのアクション欄から共有フォルダー権限の編集アイコンを選択
- 権限タイプの選択 のプルダウンリストから NFSホストのアクセス を選択
- 以下を設定:
- アクセス権にチェック
- 権限: 読み書き or 読み取り専用
-
ホスト:
UbuntuPCのIPアドレスを設定 -
スケッシュ:
sys(通常) -
Sqashオプション:
読み取り/書き込みに設定
-
適用をクリック
2. Ubuntu 22.04側のマウント設定
2.1. NFSクライアントのインストール
bash
sudo apt update
sudo apt install nfs-common
2.2. マウントポイントの作成
bash
sudo mkdir -p /mnt/qnap
2.3. 利用可能なNFS共有の確認
bash
showmount -e <NASサーバのIPアドレス>
2.4. 手動マウント(テスト)
bash
sudo mount -t nfs <NASサーバのIPアドレス>:/マウントしたいフォルダ名 /mnt/qnap
2.5. マウントの確認
bash
df -h | grep qnap
ls -la /mnt/qnap
2.6. 自動マウント設定(起動時)
bash
sudo nano /etc/fstab
ファイルの最後に追加:
/etc/fstab
<NASサーバのIPアドレス>:/マウントしたいフォルダ名 /mnt/qnap nfs defaults,user,auto,noatime,intr 0 0
2.7. fstab設定のテスト
bash
sudo umount /mnt/qnap # 一度アンマウント
sudo mount -a # fstabからマウント
2.8. トラブルシューティング
何か問題が発生した場合は、dmesg コマンドでエラーログを確認する。
パーミッション問題の解決
NFSでは通常UIDマッピングが問題になります:
# Ubuntu側でユーザーIDを確認
id
# QNAP側でも同じUID/GIDを使用するか、
# NFS設定で「no_root_squash」や「all_squash」オプションを調整
ファイアウォールの確認
bash
# Ubuntu側でNFSポートが開いているか確認
sudo ufw status
sudo ufw allow from 192.168.11.201
マウントオプションの調整
より適切なマウントオプション例:
192.168.11.201:/share/フォルダ名 /mnt/qnap nfs rw,hard,intr,rsize=8192,wsize=8192,timeo=14 0 0
3. Ubuntuの定期同期設定
unison もしくは rsync で同期する。
3.1. unison使用して双方向同期を行う方法
3.1.1. unisonのインストール
bash
sudo apt install unison
3.1.2. unisonプロファイル作成
bash
mkdir -p ~/.unison
nano ~/.unison/qnap.prf
プロファイル内容:
~/.unison/qnap.prf
# 同期する対象のルートパスの定義
root = /home/username/documents
root = /mnt/qnap/documents
# 実際に同期したいディレクトリを指定(複数可)
path = android
path = DCIM
# 除外するファイル
ignore = Name *.tmp
ignore = Name *.log
ignore = Name .bak
# タイムスタンプをコピーする
times = true
# 新しいファイルを優先
prefer = newer
# バッチ処理有効化
batch = true
3.1.3. 実行
bash
unison qnap
3.1.4. crontabで定期処理化
bash
crontab -e
定期実行の設定例
- 毎時0分に実行:
crontab
0 * * * * unison qnap
- 毎日午前2時に実行:
crontab
0 2 * * * unison qnap
- 平日の午前9時と午後6時に実行:
crontab
0 9,18 * * 1-5 unison qnap
- 15分毎に実行:
crontab
*/15 * * * * unison qnap
3.2. rsyncを使って同期を行う方法
3.2.1. rsyncのインストール(通常は既にインストール済み)
bash
sudo apt install rsync
3.2.2. 基本的な同期コマンド
一方向同期(QNAPからローカルへ):
bash
rsync -avz --delete /mnt/qnap/ /home/username/backup/
一方向同期(ローカルからQNAPへ):
bash
rsync -avz --delete /home/username/documents/ /mnt/qnap/
主要オプションの説明
-
-a: アーカイブモード(権限、タイムスタンプを保持) -
-v: 詳細表示 -
-z: 圧縮転送 -
--delete: 移行先にない不要ファイルを削除 -
--dry-run: 実際の処理を行わずテスト実行
3.2.3. 同期スクリプトの作成
bash
nano ~/sync_script.sh
スクリプト例:
~/sync_script.sh
#!/bin/bash
# ログファイルの設定
LOGFILE="/var/log/qnap_sync.log"
DATE=$(date "+%Y-%m-%d %H:%M:%S")
# マウント確認
if ! mountpoint -q /mnt/qnap; then
echo "[$DATE] エラー: QNAPがマウントされていません" >> $LOGFILE
exit 1
fi
# QNAPからローカルへの同期
echo "[$DATE] 同期開始: QNAP -> ローカル" >> $LOGFILE
rsync -avz --delete /mnt/qnap/ /home/username/backup/ >> $LOGFILE 2>&1
if [ $? -eq 0 ]; then
echo "[$DATE] 同期完了: QNAP -> ローカル" >> $LOGFILE
else
echo "[$DATE] 同期エラー: QNAP -> ローカル" >> $LOGFILE
fi
# ローカルからQNAPへの同期(必要に応じて)
echo "[$DATE] 同期開始: ローカル -> QNAP" >> $LOGFILE
rsync -avz --delete /home/username/documents/ /mnt/qnap/documents/ >> $LOGFILE 2>&1
if [ $? -eq 0 ]; then
echo "[$DATE] 同期完了: ローカル -> QNAP" >> $LOGFILE
else
echo "[$DATE] 同期エラー: ローカル -> QNAP" >> $LOGFILE
fi
echo "[$DATE] 全同期処理完了" >> $LOGFILE
3.2.4. スクリプトに実行権限を付与
bash
chmod +x ~/sync_script.sh
3.2.5. 手動テスト実行
bash
~/sync_script.sh
3.2.6. cronで定期処理化
bash
crontab -e
定期実行の設定例
- 毎時0分に実行:
crontab
0 * * * * /home/username/sync_script.sh
- 毎日午前2時に実行:
crontab
0 2 * * * /home/username/sync_script.sh
- 平日の午前9時と午後6時に実行:
crontab
0 9,18 * * 1-5 /home/username/sync_script.sh
- 15分毎に実行:
crontab
*/15 * * * * /home/username/sync_script.sh
3.2.7. より高度な同期設定
3.2.7.1. 除外ファイルの設定
bash
nano ~/rsync_exclude.txt
除外リスト例:
~/rsync_exclude.txt
*.tmp
*.log
.cache/
.thumbnails/
スクリプトで使用:
bash
rsync -avz --delete --exclude-from=/home/username/rsync_exclude.txt /mnt/qnap/ /home/username/backup/
注意点
- ファイルサイズ制限: 大きなファイルがある場合は時間がかかる
- ネットワーク負荷: 頻繁な同期はネットワーク帯域を消費する
- 権限問題: NFSのUID/GIDマッピングに注意
- 同時書き込み: 双方向同期時の競合状態に注意
