1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UbuntuでNASサーバ(QNAP TS-230)をNFSでマウント・定期同期

1
Posted at

数年前から自宅で使用しているQNAP TS-230をNFSでローカルネットワーク内のUbuntu 22.04にマウントし、定期的に同期する手順を調べて実施しました。
Qiitaなどの技術ブログを調べましたが、結局Claudeに手順を説明してもらった方法が一番わかりやすかったので、自分用へのメモです。

1. QNAP TS-230側の設定

1.1. QTS管理画面にアクセス

ブラウザでNASサーバの管理画面にアクセスし、管理者でログインします。

1.2. NFSサービスの有効化

  1. コントロールパネル → ネットワークとファイルサービス → Win/Mac/NFS/WebDAV
  2. NFSサービスタブを選択
  3. NFSサービスを有効にする にチェックを入れる
  4. 適用 をクリック
    image.png

1.3. NFS共有フォルダの作成・設定

  1. コントロールパネル → 権限設定 → 共有フォルダー
  2. 共有するフォルダをのアクション欄から共有フォルダー権限の編集アイコンを選択
  3. 権限タイプの選択 のプルダウンリストから NFSホストのアクセス を選択
  4. 以下を設定:
    • アクセス権にチェック
    • 権限: 読み書き or 読み取り専用
    • ホスト: UbuntuPCのIPアドレスを設定
    • スケッシュ: sys(通常)
    • Sqashオプション: 読み取り/書き込みに設定
  5. 適用をクリック
    image.png

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/

注意点

  1. ファイルサイズ制限: 大きなファイルがある場合は時間がかかる
  2. ネットワーク負荷: 頻繁な同期はネットワーク帯域を消費する
  3. 権限問題: NFSのUID/GIDマッピングに注意
  4. 同時書き込み: 双方向同期時の競合状態に注意
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?