dd
不思議です。 ハードドライブを別のドライブに複製したり、ハードドライブを完全にゼロにしたりすることができます。 しかし、一度起動すると dd
コマンド、その進捗状況を伝えることは何もありません。 コマンドが最終的に終了するまで、カーソルのところに座っています。 では、ddの進行状況をどのように監視しますか?
更新2016>:GNU coreutils=8.24(Ubuntu Xenial16.04以降のデフォルト)を使用する場合は、進行状況を表示する別の方法については、以下の方法2を参照してください。
方法1:を使用して pv
インストール pv
そして、入力/出力のみの間にそれを置く dd
コマンド。
メモ:すでに起動しているときは使用できません dd
.
から パッケージの説明:
pv
-パイプビューア-パイプラインを介してデータの進行状況を監視するための端末ベースのツールです。 これは、データが通過しているどのくらいの速さの視覚的な指標を与えるために、二つのプロセス間の任意の通常のパイプラインに挿入することがで
インストール
sudo apt-get install pv
例
dd if=/dev/urandom | pv | dd of=/dev/null
出力
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
あなたはおおよそのサイズを指定することができます --size
あなたは時間の推定をしたい場合。
2GBのディスクが/dev/sdbからコピーされていると仮定する例
コマンドなし pv
になります。:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
コマンドを使用して pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
出力:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
その他の用途
もちろん、使用することができます pv
出力をstdoutに直接パイプするには:
pv /home/user/bigfile.iso | md5sum
出力
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
なお、この場合, pv
サイズを自動的に認識します。
方法2:新しい status
に追加されたオプション dd
(GNU Coreutils8.24+)
dd
GNU Coreutils8.24+(Ubuntu16.04以降)では、新しい status
進行状況を表示するオプション:
例
dd if=/dev/urandom of=/dev/null status=progress
出力
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
あなたはの進行状況を監視することができます dd
一度それを使用してそれを停止せずに実行されています kill
プロセスにシグナルを送信するコマンド。
起動した後 dd
、別の端末を開き、入力します どちらか:
sudo kill -USR1 $(pgrep ^dd$)
または、BSDまたはOS Xを使用している場合:
sudo kill -INFO $(pgrep ^dd$)
これにより、進行状況が表示されます。 dd
プロセスを停止せずに(stderrストリームに印刷することによって)端末ウィンドウ。 例えば:
# dd if=/dev/urandom of=rando bs=1024 count=1048576335822+0 records in335821+0 records out343880704 bytes (344 MB, 328 MiB) copied, 6.85661 s, 50.2 MB/s
あなたはの定期的な更新を取得したい場合 dd
進行状況、次に入力します:
watch -n5 'sudo kill -USR1 $(pgrep ^dd$)'
watch
調査します dd
n秒ごとに処理する(-n5
=5秒)およびそれを停止しないで報告して下さい。
上記のコマンドの適切な一重引用符に注意してください。
いくつかの便利なサンプルの使用法と pv
そして、より少ない入力またはより多くの進歩その後、他の回答:
最初にインストールする必要があります pv
、コマンドを使用して、:
sudo apt-get install pv
次に、いくつかの例があります:
pv -n /dev/urandom | dd of=/dev/nullpv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror
注:最初のサンプルは、5文字以下の入力です dd if=/dev/urandom | pv | dd of=/dev/null
.
そして、ディスクドライブのクローン作成のための私のお気に入り(ドライブ文字でxを交換してください):
(pv -n /dev/sdX | dd of=/dev/sdX bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0
ソース: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
また、自分自身をアーカイブするために。
完全性のために:
バージョン 8.24 の GNU coreutils 進行状況を印刷するためのパラメータを導入し、ddのためのパッチが含まれています。
コミット この変更を紹介するには、コメントがあります:
dd:新しい ステータス=進捗状況 定期的に統計を印刷するレベル
以下を含む多くのディストリビューション Ubuntu16.04.2LTS このバージョンを使用します。
使用 Ctrl+Shift+T 一方、 dd
実行中であり、進行状況を(バイト単位で)出力します:
load: 1.51 cmd: dd 31215 uninterruptible 0.28u 3.67s321121+0 records in321120+0 records out164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)
ネイティブの進捗状況がddに追加されました!!!
新しいバージョンのCoreutils(8.24)では、進行状況のステータスが次のように追加されます。 dd
ツール:
Xubuntu15.10での使用法:
ターミナルを開き、次のコマンドを入力します:
wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xztar -xf coreutils-8.24.tar.xzcd coreutils-8.24./configure && make -j $(nproc)
走れ。 dd
ルートとして:
sudo sucd src./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress
あなたが表示されます:バイト、秒、速度(バイト/秒)。
のバージョンを確認するには dd
:
ネイティブ:
dd --version
新しい:
cd coreutils-8.24/src./dd --version
すでにddを開始していて、pendriveのコピーをディスクに作成するときなどにファイルを書き込む場合は、watchコマンドを使用して、出力ファイルのサイズを常に
watch ls -l /pathtofile/filename
ファイルサイズのみを表示するには(h-human view):
watch ls -sh /pathtofile/filename
その dd | pv | dd
トライアドは、ddだけを使用して260秒とは対照的に、私の50GBのvmコピーに800秒かかりました。 このパイプラインでは、少なくとも、pvは入力ファイルの大きさがわからないので、あなたがどれだけ遠くにいるかを伝えることができないので、次の:
私は大きなものでpvを避けるだろうし、(Bashを使用している場合):
Control-Z ddプロセス
bg
背景にそれを置くために。 それを観察する bg
次のような出力が得られます [1] 6011
ここで、後者の番号はプロセスidである。 だから、やってください:
while true; do kill -USR1 process_id ; sleep 5; done
ここで、process_idは観察したプロセスidです。 次のようなものが表示されたら、Control-Cを押します:
[1]+ Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse-bash: kill: (60111) - No such process
あなたは終わった。
編集:愚かなシステム管理者! あなたの人生を自動化し、動作しません! 私が監視したい長いddプロセスを持っているなら、ここにあなたのためにenchilada全体を世話するワンライナーがあります。:
dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 $bgid || break; sleep 4; done
もちろん、スクリプトを作成して、おそらくinput1を入力ファイルにし、output2を出力ファイルにすることができます。 これは読者のための練習として残されています。 Killまたはkillがまだ準備ができていないときにddに信号を送信しようとすると死ぬ可能性がある前に、少しの睡眠が必要であることに注意してくださ 必要に応じて睡眠を調整します(2番目の睡眠を完全に削除することもできます)。
バッシュ-FTW! :-)
http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
基本的には:
kill -USR1 < dd pid >