Mengkloning drive disk tunggal ke beberapa drive secara bersamaan


12

Saya mencari cara untuk mengkloning disk drive tunggal ke lebih dari satu disk drive pada saat yang bersamaan.

Saya telah menyiapkan gambar sistem pada disk 1TB, dan butuh hampir 2 jam untuk mengkloning satu disk ke disk lain, dan kemudian naik secara eksponensial, untuk mengatakan 30 disk dikloning.

Jika dimungkinkan untuk mengkloning satu disk ke lebih dari satu target, itu akan menyederhanakan seluruh prosedur.

Juga, apakah ada sesuatu yang mencegah operasi semacam ini? Maksud saya, apakah ada beberapa alasan khusus mengapa setiap perangkat lunak kloning disk yang saya ketahui hanya mendukung drive target tunggal?

Terima kasih!

Jawaban:


17

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 dddipanggil 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 catuntuk 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 teeseperti 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 ddmetode ini Anda mungkin bisa daisy-chain netcat+ tee+ ddproses pada setiap mesin seperti:

  1. Sumber mesin cat/ pv/ dddata melalui ncmesin tujuan 1.
  2. Mesin tujuan 1 telah ncmendengarkan data dari mesin sumber dan teemengirimkannya melalui pipa yang kemudian mengirimkannya ke dd(dan seterusnya ke disk) dan ncproses lain yang mengirimkan ke mesin tujuan 2.
  3. Mesin tujuan 2 telah ncmendengarkan data dari mesin tujuan 1 dan memipakannya teeyang pada gilirannya mengirimkannya ke dd(dan seterusnya ke disk) dan ncproses lain yang mengirim ke mesin tujuan 3.
  4. dan seterusnya hingga mesin terakhir yang baru saja ncmengambil 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, ncdan dduntuk 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).


Terima kasih atas penjelasan mendalam prosesnya. Itu sangat membantu. Saya sedang mengeksplorasi opsi jaringan kloning sekarang (menggunakan multicast), dan jika gagal, saya akan menjelajahi vektor DD ini lagi.
mr.b

Anda tidak mengatakan bahwa drive terpasang ke komputer yang berbeda ... yang membuat semuanya benar-benar berbeda!
marcusw

Ini datang paling dekat dengan komputer lokal dan jaringan duplikasi disk satu-ke-banyak, secara bersamaan. Terima kasih atas penjelasan yang mendalam!
mr.b

Untuk opsi Jaringan kloning yang berbasis Linux, Anda mungkin ingin mempertimbangkan Clonezilla. Ia dapat mengkloning melalui multicast dan juga beberapa opsi kloning lokal termasuk DD.
user35060

5

Jawaban pertama di google disarankan (pada sistem Linux) dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde):, di mana / dev / sdb adalah hard drive yang ingin Anda klon dan / dev / sdc, / dev / sdb, dan / dev / sde adalah drive untuk dikloning (Anda dapat tambahkan lebih banyak dari yang Anda inginkan, hanya copypaste). LiveCD harus melakukannya, dan ingatlah untuk berhati-hati dengan huruf drive Anda!


1
Benar. Saya melakukan riset sebelum mengajukan pertanyaan ini, tetapi saya tertarik mendengar pengalaman orang lain. DD adalah utilitas kecil yang hebat, tetapi: 1) ia tidak memiliki kesadaran akan konten data aktual (ini akan menyalin ruang kosong juga, sektor per sektor), dan 2) seseorang telah melaporkan masalah kinerja saat melakukan kloning ke lebih dari satu drive lewat sini. Ada ide lagi?
mr.b

"[...] di mana / dev / sdb adalah hard drive yang ingin Anda klon dan / dev / sdc, / dev / sdb, dan / dev / sde adalah drive untuk dikloning ke [...]" ---> "[...] dan ingatlah untuk berhati-hati dengan huruf drive kamu!" : DI Agree !!!
dag729

1
@ mr.b: 1) Dalam benak saya, salinan bit-for-bit lebih baik daripada mengambil jalan pintas yang berpotensi berbahaya. 2) Meh, cara terbaik yang dapat saya pikirkan adalah mengacaukan sumber dd untuk membuatnya menyalin ke lebih dari satu lokasi secara bersamaan, tetapi akan lebih cepat hanya menyalin cara yang lambat.
marcusw

Anda yakin tentang itu of=-? Hanya membuat -file output daripada keluaran untuk stdout untuk saya. Ini dapat diatasi dengan hanya meninggalkan ofopsi.
dari sana

Menggunakan "tee" dengan cara itu tidak akan berhasil. Silakan lihat: joshhead.wordpress.com/2011/08/04/...
user35060

2

Yang saya tahu adalah bahwa ada beberapa hal yang disebut Hard Drive Duplicators. Ini adalah Perangkat khusus untuk mengkloning (menduplikasi) HD ke beberapa Drive secara bersamaan. Mungkin artikel ini membantu Anda.


Ya, saya menyadari keberadaan perangkat ini; namun, semuanya sangat murah, terutama dalam kasus tanpa anggaran saya :( Terima kasih telah menyebutkannya.
mr.b

1
Meskipun tidak sepenuhnya nol biaya, jika Anda memiliki mesin cadangan (dengan catu daya yang layak) yang bisa Anda perintahkan dan mampu membeli beberapa pengontrol SATA murah (ada dua port satu di mesin rumah saya yang harganya sepuluh dolar) Anda dapat membuat mesin duplikasi sederhana sendiri dan menggunakan metode dd + tee atau perangkat lunak lain jika Anda dapat menemukan beberapa yang mendukung "baca dari satu sumber, tulis ke banyak" secara efisien.
David Spillett

(Inilah yang saya duga Anda coba lakukan dalam jawaban awal saya.)
David Spillett

1

Karena belum ada yang menyebutkannya, saya akan menyebutkan Clonezilla dan Server Edition mereka. (sayangnya, tampaknya tidak ada tautan langsung ke sana, tetapi Anda dapat menemukan "Server Edition" di menu nav kiri situs ...)

Saya sangat beruntung dengan Clonezilla Live edition tetapi belum mencoba Server Edition. Terlihat cukup apik.


Saya akan kedua Clonezilla sebagai apa yang tampaknya menjadi solusi yang baik untuk Anda berdasarkan umpan balik yang Anda berikan.
user35060


1

Saya menemukan 2 tautan bermanfaat di web yang berkaitan dengan ini. Satu digunakan dd tanpa kucing untuk melakukan diskdupe:

dd if=/dev/sdb | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://joshhead.wordpress.com/2011/08/04/multiple-output-files-with-dd-utility

Ini selanjutnya diperluas dengan tautan lain untuk menunjukkan meteran kemajuan:

dd if=/dev/sdb | pv -s $(blockdev --getsize64 /dev/sdb) | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://www.commandlinefu.com/commands/view/6177/dd-with-progress-bar-and-statistics


0

Saya ingin memperluas jawaban David

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

The drive.imagebenar-benar dapat menjadi perangkat lain, seperti/dev/sde

Kedua, ddperintah akan bekerja lebih cepat dengan bspengaturan yang tepat . Saya menggunakan bs=64kdan melihat peningkatan kecepatan 6 kali untuk menyalin partisi 40 Gig, dari 1 jam menjadi 10 menit.

Jadi perintah terakhir akan terlihat seperti ini:

pv drive.image | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd

Jika sumber Anda adalah drive, bukan file, itu akan terlihat seperti ini:

pv /dev/sde | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd


0

Duplikasi hard disk paralel adalah tugas umum dalam forensik komputer. dc3dd( halaman manual ) adalah alat khusus yang memungkinkan penyalinan paralel satu sumber ke beberapa tujuan dan berfungsi seperti UNIX dd, dengan beberapa of=opsi diizinkan.

Dimungkinkan juga untuk mengaktifkan hashing volume sumber dan salinan untuk memverifikasi integritasnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.