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
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)
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 >