/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ディストリビューションでは、tar
GNU tarは拡張属性やACLまたはLinux属性の保存を処理しないため、お勧めします。bsdtar
libarchive
pv
最大500Mのデータをバッファリングするので、両方のファイルシステムで読み書き速度の変動をよりよく受け入れることができます(実際にはディスクが他のファイルシステムよりも遅くなり、OSの書き込み保存メカニズムがこのように動作する)。 、おそらくそれほど大きな違いではないでしょう)。以前のバージョン(平均速度レポート)ではサポートされていpv
ないため、そのバージョンでのみ利用可能です。-a
pv -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
オプション)。別のファイルシステムにコピーするときに同じ機能セットをサポートしていない場合を考慮する必要があります。 。--acls
rsync
tar
UUID、ルートに予約されているスペース、fsckの頻度、ロギングの動作、ディレクトリ形式など、ファイルシステム自体のプロパティを考慮する必要があるかもしれません。
また、ファイルをコピーして実際にデータをコピーできない、より複雑なファイルシステムがあります。たとえば、サブボリュームのスナップショットを撮って分岐できる場合...データをコピーするための専用ツールがありますzfs
。btrfs
すべてがコピーされたことを確認するには、通常、ブロックデバイス(または可能であれば少なくとも割り当てられたブロック)のバイト単位のコピーが最も安全です。ただし、UUIDの競合の問題に注意してください。これは、より大きなアイテムにコピーしていることを意味します(コピーする前にソーススナップショットコピーのサイズを変更できます)。
答え2
たとえば、rsyncをお勧めします。
rsync -av --progress --stats dest orig
または圧縮を介して送信します。
rsync -avz --progress --stats dest orig