DD'nin ilerlemesini nasıl izlersiniz?

548

dd bir harikasın. Bir sabit sürücüyü bir diğerine çoğaltmanıza, bir sabit sürücüyü tamamen sıfırlamanıza vb. İzin verir. Ancak, dd komutunu bir kez başlattığınızda, ilerlemenizi size bildirecek bir şey yoktur. Komut sonunda bitene kadar sadece imleci orada oturur. Peki bir monitör dd'nin ilerlemesini nasıl yapıyor?

    
sordu James 10.11.2012 21:24

19 cevap

393

HowTo: dd'nin ilerlemesini izleyin

kill komutunu kullanarak durmadan dd'nin ilerlemesini izleyebilirsiniz.

Çalışıyorken dd ilerleme durumunu görmek için başka bir terminal açın ve şunu girin:

sudo kill -USR1 $(pgrep ^dd)

Bu işlem, işlemi durdurmadan dd terminal penceresinde dd ilerleme gösterecektir. BSD veya OS X kullanıyorsanız, INFO yerine USR1 kullanın. % Co_de% sinyali dd’yi sonlandıracak.

USR1 ilerlemesinin düzenli güncellemelerini almak istiyorsanız, şunu girin:

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

dd , watch işlemini her -n saniyede ( dd = 5 saniye) ölçecek ve durmadan rapor edecektir.

Yukarıdaki komutlarda uygun tek tırnaklara dikkat edin.

    
verilen cevap James 10.11.2012 21:44
598

2016'yı Güncelle : Eğer GNU coreutils & gt; = 8.24'ü kullanırsanız (Ubuntu Xenial 16.04'teki varsayılan değer), ilerlemeyi görüntülemenin alternatif bir yolu için aşağıdaki 2. yönteme bakın. .

Yöntem 1: pv kullanılarak

pv dosyasını yükleyin ve sadece girdi / çıktı dd komutları arasında koyun.

Not : dd 'yi başlattığınızda kullanamazsınız.

paket açıklamasından :

  

pv - Pipe Viewer - izlemek için terminal tabanlı bir araçtır   Bir boru hattı yoluyla veri ilerlemesi. Herhangi bir içine eklenebilir   Görsel süreç belirtmek için iki süreç arasındaki normal boru hattı   veri ne kadar çabuk geçiyor, ne kadar sürüyor, ne kadar yakın   tamamlanana kadar ve ne kadar süreceğine dair bir tahmin   tamamlanması.

Kurulum

sudo apt-get install pv

Örnek

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

çıkış

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

Bir zaman tahmini istiyorsanız, yaklaşık boyutu --size ile belirtebilirsiniz.

Örnek / dev / sdb'den kopyalanan 2 GB'lık bir diskin olduğunu varsayarak

pv olmayan komut şöyle olurdu:

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

pv ile komut:

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

Tabii ki, çıktıyı stdout'a yönlendirmek için doğrudan pv kullanabilirsiniz:

pv /home/user/bigfile.iso | md5sum

çıkış

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

Bu durumda, pv boyutlarını otomatik olarak tanır.

Yöntem 2: status seçeneğine yeni dd seçeneği eklendi (GNU Coreutils 8.24 +)

GNU Coreutils 8.24+ sürümündeki dd (Ubuntu 16.04 ve daha yeni), ilerlemeyi görüntülemek için yeni status seçeneğine sahip oldu:

Örnek

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

Çıktı

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
    
verilen cevap phoibos 11.11.2012 03:04
87

Birkaç kullanışlı örnek, pv ve daha az yazım veya daha fazla ilerleme ile diğer yanıtları kullanır:

İlk önce komutla pv yüklemeniz gerekecek:

sudo apt-get install pv

Sonra bazı örnekler:

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

Not: İlk örnek 5 karakterden daha az yazarak dd if=/dev/urandom | pv | dd of=/dev/null .

Ve bir disketi klonlamak için favorim:

(pv -n /dev/sda | dd of=/dev/sdb bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0

kaynak: İşte

Ayrıca kendimi arşivlemek için.

    
verilen cevap JSBach 27.08.2014 16:01
56

+ ÜstKrktr + T değerini dd çalıştırırken kullanın ve ilerlemeyi (bayt cinsinden) verir:

load: 1.51  cmd: dd 31215 uninterruptible 0.28u 3.67s
321121+0 records in
321120+0 records out
164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)
    
verilen cevap 01010101 17.10.2014 16:15
44

Tamlığı sağlamak için:

GNU coreutils sürümünün 8.24 sürümü, ilerlemeyi yazdırmak için bir parametre tanıtan dd için bir yama içerir.

Bu değişikliği içeren taahhüdün yorumu vardır. :

  

gg: yeni durum = ilerleme düzeylerini düzenli olarak yazdırmak için seviye

Ubuntu 16.04.2 LTS dahil olmak üzere birçok dağıtım bu sürümü kullanır.

    
verilen cevap davidDavidson 15.10.2015 11:24
31

En iyisi İşte kullanarak apt-get ile kurulumu kolaydır

    
verilen cevap TheNano 12.03.2013 15:11
22

Yerel ilerleme durumu dd'ye eklendi!

Coreutils'in yeni sürümü (8.24), dd aracına bir ilerleme durumu ekler:

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.xz
tar -xf coreutils-8.24.tar.xz
cd coreutils-8.24
./configure && make -j $(nproc)

dd 'yi root olarak çalıştır:

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

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

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

Yerli:

dd --version

Yeni:

cd coreutils-8.24/src
./dd --version
    
verilen cevap user3394963 30.12.2015 17:29
16

Dd'yi zaten başlattıysanız ve pendrive'ın bir kopyasını diske 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 saat komutunu kullanabilirsiniz. .

watch ls -l /pathtofile/filename

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

watch ls -sh /pathtofile/filename
    
verilen cevap fabricator4 07.12.2012 22:46
11

dd | pv | dd triad, 50 GB vm kopyalımın yalnızca dd kullanarak 260 saniyenin aksine 800 saniyeyi almasını sağladı. Bu boru hattıyla, en azından, pv, giriş dosyasının ne kadar büyük olduğu konusunda hiçbir fikre sahip değildir, bu nedenle, size ne kadar uzak olduğunuzu söyleyemeyeceğiniz için, aşağıdaki gibi bir dezavantaj yoktur ve iyi bir hız avantajı elde edersiniz:

Ben büyük bir şey üzerinde pv ve (eğer Bash kullanıyorsanız):

Kontrol-Zdd işlemi

Arka plana koymak için bg . % Co_de% 'nin size bg gibi bir çıkış vereceğini gözlemleyin, burada ikinci sayı işlem kimliğidir. Yani, yap:

[1] 6011

process_id, gözlemlediğiniz işlem kimliğidir. Gibi bir şey gördüğünüzde Control-C Hit:

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

İşin bitti.

Düzenleme: Silly Systems Yöneticisi! Hayatını otomatikleştir, işe yarama! İzlemek istediğim uzun bir dd sürecim varsa, işte sizin için tüm enchilada ilgilenecek bir tek liner; hepsini tek bir satıra koymak:

 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

Tabii ki, betik, belki 1 $ giriş dosyanızı ve 2 $ çıkış dosyanızı yapabilirsiniz. Bu okuyucu için bir egzersiz olarak bırakılır. Öldürmeden önce o küçük uyuma ihtiyacın olduğuna ya da öldürmediğine, henüz hazır olmadığında dd'ye sinyal göndermeye çalışacağını unutmayın. Uykunuzu istediğiniz gibi ayarlayın (belki de ikinci uykuyu tamamen kaldırın).

Bash- FTW! : -)

    
verilen cevap Mike S 06.05.2015 20:32
10

İşte

Temelde:

kill -USR1 < dd pid >
    
verilen cevap hnasarat 10.11.2012 21:30
6

Ubuntu'da 16.04

Ubuntu 16.04, dd (coreutils) Sürümü 8.25 ile birlikte gelir. Bu nedenle status=progress seçeneği Desteklenen: -)

Kullanmak için, status=progress komutunuzu dd komutuyla birlikte eklemeniz yeterlidir.

Örnek:

dd bs=4M if=/media/severus/tools-soft/OperatingSystems/ubuntu-16.04-desktop-amd64.iso of=/dev/null status=progress && sync

Durumu

olarak verir
1282846183 bytes (1.2 GiB, 1.1 GiB) copied, 14.03 s, 101.9 MB/s

    
verilen cevap Severus Tux 25.06.2016 06:54
6

En kolayı şudur:

 dd if=... of=... bs=4M status=progress oflag=dsync

oflag=dsync yazımınızı senkronize edecek, bu yüzden status=progress bilgisi daha doğru olacaktır. Ancak biraz daha yavaş olabilir.

    
verilen cevap zevero 04.10.2016 08:46
3

Bash sarmalayıcıyı dd 'den pv ' yi kullanarak ilerlemeyi göstermek için oluşturdum. % Co_de% dosyanıza koyun ve .bashrc değerini her zamanki gibi kullanın:

# dd if=/dev/vvg0/root of=/dev/vvg1/root bs=4M
    2GB 0:00:17 [ 120MB/s] [===========================================================>] 100%            
0+16384 records in
0+16384 records out
2147483648 bytes (2.1 GB) copied, 18.3353 s, 117 MB/s

Kaynak:

dd()
{
    local dd=$(which dd); [ "$dd" ] || {
        echo "'dd' is not installed!" >&2
        return 1
    }

    local pv=$(which pv); [ "$pv" ] || {
        echo "'pv' is not installed!" >&2
        "$dd" "[email protected]"
        return $?
    }

    local arg arg2 infile
    local -a args
    for arg in "[email protected]"
    do
        arg2=${arg#if=}
        if [ "$arg2" != "$arg" ]
        then
            infile=$arg2
        else
            args[${#args[@]}]=$arg
        fi
    done

    "$pv" -tpreb "$infile" | "$dd" "${args[@]}"
}
    
verilen cevap midenok 20.10.2014 13:32
3

Ben gerçekten ddrescue gibi, dd olarak çalışır ama çıktı verir ve hatalar üzerinde başarısız olmaz, aksine, çok gelişmiş bir algoritmaya sahip başarılı bir kopyasını yapmak gerçekten çok çalışır ... Ayrıca birçok GUI için o

Proje: İşte

Wikipedia: İşte

    
verilen cevap SuperMau 17.02.2016 06:55
2

Öyleyse, bugün kill 'si bir döngüde dd çalıştırmaya çalışırken biraz yoruldum ve bu yöntemi paralel olarak çalıştırmak için bu yöntemle geldim:

function vdd {
    sudo dd "[email protected]" &
    sudo sh -c "while pkill -10 ^dd$; do sleep 5; done"
}

Şimdi, vdd 'ı normalde dd kullandığınız herhangi bir yerde kullanın (tüm argümanları doğrudan iletir) ve her 5 saniyede bir ilerleme raporu alırsınız.

Tek dezavantajı, dd tamamlandığında komutun hemen geri dönmemesidir; Bu nedenle, bu komut, dd geri dönmeden önce, fark etmeden ve çıkmadan önce 5 sn daha beklemenizi sağlayabilir.

    
verilen cevap robru 11.04.2014 02:41
1

Yukarıda belirtildiği gibi, en azından GNU coreutils veya busybox'tan gelen 'dd' ile, ilerleme bilgisini stderr'e basmak suretiyle USR1 sinyaline cevap verecektir.

Dd için yüzde yüz tam bir gösterge gösteren küçük bir sarmalayıcı komut dosyası yazdım ve dd'nin işlemine veya herhangi bir şekilde işleyiş tarzına müdahale etmemeye çalışıyorum. Bunu github'da bulabilirsiniz:

İşte

Ne yazık ki, bu SIGUSR1 hilesi sadece GNU dd (coreutils paketinden) veya busybox'ın 'dd' modu ile birlikte çalışır ve bu özellik, derleme zamanında etkinleştirilir. FreeBSD ve OS X de dahil olmak üzere çoğu BSD sistemi ile birlikte bulunan 'dd' stoğu ile çalışmaz ...: (

    
verilen cevap delt 10.09.2015 08:29
1

Bu, dd'yi her 2 saniyede bir izleme sağlamak için zorunludur:

watch killall -USR1 dd

Her 2 saniyeden bir 5 saniyeye geçmek için, bunun gibi -n 5 seçeneğini ekleyin:

watch -n 5 killall -USR1 dd
    
verilen cevap Kostyantyn 30.01.2018 21:24
1

Aktarım sırasında ilerleme elde etmek için status=progress seçeneğini kullanın.

Ayrıca, conv=fsync G / Ç hatalarını görüntüleyecektir.

Örnek:

sudo dd if=mydistrib.iso of=/dev/sdb status=progress conv=fsync
    
verilen cevap MUY Belgium 25.05.2018 13:38
0

Herhangi bir coreutils programının ilerlemesini progress - Coreutils Progress Viewer kullanarak izleyebilirsiniz.

Şunları izleyebilir:

cp mv dd tar kedi rsync grep fgrep egrep kesilmiş sıra md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat lzcat bölünmüş gpg

Manpage 'i görebilirsiniz

Komut çalışırken ya da dd komutu ile başladığında ayrı bir terminal penceresinde kullanabilirsiniz:

dd if=/dev/sda of=file.img & progress -mp $!

Burada & ilk komutu sorar ve komut bitene kadar beklemek yerine hemen devam eder.

İlerleme komutu şu şekilde başlatılır: -m , izlenen süreç sona erene kadar bekler, -p bu yüzden belirli bir pid'i izler ve $! son komut pididir.

Eğer dd'yi sudo ile düzenlerseniz, siz de ilerlemeniz gerekir:

sudo dd if=/dev/sda of=file.img &
sudo progress -m
# with no -p, this will wait for all coreutil commands to finish
# but $! will give the sudo command's pid
    
verilen cevap labsin 22.07.2018 22:06

Etiketlerdeki diğer soruları oku