Muszę skopiować jeden dysk na inny. Próbowałem z poniższym poleceniem i skopiowanie 1 TB dysku w federo zajmuje prawie dzień.
dd if=/dev/sda of=/dev/sdb
Próbowałem tego samego na systemie Unix (HP-UX) z poniższym poleceniem i wykonuje się to w ciągu kilku godzin
dd if=/dev/sda of=/dev/rdsk
Jakiej alternatywy mogę użyć do szybszego kopiowania z dysku na dysk?
cp /dev/sda /dev/sdb
lub (pv /dev/sda > /dev/sdb
aby uzyskać pasek postępu) byłoby znacznie szybsze. Dlaczego miałbyśdd
tu skorzystać ?dd
byłoby użyteczne tylko z rzeczy, jakconv=sync,noerror
na dyski uchwyt z błędami, ale nawet wtedy byłoby więcej sensu używać rzeczy jakddrescue
zamiast (patrz takżepv
„s-E
opcja).cat
może być jeszcze szybszy, ale różnica nie jest aż tak dramatyczna (może większa w przypadku urządzenia z urządzeniem niż pliku z plikiem, jak w moim eksperymencie).dd
pułapce nr 1Odpowiedzi:
dd
ma wiele (dziwnych) opcji, patrz dd (1) .Powinieneś jawnie podać rozmiar bufora, więc spróbuj
IIRC, domyślny rozmiar bufora to tylko 512 bajtów. Powyższe polecenie ustawia go na 16 megabajtów. Możesz spróbować czegoś mniejszego (np.
bs=1M
), Ale powinieneś użyć więcej niż domyślny (szczególnie na najnowszym sprzęcie dyskowym z sektorami 4K bajtów, tj. Advanced Format ). Naiwnie zalecam moc dwóch, która jest co najmniej megabajt.Przy domyślnym rozmiarze bufora 512 bajtów (ale mogę się bardzo mylić) sprzęt wymaga od jądra przesłania 4K dla każdego bloku 512 bajtów.
W związku z tym strony
rdsk
podręcznika sd (4) mówią:Zwiększenie rozmiaru bufora dd zapewni większą wydajność operacji odczytu i zapisu. Teraz wszystkie dyski mają sprzętowy bufor odczytu / zapisu. Ale jeśli zwiększysz rozmiar bufora dd bardziej niż bufor sprzętowy, jego wydajność spadnie, ponieważ dd będzie czytać z pierwszego dysku do bufora, gdy drugi dysk zapisze wszystko z własnego bufora sprzętowego. Musisz ustawić
bs
opcję polecenia dd za każdym razem inną wartość dla różnych urządzeń.źródło
cat
to samo zrobiło (w przypadku transferu systemu plików do systemu plików bezpośredni blok do bloku może mieć inną charakterystykę wydajności). Różnica jednak nie była dramatyczna./dev/rdiskX
jako cel podczas wykonywaniadd
.status=progress
że wydrukuje cały postęp operacji.Wiele lat temu w Unix-land
dd
był wymagany sposób na skopiowanie urządzenia blokowego. Jest to wiedza kultowa, mimo że (przynajmniej w systemach opartych na Linuksie)cat
jest prawie zawsze szybsza niżdd
.Jednak nawet w przeszłości przyzwoity rozmiar bloku pomógł zmniejszyć liczbę (powolnych) wywołań systemowych, biorąc pod uwagę, że każde wywołanie systemowe wyzwalało operację We / Wy. Domyślny rozmiar bloku to 512 bajtów (jeden sektor dysku). Zebranie wielu bloków dysku razem w jednym odczycie było - i jest - również dopuszczalne. W tym przykładzie użyto bloku o wielkości 32 MB:
Jednak w obecnych systemach opartych na systemie Linux dyski można najskuteczniej skopiować za pomocą prostego
cat
(Jak zauważono w komentarzach do twojego pytania,
pv
można je zastąpićcat
i da ci wskazanie postępu i przepustowości.)źródło
Zasadniczo
dd
można tego uniknąć na korzyść niektórych alternatyw. Istnieje kilka dobrych powodów, abyddrescue
zamiast tego używać GNU . W Ubuntu możesz zainstalować go za pomocą:i po prostu
ddrescue
w użyciu. Zauważ, że inaczej niż nazwa pakietu, plik wykonywalny nie ma inicjaług
.Korzystanie z niego jest tak proste, jak:
Plik dziennika (o dowolnej nazwie) umożliwia wstrzymywanie / zatrzymywanie i ponowne uruchamianie bez ponawiania poprzedniej pracy, co jest przydatne podczas wykonywania dużych klonów lub odzyskiwania dysków. Domyślnie wyświetla postęp, aktualną prędkość kopiowania, średnią prędkość kopiowania i liczbę znalezionych uszkodzonych bloków.
Wykorzystuje rozsądne wartości domyślne dla rozmiaru bloku, więc szybkość kopiowania jest zawsze tak duża, jak to urządzenie może obsłużyć, przynajmniej według mojego doświadczenia (sklonowałem przy nim setki dysków, wszystkich rozmiarów i typów).
Często dyski, które zaczynają ulegać awarii, mają problemy z prędkością, takie jak sporadyczne spowolnienia, niska średnia prędkość, nagłe długie przerwy (złe sektory) lub całkowite resetowanie (poważne błędy powierzchni).
ddrescue
może pomóc zidentyfikować wszystkie powyższe i zrestartować klon (pod warunkiem, że podałeś plik dziennika), nawet jeśli dysk sam się resetuje.źródło
Bardzo miłe pytanie. Surowy interfejs jest zaimplementowany w niektórych systemach uniksowych (tru64, hpux, solaris), ale nie w Linuksie. Surowy interfejs przyspiesza przesyłanie, ponieważ uniksowe operacje we / wy są pomijane. Interfejs blokowy (
/dev/dsk
lub/dev/disk
) jest wolniejszy, ponieważ wykorzystuje system unix I / O. Aby przyspieszyćdd
(gnu dd can) użyjbs=30M
lub wbs=20M
zależności od twojego sprzętu. Krótka odpowiedź brzmi: NIE, nie jest ona wdrożona, przynajmniej o ile mi wiadomo. Używam Linuksa od czasów jądra 2.2 i nigdy wcześniej nie byłrdsk
używany w Uniksie.źródło