Klonowanie jednego dysku na wiele dysków jednocześnie


12

Szukam sposobu klonowania pojedynczego dysku na więcej niż jeden dysk w tym samym czasie.

Przygotowałem obrazy systemowe na dyskach 1 TB, a klonowanie jednego dysku na drugi zajmuje prawie 2 godziny, a następnie rośnie wykładniczo, aby sklonować 30 dysków.

Gdyby można było sklonować jeden dysk na więcej niż jeden cel, znacznie uprościłoby to całą procedurę.

Czy jest coś, co uniemożliwia ten rodzaj operacji? Mam na myśli, czy istnieje jakiś szczególny powód, dla którego każde oprogramowanie do klonowania dysku, o którym wiem, obsługuje tylko jeden dysk docelowy?

Dzięki!

Odpowiedzi:


17

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:

  1. Maszyna źródło cat/ pv/ dds danych przez ncdo urządzenia docelowego 1.
  2. 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.
  3. 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.
  4. 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).


Dziękujemy za dogłębne wyjaśnienie procesu. To było naprawdę pomocne. Obecnie badam opcje klonowania sieci (przy użyciu multiemisji), a jeśli to się nie powiedzie, zbadam jeszcze trochę ten wektor DD.
mr.b

Nie powiedziałeś, że dyski zostały podłączone do różnych komputerów ... co czyni wszystko zupełnie innym!
marcusw

Jest to najbliższe zarówno komputerowi lokalnemu, jak i sieci komputerów w trybie duplikacji jeden do wielu jednocześnie. Dziękujemy za szczegółowe wyjaśnienie!
mr.b

W przypadku opcji klonowania sieciowego opartych na systemie Linux warto rozważyć Clonezilla. Może klonować za pośrednictwem multiemisji, a także kilku lokalnych opcji klonowania, w tym DD.
user35060

5

Pierwsza odpowiedź w Google sugerowana (w systemie Linux): dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde)gdzie / dev / sdb to dysk twardy, który chcesz sklonować, a / dev / sdc, / dev / sdb i / dev / sde to dyski do klonowania (możesz dodaj tyle, ile chcesz, po prostu skopiuj). LiveCD powinien to zrobić i pamiętaj, aby uważać na litery dysków!


1
Prawdziwe. Zanim zadałem to pytanie, przeprowadziłem kilka badań, ale byłem zainteresowany słyszeniem doświadczeń innych ludzi. DD jest bardzo małym narzędziem, ale: 1) nie ma świadomości faktycznej zawartości danych (kopiuje również puste miejsce sektor po sektorze), i 2) ktoś zgłosił problemy z wydajnością podczas klonowania na więcej niż jednym dysku w ten sposób. Jeszcze jakieś pomysły?
mr.b

„[...] gdzie / dev / sdb to dysk twardy, który chcesz sklonować, a / dev / sdc, / dev / sdb i / dev / sde to dyski do klonowania na [...]” ---> „[...] i pamiętaj, aby uważać na litery dysku!” : DI Zgadzam się !!!
dag729

1
@ mr.b: 1) Moim zdaniem, kopia bit po bicie jest lepsza niż przyjmowanie potencjalnie niebezpiecznych skrótów. 2) Tak, najlepszy sposób, jaki mogę wymyślić, to zepsuć źródło dd, aby skopiować go do więcej niż jednej lokalizacji jednocześnie, ale szybsze byłoby skopiowanie wolniej.
marcusw

Jesteś tego pewien of=-? Po prostu tworzy -dla mnie plik wyjściowy, a nie wyjście na standardowe wyjście. Można to rozwiązać poprzez pominięcie ofopcji.
stamtąd

Używanie „tee” w ten sposób nie będzie działać. Zobacz: joshhead.wordpress.com/2011/08/04/…
user35060

2

Wiem tylko, że istnieją pewne rzeczy nazywane powielaczami dysków twardych. Są to specjalne urządzenia do klonowania (duplikowania) dysków HD na wielu dyskach jednocześnie. Może ten artykuł ci pomoże.


Tak, jestem świadomy istnienia tych urządzeń; są jednak tanie, szczególnie w mojej sprawie o zerowym budżecie :( Dziękuję za ich wzmiankę.
mr.b

1
Chociaż nie jest to całkowicie zerowy koszt, jeśli masz maszynę zapasową (z przyzwoitym zasilaczem), którą możesz dowodzić i stać Cię na kilka tanich kontrolerów SATA (w mojej maszynie domowej jest dwuportowy, który kosztuje dziesięć centów) możesz stworzyć własną prostą maszynę do powielania i użyć metody dd + tee lub innego oprogramowania, jeśli możesz znaleźć takie, które obsługują „odczyt z jednego źródła, pisanie do wielu” wydajnie.
David Spillett

(Właśnie to założyłem, że próbujesz zrobić w mojej pierwotnej odpowiedzi.)
David Spillett

1

Ponieważ nikt jeszcze o tym nie wspominał, wspomnę o Clonezilli i jej Server Edition. (niestety nie wydaje się, aby istniał bezpośredni link do niego, ale możesz znaleźć „Server Edition” w lewym menu nawigacyjnym strony ...)

Miałem wielkie szczęście z Clonezilla Live Edition, ale jeszcze nie wypróbowałem Server Edition. Wygląda jednak dość gładko.


Popieram Clonezillę jako coś, co wydaje się być dla ciebie dobrym rozwiązaniem na podstawie twoich opinii.
user35060


1

Znalazłem 2 przydatne linki w tym zakresie. Jeden użył dd bez kota do wykonania 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

Zostało to dodatkowo rozszerzone o kolejny link, który pokazuje wskaźnik postępu:

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

Chciałem rozwinąć odpowiedź Davida

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

drive.imageRzeczywiście może być inne urządzenie, jak/dev/sde

Po drugie, ddpolecenie będzie działać o wielkości szybciej z odpowiednim bsustawieniem. Użyłem bs=64ki widziałem 6-krotny wzrost prędkości kopiowania partycji 40 Gig, od 1 godziny do 10 minut.

Ostateczne polecenie będzie wyglądać następująco:

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

Jeśli źródłem jest dysk zamiast pliku, będzie on wyglądał następująco:

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

Równoległe duplikowanie dysku twardego jest częstym zadaniem w kryminalistyce komputerowej. dc3dd( strona podręcznika ) to dedykowane narzędzie, które umożliwia równoległe kopiowanie jednego źródła do wielu miejsc docelowych i działa jak UNIX dd, z of=dozwolonymi wieloma opcjami.

Możliwe jest również włączenie haszowania woluminu źródłowego i kopii w celu sprawdzenia ich integralności.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.