Bạn có thể sử dụng "thay thế quy trình" của bash cùng với lệnh tee để thực hiện việc này:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
hoặc để rõ ràng (với chi phí hiệu quả một chút), bạn có thể thực hiện lần cuối cùng dd
được gọi giống như cách khác và gửi tiêu chuẩn của tee đến / dev / null:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null
và nếu bạn đã cài đặt nó, bạn có thể sử dụng trình xem đường ống thay vì cat
để có được một chỉ báo tiến trình hữu ích:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
Điều này chỉ đọc hình ảnh nguồn một lần, do đó, ổ đĩa nguồn bị đập đầu, đó có thể là lý do khiến bạn thấy chậm theo cấp số nhân khi bạn thử sao chép hình ảnh nhiều lần bằng các phương pháp khác. Sử dụng tee
như trên, các quy trình sẽ chạy ở tốc độ của ổ đĩa đích chậm nhất.
Nếu bạn có các ổ đĩa đích được kết nối qua USB, hãy lưu ý rằng tất cả chúng có thể đang chia sẻ băng thông xe buýt, vì vậy việc viết nhiều song song có thể không nhanh hơn việc ghi chúng theo tuần tự vì bus USB trở thành nút cổ chai không phải là ổ đĩa nguồn hoặc đích.
Ở trên giả định rằng bạn đang sử dụng Linux hoặc tương tự (nó cũng hoạt động trên OSX mặc dù tên thiết bị có thể khác), nếu bạn đang sử dụng Windows hoặc một cái gì đó khác thì bạn cần một giải pháp khác.
Biên tập
Hình ảnh qua mạng có một vấn đề tương tự như chụp ảnh nhiều ổ đĩa qua USB - kênh truyền tải trở thành nút cổ chai thay vì các ổ đĩa - trừ khi phần mềm bạn sử dụng hỗ trợ một số hình thức truyền phát hoặc phát đa hướng.
Đối với dd
phương thức, bạn có thể có thể xử lý chuỗi netcat
+ tee
+ dd
trên mỗi máy như vậy:
- Máy nguồn
cat
/ pv
/ dd
s dữ liệu thông qua nc
máy đích 1.
- Máy đích 1 đã
nc
lắng nghe dữ liệu từ máy nguồn và chuyển nó qua tee
đó lần lượt gửi nó đến dd
(và như vậy vào đĩa) và một nc
quá trình khác gửi đến máy đích 2.
- Máy đích 2 đã
nc
lắng nghe dữ liệu từ máy đích 1 và chuyển nó qua tee
đó lần lượt gửi nó đến dd
(và như vậy vào đĩa) và một nc
quá trình khác gửi đến máy đích 3.
- và cứ như vậy cho đến khi máy cuối cùng vừa
nc
lấy dữ liệu từ máy trước đó và gửi nó vào đĩa qua dd
.
Bằng cách này, bạn có khả năng sử dụng băng thông mạng đầy đủ của mình với giả định rằng tất cả các thiết bị chuyển mạch và thẻ mạng của bạn đã đàm phán một liên kết song công hoàn toàn. Thay vì máy nguồn gửi 10 bản sao dữ liệu (giả sử 10 máy đích), mỗi máy bị giới hạn ở 1/10 băng thông đi, nó chỉ gửi 1. Mỗi máy đích đang lấy một bản sao của dữ liệu và gửi đi lần nữa. Bạn có thể cần phải tinh chỉnh các thiết lập kích thước bộ đệm của pv
, nc
và dd
để có được gần gũi hơn với hiệu suất thực tế tốt nhất.
Nếu bạn có thể tìm thấy một số phần mềm chỉ hỗ trợ phát đa hướng, điều đó sẽ dễ dàng hơn nhiều (và có thể nhanh hơn một chút)! Nhưng trên đây là loại giải pháp hack mà tôi có thể đủ để thử ...
Chỉnh sửa lại
Một suy nghĩ khác. Nếu hình ảnh ổ đĩa nén tốt (sẽ như vậy nếu các khối lớn của nó chứa đầy số không) thì băng thông đi của máy nguồn không cần phải là vấn đề ngay cả khi gửi đến nhiều đích cùng một lúc. Chỉ cần nén hình ảnh trước, truyền hình ảnh đó đến mọi nơi bằng cách sử dụng tee
+ nc
và giải nén trên các đích (mạng-> nc
-> bộ giải nén-> dd
-> đĩa).