Rsyncとハードリンクを使用してバックアップスキームを実装しています。 rsyncでlink-destを使用してハードリンクを実行できることはわかっていますが、rsyncに「link-dest」が実装される前に「cp -l」を使用することについて言及しました。私が知っているハードリンクのもう1つの方法は「ln」です。
だから私の質問は、好奇心から: "ln"を使用する場合と比較して "cp -l"を使用してハードリンクを作成する場合に違いはありますか?
元のファイルへのハードリンクが作成されるという点で、両方の結果は同じである必要があります。
違いは、意図された使用法であり、したがって、各コマンドで使用可能なオプションです。たとえば、cp
では再帰を使用できますが、ln
では次のことはできません。
cp -lr <src> <target>
<target>
のすべてのファイルへのハードリンクを<src>
に作成します。 (リンクではなく、新しいディレクトリが作成されます)結果は、<target>
の下のディレクトリツリー構造は、<src>
の下のディレクトリツリー構造と同じに見えます。後者を使用すると、各ファイルとフォルダーがコピーされ、それぞれに新しいinode
が付与されるという点でcp -r <src> <target>
とは異なりますが、前者はファイルにハードリンクを使用するだけなので、Links
カウントを単純に増やします。
例のように単一のファイルをコピーするために使用すると、結果は同じになります。
linkは最も少ないシステムコールを使用し、次にln、最後にcpが続きます。
$ strace link f.txt g.txt | wc --lines
282
$ strace ln --symbolic f.txt g.txt | wc --lines
311
$ strace ln f.txt g.txt | wc --lines
334
$ strace cp --symbolic f.txt g.txt | wc --lines
394
$ strace cp --link f.txt g.txt | wc --lines
410