Bagaimana Anda memantau kemajuan dd?

dd adalah keajaiban. Ini memungkinkan Anda menduplikasi hard drive ke yang lain, benar-benar nol hard drive, dll. Tapi begitu Anda meluncurkan dd perintah, tidak ada yang memberitahu Anda tentang kemajuan. Itu hanya duduk di sana di kursor sampai perintah akhirnya selesai. Jadi bagaimana seseorang memantau kemajuan dd?

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 meletakkannya di antara input / output saja dd perintah.

Catatan: Anda tidak dapat menggunakannya ketika Anda 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 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 bisa menentukan ukuran perkiraan dengan --size jika Anda ingin estimasi waktu.


Contoh dengan asumsi disk 2GB disalin dari / dev / sdb

Perintah tanpa pv akan menjadi:

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

Kegunaan lain

Anda tentu saja dapat menggunakan pv langsung ke pipa 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 kasus ini, pv mengenali ukuran secara otomatis.


Metode 2: Baru status opsi ditambahkan ke dd (GNU Coreutils 8.24+)

dd dalam GNU Coreutils 8.24 +(Ubuntu 16.04 dan yang lebih baru) mendapat baru status pilihan untuk menampilkan kemajuan:

Contoh

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

Keluaran

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

Dari HowTo: memantau kemajuan dd

Anda dapat memantau kemajuan dd setelah itu berjalan tanpa menghentikan itu dengan menggunakan kill perintah untuk mengirim sinyal ke proses.

Setelah Anda mulai dd, buka terminal lain dan masuk entah:

sudo kill -USR1 $(pgrep ^dd$)

Atau, jika Anda menggunakan BSD atau OS X:

sudo kill -INFO $(pgrep ^dd$)

Ini akan menampilkan kemajuan dalam dd jendela terminal tanpa menghentikan proses (dengan mencetak ke aliran stderr-nya). Misalnya:

# 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

Jika Anda ingin mendapatkan update reguler dari dd kemajuan, lalu masuk:

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

watch akan menyelidiki dd proses setiap-n detik (-n5 = 5 detik) dan laporkan tanpa menghentikannya.

Perhatikan tanda kutip tunggal yang tepat dalam perintah di atas.

Beberapa penggunaan sampel praktis dengan pv dan kurang mengetik atau lebih banyak kemajuan maka jawaban lainnya:

Pertama, Anda perlu menginstal pv, dengan perintah:

sudo apt-get install pv

Maka beberapa contohnya adalah:

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

Catatan: sampel pertama adalah 5 karakter kurang mengetik kemudian dd if=/dev/urandom | pv | dd of=/dev/null.

Dan favorit saya untuk mengkloning disk drive (ganti X dengan huruf drive):

(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

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

Juga untuk pengarsipan sendiri.

Demi kelengkapan:

Versi 8.24 dari GNU coreutils termasuk patch untuk dd memperkenalkan parameter untuk mencetak kemajuan.

Komit memperkenalkan perubahan ini memiliki komentar:

dd: baru status = kemajuan tingkat untuk mencetak statistik secara berkala

Banyak distribusi, termasuk Ubuntu 16.04.2 LTS gunakan versi ini.

Gunakan Ctrl+Shift+T sementara dd sedang berjalan, dan itu akan menampilkan kemajuan (dalam byte):

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)

Yang terbaik adalah menggunakan http://dcfldd.sourceforge.net/ sangat mudah untuk menginstal melalui apt-get

Status kemajuan asli ditambahkan ke dd!!!

Versi baru Coreutils (8.24) menambahkan status kemajuan ke dd alat:

Penggunaan pada Xubuntu 15.10:

Buka terminal dan ketik perintah ini:

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)

Lari dd sebagai root:

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

Anda akan melihat: byte, detik dan kecepatan (byte/detik).

Untuk memeriksa versi dd:

Asli:

dd --version

Baru:

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

Jika Anda sudah memulai dd, dan jika Anda menulis file seperti saat membuat salinan flashdisk ke disk, Anda dapat menggunakan perintah watch untuk terus mengamati ukuran file output untuk melihat perubahan dan memperkirakan penyelesaian.

watch ls -l /pathtofile/filename

Untuk melihat hanya Ukuran file (h-tampilan manusia):

watch ls -sh /pathtofile/filename

The dd | pv | dd triad membuat salinan vm 50GB saya memakan waktu 800 detik, dibandingkan dengan 260 detik hanya menggunakan dd. Dengan pipa ini, setidaknya, pv tidak tahu seberapa besar file input sehingga tidak akan dapat 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 bahwa bg akan memberikan output seperti [1] 6011 di mana nomor terakhir adalah ID proses. Jadi, lakukan:

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:

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

Kau sudah selesai.

Edit: Administrator Sistem Konyol! Otomatiskan hidup Anda, jangan bekerja! Jika saya memiliki proses dd panjang yang ingin saya pantau, inilah satu-liner yang akan mengurus seluruh enchilada untuk anda; letakkan ini semua dalam satu baris:

 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

Anda dapat, tentu saja, skrip itu, mungkin membuat $1 file input Anda dan $2 file output Anda. Ini dibiarkan sebagai latihan bagi 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 tidur kedua sama sekali).

Bash-FTW! :-)

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

Pada dasarnya:

kill -USR1 < dd pid >