Pembaruan 2016 : Jika Anda menggunakan GNU coreutils> = 8.24 (default di Ubuntu Xenial 16.04 ke atas), lihat metode 2 di bawah ini untuk cara alternatif untuk menampilkan kemajuan.
Metode 1: Dengan menggunakan pv
Instal pv
dan letakkan di antara dd
perintah input / output saja .
Catatan : Anda tidak dapat menggunakannya saat sudah mulai dd
.
Dari deskripsi paket :
pv
- Pipe Viewer - adalah alat berbasis terminal untuk memantau kemajuan data melalui pipa. Ini dapat dimasukkan ke dalam pipa normal antara dua proses untuk memberikan indikasi visual tentang seberapa cepat data melewati, berapa lama waktu yang dibutuhkan, seberapa dekat dengan penyelesaiannya, dan perkiraan berapa lama sampai selesai.
Instalasi
sudo apt-get install pv
Contoh
dd if=/dev/urandom | pv | dd of=/dev/null
Keluaran
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
Anda dapat menentukan perkiraan ukuran dengan --size
jika Anda menginginkan estimasi waktu.
Contoh Dengan asumsi disk 2GB sedang disalin dari / dev / sdb
Perintah tanpa pv
adalah:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
Perintah dengan pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
Keluaran:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
Penggunaan lainnya
Anda tentu saja dapat menggunakan pv
langsung untuk mem-pipe output ke stdout:
pv /home/user/bigfile.iso | md5sum
Keluaran
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
Perhatikan bahwa dalam hal ini, pv
kenali ukurannya secara otomatis.
Metode 2: status
Opsi baru ditambahkan ke dd
(GNU Coreutils 8.24+)
dd
di GNU Coreutils 8.24+ (Ubuntu 16.04 dan yang lebih baru) mendapat status
opsi baru untuk menampilkan progres:
Contoh
dd if=/dev/urandom of=/dev/null status=progress
Keluaran
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
dd if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw
.pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000
bekerja, diverifikasi. @SopalajodeArrierez, parameter dapat diberikan pada dd kedua.pv < /dev/sda > /dev/sdb
tampaknya mendapatkan kecepatan ( sumber ) yang lebih baikdd if=/dev/urandom | pv | of=/dev/sdb
memberi ~ 18MB / s tulis,dd if=/dev/zero | pv | of=/dev/sdb
memberi ~ 80MB / s, dan lama biasadd if=/dev/zero of=/dev/sdb
memberikan ~ 550MB / s (dekat dengan kecepatan tulis maks SSD). Semua denganbs=4096000
.Dari HowTo: Pantau perkembangan dd
Anda dapat memantau progres dd tanpa menghentikannya dengan menggunakan
kill
perintah.Untuk melihat kemajuan
dd
setelah itu berjalan, buka terminal lain dan masukkan:Ini akan menampilkan
dd
progres didd
jendela terminal tanpa menghentikan proses. Jika Anda menggunakan BSD atau OS X, gunakanINFO
sebagai gantiUSR1
. TheUSR1
sinyal akan mengakhiri dd.Jika Anda ingin mendapatkan pembaruan
dd
kemajuan secara rutin , masukkan:watch
akan menyelidikidd
proses setiap -n detik (-n5
= 5 detik) dan melaporkan tanpa menghentikannya.Perhatikan tanda kutip tunggal yang tepat dalam perintah di atas.
sumber
kill -INFO $(pgrep ^dd$)
pada sistem BSD (seperti OSX).sudo pkill -usr1 dd
lebih mudah diingat, berfungsi dengan sangat baik (setidaknya pada Ubuntu 14.04), dan kurang untuk mengetik.pv
akan memperlambat transfer, seperti yang ditunjukkan TeddHansen. Juga, saya berani bertaruh banyak orang yang mencari Google ini karena mereka sudah memulaidd
operasi;)Beberapa contoh penggunaan praktis dengan
pv
dan kurang mengetik atau lebih banyak kemajuan daripada jawaban lain:Pertama, Anda perlu menginstal
pv
, dengan perintah:Maka beberapa contoh adalah:
Catatan: sampel pertama kurang dari 5 karakter saat mengetik
dd if=/dev/urandom | pv | dd of=/dev/null
.Dan favorit saya untuk mengkloning disk drive (ganti X dengan huruf drive):
sumber: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
Juga untuk pengarsipan diriku.
sumber
dialog
dengan perintahapt-get install dialog
dialog
misalnya. SERENITY SEKARANG !dialog
ini akan sangat membantu dalam menulis skrip shell: Dbrew install pv dialog
untuk Mac. Pria ini juga menghitung dengan gaya. Bravo.Gunakan Ctrl+ Shift+ Tsaat
dd
sedang berjalan, dan itu akan menampilkan progres (dalam byte):sumber
dd
.^T
ke terminal (kecuali banyak aplikasi terminal akan mencegat Ctrl-Shift-T dan membuka tab baru). Banyak pencari di OSX / BSD mungkin menghargai jawaban ini, tetapi harus diperjelas bahwa ini bukan untuk Ubuntu (atau GNU / LInux secara umum?)Demi kelengkapan:
Versi 8.24 dari GNU coreutils termasuk tambalan untuk dd memperkenalkan parameter untuk mencetak kemajuan.
Komit yang memperkenalkan perubahan ini memiliki komentar:
Banyak distribusi, termasuk Ubuntu 16.04.2 LTS menggunakan versi ini.
sumber
apt install build-essential
danapt-get build-dep coreutils
, kemudian unduh coreutils-8.25.tar.xz,tar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
dan jalankanmake
. Yang baru dikompilasidd
akan berada di bawahsrc
dir. Anda dapat menyalinnya ke / bin dan mengganti yang sudah ada atau hanya menjalankan sebagai src / ddYang terbaik adalah menggunakan http://dcfldd.sourceforge.net/ mudah untuk menginstal melalui apt-get
sumber
dd
dan opsistatus=on
secara default, untuk pesan progres,statusinterval=N
(N dalam blok) untuk frekuensi pembaruan pesan dansizeprobe=[if|of]
untuk indikator persentase. Saya akan alias keDD
:)Status kemajuan asli ditambahkan ke dd !!!
Versi baru Coreutils (8.24) menambahkan status progres ke
dd
alat:Penggunaan di Xubuntu 15.10:
Buka terminal dan ketik perintah ini:
Jalankan
dd
sebagai root:Anda akan melihat: Bytes, detik dan kecepatan (Bytes / detik).
Untuk memeriksa versi
dd
:Asli:
Baru:
sumber
Jika Anda sudah mulai dd, dan jika Anda sedang menulis file seperti ketika membuat salinan flashdisk ke disk, Anda dapat menggunakan perintah arloji untuk terus-menerus mengamati ukuran file output untuk melihat perubahan dan memperkirakan penyelesaian.
Untuk hanya melihat ukuran file (tampilan manusia):
sumber
The
dd | pv | dd
triad membuat saya copy 50GB vm mengambil 800 detik, sebagai lawan 260 detik hanya menggunakan dd. Dengan pipa ini, setidaknya, pv tidak tahu seberapa besar file input sehingga tidak akan bisa memberi tahu Anda seberapa jauh Anda sehingga tidak ada kerugian untuk melakukannya sebagai berikut- dan Anda mendapatkan keuntungan kecepatan yang bagus:Saya akan menghindari pv pada sesuatu yang besar, dan (jika menggunakan Bash):
Kontrol-Z proses dd
bg
untuk meletakkannya di latar belakang. Perhatikan yangbg
akan memberi Anda output seperti di[1] 6011
mana angka terakhir adalah id proses. Begitu juga:while true; do kill -USR1 process_id ; sleep 5; done
di mana process_id adalah id proses yang Anda amati. Tekan Control-C ketika Anda melihat sesuatu seperti:
Kamu selesai.
Sunting: Administrator Sistem Konyol! Otomatiskan hidup Anda, jangan bekerja! Jika saya memiliki proses dd panjang yang ingin saya pantau, berikut ini adalah satu-baris yang akan mengurus seluruh enchilada untuk Anda; letakkan ini semua dalam satu baris:
Anda dapat, tentu saja, skrip itu, mungkin membuat $ 1 file input Anda dan $ 2 file output Anda. Ini dibiarkan sebagai latihan untuk pembaca. Perhatikan bahwa Anda perlu sedikit tidur sebelum membunuh atau membunuh mungkin mati mencoba mengirim sinyal ke dd ketika belum siap. Sesuaikan tidur Anda seperti yang diinginkan (bahkan mungkin menghapus sama sekali tidur kedua).
Bash-FTW! :-)
sumber
while
loop. Gunakanwatch
.sudo watch pkill dd
. Kemudian tontondd
output statistik dengan nyaman.watch pkill -USR1 -x dd
. Karena saya juga menggunakanwatch
untuk tugas serupa lainnya, yang ini muncul secara alami.http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
Pada dasarnya:
sumber
Paling mudah adalah:
oflag=dsync
akan membuat tulisan Anda tetap sinkron, sehingga informasistatus=progress
lebih akurat. Namun mungkin sedikit lebih lambat.sumber
conv=fsync
lebih baikDi Ubuntu 16.04
Ubuntu 16.04 hadir dengan dd (coreutils) Versi 8.25 . Oleh karena itu opsi
status=progress
ini Didukung :-)Untuk menggunakannya, cukup tambahkan perintah
status=progress
Andadd
.Contoh:
Memberikan status sebagai
sumber
Gunakan opsi
status=progress
untuk mendapatkan kemajuan selama transfert.Selain itu,
conv=fsync
akan muncul kesalahan I / O.Contoh:
sumber
Saya sangat suka ddrescue, berfungsi sebagai dd tetapi memberikan output dan tidak gagal pada kesalahan, sebaliknya ia memiliki algoritma yang sangat canggih dan berusaha sangat keras untuk melakukan salinan yang sukses ... Ada juga banyak GUI untuk itu
Proyek: https://www.gnu.org/software/ddrescue
Wikipedia: https://en.wikipedia.org/wiki/Ddrescue
sumber
Saya telah membuat bash wrapper
dd
yang akan digunakanpv
untuk menunjukkan kemajuan. Masukkan ke dalam Anda.bashrc
dan gunakandd
seperti biasa:Sumber:
sumber
#!/bin/bash
. Di bagian bawah:tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"
Atau Anda mungkin ingindd
lokasi hardcode . Kemudian gunakanlocal dd=/usr/bin/dd
. Jangan lupa untuk menambahkan sedikit executable:chmod +x /usr/local/dd
.Jadi hari ini saya sedikit frustrasi dengan mencoba menjalankan
kill
dalam satu lingkaran saatdd
sedang berjalan, dan muncul dengan metode ini untuk menjalankannya secara paralel, dengan mudah:Sekarang gunakan
vdd
saja di mana saja Anda biasanya menggunakandd
(melewati semua argumen langsung melalui) dan Anda akan mendapatkan laporan kemajuan dicetak setiap 5s.Satu-satunya downside adalah bahwa perintah tersebut tidak segera kembali ketika dd selesai; jadi ada kemungkinan bahwa perintah ini dapat membuat Anda menunggu 5s tambahan setelah dd kembali sebelum pemberitahuan dan keluar.
sumber
Yang ini memaksa dd untuk memberikan statistik setiap 2 detik yang merupakan standar untuk menonton:
Untuk mengubah dari setiap 2 detik menjadi setiap 5 detik, tambahkan opsi -n 5 seperti ini:
sumber
Kalau-kalau ada orang dari tanah CentOS yang menemukan utas ini ...
Opsi 'status = progress' bekerja dengan CentOS 7.5 dan 7.6
Jawaban di atas oleh @davidDavidson menyiratkan fitur yang baru ditambahkan di Coreutils 8.24.
Ini mungkin terjadi, tetapi CentOS mungkin tidak mengikuti skema versi yang sama.
Versi Coreutils yang hadir dengan CentOS 7.6.1810 adalah:
Dan versi dd yang diinstal adalah:
Ini menunjukkan versi 8.22 .
Namun, saya telah menguji 'status = progres' dengan dd pada CentOS 7.5 dan CentOS 7.6 (keduanya dengan versi 8.22 dari Coreutils) dan berfungsi dengan baik.
Saya tidak tahu mengapa RedHat memilih untuk menggunakan Coreutils versi lama tetapi fungsinya memang ada dengan 8.22.
sumber
Seperti disebutkan di atas, setidaknya dengan 'dd' dari GNU coreutils, atau busybox, ia akan merespons sinyal USR1 dengan mencetak info progres ke stderr.
Saya menulis skrip pembungkus kecil untuk dd yang menunjukkan indikator persen-lengkap yang bagus, dan mencoba untuk tidak mengganggu proses dd atau cara berfungsi dengan cara apa pun. Anda dapat menemukannya di github:
http://github.com/delt01/dd_printpercent
Sayangnya, trik SIGUSR1 ini hanya berfungsi dengan GNU dd (dari paket coreutils) atau mode 'dd' busybox dengan fitur spesifik yang diaktifkan pada waktu kompilasi. Itu tidak bekerja dengan stok 'dd' yang disertakan dengan sebagian besar sistem BSD, termasuk FreeBSD dan OS X ... :(
sumber
Anda dapat menyaksikan kemajuan dari setiap program coreutils menggunakan
progress - Coreutils Progress Viewer
.Itu dapat memonitor:
cp mv dd tar cat rsync grep fgrep egrep potong urutkan md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat
Anda dapat melihat halaman manualnya
Anda dapat menggunakannya di jendela terminal terpisah saat perintah sedang berjalan atau jalankan dengan perintah dd:
Di sini
&
mem-fork perintah pertama dan melanjutkan segera alih-alih menunggu sampai perintah berakhir.Perintah progres diluncurkan dengan:
-m
jadi ia menunggu sampai proses yang dipantau berakhir,-p
sehingga ia memonitor pid yang diberikan dan$!
merupakan perintah terakhir pid.Jika Anda mengeluarkan dd dengan sudo, Anda juga harus terlalu maju:
sumber