web-dev-qa-db-ja.com

cp -aのより高速な代替手段

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

9
Yurij73

何かバッファリングしてtarpaxcpioを試してください。

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

少なくとも一部のLinuxディストリビューションではbsdtarはGNU tarであり、tarに反するため、tarではなくbsdtarをお勧めします(libarchiveから)拡張属性、ACL、またはLinux属性の保持を処理しません。

pvは最大500Mのデータをバッファリングするので、2つのファイルシステムでの読み取りおよび書き込み速度の変動に適切に対応できます(ただし、実際には、他のディスクシステムより遅いディスクとOSの書き戻しがあります)メカニズムはそのバッファリングも行うので、おそらく大きな違いはありません)。古いバージョンのpv-aをサポートしていません(平均速度レポート用)。pv -B 200Mを単独で使用できます。

いずれにせよ、それらにはcpの制限がありません。つまり、readsおよびを順次書き込みます。ここでは、2つのtarが同時に動作しているので、1つを読み取ることができますFS他の1つが他の1つを待ってビジー状態FS書き終える。

Ext4の場合で、少なくともソースと同じ大きさのパーティションにコピーする場合は、_ clone2fs も参照してください。これは、ntfscloneのように機能し、割り当てられたコピーをコピーします順番にブロックするだけなので、回転ストレージがおそらく最も効率的です。

partclone は、それをいくつかの異なるファイルシステムに一般化します。

ここで、ファイルシステムのクローンを作成するときに考慮すべきいくつかの事項を説明します。

複製とは、すべてのディレクトリ、ファイル、およびその内容をコピーすることです...その他すべて。これで、その他すべてがファイルシステムごとに異なります。従来のUnixファイルシステムの一般的な機能のみを考慮した場合でも、次の点を考慮する必要があります。

  • リンク:シンボリックリンクとハードリンク。場合によっては、絶対シンボリックリンク、または複製するファイルシステム/ディレクトリの外を指すシンボリックリンクの処理方法を検討する必要があります
  • 最後の変更、アクセス、変更時間:ファイルシステムAPI(cp、tar、rsync ...)を使用してコピーできるのは最初の2つだけです。
  • スパース性:VM 3GBのディスク容量しか必要としないディスクイメージである2TBのスパースファイルがあり、残りはスパースであり、単純なコピーを実行すると宛先ドライブがいっぱいになります。

次に、ext4およびほとんどのLinuxファイルシステムを検討する場合は、次のことを検討する必要があります。

  • ACLおよびその他の拡張属性(SELinuxに使用されるものなど)
  • 不変または追加専用フラグなどのLinux属性

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

また、UUID、ルート用に予約されたスペース、fsckの頻度、ジャーナリングの動作、ディレクトリの形式など、ファイルシステム自体の属性を考慮する必要がある場合もあります。

次に、より複雑なファイルシステムがあり、ファイルをコピーして実際にデータをコピーすることはできません。たとえばzfsまたはbtrfsを検討して、サブボリュームのスナップショットを作成してそれらを分岐できるようにしてください...データをコピーするための専用のツールがあります。

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

16

たとえば、rsyncをお勧めします。

rsync -av --progress --stats dest orig

または、圧縮して転送するには:

rsync -avz --progress --stats dest orig
4
Victor Aurélio