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