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.
SIGUSR1
, a BSD dd używaSIGINFO
bs=
argument nadd
). Rozważ także podłączenie każdego dysku twardego do własnego portu SATA.Odpowiedzi:
dd
był przydatny w dawnych czasach, kiedy ludzie używali taśm (gdy liczyły się rozmiary bloków) i kiedy prostsze narzędzia, takie jak,cat
nie były bezpieczne dla binarnych.Obecnie
dd if=/dev/sdb of=/dev/sdc
jest to po prostu skomplikowany, podatny na błędy, powolny sposób pisaniacat /dev/sdb >/dev/sdc
. Mimodd
ż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 magiidd
, 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=128K
jest znów niepotrzebnie powolne i skomplikowane. Dane są odczytywane jednocześnie 128kB (co jest lepsze niżdd
domyś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
cat
polecenia. (W niektórych testach porównawczych, które zrobiłem kilka lat temu pod Linuksem,cat
był szybszy niżcp
w przypadku kopiowania między różnymi dyskami icp
był szybszy niżdd
przy dowolnym rozmiarze bloku;dd
przy dużym rozmiarze bloku był nieco szybszy podczas kopiowania na ten sam dysk.)Jeśli chcesz uruchomić to polecenie
sudo
, musisz dokonać przekierowania jako root:Jeśli potrzebujesz raportu postępu, ponieważ używasz Linuksa, możesz łatwo go uzyskać, odnotowując PID
cat
procesu (powiedzmy 1234) i patrząc na pozycję jego deskryptora pliku wejściowego (lub wyjściowego).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ć
pv
zamiast niegocat
.źródło
cat
szybciej niżdd
? Czy to możliwe, żecat
używa pamięci podręcznej?sudo sh -c 'pv /dev/sdb >/dev/sdc'
zamiastsudo sh -c 'cat /dev/sdb >/dev/sdc'
?pv
tam, gdzie chceszcat
.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 .dd
domyślnie używa bardzo małego rozmiaru bloku (512 bajtów). Powoduje to znaczne obciążenie (jedenread()
iwrite()
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=64k
przybliżeniu. Większość ludzi używa jeszcze większego,bs=1M
aby stał się czytelny dla ludzi (kiedydd
powie, że jest kopiowany1234 blocks
, wiesz, że to1234 MiB
nie 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ć:
Jeśli masz już wolne
dd
działanie, możesz je przerwać i wznowić z szybsządd
instancją. W tym celu ważne jest, aby wiedzieć, jak daleko już postępowała kopia.dd
zwykle drukuje postęp po anulowaniu lub możesz wysłaćUSR1
sygnał podczas działania, aby wydrukować postęp.Na przykład, jeśli skopiowano więcej niż
1234MiB
, możesz wznowić na pozycji,1234MiB
używając:Jeśli skopiowano mniej niż
1234MiB
, Twoja kopia będzie niekompletna. Jeśli skopiował więcej1234MiB
, 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.źródło
Pobieranie statystyk dotyczących trwającego procesu dd
Możesz użyć
kill
polecenia z odpowiednim sygnałem, abydd
wygenerować statystyki wyjściowe do standardowego błędu.Ze strony podręcznika GNU dd:
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
bs=
argumentu. Spójrz na ten wątek na superużytkowniku i wypróbuj kilka wartości dla siebie.dd
wywoł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.
direct
argument.źródło
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.
źródło
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.
źródło