2026-01-18 by Gemini & I.ISHIMARU
ネットワーク越しのバックアップ
はじめに
最近の6時間以内に、カレントフォルダ(ディレクトリのこと)以下で更新されたファイルだけをリモートサーバーにバックアップ(転送)したい。
パイプでsshに渡し、ネットワーク越しのPCに「dd if=ファイル名」で保存していたが、もう少し良い方法がないか確認。
確認の結果
テキストファイルと画像ファイルが主体であれば、先ほど提案した tar を使う方法も rsync を使う方法もどちらも非常に相性が良いです。
ただ、jpg画像ファイルはすでにデータが圧縮されているため、転送時にさらに圧縮(zオプション)をかけてもあまり容量が減らず、CPUに負荷がかかるだけという側面があります。
用途に合わせた、2つのパターンが以下になります。転送先のPCのIPアドレスは「192.168.1.123」としていますが、インターネット越しにグローバルIPアドレスを指定する事も可能です。
バックアップ手法の比較
| 手法 | メリット | デメリット | 解説 |
| --- | --- | --- | --- |
| tar + ssh 転送 | 1つのファイルにまとまるため、管理や世代管理(日付ごとに残すなど)が楽。 | 一部のファイルを復元したい時に、一度全部展開する必要がある。 | アーカイブ(複数のファイルを一つにまとめる)と転送を同時に行う手法。 |
| rsync 同期 | 変更があったファイルだけを送るため、2回目以降の転送が劇的に速い。 | バックアップ先にファイルがそのまま並ぶため、過去の状態に戻すには工夫が必要。 | リモート同期(ネットワーク越しに2つの場所を同じ状態にする)に特化した手法。 |
パターン1:tarで1つに固めて転送する(現在の方法の改良版)
「日付ごとにバックアップファイルを残したい」という場合に最適です。
find . -mtime -0.25 -type f -print0 | xargs -0 tar -cvf - |
ssh ubuntu@192.168.1.123 "cat > /path/to/backup/backup_$(date +%Y%m%d).tar"解説
- $(date +%Y%m%d):実行時の日付(例:20260118)をファイル名に自動付与します。
- -cvf -:画像が多い場合は、あえて
z(gzip圧縮)を外して転送速度を優先するのも一つの手です。
パターン2:rsyncでスマートに同期する(おすすめ)
「常に最新の状態をミラーリング(複製)しておきたい」場合に最適です。
find . -mtime -0.25 -type f -print0 |
rsync -av0 --files-from=- . ubuntu@192.168.1.123:/path/to/dest/解説
- --files-from=-:
findで見つけたリストをrsyncに直接渡します。 - -a (archive):パーミッションや更新日時を保持したままコピーします。
- jpgファイルへの影響:
rsyncは賢いので、変更がないファイルは転送をスキップします。
専門用語解説
- アーカイブ (Archive):複数のファイルやディレクトリを、一つのファイルにまとめること。
- ミラーリング (Mirroring):鏡のように、二つの場所の内容を全く同じ状態に保つこと。
- リダイレクト ( > ):コマンドの出力結果をファイルに書き込むための記号。