私は我々のサーバのいずれかを再インストールする必要があり、予防措置として、私が移動したい/home
、/etc
、/opt
、および/Services
バックアップサーバに。
ただし、問題があります。シンボリックリンクがたくさんあるため、多くのファイルが複数回コピーされます。
scp
シンボリックリンクを無視する(または実際にリンクをディレクトリやファイルとしてではなくリンクとしてコピーする)ことは可能ですか?そうでない場合、それを行う別の方法はありますか?
回答:
私はそれが可能であることを知っていました、私はただ間違った道具を取りました。私はrsyncでそれをしました
rsync --progress -avhe ssh /usr/local/ XXX.XXX.XXX.XXX:/BackUp/usr/local/
私は、ことがわかった方法が私のために動作しませんでした、しかし、私はこのウェブサイト(上の仕事をしたの代替を見つけwww.docstore.mik.ua/orelly)。rsync
具体的には、「O'Reilly:SSH:TheSecureShell。TheDefinitiveGuide」のセクション7.5.3です。
7.5.3。ディレクトリの再帰的コピー
..。
scpはディレクトリをコピーできますが、必ずしも最良の方法であるとは限りません。ディレクトリにハードリンクまたはソフトリンクが含まれている場合、それらは複製されません。リンクはプレーンファイル(リンクターゲット)としてコピーされ、さらに悪いことに、循環ディレクトリリンクによりscp1が無期限にループします。(scp2はシンボリックリンクを検出し、代わりにターゲットをコピーします。)名前付きパイプなどの他のタイプの特殊ファイルも正しくコピーされません。より良い解決策は、特殊ファイルを正しく処理するtarを使用して、リモートに送信することです。 SSH経由でタールを取り除くマシン:
$ tar cf - /usr/local/bin | ssh server.example.com tar xf -
scp
rsync
送信者と受信者の両方としてtar
overssh
を使用すると、トリックも実行されます。
cd $DEST_DIR
ssh user@remote-host 'cd $REMOTE_SRC_DIR; tar cf - ./' | tar xvf -
--one-file-system
と宛先側に追加しましたp
。
1つの解決策は、シェルパイプを使用することです。いくつかのソフトウェアによって生成されたいくつかの* .gzファイルとシンボリックリンクを取得して、少し短い名前の同じ* .gzファイルにリンクする状況があります。単にscpを使用すると、シンボリックリンクが通常のファイルとしてコピーされ、重複が発生します。rsyncがシンボリックリンクを無視できることは知っていますが、私のgzファイルは同期可能なオプションで圧縮されておらず、これらのgzファイルのコピーでは同期が非常に遅くなります。したがって、次のスクリプトを使用してファイルをコピーします。
find . -type f -exec scp {} target_host:/directory/name/data \;
-fオプションは、通常のファイルのみを検索し、シンボリックリンクを無視します。ソースホストでこのコマンドを実行する必要があります。これが私の状況で一部のユーザーに役立つことを願っています。私が何かを逃したかどうか私に知らせてください。
tar + sshコマンドを使用してサーバーからフォルダーをコピーするために、クライアントで実行できるワンライナーソリューション。
ssh user@<Server IP/link> 'mkdir -p <Remote destination directory;cd <Remote destination directory>; tar cf - ./' | tar xf - C <Source destination directory>
注:mkdirは必須です。リモート宛先ディレクトリが存在しない場合、コマンドは単にリモートサーバーのホーム全体を圧縮してクライアントに抽出します。