Cara terbaik untuk menyalin semua file, mengabaikan kesalahan?


36

Saya memiliki sebagian HD yang rusak yang tidak dapat diperbaiki oleh Disk Utility, tetapi yang dapat dipasang hanya membuat data di dalamnya dapat diakses.

Saya mencoba menyalin semua konten yang dapat dipulihkan ke HD cadangan, tetapi setiap metode yang saya coba gagal ketika terjadi kesalahan - membiarkan file yang tersisa tidak terbuka.

Finder - Gagal. SuperDuper - Gagal. Ditto (perintah terminal) - Gagal.

Saya berharap bahwa Ditto akan melakukan triknya, halaman manual Ditto mengatakan:

ditto mengembalikan 0 jika semuanya disalin, jika tidak non-nol. Dita hampir tidak pernah menyerah, lebih suka melaporkan kesalahan di sepanjang jalan. Pesan diagnostik akan dicetak ke kesalahan standar.

Saya telah mengirimkan bug ke Apple dan gagal berfungsi seperti yang diiklankan.

Ada ide lain?


Lihat stackoverflow.com/a/27637277 daripada --ignore-errorsjawaban di bawah ini.
spyle

Jawaban:


28

Saya menggunakan cp -Rfv sourcefile destinationfiledengan sukses secara teratur.

cp = salin

R = memelihara hierarki file

f = jika file tujuan yang ada tidak dapat dibuka, hapus dan coba lagi

v = mode verbose, menampilkan file yang ditransfer saat berlangsung

sourcefile = data yang ingin Anda salin

destinationfile = direktori / drive yang ingin Anda salin


3
Bagaimana ini mengabaikan kesalahan pada drive sumber (lihat pertanyaan)?
nohillside

1
@patrix Ini bukan "mengabaikan" kesalahan tetapi bendera "f" memaksa mereka, hanya menyalin data yang utuh. Saat Anda melihat progresnya (berkat flag verbose), Anda akan melihat output di sepanjang baris "data yang tidak disalin karena kesalahan I / O" ketika menemui data yang buruk. Setelah kesalahan ditampilkan, pindah ke file berikutnya tanpa input pengguna. Skenario poster terdengar sangat mirip dengan lusinan kali saya menggunakan perintah ini untuk mengambil data dari disk / volume yang flakey.
Tuan Kelinci

Apakah ada cara untuk menyalin file yang gagal dengan beberapa postfix, sehingga semua file yang hilang lebih baik ditemukan?

1
Dari cpmanual BSD (macOS): "Dalam -R mode, cp akan terus menyalin bahkan jika kesalahan terdeteksi."
Matt

Terima kasih banyak atas ini. Saat ini saya mencoba untuk menyelamatkan sebanyak mungkin dari HDD yang gagal, meskipun saya tidak peduli dengan data yang rusak, saya tidak akan membuang waktu mencoba untuk memperbaikinya tetapi hanya menghapusnya. Ini adalah metode kerja untuk mencapai ini dengan cepat. Saya menyalurkan kesalahan ke logfile, yang dapat saya uraikan nanti untuk menghapus file yang terpotong dengan kesalahan baca, dengan menambahkan yang berikut ini:2> error.log
0x01

23

Coba Gnu ddrescue - ini adalah program pemulihan data yang melakukan penyalinan berbasis blok dengan pemulihan data yang korup selama operasi penyalinan. Anda bisa mendapatkannya untuk OS X jika Anda menggunakan Homebrew dengan mengetikkan jendela Terminal:

brew install ddrescue

Sebuah panduan tentang ArsTechnica menjelaskan cara untuk menyelamatkan disk gagal menggunakan ddrescue. Pastikan Anda membaca panduan ini, karena berisi informasi yang bermanfaat. Inilah intisari tentang cara menuju ke sana.

  • Temukan drive menggunakan diskutil list. Kolom pengidentifikasi adalah apa yang Anda cari:

    /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
    
  • Lepaskan disk yang dimaksud:

    diskutil unmount /dev/disk1s3    
    
  • Mulai operasi penyelamatan disk menjadi gambar. Pastikan lokasi Rescue.dmgdiganti dengan lokasi yang Anda inginkan.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Pulihkan gambar ke drive baru :

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

Disarankan juga untuk membaca manual ddrescue untuk mendidik diri sendiri tentang opsi yang tersedia dengan menjalankan man ddrescue.


1
Untuk menambah pemberitahuan moderator: ini bisa menjadi jawaban yang sangat bagus untuk masalah ini tetapi butuh lebih banyak pekerjaan. Bisakah Anda menambahkan beberapa contoh perintah ddrescue untuk perangkat OS X ke jawabannya? Saya telah memperbaikinya sedikit dengan jenis latar belakang dan informasi yang ingin kami lihat dalam jawaban di sini. Jika Anda melakukan itu, saya yakin itu akan menjadi respons yang bagus.
Ian C.

Saya menggunakan ddrescue berhasil satu atau dua tahun yang lalu, untuk menyalin data dari disk buruk. Mungkin berhasil melewati 200 kesalahan, dan akhirnya berhasil membaca sekitar setengah dari kesalahan itu. Disalin disk yang dihasilkan dimasukkan ke dalam diskwarrior dan hasilnya mungkin merusak 10 file dari sekitar 1 juta.
Pittsburgh Mike

7

Saya suka menggunakan rsyncuntuk menyalin file dari sumber yang rusak ke tujuan fungsional:

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

Dimana:

-a = "mode arsip" = berulang ke direktori, menyalin symlink sebagai symlink, mempertahankan izin, waktu, grup dan file khusus, juga mempertahankan pemilik (ketika pemilik = root) dan perangkat (ketika pemilik = root)

-u= melewatkan file dalam sumber jika salinan yang sesuai di tujuan lebih baru

-v = keluaran verbose

--delete= file di tujuan yang tidak ada pada sumber akan dihapus

--ignore-errors = menghapus file / direktori jika ada kesalahan I / O selama proses penyalinan


4

Petunjuk Macworld ini menyarankan penggunaan dd untuk membuat salinan sedikit demi sedikit (mengabaikan kesalahan) kemudian memasang gambar yang dihasilkan di Finder untuk memulihkan file Anda. Saya belum mencobanya, tapi sepertinya itu bisa berhasil.


Ini bagus, karena Anda ingin data Anda cepat jika disk itu duff. Dengan cara ini, Anda mendapatkan blok untuk menyalin blok, termasuk kesalahan, yang kemudian akan tersedia untuk inspeksi di waktu luang Anda tanpa khawatir bahwa disk akan mati sebelum Anda mendapatkan semuanya. Saya akan melakukan satu operasi, dalam permulaan yang bagus untuk menyelesaikan tanpa melewatkan seluruh tempat dari fragmen file ke fragmen file yang akan lebih sulit bekerja pada drive yang menciptakan salinan DD.
Stuffe

3
ddrescue lebih baik daripada dd dalam hal ini, karena itu akan mencoba kembali bagian buruk berulang-ulang selama Anda membiarkannya berjalan - lihat jawaban sebelumnya di mana OP menghapus datanya setelah penggilingan (!) beberapa minggu. Perhatikan bahwa ini adalah pendekatan yang baik jika perangkat keras HD gagal, tetapi tidak melakukan apa pun untuk memperbaiki kerusakan struktur volume - yang baru saja disalin bersama dengan file.
Gordon Davisson

3

Anda mungkin mempertimbangkan untuk menggunakan ddperintah untuk melakukan salinan blok demi blok dari HDD Anda yang rusak ke HDD baru Anda.

Dengan asumsi HDD baru Anda ( /dev/disk2) berukuran sama atau lebih besar dari HDD korup Anda ( /dev/disk1), maka Anda dapat mengeluarkan:

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

diblokir @ 4k, jangan potong blok data apa pun, abaikan semua kesalahan

Untuk menemukan nama perangkat, jalankan mountdari Terminal terlebih dahulu.


0

The dittoperintah harus bekerja, saya akan menggunakan dittodalam hubungannya dengan -vpilihan untuk verbose sehingga Anda dapat melihat apa yang memberikan Anda sebuah kesalahan dari apa yang eksemplar.


3
Menurut penanya dittotidak berfungsi. Menurut Anda mengapa demikian?
nohillside

op sedang bertanya tentang alternatif untukditto
juniorRubyist

0

Anda mungkin mencoba menjalankan SuperDuper dan mengabaikan file dengan kesalahan io, jika hanya beberapa dan Anda menggunakan fitur pembaruan pintar itu cara yang cukup efektif untuk mendapatkan sebagian besar data. (Saya pikir perintah dd akan lebih disukai jika Anda bisa melakukan itu).

Tangga:

  1. Pilih 'cadangan semua file' sebagai strategi cadangan
  2. Dalam opsi pilih 'pembaruan pintar' (jika tidak proses ini akan memakan waktu sangat lama jika Anda memiliki lebih dari satu atau dua kesalahan, Anda akan memerlukan versi berbayar untuk ini)
  3. Jalankan salinannya
  4. Ketika salinan gagal membaca log untuk menemukan file yang gagal disalin, lalu tekan ok / tutup untuk kembali ke layar 'mulai'
  5. Pilih 'edit skrip salin yang dipilih' dari dropdown menggunakan
  6. Di bawah perintah Script menambahkan file yang gagal disalin, itu harus mengatakan 'abaikan' setelah itu ditambahkan ke daftar file
  7. Simpan skrip Anda dengan beberapa nama (mis. Abaikan file yang rusak)
  8. Pilih skrip Anda dan ulangi langkah 3-7 sebanyak yang diperlukan untuk mengabaikan semua file yang rusak.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.