cp -aのより速い代替

cp -aのより速い代替

/homeを私が使用している別のディスクに簡単に転送する場合、cp -aこの方法は非常に遅い方法のようです。タスクを実行するより効率的な方法を知りたいです。 /homeを論理ボリュームとしてマウントしましたが、ターゲットディスクはLVMシステムではありません。

ベストアンサー1

バッファリングを使用してtar、、paxを試してください。cpio

(cd /home && bsdtar cf - .) |
  pv -trab -B 500M |
  (cd /dest && bsdtar xpSf -)

bsdtar代わりに(from)とは異なり、tar少なくとも一部のLinuxディストリビューションでは、tarGNU tarは拡張属性やACLまたはLinux属性の保存を処理しないため、お勧めします。bsdtarlibarchive

pv最大500Mのデータをバッファリングするので、両方のファイルシステムで読み書き速度の変動をよりよく受け入れることができます(実際にはディスクが他のファイルシステムよりも遅くなり、OSの書き込み保存メカニズムがこのように動作する)。 、おそらくそれほど大きな違いではないでしょう)。以前のバージョン(平均速度レポート)ではサポートされていpvないため、そのバージョンでのみ利用可能です。-apv -B 200M

cpいずれにせよ、これは以下によって制限されません。読むそして書く順番に。ここでは2つがtar同時に動作するため、1つは1つのFSで読み取ることができ、もう1つは別のFSが書き込みを完了するのを待つのに忙しいです。

ext4の場合、少なくともソースサイズと同じサイズのパーティションにコピーする場合は、以下も参照してください。clone2fsつまりntfsclone、割り当てられたブロックのみが順次コピーされるため、回転ストアがおそらく最も効率的です。

部分クローンこれを複数の異なるファイルシステムに一般化します。

これで、ファイルシステムを複製するときに考慮すべきいくつかの点があります。

レプリケーションは、すべてのディレクトリ、ファイル、およびその内容を含むすべてをコピーします。今他のすべてファイルシステムによって異なります。既存のUnixファイルシステムの共通特性のみを考慮しても、次の点も考慮する必要があります。

  • リンク:シンボリックリンクとハードリンク。時には、絶対シンボリックリンクまたは複製するファイルシステム/ディレクトリを指すシンボリックリンクを処理する方法を検討する必要があります。
  • 最後の変更、アクセス、および変更時間:ファイルシステムAPI(cp、tar、rsync ...)を使用して最初の2つのみをコピーできます。
  • 希少性:3 GBのディスク容量のみを占めるVMディスクイメージである2TBの希少ファイルがあり、残りは希薄で、単純なコピーがターゲットドライブを埋めます。

その後、ほとんどのLinuxファイルシステムについて考える場合は、次の点をext4考慮する必要があります。

  • ACLやその他の拡張属性(例:で使用される属性SELinux
  • 変更できない、追加の専用フラグなどのLinux属性

すべてのツールがこれらすべてをサポートしているわけではありません。または、サポートしている場合は、これを明示的に有効にする必要があります(例:...の--sparseオプション)。別のファイルシステムにコピーするときに同じ機能セットをサポートしていない場合を考慮する必要があります。 。--aclsrsynctar

UUID、ルートに予約されているスペース、fsckの頻度、ロギングの動作、ディレクトリ形式など、ファイルシステム自体のプロパティを考慮する必要があるかもしれません。

また、ファイルをコピーして実際にデータをコピーできない、より複雑なファイルシステムがあります。たとえば、サブボリュームのスナップショットを撮って分岐できる場合...データをコピーするための専用ツールがありますzfsbtrfs

すべてがコピーされたことを確認するには、通常、ブロックデバイス(または可能であれば少なくとも割り当てられたブロック)のバイト単位のコピーが最も安全です。ただし、UUIDの競合の問題に注意してください。これは、より大きなアイテムにコピーしていることを意味します(コピーする前にソーススナップショットコピーのサイズを変更できます)。

おすすめ記事