サーバ上のファイルやディレクトリなどのデータを複製する際、コピーや同期、転送をサーバ内外で行うことがあります。コピー方法によってコマンドオプションや組み合わせが異なるので、備忘録としてまとめておこうと思います。
目次
1. コピー
サーバ内でファイルやディレクトリのコピーする際、cpやddコマンドなどを利用します。
ファイル
cpコマンドでコピー元のファイルとコピー先のファイルを指定します。
ディレクトリが異なる場所にデータがある場合は、パスも指定しておきます。
cp [コピー元] [コピー先]
ディレクトリ
ディレクトリをコピーする際も同様にcpコマンドが利用できます。
-rオプションで再帰的なコピーが可能になります。
cp -r [コピー元] [コピー先]
ブロック単位でのコピー
ddコマンドではブロック単位でのコピーが可能です。ファイルのコピーもできますが、バックアップ等でディスクデータのコピーが必要な場合にもddコマンドは便利です。
dd if=[コピー元] of=[コピー先]
2. 転送
データ転送時にはscpやrsyncなどのコマンドを利用します。また、先ほどのddコマンドではsshを併用することで、ディスクデータの転送も同時に行うことができます。
ファイル/ディレクトリ
scp -i [秘密鍵のパス] [転送元パス] [転送先パス]
上記以外にncコマンドでもデータの転送が可能です。ネットワーク越しにデータのやり取りを行うため、転送元、転送先の両方でコマンドを実行する必要があります。
転送元
nc ホストのIP ポート < [転送したいデータ名]
転送先
nc ホストIP ポート > [受信したいデータ名]
ディスクイメージ
リモートサーバなどにディスクイメージを転送したい場合、sshでデータを送ることができます。この時、イメージのコピーと転送を一緒に実行しておくと便利です。
dd if=[コピーしたいディスクデータ名] of=[生成されるディスクデータ名] | user@[転送先IP]:[転送先のパス] dd of=[転送先データ名] ds=[転送時のブロックサイズ]
3. 同期
データバックアップ等のためにディレクトリの同期を行う際は、rsyncを用います。
同期先はローカル、リモートどちらも可能です。オプションを付けておくことで、同期元ファイルのパーミッションやグループなどを保持することができます。
ローカルサーバ内での同期
rsync -av [同期元] [同期先]
リモートサーバとの同期(ローカル→リモートサーバ)
ローカルサーバのデータをリモートサーバに同期させる場合、以下の順になります。
rsync -avz [ローカルファイルのパス] -e 'ssh -i [秘密鍵 のパス]' user@[同期先IP]:[同期先のパス]
リモートサーバとの同期(リモート→ローカルサーバ)
リモートサーバのデータをローカルサーバに同期させる場合、以下の順になります。
rsync -avz -e 'ssh -i [秘密鍵 のパス]' user@[同期元IP]:[同期元のパス] [ローカルファイルのパス]
ファイルやディレクトリのコピー、部分的なデータの同期等が必要になった際に役立つと幸いです。