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 ddbę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 catuzyskać 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 teejak 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 ddmetody można prawdopodobnie łańcuchowe netcat+ tee+ ddprocesów na każdym komputerze tak:
- Maszyna źródło
cat/ pv/ dds danych przez ncdo urządzenia docelowego 1.
- Maszyna docelowa 1
ncnasłuchuje danych z maszyny źródłowej i teeprzesyła je strumieniowo, przez co z kolei wysyła je do dd(i tak dalej na dysk) i inny ncproces, który wysyła do maszyny docelowej 2.
- Maszyna
ncdocelowa 2 nasłuchuje danych z maszyny docelowej 1 i teeprzesyła ją strumieniowo, przez którą z kolei przesyła ją dd(i tak na dysk) oraz inny ncproces, który wysyła do maszyny docelowej 3.
- i tak dalej, aż do ostatniego komputera, który właśnie
ncpobiera 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, nci ddzbliż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+ nci rozpakuj w miejscach docelowych (sieć-> nc-> dekompresor-> dd-> dysk).