Pojawiło się wiele pytań dotyczących narzędzi do klonowania dysku i dd
zostało zasugerowane przynajmniej raz. Już rozważałem używanie dd
siebie, głównie ze względu na łatwość użycia i to, że jest łatwo dostępny w prawie wszystkich startowych dystrybucjach Linuksa.
Jaki jest najlepszy sposób dd
na klonowanie dysku? Przeprowadziłem szybkie wyszukiwanie w Google, a pierwszy wynik był najwyraźniej nieudaną próbą . Czy jest coś, co muszę zrobić po użyciu dd
, tj. Czy jest coś, czego NIE MOŻNA odczytać za pomocą dd
?
disk-image
dd
falstro
źródło
źródło
dd
opcjami pomijania złych bloków - co jest niezbędne podczas klonowania dysków w celu odzyskania. Dodałem lepszą odpowiedź, która może klonować dyski ze złymi blokami:dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror
Odpowiedzi:
dd jest z pewnością najlepszym narzędziem do klonowania, stworzy 100% replikę po prostu za pomocą następującego polecenia. Nigdy nie miałem z tym żadnych problemów.
Należy pamiętać, że podczas klonowania każdego bajtu nie należy go używać na używanym napędzie lub partycji. Zwłaszcza aplikacje, takie jak bazy danych, nie radzą sobie z tym bardzo dobrze i może dojść do uszkodzenia danych.
źródło
dd if=/dev/sda | dd of=/dev/sdb
. W moich testach uruchomienie polecenia bez potoku dało mi przepustowość ~ 112 kb / s. Z rurą mam ~ 235kb / s. Nigdy nie spotkałem się z żadnymi problemami z tą metodą. Powodzenia!Aby zaoszczędzić miejsce, możesz skompresować dane wygenerowane przez dd za pomocą gzip, np .:
Możesz przywrócić dysk za pomocą:
Aby zaoszczędzić jeszcze więcej miejsca, wcześniej defragmentuj dysk / partycję, którą chcesz sklonować (w razie potrzeby), a następnie wyzeruj całe pozostałe nieużywane miejsce, ułatwiając kompresji gzip:
Poczekaj chwilę, dd ostatecznie nie powiedzie się z komunikatem „dysk pełny”, a następnie:
Możesz również uruchomić proces dd w tle, aby zgłosić stan, wysyłając mu sygnał za pomocą polecenia kill, np .:
Sprawdź swój system - powyższa komenda dotyczy Linuksa, OSX i BSD Komendy dd różnią się sygnałami, które akceptują (używa OSX
SIGINFO
- możesz nacisnąć Ctrl+, Taby zgłosić status).źródło
kill -SIGUSR1 %1
, a polecenie dd OSX z radością przyjmuje SIGUSR1 ... bardzo przydatne, dzięki!Kill -SIGUSR1 1234
tego szukałem.dd if=/dev/hdb | gzip -c > /image.img.gz
:?UWAGA : uruchomienie systemu plików na żywo może uszkodzić pliki. Powód jest prosty, nie rozumie, co może się dziać w systemie plików i nie próbuje go złagodzić. Jeśli zapis jest częściowo w toku, otrzymasz zapis częściowy. Zwykle nie jest to dobre dla rzeczy i ogólnie fatalne dla baz danych. Ponadto, jeśli zepsuć typo-skłonnej jeśli i od parametrów, biada wam. W większości przypadków rsync jest równie skutecznym narzędziem napisanym po nadejściu wielozadaniowości i zapewni spójne widoki poszczególnych plików.
Jednak DD powinien dokładnie uchwycić stan bitów odmontowanego napędu. Programy ładujące, woluminy lvv, identyfikatory UUID i etykiety partycji itp. Upewnij się tylko, że masz dysk zdolny do dublowania docelowego bitu dysku przez bit.
źródło
sync
nie jest to odpowiedź na problemy z uszkodzeniem plików. Co się stanie, jeśli diamon lub coś zapisze więcej plikówsync
podczasdd
operacji?rsync
zapewni spójność danych wewnętrznych w docelowym systemie plików. Nie zapewni to spójności danych w plikach - aby to zrobić, musisz zablokować pliki, a wszelkie programy, które zapisują do plików, będą musiały przestrzegać tych blokad.Używając dd do klonowania dysku, który może zawierać uszkodzone sektory, użyj „conv = noerror, sync”, aby upewnić się, że nie zatrzyma się po napotkaniu błędu i wypełni brakujące sektory bajtami zerowymi. Zazwyczaj jest to pierwszy krok, który podejmuję, gdy próbuję odzyskać dane z uszkodzonego lub uszkodzonego dysku - pobierz kopię przed wykonaniem jakichkolwiek prób odzyskania, a następnie wykonaj odzyskiwanie na dobrym (sklonowanym) dysku. Zostawiam to narzędziu do odzyskiwania, aby poradziło sobie z pustymi sektorami, których nie można skopiować.
Może się również zdarzyć, że na szybkość dd może mieć wpływ ustawienie bs (rozmiar bloku). Zwykle próbuję bs = 32768, ale możesz przetestować go na własnych systemach, aby sprawdzić, co działa najszybciej. (Zakłada się, że nie musisz używać określonego rozmiaru bloku z innego powodu, np. Jeśli piszesz na taśmę.)
źródło
Aby sklonować dysk, wystarczy podać dane wejściowe i wyjściowe do dd:
Oczywiście, upewnij się, że masz odpowiednie uprawnienia do odczytu bezpośrednio z / dev / hdb (polecam działać jako root) i że / dev / hdb nie jest zamontowany (nie chcesz kopiować, gdy dysk jest zmieniane - dopuszczalne jest również montowanie jako tylko do odczytu). Po zakończeniu image.img będzie klonem bajt po bajcie całego dysku.
Istnieje kilka wad używania dd do klonowania dysków. Po pierwsze, dd skopiuje cały dysk, nawet pustą przestrzeń, a jeśli zrobione na dużym dysku może spowodować bardzo duży plik obrazu. Po drugie, dd nie zapewnia absolutnie żadnych wskazań postępu, co może być frustrujące, ponieważ kopiowanie zajmuje dużo czasu. Po trzecie, jeśli skopiujesz ten obraz na inne dyski (ponownie, używając dd), muszą one być tak duże lub większe niż oryginalny dysk, ale nie będziesz w stanie wykorzystać dodatkowego miejsca na dysku docelowym, dopóki nie zmień rozmiar swoich partycji.
Możesz także wykonać bezpośrednią kopię dysku na dysk:
ale nadal obowiązują powyższe ograniczenia dotyczące wolnego miejsca.
Jeśli chodzi o problemy lub problemy, dd, w przeważającej części, wykonuje doskonałą robotę. Jednak jakiś czas temu miałem dysk twardy, który miał wkrótce umrzeć, więc użyłem dd, aby spróbować skopiować informacje, które mogłem z niego wyłączyć, zanim całkowicie zmarł. Dowiedzieliśmy się wtedy, że dd nie radzi sobie dobrze z błędami odczytu - na dysku było kilka sektorów, których dd nie mógł odczytać, powodując, że dd zrezygnował i zatrzymał kopiowanie. W tym czasie nie mogłem znaleźć sposobu, aby powiedzieć dd, aby kontynuował pomimo napotkania błędu odczytu (choć wygląda na to, że ma takie ustawienie), więc spędziłem sporo czasu, ręcznie określając pominięcie i próbując przeskoczyć nieczytelne sekcje.
Spędziłem trochę czasu szukając rozwiązań tego problemu (po zakończeniu zadania) i znalazłem program o nazwie ddrescue , który według strony działa jak dd, ale kontynuuje czytanie, nawet jeśli napotka błąd. Nigdy tak naprawdę nie korzystałem z programu, ale warto to rozważyć, zwłaszcza jeśli dysk, z którego kopiujesz, jest stary, co może mieć złe sektory, nawet jeśli system wygląda dobrze.
źródło
conv=sync,noerror
by pomogło.conv=sync,noerror
opcje są niezbędne, pozwalają dd pominąć uszkodzone bloki i wyzerować je na obrazie więc rzeczy są ustawione prawidłowo. Rekwizyty dla niewielu osób, które coś o tym skomentowały.ddrescue
zapewnia wskaźnik postępu bez żadnych specjalnych opcji, możesz zatrzymać kopiowanie i wznowić od miejsca, w którym zostało przerwane.status=progress
Jeśli napęd źródłowy jest uszkodzony w ogóle, będziesz miał więcej szczęścia korzystając
dd_rhelp
zdd_rescue
(moje osobiste preferencje) lub GNUddrescue
.Powodem tego jest to, że przy błędach odczytu
dd
ciągle próbuje i próbuje i próbuje - potencjalnie długo czeka na przekroczenie limitu czasu.dd_rescue
robi mądre rzeczy, takie jak odczytanie błędu, a następnie wybranie miejsca na dysku i odczytanie wstecz do ostatniego błędu, idd_rhelp
jest w zasadziedd_rescue
menedżerem sesji - sprytne uruchamianie i wznawianiedd_rescue
uruchomień, aby znów było szybsze.Efektem końcowym
dd_rhelp
jest odzyskanie maksymalnych danych w minimalnym czasie. Jeśli przestanieszdd_rhelp
działać, ostatecznie wykona dokładnie to samo zadanie, codd
w tym samym czasie. Jeśli jednakdd
wystąpią błędy odczytu w bajcie 100 dysku 100 Gb, będziesz musiał długo czekać, aby odzyskać pozostałe 9 999 900 bajtów *, podczas gdydd_rhelp
+dd_rescue
znacznie odzyska większość danych.źródło
Dysk źródłowy nie może mieć żadnych zamontowanych systemów plików. Jako użytkownik będący w stanie odczytać urządzenie blokowe (działa root), uruchom „dd if = / dev / sda ....”
Jedną z ciekawszych rzeczy jest to, że tworzysz strumień bajtów ... i możesz z tym wiele zrobić: skompresuj go, wyślij przez sieć, podziel na mniejsze bloby itp.
Na przykład:
Ale mocniej:
Powyższe kopiuje skompresowany obraz źródłowego dysku twardego do zdalnego systemu, gdzie przechowuje go w ponumerowanych porcjach 2G, używając nazwy hosta źródłowego, jednocześnie informując Cię o postępach.
Zauważ, że w zależności od rozmiaru dysku, prędkości procesora na źródle, prędkości procesora na miejscu docelowym, prędkości sieci itp. Możesz pominąć kompresję lub wykonać kompresję po stronie zdalnej lub włączyć kompresję ssh.
źródło
Aby sklonować dysk, wystarczy podać dane wejściowe i wyjściowe w celu
dd
:Oczywiście, upewnij się, że masz odpowiednie uprawnienia do odczytu bezpośrednio z
/dev/hdb
(zalecam uruchomienie jako root), a/dev/hdb
to nie jest zamontowane (nie chcesz kopiować podczas zmiany dysku). Po zakończeniuhdb.img
będzie klonem bajt po bajcie całego dysku.dd
Klonowanie dysków ma kilka wad . Najpierwdd
skopiuje cały dysk, nawet puste miejsce, a jeśli zostanie wykonane na dużym dysku, może spowodować bardzo duży plik obrazu. Po drugie, niedd
zawiera absolutnie żadnych wskazówek dotyczących postępu, co może być frustrujące, ponieważ kopiowanie zajmuje dużo czasu. Po trzecie, jeśli skopiujesz ten obraz na inne dyski (ponownie, używając dd), muszą one być tak duże lub większe niż oryginalny dysk, ale nie będziesz w stanie wykorzystać dodatkowego miejsca na dysku docelowym, dopóki nie zmień rozmiar swoich partycji.Możesz także wykonać bezpośrednią kopię dysku na dysk:
ale nadal obowiązują powyższe ograniczenia dotyczące wolnego miejsca.
Pierwszą wadę można rozwiązać, gzipując dane podczas tworzenia kopii. Na przykład:
Drugą wadę można rozwiązać za pomocą narzędzia pipeview (
pv
). Na przykład:Nie znam sposobu na przezwyciężenie trzeciej wady.
Ponadto można przyspieszyć czas kopiowania, mówiąc
dd
o pracy z większymi porcjami danych. Na przykład:źródło
dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon
(Modulo dodatkowa inteligencja w warstwie systemu plików.)Kolejną przyjemną rzeczą, którą możesz zrobić z dyskami dd i ratunkowymi, jest kopiowanie danych przez sieć:
Możesz włożyć gzip do obu tych potoków, jeśli sieć nie jest lokalna. Aby uzyskać postęp, użyj
pv
. Aby netcat local_machine zakończył pracę po zakończeniu kopiowania, możesz dodać-w 5
lub coś takiego.źródło
> disk_backup.img
lub|dd of=/dev/sdb
czy coś innego, w zależności od tego, co chcesz zrobić. Zgaduję, że nie chcesz zrzucić obrazu dysku na standardowe wyjście.Należy pamiętać, że dd tworzy dokładną kopię , w tym całą pustą przestrzeń.
To znaczy:
Mam nadzieję, że to jest pomocne
źródło
Na przyszłość warto sprawdzić ddrescue . Kilka razy uratowało mi to dzień.
źródło
Kolejną wielką funkcją jest kopiowanie MBR, tabel partycji i rekordów rozruchowych.
Właśnie
i odwrotnie, kiedy piszesz. Polski z
fdisk
później.Czujesz się znacznie bezpieczniej, gdy masz kopię zapasową tabeli partycji.
Również migracja na inny dysk twardy (przy zmianie struktury partycji) sprawia przyjemność.
źródło
Jest to rodzaj taniego włamania, ale jest to szybki i brudny sposób monitorowania procesu DD.
Uruchom polecenie dd. Otwórz nową powłokę i wykonaj ps awx, aby znaleźć PID procesu dd. Teraz w nowym typie powłoki obserwuj -n 10 kill -USR1 {pid twojego procesu DD}
To nie zrobi nic w oknie wyjściowym zegarka, ale z powrotem w oryginalnej powłoce DD, DD zacznie generować raporty stanu co 10 sekund. Oczywiście możesz zmienić -n 10 w poleceniu watch na dowolny inny przedział czasowy.
Tachyon
źródło
watch
dostępnych i-USR1
zabija dd. Działa jednak następujące polecenie:while [ true ]; do killall -INFO dd; sleep 30; done
pv
poleceniem.Spowoduje to skopiowanie dysku i pominięcie bloków z błędami, co jest bardzo ważne.
Są to podstawowe i niezbędne opcje używania dd do klonowania lub ratowania dysku.
Nie chciałem publikować kolejnej odpowiedzi, ale nie było dobrych odpowiedzi z podstawowymi opcjami „conv = sync, noerror” wśród 25 już opublikowanych.
źródło
conv=sync,noerror
ponieważ pomija zbyt dużo danych dla każdego złego bloku. Te opcje są niezbędne do „klonowania odzyskiwania” i nie trzeba szukać ich w komentarzach. Najbardziej popularna odpowiedź jest odpowiednia, jeśli dyski nie mają złych bloków, np. Do klonowania nieskazitelnego dysku, ale nie do odzyskiwania.dd
przykład tutaj, a jednocześnie nadaje się do klonowania dysku wolnego od błędów. Dlatego uważam, że moja odpowiedź jest najlepsza w tym, jak „używać DD do klonowania dysku”. Nie dodałem informacji o monitorowaniu postępów, kompresji itp., Ponieważ chciałem to uprościć i skupić się na udzieleniu krótkiej odpowiedzi, która dobrze opisuje podstawy.Możesz spróbować czegoś takiego
aby pominąć wszystkie błędy i mieć dokładny klon partycji lub dysku twardego
źródło
dd dostarcza informacji o postępie - cóż, większość wersji w systemie Linux. Widziałem niektóre, które nie przypominają jednak uniksowego smaku.
Strona podręcznika mówi: Wysłanie sygnału USR1 do działającego procesu „dd” powoduje, że drukuje statystyki we / wy do standardowego błędu, a następnie wznawia kopiowanie.
Korzystam z tej funkcji regularnie.
źródło
Ktoś musiał to powiedzieć: wypróbuj Clonezilla (http: // clonezilla.org/)
Co dostajesz? Aby skopiować tylko używane części systemu plików. Clonezilla używa dd, grub, sfdisk, parted, partimage, ntfsclone i / lub partclone. W zależności od wybranych opcji.
Przyzwoitą dokumentację można znaleźć na stronie: http: // clonezilla.org/clonezilla-live/doc/
źródło
Jak kopiować za pomocą dd (w tym przypadku na zdalnym komputerze, ale ta sama zasada dotyczy kopii lokalnej), która pokazuje postęp.
Działa poprzez zapisanie pid poprzez deskryptor pliku 3 w / tmp / pid, który jest następnie wykorzystywany do kolejnych zabójstw z sygnałem USR1. Zmarszczką było przefiltrowanie wyniku postępu na stderr do tylko jednej linii poprzez filtrowanie stderr przez podpowłokę.
źródło
Najwięcej informacji opisano w poprzednich wstawionych przepisach, ale nie wszystkie zostały opisane.
W systemie Linux możesz sklonować dysk twardy lub partycję za pomocą polecenia dd. Uwaga, gdy popełnisz błąd, stracisz wszystkie swoje dane.
Po pierwsze, miejsce docelowe nie powinno być używane, po drugie źródło nie powinno być używane lub ponownie zamontowane w trybie tylko do odczytu. W przeciwnym razie kopia zostanie uszkodzona. Jeśli ponowny montaż jest niemożliwy, należy ustawić dysk rozruchowy (hdd / ssd / pendrive) na dowolną dystrybucję linux na żywo. Prever knoppix, ale to jest twój wybór. Jeśli jest to możliwe, możesz uruchomić system lub zmienić poziom systemu na 1, dla trybu pojedynczego użytkownika, lub możesz bezpośrednio zrestartować system w trybie pojedynczego użytkownika, jest to zależne od dystrybucji. Jeśli sklonujesz tylko jedną partycję, ta partycja powinna zostać odmontowana lub ponownie zamontowana w RO:
lub
Jeśli chcesz sklonować cały dysk twardy, musisz podłączyć lub ponownie zamontować wszystkie partycje.
Musisz zidentyfikować urządzenie źródłowe i docelowe. proszę spojrzeć na dmesg, tutaj są przechowywane wszystkie potrzebne informacje o urządzeniu, z dostawcą itp. Alternatywnie identyfikacja może być oparta na wielkości urządzenia, jeśli jest inna. Następnie miejsce docelowe powinno być takie samo lub większe niż źródło. musisz obliczyć źródło, na przykład: fdisk -l / dev / sda oprócz geometrii partycji (może istnieć GPT), pobierzesz: 1. całkowity rozmiar dysku wigh GB i bajty 2. geometria historyczna i całkowity numer sektora, bardzo ważne informacje 3. rozmiar bloku w bajtach, zwykle jest to 512.
na przykład:
następnie spróbujmy większy niż 512 dzielnik, mamy 41943040 sektorów fizycznych:
41943040/256 = 163840, bardzo dobrze, możemy wykonać zbiorczą kopię 256 sektorów. możemy więcej? spróbujmy: 41943040/1024 = 40960, myślę, że to wystarczy, wybierzemy ten. Policzmy rozmiar grupy sektorów: 512 (rozmiar sektora) * 1024 = 524288 bajtów eq 512K. Następnie możemy użyć parametru bs = 512 K lub mniej, ale podzielmy to przez 2 ^ x. Jest to dość praktyczne w przypadku nowoczesnych dysków twardych z dużą pamięcią podręczną. w przypadku starszych dysków ze znacznie mniejszą pamięcią podręczną wystarczy wartość 32 KB lub mniej.
Następnie po przygotowaniu możemy wykonać kopię: dd if = / dev / source_devide of = / dev / destination_device bs = 32K i kopiowanie zostanie wykonane. Zwróć uwagę, każdy błąd zastąpi importowane dane. W miejscu docelowym wszystko zostanie zastąpione.
Jeśli spróbujesz uratować dane na uszkodzonym dysku źródłowym, lepiej użyj rodzimego rozmiaru sektora, zwykle jest to 512 bajtów i dodaj opcję conv = notrunc. w przeciwnym razie dziury w źródle upuszczone przez uszkodzone sektory zostaną połączone przez przesunięcie sektora w miejscu docelowym. Spowoduje to uszkodzenie kopii z niewielką szansą na naprawę. wtedy polecenie będzie:
i długo czekaj, aż napęd i system zrezygnują i przejdą sektor po sektorze do końca.
dd to przydatne narzędzie do przenoszenia partycji w nowe miejsce. Po prostu stwórz partycję, zmień dd na nową partycję (może być większa, znacznie większa), a jeśli to możliwe, rozwiń skopiowany system plików do wypełnienia całej nowej partycji, ext3 / ext4 / xfs / zfs / btrfs mają tę funkcję. Na koniec musisz zmienić / etc / fstab, następnie umount / mount, jeśli to możliwe, lub zrestartować system.
Oczywiście możesz sklonować dowolny typ partycji. Polecenie dd nie sprawdza typu systemu plików, nie robi nic ze swoją strukturą. to polecenie może być przydatne do klonowania NTFS lub innych typów partycji.
Jest jakaś sztuczka. Jeśli nie ustawiłeś parametru, to dd umieści dane wyjściowe na swoim standardowym wyjściu. następnie możesz wykonać skompresowaną surową kopię dysku lub partycji, na przykład:
Oczywiście należy to zrobić offline. możesz to przywrócić:
, wówczas wszystkie dyski twarde sda zostaną zastąpione przez tę kopię zapasową, a wszystkie bieżące dane zostaną utracone. Możesz to zrobić również przy użyciu partycji Windows NTFS i używanego przez nią dysku twardego. Oczywiście możesz użyć innego polecenia kompresji, zależnie od twojego wyboru.
źródło
Możesz utworzyć skompresowany plik obrazu partycji (lub dysku) w locie za pomocą
bzip2
lubgzip
zamiastdd
. Jest to przydatne do przechowywania obrazów na nośnikach wymiennych:Jeśli dysk był wcześniej intensywnie używany, można zwiększyć kompresję, wypełniając całe nieużywane miejsce zerami przed obrazowaniem:
Aby przywrócić obraz na inny dysk, wystarczy:
źródło
Z jakiegoś powodu dd kończy się niepowodzeniem podczas obrazowania płyt CD ze ścieżkami audio. Musisz użyć cdrdao lub czegoś podobnego, aby uzyskać obraz + plik TOC.
źródło
Uwaga na temat prędkości: z mojego doświadczenia wynika, że dd jest dwa razy szybszy, jeśli podasz bs = 1024 zamiast domyślnego bs = 512. Zastosowanie jeszcze większego rozmiaru bloku nie daje zauważalnego przyspieszenia powyżej bs = 1024.
źródło
Jedną rzeczą, o której musisz wiedzieć, gdy dodajesz pełny dysk, jest to, że spowoduje to zastąpienie głównego rekordu rozruchowego dysku odbierającego. Zawiera tablicę partycji i inne istotne informacje. Jeśli nowy dysk nie jest taki sam jak stary dysk, może to tworzyć wszelkiego rodzaju tabele. Kopiowanie na partycje jest ogólnie bezpieczniejsze (a partycji wymiany nie trzeba kopiować)
źródło
Od wielu lat nie pełnię roli administratora, ale wiem, że „dd” jest odpowiednie. Z tej techniki korzystałem regularnie pod koniec lat 80. na komputerach Sun Sparc i 386i. Miałem jedno zamówienie klienta na ponad 30 systemów 386i z oprogramowaniem CAD, które było dystrybuowane na wielu taśmach QIC.
Zainstalowaliśmy na pierwszym komputerze, skonfigurowaliśmy aplikację, uruchomiliśmy sys-unconfig systemu SunOS, umieściliśmy dysk w pudełku na buty o innym adresie SCSI, a następnie przełączyliśmy na „dd” na pozostałe 30 dysków.
źródło
Jak inni wspomnieli powyżej, jednym z problemów związanych z klonowaniem zamontowanego systemu plików jest potencjalne uszkodzenie danych. To oczywiście nie dotyczy klonów z pełnym dyskiem, ale jeśli używasz LVM, możesz wykonać migawkę LogicalVolume i dd z migawki, aby uzyskać spójny obraz.
źródło
W przypadku woluminów NTFS wolę używać ntfsclone . Jest to część pakietu ntfsprogs .
źródło
Tylko ostrzeżenie dla początkujących, które należy powiedzieć: przynajmniej w niektórych wersjach bs = X oznacza, że pamięć do wielkości X zostanie dosłownie przydzielona. bs = 2 GB w systemie z 1 GB pamięci RAM i niewystarczającą zamianą spowoduje, że coś złego się stanie.
źródło