Synology NASで外付けHDDコピー中にDockerが落ちる?rsyncでI/O負荷を抑えて安定させる方法

Tips

はじめに

Synology NASで大容量データを運用していると、外付けHDDとのファイルコピー中に、意図せずContainer Manager(旧Docker)のコンテナが停止してしまうことがあります。

特に以下のような状況では、NAS全体の負荷が高まりトラブルが発生しやすくなります。

  • File Stationで数TB単位の動画ファイルをコピーしている
  • 外付けHDD ⇔ NAS間で長時間(数時間〜数日)の転送を行っている
  • データベース(MariaDBなど)のように、ディスクI/Oに敏感なコンテナを稼働させている

筆者の環境でも、File Station経由のコピーがI/Oリソースを独占し、基盤となるコンテナが次々と落ちる現象に悩まされました。そこで今回は、標準機能の「rsync」を活用し、I/O負荷を意図的に制限しながら安全かつ確実にコピーする方法をご紹介します。


なぜコピー中にContainer Managerが停止するのか

原因の多くは、File Stationによる「ディスクI/Oの飽和(IO Wait)」にあります。

File Stationによるコピーは利便性が高い反面、可能な限りの速度でリソースを使い切ろうとします。その結果、以下のリソースが圧迫されます。

  • ディスクI/O: ストレージへの読み書き待ちが発生
  • CPU / メモリ: 転送処理と管理画面の維持に消費
  • USB帯域: 外付けHDDとの通信がボトルネック化

NASのOS(DSM)側でディスクI/Oが飽和すると、コンテナ側のプロセスがディスク応答を待てなくなり、ヘルスチェック失敗やタイムアウトによって停止(Crash)してしまうのです。


解決策:rsyncコマンド+帯域制限を活用する

この問題を解決するには、コピー速度をあえて「全力」から「余裕のある速度」に落とすのが正解です。今回はDSMの「タスクスケジューラ」を使い、バックグラウンドで安定して動作するスクリプトを実行します。

使用するコマンド案

nohup nice -n 19 rsync -aHAXvh --ignore-existing --info=progress2 --bwlimit=20M /volumeUSB1/usbshare/temp/ /volume1/temp/ > /volume1/rsync-live.log 2>&1 &

※パス(/volumeUSB1/... 等)は、ご自身の環境に合わせて書き換えてください。

「20MB/s」が安定のボーダーライン

筆者の検証環境では、以下の結果となりました。

  • 制限なし(約100MB/s): 十数分ほどでContainer Manager内のコンテナが停止
  • --bwlimit=30M 動作はするが、時折コンテナのレスポンスが悪化
  • --bwlimit=20M 極めて安定。 他のサービスへの影響もほぼなし

NAS運用においては「最高速」よりも、「他のサービスを止めずに最後まで完遂すること」が重要です。


タスクスケジューラでの設定手順

SSHを使わずに、DSMのGUIから設定・実行する方法を解説します。

  1. タスクスケジューラを開く
    [コントロールパネル] > [タスクスケジューラ] を開きます。
  2. ユーザー定義スクリプトの作成
    [作成] > [トリガーされたタスク] > [ユーザー指定のスクリプト] を選択します。
  3. 全般設定
    • タスク名: 「Background_Rsync_Copy」など任意
    • ユーザー: root (権限エラーを防ぐため推奨)
    • イベント: 「ブートアップ」のままでOK
  4. タスク設定(スクリプトの貼り付け)
    「ユーザー定義スクリプト」欄に、前述のコマンドを貼り付けます。

保存後、作成したタスクを選択して [実行] をクリックすれば、裏側でコピーが開始されます。


コマンドのオプション詳細解説

今回使用したコマンドに含まれる各オプションの意味を整理しました。

オプション意味効果
nohupハングアップ拒否ログアウトや画面を閉じても処理を継続します。
nice -n 19CPU優先度の変更CPUリソースを他のアプリに優先させます。
rsync -aHAXvh高機能コピーアーカイブモードに加え、ACLや拡張属性を保持してコピーします。
--ignore-existing上書き防止既にコピー済みのファイルをスキップし、再開をスムーズにします。
--bwlimit=20M帯域制限最重要。 転送速度を20MB/sに制限し、I/O飽和を防ぎます。

進行状況を確認する方法

タスクスケジューラで実行した処理が正しく動いているか確認する方法は2つあります。

1. SSHでプロセスを確認する

SSHでNASに接続し、以下のコマンドを叩きます。

ps aux | grep rsync

リストに実行中の rsync プロセスが表示されていれば動作中です。

2. ログファイルをリアルタイムで監視する

コマンド内でログ出力先を指定しているため、以下のコマンドで進捗をリアルタイム確認できます。

tail -f /volume1/rsync-live.log

転送中のファイル名や進行率(%)、現在の速度が1行で表示されます。


この方法を導入するメリット

  • DSM全体のレスポンスが維持される: コピー中も管理画面や他のアプリがサクサク動きます。
  • コンテナの可用性を確保: MariaDB、Plex、Immichなど、ディスク負荷に弱いサービスを止めることなくデータ移行が可能です。
  • レジューム(再開)が容易: 万が一NASを再起動しても、同じコマンドを叩くだけで未コピー分から再開されます。

おわりに

Synology NASのFile Stationは非常に優秀ですが、数TBクラスのデータ転送には少し「力任せ」な側面があります。

Dockerで様々なサービスを運用しているサーバーとしてのNASであれば、rsync + bwlimit による制御は必須のテクニックと言えるでしょう。「大容量コピーのたびにコンテナが落ちて困っている」という方は、ぜひこの低負荷コピーを試してみてください。

Tips
スポンサーリンク

コメント