Anda dapat menggunakan "proses substitusi" bash bersama dengan perintah tee untuk melakukan ini:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
atau untuk kejelasan (dengan mengorbankan sedikit efisiensi) Anda dapat membuat yang terakhir dd
dipanggil dengan cara yang sama seperti yang lain dan mengirim stdout tee ke / dev / null:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null
dan jika Anda telah menginstalnya Anda dapat menggunakan penampil pipa bukannya cat
untuk mendapatkan indikator kemajuan yang berguna:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
Ini membaca gambar sumber hanya satu kali, sehingga drive sumber menderita head-meronta-ronta yang mungkin akan mengapa Anda melihat perlambatan eksponensial ketika Anda mencoba menyalin gambar beberapa kali dengan metode lain. Menggunakan tee
seperti di atas, proses harus berjalan pada kecepatan drive tujuan paling lambat.
Jika Anda memiliki drive tujuan yang terhubung melalui USB, perlu diketahui bahwa mereka semua mungkin berbagi bandwidth bus sehingga menulis banyak paralel mungkin tidak lebih cepat daripada menulis mereka secara berurutan karena bus USB menjadi hambatan bukan drive sumber atau tujuan.
Di atas mengasumsikan Anda menggunakan Linux atau serupa (itu harus bekerja pada OSX juga meskipun nama perangkat mungkin berbeda), jika Anda menggunakan Windows atau sesuatu yang lain maka Anda memerlukan solusi yang berbeda.
Edit
Pencitraan melalui jaringan memiliki masalah yang mirip dengan pencitraan banyak drive melalui USB - saluran transportasi menjadi hambatan bukannya drive - kecuali perangkat lunak yang Anda gunakan mendukung beberapa bentuk siaran atau transmisi multicast.
Untuk dd
metode ini Anda mungkin bisa daisy-chain netcat
+ tee
+ dd
proses pada setiap mesin seperti:
- Sumber mesin
cat
/ pv
/ dd
data melalui nc
mesin tujuan 1.
- Mesin tujuan 1 telah
nc
mendengarkan data dari mesin sumber dan tee
mengirimkannya melalui pipa yang kemudian mengirimkannya ke dd
(dan seterusnya ke disk) dan nc
proses lain yang mengirimkan ke mesin tujuan 2.
- Mesin tujuan 2 telah
nc
mendengarkan data dari mesin tujuan 1 dan memipakannya tee
yang pada gilirannya mengirimkannya ke dd
(dan seterusnya ke disk) dan nc
proses lain yang mengirim ke mesin tujuan 3.
- dan seterusnya hingga mesin terakhir yang baru saja
nc
mengambil data dari mesin sebelumnya dan mengirimkannya ke disk via dd
.
Dengan cara ini Anda berpotensi menggunakan bandwidth jaringan penuh Anda dengan asumsi bahwa Anda switch dan kartu jaringan Anda semuanya menegosiasikan tautan dupleks-penuh. Alih-alih mesin sumber mengirim 10 salinan data (dengan asumsi 10 mesin tujuan) sehingga masing-masing dibatasi pada 1/10 dari bandwidth keluar hanya mengirimkan 1. Setiap mesin tujuan mengambil satu salinan data dan mengirimkannya lagi. Anda mungkin perlu mengubah pengaturan ukuran buffer pv
, nc
dan dd
untuk lebih mendekati kinerja praktis terbaik.
Jika Anda dapat menemukan beberapa perangkat lunak yang hanya mendukung multicast, itu akan jauh lebih mudah (dan mungkin sedikit lebih cepat)! Tetapi di atas adalah semacam solusi hacky saya mungkin cukup bodoh untuk mencoba ...
Edit Lagi
Pikiran lain. Jika gambar drive memampatkan dengan baik (yang akan terjadi jika potongan besar itu penuh dengan nol) bandwidth keluar dari mesin sumber tidak perlu menjadi masalah bahkan jika mengirim ke banyak tujuan sekaligus. Cukup kompres gambar terlebih dahulu, kirimkan ke mana saja menggunakan tee
+ nc
, dan dekompres pada tujuan (jaringan-> nc
-> dekompresor-> dd
-> disk).