Możesz użyć „podstawienia procesu” basha wraz z poleceniem tee, aby to zrobić:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
lub dla jasności (kosztem niewielkiej wydajności) możesz sprawić, że ostatnia dd
będzie nazywana tak samo jak inne i wysłać standardowe wejście tee do / dev / null:
cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null
a jeśli masz zainstalowany, możesz użyć podglądu potoków zamiast cat
uzyskać przydatny wskaźnik postępu:
pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd
Odczytuje to obraz źródłowy tylko raz, więc dysk źródłowy cierpi z powodu miażdżącego uderzenia głową, co prawdopodobnie będzie przyczyną gwałtownego spowolnienia podczas próby wielokrotnego skopiowania obrazu innymi metodami. Używając tee
jak wyżej, procesy powinny działać z prędkością najwolniejszego dysku docelowego.
Jeśli masz docelowe dyski podłączone przez USB, pamiętaj, że wszystkie mogą dzielić przepustowość magistrali, więc pisanie wielu równolegle może być nie szybsze niż zapisywanie ich kolejno, ponieważ magistrala USB staje się wąskim gardłem, a nie dyskami źródłowymi lub docelowymi.
Powyższe zakłada, że używasz Linuksa lub podobnego (powinien działać również na OSX, chociaż nazwy urządzeń mogą być inne), jeśli używasz Windowsa lub czegoś innego, potrzebujesz innego rozwiązania.
Edytować
Obrazowanie przez sieć ma podobny problem jak obrazowanie wielu napędów przez USB - kanał transportowy staje się wąskim gardłem zamiast napędów - chyba że używane oprogramowanie obsługuje jakąś formę transmisji rozgłoszeniowej lub multiemisji.
Dla dd
metody można prawdopodobnie łańcuchowe netcat
+ tee
+ dd
procesów na każdym komputerze tak:
- Maszyna źródło
cat
/ pv
/ dd
s danych przez nc
do urządzenia docelowego 1.
- Maszyna docelowa 1
nc
nasłuchuje danych z maszyny źródłowej i tee
przesyła je strumieniowo, przez co z kolei wysyła je do dd
(i tak dalej na dysk) i inny nc
proces, który wysyła do maszyny docelowej 2.
- Maszyna
nc
docelowa 2 nasłuchuje danych z maszyny docelowej 1 i tee
przesyła ją strumieniowo, przez którą z kolei przesyła ją dd
(i tak na dysk) oraz inny nc
proces, który wysyła do maszyny docelowej 3.
- i tak dalej, aż do ostatniego komputera, który właśnie
nc
pobiera dane z poprzedniego komputera i wysyła je na dysk za pośrednictwem dd
.
W ten sposób potencjalnie korzystasz z pełnej przepustowości sieci, zakładając, że Twój przełącznik i karty sieciowe wynegocjowały łącze pełnego dupleksu. Zamiast maszyny źródłowej wysyłającej 10 kopii danych (przy założeniu 10 maszyn docelowych) każda z nich jest ograniczona do 1/10 przepustowości wychodzącej, którą wysyła tylko 1. Każda maszyna docelowa bierze jedną kopię danych i wysyła ją jeszcze raz. Być może trzeba dostosować ustawienia rozmiarze bufora pv
, nc
i dd
zbliżyć się do najlepszej praktycznej wydajności.
Jeśli jednak znajdziesz jakieś oprogramowanie obsługujące tylko multiemisję, byłoby to znacznie łatwiejsze (i prawdopodobnie trochę szybsze)! Ale powyższe jest rodzajem zhackowanego rozwiązania, które może być wystarczająco głupie, aby spróbować ...
Edytuj ponownie
Kolejna myśl. Jeśli obraz dysku dobrze się kompresuje (co będzie, jeśli jego duże fragmenty są pełne zer), przepustowość wychodzącej maszyny źródłowej nie musi stanowić problemu, nawet jeśli jest wysyłana do wielu miejsc docelowych jednocześnie. Najpierw skompresuj obraz, prześlij go wszędzie za pomocą tee
+ nc
i rozpakuj w miejscach docelowych (sieć-> nc
-> dekompresor-> dd
-> dysk).