Dd'nin ilerlemesini nasıl izliyorsunuz?

dd bir merak var. Bir sabit sürücüyü diğerine kopyalamanıza, sabit sürücüyü tamamen sıfırlamanıza vb. Olanak tanır. Ama bir kere başlattıktan sonra dd komutanım, ilerleyişi hakkında size söyleyecek bir şey yok. Komut nihayet bitene kadar imlecin yanında oturur. Peki dd'nin ilerlemesini nasıl izleyebilir?

Güncelleme 2016>: GNU coreutils = 8.24 kullanıyorsanız (Ubuntu Xenial 16.04'te varsayılan), ilerlemeyi görüntülemenin alternatif bir yolu için aşağıdaki yöntem 2'ye bakın.


Yöntem 1: kullanarak pv

Yüklemek pv ve sadece giriş / çıkış arasına koyun dd komutlar.

Not: zaten başlatıldığında kullanamazsınız dd.

-den paket açıklaması:

pv - Boru Görüntüleyici - bir boru hattı üzerinden verilerin ilerlemesini izlemek için terminal tabanlı bir araçtır. Verilerin ne kadar hızlı geçtiğine, ne kadar sürdüğüne, tamamlanmaya ne kadar yakın olduğuna dair görsel bir gösterge ve tamamlanana kadar ne kadar süreceğine dair bir tahmin vermek için iki işlem arasındaki herhangi bir normal boru hattına eklenebilir.

Kurulum

sudo apt-get install pv

Örnek

dd if=/dev/urandom | pv | dd of=/dev/null

Çıktı

1,74MB 0:00:09 [ 198kB/s] [      <=>                               ]

Yaklaşık boyutu şununla belirtebilirsiniz: --size eğer bir zaman tahmini istiyorsanız.


/ Dev / sdb'den kopyalanan 2gb'lık bir diski varsayma örneği

Komut olmadan pv sözde:

sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096

Komut ile pv:

sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096

Çıktı:

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

Diğer kullanımlar

Elbette kullanabilirsiniz pv çıkışı doğrudan stdout'a yönlendirmek için:

pv /home/user/bigfile.iso | md5sum

Çıktı

50,2MB 0:00:06 [8,66MB/s] [=======>         ] 49% ETA 0:00:06

Bu durumda şunu unutmayın, pv boyutu otomatik olarak tanır.


Yöntem 2: Yeni status seçenek eklendi dd (GNU Coreutils 8.24+)

dd GNU Coreutils 8.24+ 'da (Ubuntu 16.04 ve üstü) yeni bir tane var status ilerlemeyi görüntüleme seçeneği:

Örnek

dd if=/dev/urandom of=/dev/null status=progress

Çıktı

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

-den Nasıl Yapılır: Dd ilerlemesini izleme

Sen ilerlemesini izleyebilirsiniz dd bir kez kullanarak durdurmadan çalışıyor kill işleme bir sinyal göndermek için komut.

Sonra başlarsın dd, başka bir terminal açın ve girin ya:

sudo kill -USR1 $(pgrep ^dd$)

Veya. BSD veya OS X kullanıyorsanız:

sudo kill -INFO $(pgrep ^dd$)

Bu, ilerlemeyi aşağıdaki tabloda gösterecektir: dd işlemi durdurmadan terminal penceresi (stderr akışına yazdırarak). Örneğin:

# 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

Eğer düzenli güncellemeler almak istiyorsanız dd ilerleme, sonra girin:

watch -n5 'sudo kill -USR1 $(pgrep ^dd$)'

watch sonda olacak dd her -n saniyede bir işlem yapın (-n5 = 5 saniye) ve durdurmadan rapor verin.

Yukarıdaki komutlarda uygun tek tırnak işaretlerine dikkat edin.

Birkaç kullanışlı örnek kullanım pv ve diğer cevaplardan daha az yazma veya daha fazla ilerleme:

Önce yüklemeniz gerekecek pv, komutu ile:

sudo apt-get install pv

O zaman bazı örnekler:

pv -n /dev/urandom | dd of=/dev/nullpv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror

Not: ilk örnek, daha sonra 5 karakter daha az yazmaktır dd if=/dev/urandom | pv | dd of=/dev/null.

Ve bir disk sürücüsünü klonlamak için favorim (X'i sürücü harfleriyle değiştirin):

(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

screenshot

kaynak: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/

Ayrıca kendimi arşivlediğim için.

Bütünlük uğruna:

Sürüm 8.24 of the GNU coreutils ilerlemeyi yazdırmak için bir parametre tanıtan dd için bir düzeltme eki içerir.

Taahhüt bu değişikliğin tanıtımı şu yoruma sahiptir:

dd: yeni durum = ilerleme istatistikleri düzenli aralıklarla yazdırmak için seviye

Birçok dağıtım dahil Ubuntu 16.04.2 LTS bu sürümü kullanın.

Kullanmak Ctrl+Shift+T karşın dd çalışıyor ve ilerlemeyi (bayt cinsinden) çıktılayacaktır.:

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)

En iyisi kullanmaktır http://dcfldd.sourceforge.net/ apt-get ile kurulumu kolaydır

Dd'ye yerel ilerleme durumu eklendi!!!

Coreutils'in yeni sürümü (8.24) bir ilerleme durumu ekler dd alet:

Xubuntu 15.10'da kullanım:

Bir terminal açın ve şu komutları yazın:

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)

Koşmak dd kök olarak:

sudo sucd src./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress

Göreceksiniz: Bayt, saniye ve hız (Bayt / saniye).

Sürümlerini kontrol etmek için dd:

Yerli:

dd --version

Yeni:

cd coreutils-8.24/src./dd --version

Dd'yi zaten başlattıysanız ve diske bir pendrive kopyası oluştururken olduğu gibi bir dosya yazıyorsanız, değişiklikleri görmek ve tamamlamayı tahmin etmek için çıktı dosyasının boyutunu sürekli olarak gözlemlemek için izle komutunu kullanabilirsiniz.

watch ls -l /pathtofile/filename

Yalnızca dosya boyutunu görmek için (h-insan görünümü):

watch ls -sh /pathtofile/filename

Bu dd | pv | dd triad, 50GB vm kopyamın sadece dd kullanarak 260 saniyenin aksine 800 saniye sürmesini sağladı. Bu boru hattı ile, en azından pv'nin giriş dosyasının ne kadar büyük olduğu hakkında hiçbir fikri yoktur, bu yüzden size ne kadar ilerlediğinizi söyleyemez, bu yüzden bunu aşağıdaki gibi yapmanın bir dezavantajı yoktur - ve güzel bir hız avantajı elde edersiniz:

Büyük bir şeyde pv'den kaçınırdım ve (Bash kullanıyorsanız):

Control-Z dd işlemi

bg arka plana koymak için. Bunu gözlemleyin bg size aşağıdaki gibi bir sonuç verecektir [1] 6011 burada ikinci sayı bir işlem kimliğidir. O yüzden:

while true; do kill -USR1 process_id ; sleep 5; done

burada process_ıd, gözlemlediğiniz işlem kimliğidir. Böyle bir şey gördüğünüzde Control-C'ye basın:

[1]+  Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse-bash: kill: (60111) - No such process

Yapılır.

Düzenleme: Aptal Sistem Yöneticisi! Hayatınızı otomatikleştirin, çalışmayın! İzlemek istediğim uzun bir dd sürecim varsa, işte sizin için tüm enchilada'yı halledecek tek bir astar; hepsini tek bir satıra koy:

 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

Elbette, komut dosyası yazabilir, belki de giriş dosyanız için 1 dolar ve çıktı dosyanız için 2 dolar kazanabilirsiniz. Bu, okuyucu için bir alıştırma olarak bırakılmıştır. Öldürmeden önce o küçük uykuya ihtiyacınız olduğunu veya henüz hazır olmadığında dd'ye bir sinyal göndermeye çalışırken öldürmenin ölebileceğini unutmayın. Uykularınızı istediğiniz gibi ayarlayın (belki de ikinci uykuyu tamamen kaldırın).

Bash- FTW! :-)

http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html

Temelde:

kill -USR1 < dd pid >