ハウツーガイド

SSH経由rsyncコマンドで巨大ファイルを高速・安全にサーバー間転送する方法

  • 18 読むのにかかる時間(分)
  • Hostragons チーム
SSH経由rsyncコマンドで巨大ファイルを高速・安全にサーバー間転送する方法

SSH経由のrsyncコマンドは、Linuxで大容量ファイルを2つのサーバー間で素早く、安全かつ途切れに強く転送する最も実用的な方法の一つです。特に数百GB規模のウェブサイトデータ、バックアップアーカイブ、メディアフォルダやアプリケーションデータの移行時、rsyncは変更されたブロックだけを送信できるため、従来のコピー方法より大幅な速度向上が期待できます。基本的な仕組みは、ソースサーバーのファイルをSSHトンネルで暗号化してターゲットサーバーに同期すること。接続が切れても、転送は途中から再開可能です。

サーバー移行、ホスティングのアップグレード、データセンター移転やバックアップ運用では、速度と同時にデータの完全性が重要です。巨大なアーカイブを丸ごとダウンロードして再アップロードするのは時間がかかるだけでなく、転送中に接続が途切れると最初からやり直しになる可能性があります。rsyncはこの問題を解決し、ファイルのタイムスタンプやパーミッション、所有者情報、ディレクトリ構造を維持できます。こうした理由から、Linuxシステム管理者、DevOpsチーム、ウェブホスティングの担当者は日常的にrsyncを利用しています。

本ガイドでは、2つのLinuxサーバー間でSSH経由rsyncによる巨大ファイル転送の手順を、実際のコマンド例と共に解説します。パフォーマンス向上のオプションやセキュリティチェック、エラー対応、テスト転送の方法、そして本番環境移行前に注意すべきポイントも紹介します。新しいVPSやホスティング環境への移行を計画している場合は、事前にソース・ターゲット両サーバーで十分なディスク容量、SSHアクセス、正しいユーザー権限があるかを確認してください。インフラ選定の参考に Hostragons VPSサーバーソリューション や Linuxホスティングパッケージ ページもご覧ください。

rsyncとは?巨大ファイル転送で選ばれる理由

rsyncは、ファイルやディレクトリをローカルまたはリモートサーバー間で同期できる強力なコマンドラインツールです。最大の特徴は「デルタ転送アルゴリズム」。これは毎回ファイル全体を送るのではなく、変更部分のみを転送します。例えば80GBのバックアップファイルで2GBしか差分がなければ、その差分だけを転送できるのです。

SSHは転送時の暗号化を担います。rsyncはネットワーク上でファイル内容を平文で送らず、暗号化して安全に転送します。これは顧客データやEC注文履歴、メディアアーカイブ、データベースバックアップ、特定アプリのファイルなどで特に重要です。ホスティング業界ではSSL証明書だけがセキュリティではありません。サーバー間転送の経路も安全であるべきです。ウェブサイトのトラフィックには SSL証明書 を、サーバー間ファイル転送にはSSHによる暗号化を推奨します。

rsyncはFTPや手動のダウンロード/アップロードより柔軟です。パーミッションの維持、シンボリックリンクの転送、削除ファイルのミラーリング、帯域制限、転送前のテストも可能。巨大ファイルを扱うリスクの高い作業では、このコントロール性が大きなメリットとなります。

SSH経由rsyncコマンドを使うべきタイミング

SSH経由rsyncは、特に巨大・多数・頻繁に変化するファイルの転送に最適です。単純な画像フォルダーならSFTPでも十分ですが、数千ファイルや多様な権限、大規模アーカイブならrsyncが遥かに信頼できます。

  • 旧サーバーから新しいVPSへのウェブサイト移行時
  • WordPressのuploadsフォルダー等、数千メディアファイルを転送するとき
  • 日次・週次・月次バックアップを別サーバーへコピーするとき
  • データセンターやホスティングプロバイダーの変更時
  • アプリファイルを本番・バックアップ環境間で同期するとき
  • 接続切れのリスクがある長時間転送を計画するとき

例えば250GBのメディアフォルダーをPCにダウンロードして新サーバーにアップロードする場合、2回の転送が必要となり、合計時間が伸びるだけでなく自宅やオフィスのネット回線がボトルネックになります。rsyncならソースサーバーからターゲットサーバーへダイレクト転送でき、中間工程を省略できます。

事前準備チェックリスト

rsyncコマンドの知識だけでなく、ソース・ターゲット両サーバーの状況を確認することが成功の鍵です。転送中のデータ消失や中断リスクを減らすため、以下のチェックは本番環境で必須です。

1. SSH接続の確認

ソースサーバーからターゲットサーバーへSSH接続できる必要があります。標準的な接続テストは:ssh ユーザー名@ターゲットIP。SSHが別ポートの場合は:ssh -p 2222 ユーザー名@ターゲットIP。接続できなければrsyncも動きません。ファイアウォール、Fail2ban、SSHポート、ユーザー権限、パスワードや鍵認証をチェックしましょう。

2. rsyncインストールの確認

多くのLinuxディストリビューションでrsyncは標準搭載ですが、念のため確認を。Debian/Ubuntu系なら rsync --version、未導入なら apt install rsync。AlmaLinuxやRocky Linux、CentOS系なら dnf install rsync や yum install rsync。HostragonsのLinux VPSなら数秒でインストールできます。

3. ディスク容量の確認

ターゲットサーバーに十分な空き容量がない場合、転送途中で止まります。ソースディレクトリのサイズ確認は du -sh /ソース/ディレクトリ。ターゲット側は df -h。実際にはファイルサイズだけでなく、一時ファイルやログ用の余裕も必要。例えば500GB転送なら550~600GBの空き容量を計画すると安全です。

4. 主要サービスと変化ファイルの計画

稼働中のウェブサイトでは転送中もファイルが変化します。特にユーザーアップロードやキャッシュ、ログは常に更新されます。まず主要データを転送し、その後メンテナンスモードで最後のrsyncを実行することで、ダウンタイムを数分に抑えられます。WordPressサイトなら WordPressホスティング移行ガイド 等のサポートコンテンツも活用できます。

基本rsyncコマンド:サーバー間ファイル転送

よく使われる基本構文は:rsync -avz /ソース/ディレクトリ/ ユーザー名@ターゲットIP:/ターゲット/ディレクトリ/。-aはアーカイブモードで権限やタイムスタンプ、シンボリックリンクを保持、-vは詳細表示、-zは転送中の圧縮。ディレクトリ名の末尾スラッシュの有無が重要。/ソース/ディレクトリ/ なら中身だけ転送、/ソース/ディレクトリ ならフォルダごと転送。

例:旧サーバー /var/www/site/public_html/ の180GBウェブデータを新サーバー /var/www/site/public_html/ へ。コマンドは rsync -avz /var/www/site/public_html/ root@203.0.113.20:/var/www/site/public_html/。これでソースからターゲットへSSH経由で転送されます。

rootユーザーを避ける場合は、ターゲット側で書き込み権限のある専用ユーザー(例:deploy)を作成し、フォルダ所有者を調整すると安全です。生産環境ではroot直使用が手軽でも、限定権限ユーザーを推奨します。

安全・堅牢なrsyncパラメータ例

巨大ファイル転送では、基本コマンドだけでは不十分な場合もあります。接続切れ、部分ファイル、不正な削除や遅い回線などに備え、追加オプションを使うべきです。以下のコマンドは多くの実務シナリオで安定したスタート地点です:

rsync -aHAXv --numeric-ids --partial --progress --append-verify -e ssh /ソース/ディレクトリ/ ユーザー名@ターゲットIP:/ターゲット/ディレクトリ/

-aアーカイブモード、-Hハードリンク情報、-A ACL権限、-X拡張属性を保持。--numeric-idsはユーザー/グループ名ではなくIDで転送、サーバー間のユーザー名違いに有効。--partialは途中ファイルを残し、--progressは進行状況を表示。--append-verifyは特に巨大ファイルの途中再開時に追加部分を検証します。

すべてのパラメータが常に必要ではありません。単純なサイト移行なら -aHAX で十分、特殊権限を使うアプリならACLや拡張属性の維持が重要。事前のテスト転送が安全策です。

SSHポート変更時のrsyncコマンド

セキュリティのためSSHポートが22以外の場合、rsyncのSSHパラメータで指定が必要です。例:rsync -avz -e ssh -p 2222 /ソース/ディレクトリ/ ユーザー名@ターゲットIP:/ターゲット/ディレクトリ/。ただし -e オプションの値は一緒に指定:rsync -avz -e 'ssh -p 2222' /ソース/ディレクトリ/ ユーザー名@ターゲットIP:/ターゲット/ディレクトリ/。

JSONや管理パネルによってはシングルクォートの扱いが違うので、端末入力時はクォートの正確さに注意。SSH鍵認証なら -i オプションも追加可能:rsync -avz -e 'ssh -p 2222 -i /root/.ssh/id_rsa' /ソース/ディレクトリ/ ユーザー名@ターゲットIP:/ターゲット/ディレクトリ/。自動化やcronによるバックアップでよく使われます。

転送前テスト:--dry-runの活用方法

巨大データ移行前のプロフェッショナルな一手は --dry-run オプションです。これは実際にコピーせず、どのファイルが転送されるかだけを表示します。誤ったディレクトリやターゲットパス、不意の削除も事前に判明します。

テストコマンド例:rsync -avz --dry-run /var/www/site/ ユーザー名@ターゲットIP:/var/www/site/。出力には転送予定ファイルや作成ディレクトリ、処理概要が表示されます。--deleteオプションを使う場合はdry-runが特に重要。--deleteはソースにないファイルをターゲット側から削除します。正しく使えばターゲットを完全ミラー化できますが、誤ったディレクトリだと重大なデータ損失につながります。

プロの一般的な手順は、まずSSH接続テスト、次にディスク容量確認、続いてrsync --dry-run、実際の小規模ディレクトリで転送テスト、本番のメイン転送。この流れは多少時間がかかりますが、数時間の誤転送を防げます。

パフォーマンス調整:圧縮・帯域・暗号化

rsyncの速度はファイルサイズだけでなく、CPU性能、ディスク種別、ネットワーク遅延、帯域幅、ファイル数にも左右されます。多数の小ファイルは巨大な1ファイルより遅くなりがち。NVMe搭載VPSならファイル検索や書き込み性能が段違いなので、高頻度転送には NVMe VPSサーバー も検討価値ありです。

-z圧縮はテキストやログ、一部バックアップで有効ですが、既に圧縮済み(zip, tar.gz, jpg, mp4, gzip等)の場合はCPU負荷だけ増すことも。1Gbps回線の強力サーバー間で巨大メディアを転送するなら-z無しが速い場合も。逆に低帯域でテキスト中心なら-zが大きな節約になります。

帯域制限には--bwlimit。例:--bwlimit=50000なら約50MB/s。これは稼働中サイトのネットワーク負荷を抑えるのに重要。ピーク時は転送速度を落とし、夜間に実施し、load averageを監視するのが実務的です。

rsync・scp・SFTP・FTP比較表

rsync・scp・SFTP・FTP比較表

ファイル転送には複数手法がありますが、それぞれ一長一短。下表は巨大ファイルやサーバー移行時の適性をまとめています。

rsync・scp・SFTP・FTP比較表
方法セキュリティ途中再開大容量性能最適用途
rsync + SSH高強力非常に良いサーバー移行、バックアップ、同期
scp高限定中少数ファイルの高速コピー
SFTP高クライアント依存中手動ファイル管理
FTP低クライアント依存変動セキュリティ重視でない旧環境

表から分かる通り、rsyncは特に繰り返し同期や大容量データ転送で優れています。scpは手軽ですが、差分認識や途中再開ではrsyncに劣ります。FTPは暗号化なしでは現代のセキュリティ基準に合いません。ホスティングパネルのFTPは便利ですが、サーバー間の重要移行にはSSH系ツールを選びましょう。

ライブサイト移行の実例ワークフロー

ウェブサイト移行は単にファイルコピーだけでなく、DNS、データベース、SSL、PHPバージョン、権限、メール設定なども要確認です。以下は大容量サイトでダウンタイム最小化を目指す例のワークフローです。

  • 新サーバーでwebサーバー、PHP、DB、必要モジュールをセットアップ
  • ドメインのDNS TTL値を事前に300秒など短く設定。ドメイン管理には ドメイン検索とドメイン管理 ページも参考に。
  • サイト稼働中に初回rsync転送。これで主要データを移動
  • DBバックアップを取得し新サーバーへコピー
  • サイトを短時間メンテナンスモードに
  • 2回目rsyncで新規・変更ファイルを同期
  • DBも最新状態で再取得、または増分方式で移行
  • 新サーバーでファイル権限、サイト表示、ログを確認
  • SSL証明書を設定・更新。参考として SSL証明書の設置 記事も利用可。
  • DNSレコードを新IPに切り替え

この流れでは、最も時間がかかる初回転送はサイト稼働中に実施。ダウンタイムは最終同期とDNS切替時のみ。大容量メディアのWordPressサイトでも、数時間の停止を数分に短縮できます。

データ完全性検証方法

転送完了後はコマンド終了だけでなく、ファイル数やサイズ、重要ファイルをチェックすべきです。簡易確認なら両サーバーで du -sh でディレクトリサイズ比較。ただしファイルシステムのブロック差でぴったり一致しない場合も。詳細検証には再度同パラメータでrsyncを実行。新規転送がなければ出力は最小限。

チェックサム検証には rsync -avc --dry-run /ソース/ディレクトリ/ ユーザー名@ターゲットIP:/ターゲット/ディレクトリ/。-cオプションはタイムスタンプやサイズに加え、チェックサムで比較。大容量ではCPU・ディスク負荷が高いので注意。重要アーカイブやDBダンプ、顧客文書などでは追加検証が安心です。

ウェブサイト移行の場合はアプリ側でも検証を。トップページ、管理画面、画像アップロード、決済ページ、問い合わせフォーム、エラーログなど。ECサイトではファイル転送だけでなく、決済連携やcron実行も新サーバーでテストしましょう。

よくあるエラーと対処方法

Permission deniedエラー

主にSSHユーザー権限、ターゲットディレクトリ書き込み権限、鍵認証の不備が原因。まず同ユーザーで通常SSH接続を試し、成功したらターゲットディレクトリにファイル作成テスト。必要ならchownで所有者を変更、sudo使用も検討。

No space left on deviceエラー

ターゲットディスクの空き容量不足で転送停止。df -hでディスク区画を確認。時にメインディスクではなく/tmpやマウントポイントの不足も。大容量転送時はログや古いバックアップ、キャッシュを整理。根本対策はディスク増設や上位VPSへの移行。

Connection reset/Broken pipeエラー

長時間転送でネット切れが発生することがあります。--partialや--append-verifyなら再実行で途中から継続可能。SSH keepalive設定も有効。クライアント側でServerAliveInterval 60等の設定でアイドル切断を抑制できます。

転送速度が遅い

原因はファイル数、ディスクI/O、圧縮負荷、ネット帯域など。小ファイル多数なら先にtarでアーカイブ化すると高速化することも(ただしrsyncの差分転送メリットが減少)。既に圧縮済みファイルなら-zを外してテスト。iostat, htop, iftop等でCPU,ディスク,ネットのボトルネック特定が効果的。

セキュリティベストプラクティス

サーバー間のファイル転送ではセキュリティを軽視できません。特にrootアクセス、SSH鍵、バックアップファイルは機密扱いです。パスワードログインよりSSH鍵認証を推奨。鍵ファイルのパーミッションを厳格にし、秘密鍵の共有は避け、可能ならパスフレーズを設定しましょう。

転送用の一時ユーザーを作り、必要なディレクトリだけアクセス許可するのが安全。作業後は権限を外し、アカウントを停止。SSH接続を特定IPに制限することで攻撃リスクを減らせます。ファイアウォール設定やFail2ban、最新OpenSSH導入も基本チェックです。

データベースダンプや顧客ファイル、個人情報含むアーカイブの転送後は、不要な一時ファイルを両サーバーで削除。ウェブルートに.sql, .zip, .tar等のバックアップを残すのは危険。これらはウェブアクセス不可のディレクトリに保管し、作業後は速やかに消去しましょう。

rsyncによる自動バックアップ運用

rsyncは単発転送だけでなく、定期バックアップにも最適。例:毎晩指定フォルダをバックアップサーバーへ送るcronジョブ。SSH鍵でパスワード不要・安全な接続、rsyncは差分のみ転送、帯域制限も可能。

例:rsync -a --delete --bwlimit=30000 /var/www/site/ backup@バックアップIP:/backup/site/。このコマンドでターゲットディレクトリをソースと同期。ただし--deleteオプションは慎重に。ソースで削除されたファイルはターゲットでも消去されます。重要なバックアップ戦略ではスナップショット、日付フォルダ、バージョン管理付のソリューションを推奨。

ホスティング運用では「3-2-1バックアップルール」が参考:データは3コピー、2種類の媒体、1コピーは異なる場所に保存。rsyncはサーバー間コピー部分を効率化します。より広範なインフラ構築には バックアップソリューション や 法人ホスティングサービス 記事もご活用ください。

最終チェックリスト

巨大ファイル転送前に以下の簡易リストを実施すると、エラーリスクを減らせます。特に本番環境では標準手順化を推奨。

  • ソース・ターゲット両サーバーにrsync導入済みか
  • SSH接続が正ユーザー・ポートでテスト済みか
  • ターゲットサーバーに十分な空きディスクがあるか
  • 初回--dry-runで動作確認したか
  • ライブサイトならメンテナンスモードと最終同期を計画済みか
  • --delete使用時、ターゲットパスを厳格に確認したか
  • 転送後ファイルサイズ、権限、アプリテストを実施予定か
  • 一時バックアップやダンプファイルを安全に削除するか

一見簡単でも、現場で多い問題はターゲットディレクトリの誤設定、権限不足、ディスク容量不足、DNS切替無計画等。計画的なrsync運用で転送時間短縮と復旧可能性の向上を実現しましょう。

よくある質問

SSH経由rsyncで接続切れの場合、転送は最初からやり直しですか?

いいえ、適切なオプションを使えば再開できます。--partialや--append-verifyは巨大ファイルの途中まで転送済み部分を保存し、再実行時に続きから転送できます。ただし、再開前にターゲット側ディスク容量や部分ファイル状態を確認しましょう。

rsyncでデータベースを直接転送できますか?

rsyncはファイル転送ツールです。稼働中データベースファイルの直接コピーは推奨できません。MySQLやMariaDBならmysqldumpや物理バックアップツールでバックアップを作成し、そのファイルをrsyncで転送します。整合性のため、本番環境ではメンテナンスモードやレプリケーションを計画しましょう。

rsync利用時、両サーバーでroot権限が必要ですか?

必須ではありません。ターゲット側で書き込み権限のあるユーザーならOK。ただしファイル所有者やシステムディレクトリ、ACLや特殊権限の維持には高権限が必要な場合も。安全上、限定権限ユーザーの利用が推奨されます。

--deleteオプションは安全ですか?

--deleteは正しく使えばターゲットの完全同期に有効ですが、誤ったディレクトリ指定だとファイル消失につながります。--delete使用時は必ず--dry-runで事前確認し、ソース・ターゲットパスを厳しく検証しましょう。

巨大ファイル転送ではrsyncとscpどちらが良い?

単発・小規模ならscpでも十分ですが、巨大ファイルや多数ファイル、定期同期ならrsyncが優れています。差分認識、途中再開、帯域制限、テストモード等rsync独自の利点が多いためです。

まとめと次のステップ

SSH経由rsyncコマンドによるサーバー間巨大ファイル転送は、迅速・安全・管理しやすい方法です。正しいオプション設定で接続切れにも強く、変更ファイルのみ転送して時間短縮し、ライブサイト移行でもダウンタイムを最小化できます。ベストな結果を得るには、SSHやディスクの事前チェック、--dry-runによるテスト、本番転送の計画実行を推奨します。

新サーバーへの移行や大容量ストレージ、より高性能なホスティング基盤を検討中ならHostragonsの各種ソリューションもご覧ください。VPS、ホスティング、ドメイン、SSL導入で転送プロセスをより安全に。トラブルのない移行には、小規模テストから始めて計測し、最終同期を計画的に行うのがコツです。

この記事を共有する:

Hostragons チーム

ホスティング、サーバー、ドメイン名に関する、当社の専門チームによる最新ガイド。お客様のプロジェクトに最適なソリューションを一緒に見つけましょう。

お問い合わせ