Pełna kopia DD z dysku twardego na dysk twardy


34

PYTANIE ORYGINALNE:

Jeśli mam 2 identyczne dyski twarde o następujących właściwościach:

  • SATA 6.0 Gb / s
  • 5400 rpm
  • 3 TB

Jak długo powinna trwać pełna kopia dd?

Do tej pory działał przez 5 godzin i nadal działa ...

Korzystam z systemu Linux Ubuntu 12.04 64bit, a używane polecenie to:

dd if=/dev/sdb of=/dev/sdc

AKTUALIZACJA: 1

Teraz widzę postęp, a kopiowanie 430 GB zajęło ponad 6 godzin. Dysk twardy ma pojemność 3 TB ...

Czy nie ma szybszego sposobu na zrobienie tego?


AKTUALIZACJA: 2

Wydaje się to znacznie lepsze niż wcześniej (dzięki Groxxda za sugestie):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ETA wynosi około 9 godzin dla 3 TB, podczas gdy zanim osiągnie 430 GB po 6 godzinach, więc sądzę, że zajęłoby to około 36 godzin przy użyciu poprzedniego polecenia.


Spróbuj pobrać statystyki procesu: wysłanie sygnału USR1 do działającego procesu „dd” powoduje wydrukowanie statystyk we / wy do standardowego błędu, a następnie wznowienie kopiowania. $ dd if = / dev / zero of = / dev / null & pid = $! $ kill -USR1 $ pid Sprawdź swoją stronę podręcznika dla aktualnego sygnału, ponieważ różni się on dla różnych implementacji dd.
groxxda

@Groxxda, nie mam pojęcia, jak to zrobić.
oshirowanen

1
Używa GNU dd SIGUSR1, a BSD dd używaSIGINFO
groxxda

Co masz na myśli przez „podłączony do tego samego kabla sata”? Czy używasz jakiegoś mnożnika portów? (Jeśli osiągniesz prędkość transferu 150 MB / s, powinno to zająć 5-6 godzin, ale myślę, że połowa z tego jest bardziej realistyczna.)
groxxda

1
Możesz przyspieszyć ten proces, określając inny (większy) rozmiar bloku ( bs=argument na dd). Rozważ także podłączenie każdego dysku twardego do własnego portu SATA.
groxxda

Odpowiedzi:


58

ddbył przydatny w dawnych czasach, kiedy ludzie używali taśm (gdy liczyły się rozmiary bloków) i kiedy prostsze narzędzia, takie jak, catnie były bezpieczne dla binarnych.

Obecnie dd if=/dev/sdb of=/dev/sdcjest to po prostu skomplikowany, podatny na błędy, powolny sposób pisania cat /dev/sdb >/dev/sdc. Mimo ddże jest przydatny w przypadku niektórych stosunkowo rzadkich zadań , jest o wiele mniej przydatny niż liczba samouczków, w których można by w to uwierzyć. Nie ma magii dd, magia jest cała /dev/sdb.

Twoje nowe polecenie sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128Kjest znów niepotrzebnie powolne i skomplikowane. Dane są odczytywane jednocześnie 128kB (co jest lepsze niż dddomyślnie 512B, ale nie tak dobre jak nawet większe wartości). Następnie przechodzi przez dwie rury, zanim zostanie napisany.

Użyj prostszego i szybszego catpolecenia. (W niektórych testach porównawczych, które zrobiłem kilka lat temu pod Linuksem, catbył szybszy niż cpw przypadku kopiowania między różnymi dyskami i cpbył szybszy niż ddprzy dowolnym rozmiarze bloku; ddprzy dużym rozmiarze bloku był nieco szybszy podczas kopiowania na ten sam dysk.)

cat /dev/sdb >/dev/sdc

Jeśli chcesz uruchomić to polecenie sudo, musisz dokonać przekierowania jako root:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Jeśli potrzebujesz raportu postępu, ponieważ używasz Linuksa, możesz łatwo go uzyskać, odnotowując PID catprocesu (powiedzmy 1234) i patrząc na pozycję jego deskryptora pliku wejściowego (lub wyjściowego).

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

Jeśli potrzebujesz raportu postępu, a twój wariant unixa nie zapewnia łatwego sposobu uzyskania pozycji deskryptora pliku, możesz zainstalować i używać pvzamiast niego cat.


W przypadku dużych bloków dziwne jest to, że wąskim gardłem jest dysk, więc co robi catszybciej niż dd? Czy to możliwe, że catużywa pamięci podręcznej?
Emmanuel,

1
@Gilles, dzięki za odpowiedź. Mam jeszcze pięć dysków 3 TB do sklonowania, a następnie wypróbuję opcję cat. O ile wiem, nowa komenda dd zajmie kolejne 3 godziny, w sumie około 11 godzin. Jeśli podejście kota jest szybsze niż 11 godzin dla drugiego dysku twardego o pojemności 3 TB, zastosuję tę metodę dla pozostałych dysków.
oshirowanen

2
@Gilles, więc żeby otrzymać raport z postępu, czy używam sudo sh -c 'pv /dev/sdb >/dev/sdc'zamiast sudo sh -c 'cat /dev/sdb >/dev/sdc'?
oshirowanen

1
@oshirowanen Tak, użyj pvtam, gdzie chcesz cat.
Gilles 'SO - przestań być zły'

1
@unhammer No! Skopiowałbyś każde urządzenie jeden po drugim, np cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. Łączenie dwóch części nie ma sensu. Jeśli chcesz zmienić strukturę woluminu btrfs, aby zmienić go z dwóch podwoluminów na jeden, musisz użyć narzędzi btrfs, aby zmienić strukturę, lub podobnie jak w przypadku utworzenia nowego systemu plików o pożądanej strukturze i skopiowania plików .
Gilles „SO- przestań być zły”

7

dddomyślnie używa bardzo małego rozmiaru bloku (512 bajtów). Powoduje to znaczne obciążenie (jeden read()i write()wywołanie systemowe na każde 512 bajtów).

Idzie o wiele szybciej, gdy używasz większego rozmiaru bloku. Optymalne prędkości zaczynają się w bs=64kprzybliżeniu. Większość ludzi używa jeszcze większego, bs=1Maby stał się czytelny dla ludzi (kiedy ddpowie, że jest kopiowany 1234 blocks, wiesz, że to 1234 MiBnie robi żadnej matematyki). Używanie jeszcze większych bloków raczej nie spowoduje zwiększenia prędkości, tylko większe zużycie pamięci.

Zatem polecenie powinno brzmieć:

dd bs=1M if=/dev/sdb of=/dev/sdc

Jeśli masz już wolne dddziałanie, możesz je przerwać i wznowić z szybszą ddinstancją. W tym celu ważne jest, aby wiedzieć, jak daleko już postępowała kopia. ddzwykle drukuje postęp po anulowaniu lub możesz wysłać USR1sygnał podczas działania, aby wydrukować postęp.

kill -USR1 $(pidof dd)

Na przykład, jeśli skopiowano więcej niż 1234MiB, możesz wznowić na pozycji, 1234MiBużywając:

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

Jeśli skopiowano mniej niż 1234MiB, Twoja kopia będzie niekompletna. Jeśli skopiował więcej 1234MiB, skopiuje niektóre już skopiowane części, co zwykle nie wyrządza żadnej szkody. Więc jeśli masz wątpliwości, powinieneś wybrać wartość nieco mniejszą niż to, co Twoim zdaniem zostało już skopiowane.


5

Pobieranie statystyk dotyczących trwającego procesu dd

Możesz użyć killpolecenia z odpowiednim sygnałem, aby ddwygenerować statystyki wyjściowe do standardowego błędu.
Ze strony podręcznika GNU dd:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

Najpierw sprawdź poprawność sygnału na stronie podręcznika, ponieważ może on różnić się w różnych implementacjach dd: (BSD dd używa SIGINFO).

Przyspieszenie procesu

  1. Podłącz każdy dysk twardy do własnego portu SATA, aby dane mogły być odczytywane z jednego urządzenia i zapisywane na drugim w tym samym czasie.
  2. Użyj odpowiedniego rozmiaru bloku za pomocą bs=argumentu. Spójrz na ten wątek na superużytkowniku i wypróbuj kilka wartości dla siebie.
  3. Używaj osobnych ddwywołań do czytania i pisania, a następnie podłącz je za pomocą potoku ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M).
    Jeśli to zrobisz i określisz rozmiar bloku, upewnij się, że używasz tego samego rozmiaru bloku przy każdym wywołaniu.
  4. Możesz wypróbować inne optymalizacje, takie jak directargument.
  5. Upewnij się, że dyski twarde nie są zamontowane, ponieważ może to spowodować uszkodzenie kopii.

0

Czy próbowałeś „gparted”? Możesz dosłownie skopiować i wkleić partycję z jednego dysku na inny i odpowiednio zmienić jej rozmiar w razie potrzeby. Otrzymasz szybkość transferu i pozostały czas. Używa „e2image” pod spodem dla partycji linuksowych.


0

Istnieje komercyjne oprogramowanie o nazwie HDClone . Jest licencjonowany jako darmowy i komercyjny. Każda wersja może utworzyć bootowalny pendrive lub DVD, a także kopiować dyski. Podłącz źródłowy i docelowy dysk HD i postępuj zgodnie z instrukcjami opartymi na GUI.

Darmowy będzie przesyłany z prędkością około 80 MB / s, podczas gdy wersje płatne mogą działać znacznie szybciej. W systemach plików NTFS i FAT wersje płatne można skonfigurować do klonowania tylko zajętych bitów dysku HD, co znacznie zwiększa prędkość każdego klonu.


(1) Czy jesteś powiązany z tym produktem? (2) Gdzie możemy to zdobyć?
Scott,

1
Lub możesz po prostu użyć „cat / dev / sdx> / dev / sdy” za darmo ...
HörmannHH
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.