cloop/create_compressed_fs を使用してファイルシステムイメージを生成する最速の方法

cloop/create_compressed_fs を使用してファイルシステムイメージを生成する最速の方法

Cloopは、圧縮されたブロックデバイスイメージをマウントするためのLinuxパッケージです。create_compressed_fsファイルシステム(またはあらゆる種類のファイルまたはブロックデバイス)の圧縮イメージを生成するための補助ツールです。ファイルシステムイメージを生成する最速の方法は何ですか?ソースがあるハードディスクのパーティションで、ターゲットが別のディスクのファイルであるとします。また、元のハードディスクがスループット速度の制限要因であると仮定する。

ベストアンサー1

この回答には、転送の最適化中に学んだ内容が記録されていますcreate_compressed_fs

create_compressed_fsUbuntu 20.04パッケージストアでは利用できますが、cloop-utilcloopカーネルドライバでは使用できません。それを構築するには、次を使用します。https://git.launchpad.net/ubuntu/+source/cloop、現在のカーネルに適用されます。アップストリームソースは廃止されました。 Ubuntu 20.10にCloopが追加されました。

create_compressed_fsディスクイメージ全体をメモリに保存するオプションなど、多くのオプションがあるため使用しないでください。また、create_compressed_fs10秒ごとに数秒間読み取りを停止する傾向があるため、内部同期や問題が発生する可能性があります。読み取らない場合、ソースディスクは数秒間アイドル状態を維持します。

ソースがパーティションの場合は、圧縮を改善するために未使用のデータを空にすることをお勧めします。fstrim(デバイスがTRIMをサポートしている場合)またはzerofree(デバイスがTRIMをサポートしていないがext2/3/4ファイルシステムがある場合)を使用してください。

まず、元のパーティションのサイズを探します。

sudo blockdev --getsize64 /dev/my-partition

ソースが通常のファイルの場合、サイズcommand ls -l my-imagefileは所有者とグループの後の数字です。

ソースドライブに最大読み取り速度を維持させるにはcreate_compressed_fs。このpvツールはすぐにこれらのタスクを実行し、スループットとバッファレベルもリアルタイムで表示します。独自の出力も生成するため、出力が複雑にならないようにcreate_compressed_fs他の端末でpvおよびを実行しようとします。create_compressed_fs2つのプロセスが互いに通信できるようにFIFOを作成します。

mkfifo fifo

端末で以下を実行してください。

create_compressed_fs -B <blocksize> -s <input_size> fifo <output_filename>.cloop

私はブロックサイズを使用したいが、16Kそれはあなた次第です。

他の端末でも実行

sudo mbuffer -i <path_to_source_device_or_file> -m 1G >fifo

mbuffercreate_compressed_fsこれで、一時停止中にソースドライブを引き続き使用するために、1GBのバッファが使用されます。バッファは一時停止中に完全に満たされないようにサイズを変更する必要がありますが、バッファに十分なメモリがあることを確認してください。バッファがいつもいっぱいで消去create_compressed_fsできない場合は、ソースデバイスにボトルネックが発生しません。

バッファリングにも試してみましたが、うまくpvいきませんでした。ソースブロックデバイスから直接読み取ると、ソースドライブが最高速度でデータを生成することは許可されず、create_compressed_fs読み続ける必要がある場合でも一時停止中にブロックを管理します。これはバグのようです。

画像が完成したら、fifoを削除することを忘れないでください。

rm fifo

おすすめ記事