Najlepszy sposób na skopiowanie wszystkich plików, ignorowanie błędów?

36

Mam częściowo uszkodzony HD, którego nie można naprawić za pomocą Narzędzia dyskowego, ale można go zamontować tylko do odczytu, aby dane na nim były dostępne.

Próbuję skopiować całą zawartość do odzyskania na zapasowy dysk HD, ale każda metoda, którą próbuję, kończy się niepowodzeniem po napotkaniu błędu - pozostawiając pozostałe pliki bez kopiowania.

Finder - nie działa. SuperDuper - nie działa. Ditto (polecenie terminalu) - kończy się niepowodzeniem.

Miałem nadzieję, że Ditto załatwi sprawę, strona podręcznika Ditto mówi:

ditto zwraca 0, jeśli wszystko jest kopiowane, w przeciwnym razie niezerowe. ditto prawie nigdy się nie poddaje, woląc zgłaszać błędy po drodze. Komunikaty diagnostyczne zostaną wydrukowane z błędem standardowym.

Przesłałem do Apple błąd, który nie działa zgodnie z reklamą.

Jakieś inne pomysły?

radven
źródło
Zobacz stackoverflow.com/a/27637277 zamiast --ignore-errorsodpowiedzi poniżej.
spyle

Odpowiedzi:

28

Używam cp -Rfv sourcefile destinationfilez powodzeniem dość regularnie.

cp = kopia

R = utrzymuje hierarchie plików

f = jeśli istniejącego pliku docelowego nie można otworzyć, usuń go i spróbuj ponownie

v = pełny tryb, wyświetla pliki przesyłane w miarę postępu

plik źródłowy = dane, które chcesz skopiować

plik docelowy = katalog / dysk, na który chcesz skopiować

Pan Królik
źródło
3
Jak to ignoruje błędy na dysku źródłowym (patrz pytanie)?
nohillside
1
@patrix Nie „ignoruje” błędów, ale flaga „f” zmusza je, kopiując tylko nienaruszone dane. Podczas oglądania postępu (dzięki szczegółowej fladze) zobaczysz dane wyjściowe wzdłuż linii „dane nie zostały skopiowane z powodu błędu we / wy”, gdy napotka złe dane. Po wyświetleniu błędu przechodzi do następnego pliku bez udziału użytkownika. Scenariusz plakatu brzmi niezwykle podobnie, jak kilkadziesiąt razy, kiedy używałem tego polecenia do pobierania danych z płatkowych dysków / woluminów.
Pan Królik,
Czy istnieje sposób na skopiowanie uszkodzonego pliku z pewną postfiksem, aby lepiej znaleźć wszystkie brakujące pliki?
1
Z cppodręcznika BSD (macOS): „W trybie -R procesor będzie kontynuował kopiowanie, nawet jeśli wykryte zostaną błędy”.
Matt
Wielkie dzięki za to. Obecnie próbuję odzyskać jak najwięcej z uszkodzonego dysku twardego, chociaż nie dbam o uszkodzone dane, nie będę marnować czasu na próbę naprawy, ale po prostu go usuń. Jest to skuteczna metoda szybkiego osiągnięcia tego celu. Przesyłam błędy do pliku dziennika, który mogę później przeanalizować, aby usunąć obcięte pliki z błędami odczytu, dołączając następujące elementy:2> error.log
0x01
23

Wypróbuj Gnu ddrescue - to program do odzyskiwania danych, który wykonuje kopiowanie blokowe z uszkodzonym odzyskiwaniem danych podczas operacji kopiowania. Możesz go pobrać dla systemu OS X, jeśli używasz Homebrew , wpisując w oknie terminala:

brew install ddrescue

Poradnik arstechnica opisuje sposób ratowania uszkodzonego dysku za pomocą ddrescue. Przeczytaj ten przewodnik, ponieważ zawiera przydatne informacje. Oto wskazówka, jak się tam dostać.

  • Znajdź dysk za pomocą diskutil list. Kolumna identyfikatora jest tym, czego szukasz:

    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *750.2 GB   disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                  Apple_HFS Macintosh HD 2          80.0 GB    disk1s2
       3:                  Apple_HFS Home                    509.1 GB   disk1s3
    
  • Odmontuj dysk, o którym mowa:

    diskutil unmount /dev/disk1s3    
    
  • Rozpocznij operację ratowania dysku na obraz. Upewnij się, że lokalizacja Rescue.dmgzostała zastąpiona wybraną lokalizacją.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Odzyskaj obraz na nowy dysk:

    sudo /usr/local/bin/ddrescue --force -v -c 4096 Rescue.dmg /dev/disk2s0 recovery.log
    

Zaleca się również przeczytanie instrukcji ddrescue, aby zapoznać się z dostępnymi opcjami, uruchamiając man ddrescue.

użytkownik76335
źródło
1
Aby dodać do powiadomienia moderatora: może to być bardzo dobra odpowiedź na problem, ale wymaga więcej pracy. Czy do odpowiedzi można dodać przykładowe polecenia ddrescue dla urządzeń OS X? Naprawiłem to trochę za pomocą rodzaju tła i informacji, które chcielibyśmy zobaczyć w odpowiedziach tutaj. Jeśli to zrobisz, jestem pewien, że byłaby to świetna odpowiedź.
Ian C.
Z powodzeniem korzystałem z ddrescue rok lub dwa lata temu, aby skopiować dane z uszkodzonego dysku. Minęło może 200 błędów i w końcu udało się odczytać około połowy z nich. Powstały skopiowany dysk został wprowadzony do diskwarrior, a rezultatem może być uszkodzenie 10 plików z około 1 miliona.
Pittsburgh Mike
7

Lubię używać rsyncw celu kopiowania plików z uszkodzonego źródła do funkcjonalnego miejsca docelowego:

rsync -auv --delete --ignore-errors /path/to/source/ /path/to/destination/

Gdzie:

-a = „tryb archiwizacji” = powraca do katalogów, kopiuje dowiązania symboliczne jako dowiązania symboliczne, zachowuje uprawnienia, czasy, grupy i pliki specjalne, zachowuje również właściciela (gdy właściciel = root) i urządzenia (gdy właściciel = root)

-u= pomija plik w źródle, jeśli jego odpowiednia kopia w miejscu docelowym jest nowsza

-v = pełne wyjście

--delete= pliki docelowe , które nie istnieją w źródle, zostaną usunięte

--ignore-errors = usuwa plik / katalog w przypadku błędu we / wy podczas procesu kopiowania

Yuri Sucupira
źródło
4

Ta wskazówka Macworld sugeruje użycie dd do tworzenia kopii krok po kroku (ignorowanie błędów), a następnie montowanie wynikowego obrazu w Finderze w celu odzyskania plików. Nie próbowałem tego, ale wygląda na to, że może działać.

binarybob
źródło
To dobrze, ponieważ chcesz szybko wyłączyć swoje dane, jeśli dysk jest zajęty. W ten sposób otrzymujesz blok do kopiowania bloków, w tym błędy, które następnie będą dostępne do wglądu w czasie wolnym bez obawy, że dysk umrze przed jego usunięciem. Wykonam jedną operację, ładnie i schludnie, zaczynając od końca, bez przeskakiwania po całym fragmencie pliku od fragmentu pliku, co będzie trudniejsze na dysku, na którym utworzono kopię DD.
farsz
3
ddrescue jest w tym lepszy niż dd, ponieważ będzie powtarzał złe sekcje tak długo, jak długo pozostawisz je uruchomione - zobacz tę poprzednią odpowiedź, w której OP odrzucił swoje dane po kilku tygodniach szlifowania (!). Zauważ, że jest to dobre podejście, jeśli sprzęt HD zawodzi, ale nie robi nic, aby naprawić uszkodzenie struktury woluminów - które jest po prostu kopiowane wraz z plikami.
Gordon Davisson,
3

Możesz rozważyć użycie ddpolecenia do wykonania kopii blokowej z uszkodzonego dysku twardego na nowy dysk twardy.

Zakładając, że twój nowy HDD ( /dev/disk2) ma taki sam lub większy rozmiar niż uszkodzony HDD ( /dev/disk1), możesz wydać:

dd if=/dev/disk1 of=/dev/disk2 bs=4096 conv=notrunc,noerror

rozmiar bloku @ 4k, nie obcinaj żadnych bloków danych, ignoruj ​​wszystkie błędy

Aby znaleźć nazwy urządzeń, mountnajpierw uruchom terminal.

Biltu
źródło
0

dittoPolecenie powinno działać, chciałbym użyć dittow połączeniu z -vopcją gadatliwym, dzięki czemu można dokładnie zobaczyć, co daje błąd co to kopii.

zrozumiałem
źródło
3
Według pytającego dittonie działa. Jak myślisz, dlaczego tak jest?
nohillside
op pyta o alternatywy dladitto
juniorRubyist
0

Możesz spróbować uruchomić SuperDuper i zignorować pliki z błędami io, jeśli jest ich tylko kilka i skorzystasz z funkcji inteligentnej aktualizacji, która jest dość skutecznym sposobem na pozbycie się większości danych. (Myślę, że komenda dd byłaby lepsza, jeśli możesz to zrobić).

Kroki:

  1. Wybierz „wykonaj kopię zapasową wszystkich plików” jako strategię tworzenia kopii zapasowych
  2. W opcjach wybierz „inteligentną aktualizację” (w przeciwnym razie proces ten będzie śmiesznie długi, jeśli wystąpi więcej niż jeden lub dwa błędy, będziesz potrzebować do tego płatnej wersji)
  3. Uruchom kopię
  4. Gdy kopiowanie nie powiedzie się, przeczytaj dzienniki, aby znaleźć plik, którego nie udało się skopiować, a następnie naciśnij OK / zamknij, aby wrócić do ekranu „Start”
  5. Wybierz „edytuj wybrany skrypt kopiowania” z rozwijanego menu
  6. W obszarze Polecenia skryptu dodaj plik, którego nie udało się skopiować, powinien on powiedzieć „zignoruj” po dodaniu go do listy plików
  7. Zapisz skrypt pod jakąś nazwą (np. Ignore-corrupt-files)
  8. Wybierz skrypt i powtórz kroki 3-7 tyle razy, ile to konieczne, aby zignorować wszystkie uszkodzone pliki.
cwohlman
źródło
-2

Jeśli twój dysk jest nadal dostępny i możesz zobaczyć hirrarchię plików, ale tylko proces kopiowania zatrzymał się z powodu błędów, możesz użyć Unstoppable Copierprogramu.

http://www.roadkil.net/program.php?ProgramID=29

ofir_aghai
źródło
Jest to program tylko dla systemu Windows, a OP prosi o rozwiązania dla komputerów Mac (na forum dla komputerów Mac!)
Haydentech