rsync
私のサーバーを介してIPをサポートしていssh
ますが、/var/log/lastlog
ファイルは1.2Gです(ハードドライブには24Kのみが必要です)。ローカルコンピュータはcp
すぐに(数ミリ秒)コピーできますが、ファイルrsync
全体を読み取る必要があるため、数時間かかります。ローカル PC/var/log
にもサーバーをインストールしてみましたが、ローカル PC でファイルが 1.2T として検出されました (だから sparse ファイルは検出されないようです)。 SSHを介してスパースファイルを検出し、同じ方法でコピーすることができるプログラムはありますか(ファイルから空のブロックを読み取らずに)?sshfs
sshfs
cp
編集:rsync
この-S/--sparse
オプションはまだ完全なソースファイル(すべてのnullバイトを含む)を読み取ろうとしますが、1.2Tファイルの場合は数時間かかります。完全なファイルを読み込んだ後、rsync
小さなターゲットファイル(適切にまれなファイル)を生成しますが、問題はすべてのnullバイトを含むソースファイルをスキップせずに読み取ることです。cp
ファイルのコピーには数時間ではなくミリ秒かかりますrsync
。 (Linuxでは)20Gスパースファイルを作成しtruncate -s 20G sparse_file1
てコピーしてからrsync -S sparse_file1 sparse_file2
(長い時間がかかります)、コピーを試すことができますcp sparse_file1 sparse_file3
(数ミリ秒かかります)。
ベストアンサー1
心配しないでください。とてもよくやっていますrsync -S
。
その理由は、cp
実際には複製しないので、はるかに高速だからです。これにはいくつかの理由がありますが、私が考えることができる最初の2つは次のとおりです。
システムはファイルシステムをすぐに同期する必要がないと判断し、後でバックグラウンドで(または実行中にすぐに
sync
)コピーが発生します。詳細についてはを参照してくださいman sync
。小/重複排除などの機能を備えたファイルシステムがあります。その効果は、
cp
私が「偽装ハードリンク」と呼ぶものを生成することです。この場合、コピーは物理的に作成されず、ファイル内のデータには追加の名前(物理ハードリンクなど)のみが付与されます。ただし、(真のハードリンクとは対照的に)ソースファイルとターゲットファイルが後で他の変更を受け取ると、その変更は物理的に別の場所に保存され、ファイルシステムは変更を正しいファイルにバインドします。詳細については、記録中のコピーと重複排除に関するドキュメント(ウィキペディアページなど)をご覧ください。