web-dev-qa-db-ja.com

大きなファイルをコピーするときにリソースの使用量を減らすにはどうすればよいですか?

大きなファイル(破損したMySQLテーブル〜40GB)を修復するために別のサーバーに移動する必要があります。 (運用サーバーで修復しようとすると、すぐにサーバーが強制終了されました)。

これを行うには、.frm、.MYI、および.MYDファイルを運用サーバーからクラウドサーバーにrsyncします。

/ var/lib/mysql/{database} /から/ home/{myuser}にファイルをコピーしているので、rsyncコマンドのrootアクセスを有効にする必要がなく、データベースファイルが使用中(読み書きしないでください。ただし、確認のために運用データベースをシャットダウンする必要はありません)。

最初にコピーしようとしたファイルは約10GBでした。運用サーバーのある部分から別の部分、つまり同じディスクアレイに転送しています。

残念ながら、コピーコマンド "cp filename newfilename"はリソースを大量に消費したため、サーバーが停止しました。

ファイルを別のディレクトリにコピーするときに、より少ないリソースを使用するにはどうすればよいですか? (実際にかかる時間は重要ではありません)。

私がこれを管理することを想定すると、ファイルをクラウドにrsyncするときにどのようなリソース使用量を期待できますか?

誰かがこれを行うより良い方法を提案できますか?私はすぐにディスク領域を使い果たしているので、このテーブルをできるだけ早く修復してアーカイブする必要があります。

8
Jon M

やってみました Nice -n10をコマンドの前に付けますか?

10がデフォルト値です。範囲は-20(最高の優先度)から19(最低)。

5
Jonathan Ross

Rsyncの帯域幅制限の他に2つの選択肢があります。

  • ionice -c 3 cp foo bar
  • buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar

ioniceは、I/Oスケジューラとインターフェイスします。 bufferは、文字デバイスをより効率的にするための循環バッファですが、-u 150は、書き込みの間に150マイクロ秒休止します。これは、マニュアルによると、ディスクに呼吸する余地を与えるのに十分です。 。

ionicebufferは、どちらも標準のUbuntuビルドで入手できます。カーネルにCONFIG_TASK_DELAY_ACCTが設定されている場合、iotopは便利ですが、Ubuntuボックスではコマンドの使いやすさが大幅に制限されていません。私はすでに知っていますwhichコマンドが私のハードドライブを溺れさせています。

さらに、コピーの進行中に、iostat -x 1(通常はsysstatパッケージ内)の出力を確認し、コピー中のデバイスの%busyフィールドが90%以下であることを確認します。 99〜100%の場合は、I/Oの他のプロセスが不足しています。

10
zerolagtime

--bwlimit = KBPSスイッチを指定してrsyncを使用します(I/O帯域幅を制限、1秒あたりのキロバイト数)。小さいファイルで遊んで、転送速度とシステム使用量の最適な組み合わせを見つけてください。 "vmstat 1"を使用して2番目のシェルで監視する

6
shakalandy

1つの代替案は次のとおりです。

scp -l ${KBPS} ${src} ${dest}

しかし、$ {src}が成長中のファイルである場合は機能しないと思います...ソースをコピーして閉じられるのを待つ方法を提案できますか...

0
rzr