cp -a を高速化する方法 (サムドライブ内で cp -a を使用すると非常に遅くなります)

cp -a を高速化する方法 (サムドライブ内で cp -a を使用すると非常に遅くなります)

casper-rw永続的なオペレーティング システムでサムドライブを使用する場合、オペレーティング システムをシャットダウンした後、サムドライブを早めに取り出すと、永続パーティションが破損することがあります。

残念ながら、ubuntustudio-20.04.2 では、シャットダウン ボタンをクリックした後、最大 1 分間画面が黒くなる期間がありましたが、パーティションに対して大量の書き込み操作が行われていましたcasper-rw。そのため、スティックを早く引き抜くと、簡単に破損する可能性があります。

このような事故から回復するために、バックアップ パーティションを作成し、casper-rw変数 QUELLE と ZIEL を適切に設定してからコマンドを使用します (スーパー ユーザーになった後)。

time cp -a "${QUELLE}/upper" "${ZIEL}"

time cp -a "${QUELLE}/work" "${ZIEL}"

time cp -a "${QUELLE}/lost+found" "${ZIEL}"

スクリプトを実行すると、

  • CPUアクティビティが非常に低い
  • RAM使用量が非常に少ない
  • htopcp -aプロセスが状態 D で非常に多くの時間を費やしていることがわかります。

私の理解が正しければ(訂正してください)、これは、USB スティックのコントローラーがこれらの多数の読み取りおよび書き込み操作を効率的に処理できないため、コンピューターが非常に頻繁に待機しなければならないことを意味します(USB3 ソケット内の USB3 デバイスであるにもかかわらず)。

許可する方法はありますか? cp -a 処理速度を上げるために、理想的にはファイル全体を順番に書き込むために、より大きなバッファを使用しますか?

答え1

upper最初にパーティション内のディレクトリ、workおよびlost+found(存在する場合) をSSD 上のディレクトリにコピーすることで、コピーを大幅に高速化できるようですcasper-rw。この手順には 2 分強かかります。この目的には を使用できますcp -a

同じスティックの別のパーティションにバックアップを保存したい場合、SSD から USB スティックにコピーするのに約cp -a31 分かかりました (約 66,500 個のファイルで 4.1 GiB のデータ、USB3 ソケットの USB3 スティックの場合)。パーティションの以前の内容は、rm -rf "${ZIEL}/upper"; rm -rf "${ZIEL}/work"; rm -rf "${ZIEL}/lost+found現在の内容がバックアップ パーティションにコピーされる前に消去されています。

パーティションを再利用する前にこの方法で消去すると何か違いがあるか、またはネット コンテンツを配置する前にフォーマットするとさらに速度が向上するかを知っている人はいますか? 破損した場合は、casper-rwバックアップからコンテンツを復元する前にフォーマットする必要があります。

もちろん、 としてバックアップを作成することでさらに改善できますbackup.tar.gz。これにより、書き込まれるデータの量が削減され、特に 2 番目のステップでその恩恵を受けることになります。

答え2

sync宛先への即時書き込みを強制するために使用します

ファイルを作成してそれが宛先のファイルシステムに表示されたとしてもcp、そのファイルが実際にストレージ メディア上にあるかどうかは保証されません。

その理由は、データが最初にさまざまな内部バッファ間で取得され、実際に宛先ストレージ デバイスに到達するまで、より高速でユーザーフレンドリーであるためです。宛先デバイスへのデータの書き込みは実際にはバックグラウンドで実行され、多くの CPU サイクルを消費しません。そのため、アクティビティ モニターで確認するのが難しい場合があります。

syncコピー後に、バッファから宛先ストレージデバイスへの即時書き込みを強制することもできます。例:cp ${QUELLE} ${ZIEL} && sync

また、rsync変更されたファイルや新しいファイルのみを宛先にコピーする場合は、 を使用することを検討してください。

関連情報