Przegraj (uszkodzony) dysk na dysk używając Linuxa

Scenariuszy do rozwiązania tego tematu jest sporo. Przetrenowałem ostatnio dwa.
A zaczęło się od wyzwania – dostałem stary dysk HDD, który trzeba było sklonować na SSD. Dysponowałem laptopem i jednym adapterem SATA<->USB. Niestety nie mogłem przez to przegrać danych bezpośrednio z dysku na dysk.

Podejście pierwsze – Zrób spakowaną kopię dysku do pliku, a następnie wypakuj na nowe urządzenie.

Zdecydowałem się na pakowanie w locie, ponieważ chciałem, aby obraz klonowanego dysku zajmował możliwie mało miejsca. Mam bardzo dobre doświadczenia z pakowaniem danych programem zstd. Postanowiłem więc z niego skorzystać. Stworzenie spakowanej kopii dysku do pliku:

$  zstd -16 -v -T0 </dev/sdX >/katalog/backup.zst
(-16 <- poziom kompresji, -v <- opowiadaj co robisz, -T0 <- policz ile jest cpu w komputerze i używaj ich)

Wypakowanie na nowy dysk:

$ zstdcat -v /katalog/backup.zst >/dev/sdX

    Wszystko by było super, gdyby nie okazało się, że dysk źródłowy ma bad sectory.

    Podejście drugie – lekko uszkodzone źródło

    Podejście drugie – Skorzystaj z ddrescue

    W moim przypadku źródłowy dysk został wyjęty z działającego komputera. Założyłem więc, że utrata kilku sektorów danych nikomu nie zaszkodzi. Postanowiłem użyć ddrescue – narzędzia, które potrafi ponowić próbę odczytu danych (-r3 <- trzykrotnie), ale też zignorować błędy i kopiować dalej to co warte uratowania. Nowa komenda to:

    $ ddrescue -d -r3 /dev/sdX /katalog/backup.img /katalog/backup.logfile

    A następnie wgrałem tak przygotowany obraz na nowy dysk:

    $ ddrescue -f /katalog/backup.img /dev/sdX /katalog/clone.logfile

    Mission accomplished 🙂

    Dzięki za komentarz!