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 🙂