Saya belum terlalu dd
banyak menggunakan, tapi sejauh ini belum gagal saya. Saat ini, saya sudah dd
berjalan selama lebih dari 12 jam - saya menulis gambar kembali ke disk asalnya - dan saya sedikit khawatir, karena saya dapat dd
dari disk ke gambar sekitar 7 jam.
Saya menjalankan OSX 10.6.6 pada MacBook dengan Core 2 Duo di 2.1ghz / core dengan RAM 4GB. Saya membaca dari .dmg pada hard drive 7200rpm (drive boot), dan saya menulis ke drive 7200rpm yang terhubung melalui konektor SATA-to-USB. Saya meninggalkan blocksize secara default, dan gambar sekitar 160gb.
EDIT: Dan, setelah 14 jam stres murni, ternyata dd
berhasil dengan baik. Namun lain kali, saya akan menjalankannya pv
dan melacaknya strace
. Terima kasih untuk semua orang atas semua bantuan Anda.
sumber
dd ... bs=16M
adalah saran saya, mengingat RAM Anda, ukuran dan kecepatan disk.dd
pada Mac OS X memiliki kecenderungan untuk membeku ke titik di mana saya bahkan tidak dapat mematikan proses, tetapi harus me-restart sistem. Saya resor untuk melakukan pekerjaan pada VM Linux.Jawaban:
Anda dapat mengirim
dd
sinyal tertentu menggunakankill
perintah untuk membuatnya mengeluarkan statusnya saat ini. Sinyal adaINFO
di sistem BSD (termasuk OSX) danUSR1
di Linux. Dalam kasus Anda:Anda dapat menemukan id proses (di
$PID
atas) denganps
perintah; atau lihat pgrep dan pkill alternatif di mac os x untuk metode yang lebih mudah.Lebih sederhana, seperti yang ditunjukkan AntoineG dalam jawabannya , Anda dapat mengetikkan
ctrl-T
shell yang menjalankan dd untuk mengirimkanINFO
sinyal.Sebagai contoh di Linux, Anda dapat membuat semua
dd
status keluaran proses aktif seperti ini:Setelah mengeluarkan statusnya,
dd
akan terus mengatasi.sumber
pkill -USR1 -x dd
INFO
sinyal. Linux tidak memiliki SIGINFO dan menggunakanUSR1
sebagai gantinya.dd if=/dev/zero of=/dev/null
. :)Di bawah OS X (tidak mencoba di Linux), Anda cukup mengetik Ctrl+ Tdi terminal yang berjalan
dd
. Ini akan mencetak output yang sama dengankill -INFO $PID
, ditambah penggunaan CPU:Saya mengetahui tentang hal itu membaca utas ini, dan mencoba membuka tab baru di terminal saya tetapi mencampur ⌘+ Tdengan Ctrl+ T.
sumber
load
apakah penggunaan CPU?^T
ke terminal.Sebab
dd
, Anda bisa mengirim sinyal . Untuk perintah lain yang sedang membaca atau menulis ke file, Anda dapat melihat posisinya di filelsof
.Jika Anda berencana terlebih dahulu, pipa data melalui
pv
.sumber
pv
sepertinya hanya tiket.Cara yang lebih umum adalah menggunakan
iotop
yang menampilkan jumlah disk saat ini membaca / menulis per program.EDIT:
iotop -o
hanya tampilkan program yang melakukan operasi I / O saat ini (terima kasih Jason C untuk komentar ini).sumber
iotop -o
akan menyembunyikan proses yang tidak melakukan IO dan membuatnya lebih mudah untuk mengetahui apa yang sedang terjadi.Saya biasanya melampirkan
strace
proses yang berjalan (dengan-p $PID
opsi) untuk melihat apakah tetap diblokir dalam panggilan sistem atau jika masih aktif.Atau, jika Anda merasa gugup mengirim sinyal ke dd berjalan, mulai dd lain untuk memvalidasi jika ini berfungsi.
sumber
strace
? Juga, saya memang memulai yang laindd
dan mengirim salah satu sinyal yang disarankan untuk itu, dan ... itu membunuhnya.Untuk waktu berikutnya, Anda bisa menggunakannya
pv
dari awal (jika tersedia melalui manajer paket Anda, instal). Ini adalah utilitas dengan tujuan tunggal menyalurkan input ke output dan memantau kemajuan dan kecepatan.Kemudian, untuk menulis gambar ke drive, katakan dengan ukuran blok 4MB:
Selain dari penyangga awal (diimbangi dengan sinkronisasi akhir, yang dapat dilakukan melalui
dd
jika Anda mau), ini akan menampilkan bilah kemajuan, kecepatan rata-rata, kecepatan saat ini, dan ETA.The
iflag=fullblock
pasukan pilihan dd untuk mengambil blok penuh masukan melaluipv
, jika Anda pada belas kasihan dari pipa untuk ukuran blok.Untuk ke arah lain gunakan dd untuk membaca dan pv untuk menulis, meskipun Anda harus secara eksplisit menentukan ukuran jika sumbernya adalah perangkat blok. Untuk perangkat 4GB:
Anda juga dapat menentukan ukuran secara otomatis, seperti:
Tidak masalah apa pun urutan
dd
dan urutannyapv
, ini sepenuhnya terkait dengan kinerja - jika perangkat yang Anda baca memiliki atau dari memiliki kinerja optimal untuk ukuran blok tertentu yang ingin Anda gunakandd
alih-alihpv
mengakses perangkat itu. Anda bahkan dapat menempelkannyadd
di kedua ujungnya jika Anda mau, atau tidak sama sekali jika Anda tidak peduli:sumber
Pada
coreutils
v8.24,dd
memiliki dukungan asli untuk menunjukkan kemajuan. Cukup tambahkan opsistatus=progress
.Contoh:
Sumber
sumber
ddrescue
akan memberi Anda statistik saat sedang berjalan.demo: http://www.youtube.com/watch?v=vqq9A01geeA#t=144s
sumber
Kadang-kadang Anda mungkin tidak dapat menggunakan sinyal INFO atau USR1 karena aliran
dd
proses stderr tidak dapat diakses (misalnya karena terminal di mana ia dieksekusi sudah ditutup). Dalam hal ini, solusinya adalah dengan melakukan hal berikut (diuji pada FreeBSD, mungkin sedikit berbeda di Linux):Gunakan
iostat
untuk memperkirakan tingkat penulisan rata-rata (MB / s) ke perangkat target, misalnya:iostat -d -w30 ada0
Gantilah nama perangkat target Anda di
ada0
sini, dan tunggu sebentar hingga hasilnya beberapa. Parameter "w" menentukan berapa detik antar sampel. Menambahnya akan memberikan perkiraan rata-rata yang lebih baik dengan varians yang lebih sedikit, tetapi Anda harus menunggu lebih lama.Gunakan
ps
untuk menentukan berapa lamadd
telah berjalan:ps -xo etime,command | grep dd
Konversikan ke detik untuk mendapatkan runtime total detik.
Dapatkan ukuran perangkat dalam MB dengan:
grep ada0 /var/run/dmesg.boot
Ganti nama perangkat target Anda dengan
ada0
. Bagi hasil dengan rata-rata tingkat penulisan untuk mendapatkan total waktu transfer dalam detik. Kurangi waktu yang sudah berjalan sejauh ini untuk mendapatkan sisa waktu.Strategi ini hanya berfungsi jika
dd
telah menulis terus menerus pada tingkat menulis rata-rata saat ini sejak dimulai. Jika proses lain bersaing untuk sumber daya CPU atau I / O (termasuk bus I / O) maka dapat mengurangi kecepatan transfer.sumber
Saya mulai menggunakan dcfldd (1), yang menunjukkan operasi dd dengan cara yang lebih baik.
sumber
Ketika
dd
sedang mengeksekusi, saya menjalankan ini di terminal lain sebagai root:Ini mencetak
dd
status setiap 1 detik di jendela terminal asli tempatdd
eksekusi, dan berhenti ketika perintah dilakukan.sumber
Anda dapat menggunakan
progress
yang, khususnya, menunjukkan progres laridd
. Ini menggunakan/proc/$pid/fd
dan/proc/$pid/fdinfo
yang Anda juga dapat memonitor dengan tangan.sumber
The
wchar
line (karakter yang ditulis) dalam/proc/$pid/io
dapat memberikan informasi yang tepat tentangdd
proses. Selama itu berubah, Andadd
masih bekerja!Berikut ini adalah skrip php kecil yang rapi, yang dapat Anda simpan dan kemudian jalankan dengan
php filename.php
selamadd
untuk menampilkan byte yang ditulis. Manfaat bagus menonton/proc/$pid/io
lebihkill -USR1 $(pidof dd)
adalah bahwa Anda tidak perlu beralih di antara terminal, yang tidak selalu pilihan.sumber