web-dev-qa-db-ja.com

LinuxでDDのパーセンテージを取得する方法はありますか?

だからここで何が起こっているのです。

私はLinuxのライブUSBを通して私のサーバーのドライブのバックアップを始めました。最初のドライブをddコマンドのVanillaでコピーし始めました。ちょうどSudo dd if=/dev/sda of=/dev/sdc1と私はそれが終わるまでコンソールを空白のままにすることを思い出しました。

とにかく同じドライブに別のバックアップを取る必要があったので、Sudo dd if=/dev/sdb of=/dev/sdc3 status=progressから始めて、現在の転送速度とバイト単位の進行状況を示すテキスト行を得ました。

1.8TBからバックアップされるバイト数を計算する代わりに、バックアップの割合を表示する方法を望んでいました。 status = progressよりも簡単な方法はありますか?

43
user865814

この質問からの回答を見る [ 1 ]

pv

たとえば、開始する前にpvを使用できます

Sudo apt-get install pv    # if you do not have it
pv < /dev/sda > /dev/sc3   # it is reported to be faster
pv /dev/sda > /dev/sc3     # it seems to have the same speed of the previous one
#or 
Sudo dd if=/dev/sda | pv -s 1844G | dd of=/dev/sdc3  # Maybe slower 

出力 [ 2 ]

440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

注:
特に大きなファイルの場合はman ddを見て、ハードウェア上のすべてをスピードアップするのに必要なオプションを設定したいかもしれません。バッファを設定するためのbs=100M、書き込まれた有効バイト数をカウントするためのoflag=sync、あるいはdirect...
オプション-sは整数パラメータしか取ることができないので1.8T-->1844G
最初の行からわかるように、ddはまったく必要ありません。


kill -USR1 pid

PIDを個別化したら、既にddコマンドを起動している場合は、Ctrl - Z + bgそしてあなたがそれを読むか、pgrep ^dd ...)あなたはシグナルUSR1(あるいはSIGUSR1、あるいはSIGINFO)を送ってその出力を読むことができます。
プログラムのPIDが1234の場合、

kill -USR1 1234

ddは、そのSTDERRの端末で次のようなもので答えます。

4+1 records in
4+0 records out
41943040 bytes (42 MB) copied, 2.90588 s, 14.4 MB/s

警告:OpenBSDではkillの振る舞いを事前にチェックしなければならないかもしれません。[]:代わりに使う
kill -SIGINFO 1234
SIGINFOという名前のシグニチャが存在します。この場合、SIGUSR1はプログラム(dd)を終了する必要があります...
Ubuntuでは-SIGUSR110)を使用してください。

69
Hastur

この種のもののための私の行くツールは progress です。

このツールは、coreutilsの基本コマンド(cp、mv、dd、tar、gzip/gunzip)を検索するTiny、Dirty、LinuxおよびOSXのみのCコマンドとして記述できます。システムで現在実行中で、コピーされたデータのパーセンテージを表示します。また、推定時間スループットを表示することができ、「トップライク」モード(監視)を提供します。

"<code>progress</code> in action" screenshot

これは単に/procをスキャンして興味深いコマンドを探し、次にディレクトリfdおよびfdinfoを調べて開いているファイルを探し、位置を探し、最も大きいファイルの状況を報告します。

非常に軽量で、ほとんどすべてのコマンドと互換性があります。

私はそれが特に便利だと思います:

  • パイプ内のpvdcflddと比較して、操作を開始するときに別のコマンドを実行することを忘れないでください。事実の後に監視することができます。
  • kill -USR1と比べると、ほぼすべてのコマンドで動作します。誤ってコピーを殺していないことを確認するために、常にマンページを再確認する必要はありません。また、パラメータなしで起動すると、現在実行されている一般的な「データ転送」コマンドの進行状況が表示されるので便利です。PIDを調べる必要すらありません。
  • pv -dと比べると、やはりPIDを調べる必要はありません。
38
Matteo Italia

ddを実行してから、別のシェルで次のコマンドを呼び出します。

pv -d $(pidof dd) # root may be required

これにより、pvはddプロセスの開かれているすべてのファイル記述子に関する統計を取得します。読み書き用のバッファがどこにあるかがわかります。

25
sleblanc

ddに代わるものがあります:dcfldd

dcflddは、フォレンジックとセキュリティに役立つ機能を備えたGNU ddの拡張バージョンです。

ステータス出力 - dcflddは、転送されたデータ量と操作にかかる時間の長さに関して、ユーザーの進捗状況を更新できます。

dcfldd if=/dev/zero of=out bs=2G count=1 # test file
dcfldd if=out of=out2 sizeprobe=if
[80% of 2047Mb] 52736 blocks (1648Mb) written. 00:00:01 remaining.

http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd

9
Antonin Décimo

パーセンテージとして、あなたはいくつかの数学をしなければならないでしょう、しかしあなたはすでに開始した後でさえ、kill -USR1 $(pidof dd)をすることによって、人間が読める形式でddの進歩を得ることができます

現在のddプロセスは次のように表示されます。

11117279バイト(11 MB、11 MiB)コピー、13.715秒、811 kB /秒

7
Sirex