ハードリンクを維持しながら何百万ものファイルをコピーするのにcpより良い方法はありますか?

ハードリンクを維持しながら何百万ものファイルをコピーするのにcpより良い方法はありますか?

だからこの物語GNU coreutils MLでは、誰かがcpを使用して4億3000万のファイルをコピーし、ハードリンクを保存する必要がありました。やっとやっと10日で行われました。

最も大きな問題は、ハードリンクを保存するためにcpがコピーされたファイルのハッシュテーブルを保存しなければならなかったため、最終的に17GBのメモリを占有し、スワップ時にシステムがクラッシュすることでした。

これをよりよく処理するユーティリティはありますか?

答え1

tar解決策がrsync失敗し、ディレクトリがファイルシステムのルートである場合は、以前のバックアップdump/restoreユーティリティを使用できます(はい、まだ機能しています)。

dumpカーネルファイルシステムインタフェースを介さずにファイルシステムの特性を複製するので、速度はかなり高速です。

不便な点は、dumpコピーがソースファイルシステムの変更に敏感であることです。したがって、ファイルシステムのマウント解除、読み取り専用の再マウント、またはコピーを開始する前に、ファイルシステムにアクセスできるすべてのアプリケーションを停止することをお勧めします。その条件を尊重すると、コピーは信頼できます。

ファイルシステムの種類によっては、dumpコマンド名が変更されることがあります。たとえば、xfsdumpXFSのコマンド名を使用できます。

次のコマンドは例と似ていますtar

dump 0uf - /dev/sdaX  | (cd /target && restore rf -)

数字は増分コピーレベルで、0コピー全体を表します。

答え2

rsyncが私にいくつかの問題を引き起こしたことを覚えています。これがハードリンクなのかデバイスファイルなのか、それとも何なのかよく分からない。それ以来

tar -cv $(ls) | ( cd /mnt; tar xv )

これにより、すべてのファイルがコピーされます。 /mntとして。私の完全な話はここにあります。http://www.linuxintro.org/wiki/Cloning#file-by-file_copy_2

関連情報