ファイル転送の基本:scp / rsync の使い分けと事故らない型

ファイル転送の基本:scp / rsync の使い分けと事故らない型

この記事で解決できること

  • scprsync正しい使い分け が分かる
  • 「Permission denied」「転送されたはずなのに無い」などの 定番事故を即切り分け できる
  • サーバ運用で 安全にファイルを運ぶ型 が身につく

結論(実務の型)

  • 一発コピー・小規模scp
  • 大量 / 定期 / 再実行前提rsync
  • 事故る原因の8割は ①ユーザー ②パス ③権限 ④容量 のどれか

前提(対象環境)

  • OS:Ubuntu
  • SSH接続可能
  • ローカル ↔ サーバ、サーバ ↔ サーバ両方を想定

1. scp:単発コピーの基本

結論: scpは単発コピー向け。ディレクトリは-rが必須で、付け忘れると何もコピーされない。

1-1. ローカル → サーバ

$ scp local.txt user@server:/path/to/dir/

1-2. サーバ → ローカル

$ scp user@server:/path/to/file.txt .

1-3. ディレクトリを丸ごと

$ scp -r mydir user@server:/path/to/

-r 忘れ=何もコピーされない(初心者あるある)

2. scp の事故パターン

結論: Permission deniedは権限・ユーザー違いが原因。相対パス誤解で転送先がホーム配下になる事故も多い。

2-1. Permission denied

原因候補:

  • 書き込み権限がない
  • ユーザーを間違えている
  • /root 配下に置こうとしている

切り分け:

$ ssh user@server
$ ls -ld /path/to/dir
$ whoami

2-2. 転送された「はず」なのに見当たらない

原因:相対パスを誤解している

# NG: ホームディレクトリの tmp/ に入る
$ scp file.txt user@server:tmp/

# OK: /tmp/ に入る
$ scp file.txt user@server:/tmp/

3. rsync:実務で使う本命

結論: 実務の本命はrsync -av-aで属性保持、-vで詳細表示、-zで圧縮が基本セット。

3-1. 基本形(まずはこれ)

$ rsync -av src/ user@server:/path/to/dst/

オプションの意味:

  • -a:属性保持(ほぼ必須)
  • -v:詳細表示
  • -z:圧縮(遅い回線で有効)

4. rsync 最大の罠:スラッシュ問題

結論: src/は中身だけ、srcはディレクトリごとコピー。末尾スラッシュの有無で結果が変わる最大の罠。

rsync -av src/ dst/   # 中身だけコピー
rsync -av src dst/    # srcディレクトリごとコピー

意味が違う

  • src/中身だけ コピー
  • srcsrcディレクトリごと コピー

事故率が一番高いポイント。必ず意識する。

5. dry-run(事故防止の切り札)

結論: 本番前は--dry-runで確認。表示内容が実際に起きることなので、不安なら必須。

本番前に必ず確認。

$ rsync -av --dry-run src/ user@server:/path/

表示された内容=実際に起きること 不安なら必須。

6. Permission denied(rsync編)

結論: 書き込み先の権限不足・所有者違いが原因。--rsync-path="sudo rsync"で回避できる場合がある。

よくある原因:

  • 書き込み先の権限不足
  • 所有者違い
  • sudoが必要

対処例(sudo rsync)

$ rsync -av --rsync-path="sudo rsync" src/ user@server:/root/path/

※ sudo権限がある前提

7. 容量不足で失敗するケース

結論: 転送途中で止まる場合は転送先の容量不足を疑う。df -hdu -shで事前確認する。

症状:

  • 転送途中で止まる
  • エラーが曖昧

確認:

$ df -h
$ du -sh src/

転送先ディスクが満杯だと失敗する(no space left on device)

8. scp と rsync の使い分けまとめ

結論: 単発ファイルはscp、ディレクトリ・再実行・大量データの転送にはrsyncを使い分けるのが推奨。

用途 推奨
単発ファイル scp
ディレクトリ rsync
再実行前提 rsync
大量データ rsync

やってはいけないこと

  • パスを確認せず実行
  • -r を付け忘れる
  • dry-run無しで rsync
  • root直下に投げる

コピペ用:安全テンプレ

# scp(単発)
scp file.txt user@server:/path/

# rsync(安全)
rsync -av --dry-run src/ user@server:/path/
rsync -av src/ user@server:/path/

次に読む