Tag: バックアップ Tag: linux

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):鏡のように、二つの場所の内容を全く同じ状態に保つこと。
  • リダイレクト ( > ):コマンドの出力結果をファイルに書き込むための記号。