Cloopは、圧縮されたブロックデバイスイメージをマウントするためのLinuxパッケージです。create_compressed_fs
ファイルシステム(またはあらゆる種類のファイルまたはブロックデバイス)の圧縮イメージを生成するための補助ツールです。ファイルシステムイメージを生成する最速の方法は何ですか?ソースがあるハードディスクのパーティションで、ターゲットが別のディスクのファイルであるとします。また、元のハードディスクがスループット速度の制限要因であると仮定する。
答え1
この回答には、転送の最適化中に学んだ内容が記録されていますcreate_compressed_fs
。
create_compressed_fs
Ubuntu 20.04パッケージストアでは利用できますが、cloop-util
cloopカーネルドライバでは使用できません。それを構築するには、次を使用します。https://git.launchpad.net/ubuntu/+source/cloop、現在のカーネルに適用されます。アップストリームソースは廃止されました。 Ubuntu 20.10にCloopが追加されました。
create_compressed_fs
ディスクイメージ全体をメモリに保存するオプションなど、多くのオプションがあるため使用しないでください。また、create_compressed_fs
10秒ごとに数秒間読み取りを停止する傾向があるため、内部同期や問題が発生する可能性があります。読み取らない場合、ソースディスクは数秒間アイドル状態を維持します。
ソースがパーティションの場合は、圧縮を改善するために未使用のデータを空にすることをお勧めします。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_fs
2つのプロセスが互いに通信できるように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
mbuffer
create_compressed_fs
これで、一時停止中にソースドライブを引き続き使用するために、1GBのバッファが使用されます。バッファは一時停止中に完全に満たされないようにサイズを変更する必要がありますが、バッファに十分なメモリがあることを確認してください。バッファがいつもいっぱいで消去create_compressed_fs
できない場合は、ソースデバイスにボトルネックが発生しません。
バッファリングにも試してみましたが、うまくpv
いきませんでした。ソースブロックデバイスから直接読み取ると、ソースドライブが最高速度でデータを生成することは許可されず、create_compressed_fs
読み続ける必要がある場合でも一時停止中にブロックを管理します。これはバグのようです。
画像が完成したら、fifoを削除することを忘れないでください。
rm fifo