Cara mengidentifikasi dan memperbaiki file dengan blok disk yang rusak / tidak dapat diakses

9

Saya memiliki akhir 2011 Macbook Pro, menjalankan Mavericks 10.9.2. HDD satu-satunya adalah drive 750GB, diformat dengan Bootcamp. Ini masih berjalan dengan cukup baik, tetapi dalam menjalankan defragment pass di atasnya, saya telah mengidentifikasi bahwa ada banyak file yang menolak untuk dipindahkan oleh defragmenter (iDefrag).

iDefrag melaporkan kode kesalahan POSIX 5 ketika mengakses file. Memilih satu secara acak dan mencoba menyalin file ke lokasi lain di shell juga melaporkan kesalahan, yang membuat saya berpikir masalahnya nyata dan dengan disk / FS. Output dari cp adalah:

cp: unity_nophysx.nexe: Input/output error

Kode kesalahan 5 adalah 'akses ditolak' sejauh yang saya ketahui, tetapi proses defrag berjalan sebagai administrator dan menjalankan cp menggunakan sudo pada file yang dicurigai tidak ada bedanya.

Utilitas Disk, fsck, dan Tes Perangkat Keras Apple semua mengklaim disk baik-baik saja. Tidak ada kesalahan SMART dilaporkan, dan meskipun ada beberapa kesalahan izin, mereka tidak dengan file yang dikeluhkan iDefrag, dan Disk Utility mengklaim telah memperbaikinya tanpa keluhan.

Mungkin ada seratus atau lebih file yang rusak, tetapi masih sebagian kecil dari drive. Sejauh yang saya tahu, tidak ada file sistem atau data penting yang terpengaruh. Meskipun akan lebih baik untuk mengambil data, saya tidak keberatan menginstal ulang atau pergi ke cadangan. Pada titik ini saya tidak tahu apakah itu benar-benar drive yang sekarat, hanya beberapa sektor buruk karena drive sedang dipindahkan saat menulis, atau beberapa korupsi kecil lainnya yang dapat diatasi. Saya mengasumsikan kasus terburuk, dan kemungkinan besar saya harus mendapatkan HDD yang sedikit lebih besar dan mengkloning drive yang ada untuk menghindari keharusan membangun kembali sistem.

Pertanyaan saya adalah benar-benar bagaimana saya menandai file-file yang rusak sebagai rusak dan memperbaiki atau membersihkan mereka , sehingga klon disk akan berhasil dan tidak terpaku pada file / blok yang tidak dapat diakses. Disk Utility tidak melihat masalah, dan saya tidak tahu adanya baris perintah atau alat pihak ketiga yang akan melakukan pekerjaan itu. Saya tidak ingin menghapus seluruh disk dan mulai dari awal, karena drive tampaknya sehat, jadi saya mencari alat perbaikan / diagnostik.

MrCranky
sumber
Saya menyarankan Anda untuk membaca diskusi serupa yang cukup rinci tentang SuperUser ini: superuser.com/q/148227 .
dan
Saya diuji, sayangnya pada disk yang sehat :), volitans-software.com/smart_utility.php . Sepertinya alat yang cukup sederhana & serius. Anda dapat mencobanya dan terutama memeriksa penghitung "sektor yang dialokasikan kembali".
dan

Jawaban:

8

Jika Anda menghadapi sistem file yang sehat pada tingkat strukturnya dan ingin menemukan file yang memiliki blok disk yang rusak, berikut adalah cara saya akan melanjutkan:

  1. Buat cadangan penuh disk Anda dengan Time Machineatau Carbon Copy Cloner

    Periksa cadangan ini.

  2. Jalankan perintah berikut yang berat dan berisiko (jika Anda memiliki blok buruk di luar struktur sistem file Anda) (pastikan {} dikutip agar nama file yang mengandung spasi berfungsi):

    find / -type f -print -exec dd if="{}" of=/dev/null bs=1m \;
    

findPerintah berat ini akan mencetak untuk setiap file biasa namanya (sehingga tidak membacanya, tetapi hanya entri direktori) dan kemudian terus membuat pembacaan penuh dan cepat semua blok data.

Setelah hiting file pertama berisi blok buruk, ini findakan menyebabkan kernel untuk log read erroron /var/log/system.log, dan itu baik akan memperlambat atau membawa sistem anda untuk total berhenti. Ini sebagian besar akan tergantung pada kapasitas hard drive untuk memindahkan blok buruk yang ditemukan pada kumpulan internal yang didedikasikan untuk tugas perbaikan yang biasa ini. File ini mengandung blok buruk akan menjadi nama belakang yang dicetak oleh find.

Tuliskan nama file ini di selembar kertas! Katakanlah nama file ini adalah:

/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9

Pada titik ini Anda mungkin memiliki kemungkinan untuk membunuh finddengan cepat dengan menekan ctrl+ C. Jika mematikannya dengan baik gagal, matikan saja Mac Anda.

Setelah mem-boot ulang Mac Anda, langsung periksa file yang berisi blok buruk:

dd if='/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9' of=/dev/null bs=1m

Jika perintah berakhir dengan benar, maka kesalahan itu cukup ringan untuk disk Anda untuk dapat membaca file ini dan realokasi blok buruk.

  • Jika perintah tidak berhenti, Anda tidak akan dapat membunuhnya secara normal, data Anda benar-benar hilang, dan Anda harus mem-crash Mac sekali lagi.

Dalam kasus terakhir ini, Anda harus mempertimbangkan untuk mengganti disk Anda dan bekerja dari cadangan terakhir Anda. Beberapa file lain mungkin juga mengandung blok buruk dan mungkin tetap tidak terdeteksi sejak lama selama Anda tidak membacanya.

Kernel tidak akan menjalankan kesalahan baca pada blok yang tidak pernah Anda baca.

dan
sumber
Aha, ini benar-benar semacam trik yang saya harapkan. Pertama lulus dengan skrip find / dd menyentuh semua file / blok pada disk, dan tentu saja saya menemukan banyak file yang memberikan "Input / output error", dan saya hanya dapat menampilkan log perintah untuk file dan kemudian grep untuk mencari tahu file mana yang duff. Sepertinya perintah dd itu sendiri tidak cukup untuk memicu segala macam perbaikan otomatis (saya bahkan tidak tahu OS X melakukan itu), tetapi setidaknya itu memberi saya cara yang dapat diandalkan untuk mengidentifikasi file.
MrCranky
Di sisi positifnya, ketika OS mencoba membaca dari file-file dengan blok-blok buruk ini, itu tidak crash atau menutup telepon dengan mengerikan. Saya melihat May 10 20:42:15 ICE kernel[0]: disk0s2: I/O error.pop up di log, tetapi tidak tahu ke mana file itu dipicu. Tapi kemudian perintah itu berjalan dengan sangat bahagia.
MrCranky
Kernel Anda tidak hang dengan BBFH karena disk Anda masih memiliki cukup blok yang tersedia dalam kelompoknya untuk memperbaiki blok yang buruk. ddtidak memperbaiki apa pun, tujuan perintah ini adalah untuk menyalin data dan mengonversinya secepat mungkin. Disk masih dapat memperbaiki kesalahan cahaya. Tetap waspada, harga disk tidak ada bandingannya dengan pekerjaan Anda.
dan
Mmm, ya, saya berasumsi bahwa: dd hanya menjadi alat bodoh untuk rim semua data dari satu file dan meletakkannya di tempat lain (dalam kasus kami, ke udara tipis). Yang benar-benar penting adalah bahwa setiap blok yang terkait dengan file dibaca. Yang tidak saya dapatkan adalah apa yang Anda harapkan dari OS X dalam hal itu. Jelas kernel tidak dapat membaca blok buruk ini, tetapi apakah Anda pikir disk itu sendiri dapat dan dapat memperbaikinya? Jika tidak bisa mengeluarkan data dari blok buruk asli, bagaimana cara memindahkannya di tempat lain?
MrCranky
Pertanyaan yang sangat bagus Disk akan secara otomatis membuat percobaan ulang pada blok bacaan. Setiap kali posisi kepala secara mekanis berada di posisi yang berbeda. Jika salah satu upaya ini berhasil, data akan disalin pada salah satu blok yang tersedia untuk memperbaiki blok yang buruk. Blok buruk ditandai sebagai buruk dan tidak akan pernah digunakan lagi. Di sisi lain, jika semua percobaan gagal, maka data tidak disimpan, dan setelah waktu yang sangat lama, disk akan menandai blok sebagai buruk, dan mengalokasikan yang kosong baru ke disk yang terlihat. Kernel akan melaporkan kesalahan disk yang tidak dapat dipulihkan.
dan
4

Reboot dalam mode pengguna tunggal dengan menahan Command+ Ssaat boot. Saat Anda melihat prompt (harus terlihat seperti root #atau sesuatu yang serupa), ketik fsck -fdan tekan Return. Ini adalah alat pemeriksaan konsistensi sistem file bawaan Mac dan memungkinkan Anda untuk menemukan dan memperbaiki kesalahan dengan sistem file startup. Jalankan perintah ini sampai Anda tidak melihat **The volume [volume name] was modified.**atau alat gagal tiga kali berturut-turut.

Jika alat gagal, itu mungkin menunjukkan masalah yang lebih besar (tapi saya tidak bisa memberi tahu Anda apa tanpa melihat output dari alat). Bagaimanapun, pastikan Anda telah mencadangkan semua yang Anda bisa sebelum menjalankan alat disk apa pun. Setelah selesai, ketik rebootprompt dan tekan enter untuk (Anda dapat menebaknya!) Reboot komputer Anda.

Untuk informasi tambahan, Anda dapat menemukan halaman manual fsck di sini .

Mat
sumber
Menarik, tetapi sangat mirip dengan fsck, bahkan dengan -f dan dalam mode single-user, melakukan apa yang dilakukan Disk Utility. Seperti Disk Utility, ia tidak menemukan apa pun dan menganggap disk tersebut baik-baik saja. Saya menganggap itu memindai catatan sistem file, tapi saya pikir masalah saya adalah pada tingkat blok - yaitu sistem file terstruktur dengan baik, tetapi data aktual dalam file tidak dapat diakses ketika datang untuk membaca / menyalin / defragmentasi mereka.
MrCranky
1
→ MrCranky: benar! fsck& Disk Utilitysedang memeriksa integritas struktur sistem file. Mereka membaca blok disk yang dialokasikan untuk struktur sistem file. Mereka tidak dibuat untuk memverifikasi integritas blok data. Oleh karena itu mereka dapat berjalan pada disk dengan blok gagal tanpa meningkatkan kesalahan baca. Jika Anda ingin memeriksa disk Anda, bahkan blok yang mungkin rusak tetapi sebenarnya tidak digunakan, cukup gunakan alat dasar sebagai dd if=/dev/disk0 of=/dev/null ibs=1kdan dalam menjalankan jendela shell lain tail -f /var/log/system.log. Ini gratis, ekstrem, dan tidak akan menyembunyikan kesalahan apa pun.
dan
2

Saya akan sangat merekomendasikan DiskWarrior untuk membangun kembali katalog disk dan untuk memindai file yang berpotensi rusak .

Selama katalog dibangun kembali, itu juga dapat memberi tahu Anda jika mengalami penundaan karena kerusakan disk.

Adam
sumber
Saya tidak benci membeli alat untuk membantu, tetapi tanpa uji coba, dan tidak ada jaminan bahwa itu bahkan dirancang untuk menemukan jenis kesalahan yang saya alami, saya akan membutuhkan lebih banyak rekomendasi untuk mendukung Anda sebelum menjadi siap untuk menjatuhkan $ 100 pada alat.
MrCranky
-1 Bukan hanya jawaban, tetapi campuran komentar dan jawaban.
Max Ried
2

Dengan menonaktifkan jawaban Buscar, Anda dapat melakukan ini secara otomatis menggunakan beberapa perintah baris foo yang cukup berat.

sudo find / -type f -print0  | xargs -0 -I{} dd if='{}' of=/dev/null bs=1m 2>&1 | grep 'error' >>badfiles.txt  & 
  • sudo: Mode Admin
  • find -print0: path absolut
  • xargs -0 -I {}: gantikan {} pada perintah selanjutnya
  • dd 2> & 1: redirect std error ke stdout
  • pipa stdout ke grep mencari kesalahan string
  • Tambahkan hasil ke file daftar. ( Catatan : Ini harus di media eksternal jika Anda yakin drive internal Anda rapuh)
awiebe
sumber
1

Seperti yang Anda katakan, bahkan tidak jelas file-file itu rusak, setidaknya Mac Anda tidak berpikir begitu.

Setiap OS membuat file tidak bergerak yang diperlukan untuk operasinya (Pulihkan poin, file yang saat ini aktif, dll ....). Beberapa defrag akan menunjukkannya, beberapa tidak.

Fakta bahwa Anda tidak dapat mengakses atau memindahkan mereka tidak berarti mereka rusak.

Biasanya Mac sangat baik dalam merawatnya sendiri.

Menggunakan pemeliharaan Apple dilakukan dengan: membuka Terminal dan ketik:

sudo periodic daily weekly monthly 

diikuti oleh Return, masukkan kata sandi Administrator Anda, dan OS X akan mengurus semuanya untuk Anda.

Lihat di Konsol untuk laporannya jika Anda tertarik.

Saat dalam tampilan Konsol (cari) untuk setiap kesalahan I / O yang akan menunjukkan disk Anda mulai mengalami masalah, untuk memuji Utilitas Disk dan temuan fsck.

Kadang saya menggunakan alat gratis bernama OnyX untuk tugas pemeliharaan tambahan. Itu dibuat oleh Perancis dan karena mereka makanan itu hanya luar biasa :)

OnyX adalah utilitas multifungsi untuk OS X yang memungkinkan Anda untuk memverifikasi disk startup dan struktur file sistemnya, untuk menjalankan berbagai tugas pemeliharaan sistem, untuk mengkonfigurasi beberapa parameter tersembunyi Finder, Dock, QuickTime, Safari, Mail, iTunes , jendela masuk, Spotlight, dan banyak aplikasi Apple, untuk menghapus cache, untuk menghapus sejumlah file dan folder tertentu yang mungkin menjadi rumit, dan banyak lagi.

Dengan semua ini, saya tidak mempertanyakan keputusan Anda untuk menggunakan defragmenter (iDefrag) karena saya tidak mengetahuinya, melainkan menawarkan solusi alternatif.

Ruskes
sumber
Penggunaan defragmenter bukan masalah, saya sangat menyadari apa yang dilakukan OS X dan tidak dilakukan dalam hal itu. File-file itu jelas tidak digunakan, ini adalah file data untuk aplikasi yang tidak aktif, dan memang aplikasi sekarang tidak dapat dipindahkan.
MrCranky
Pada Onyx - lagi-lagi melakukan sedikit lebih dari Disk Utility tidak - memeriksa status SMART dari disk dan kemudian menjalankan diagnostik gaya fsck (yang seperti yang telah kita tentukan berpikir tidak ada yang salah)
MrCranky
Hanya untuk menjadi jelas, untuk orang lain membaca jawaban ini, file yang paling jelas yang rusak, dan Mac tahu itu, karena saya tidak diperbolehkan untuk membaca dari mereka (menyalinnya, apa pun). Itu bukan karena mereka adalah file sistem, atau digunakan pada saat itu, itu benar bahkan untuk file data pengguna. Pemeliharaan berkala tidak membantu dengan masalah, sekali lagi karena fscksepertinya hanya peduli dengan masalah sistem file, bukan memblokir masalah aksesibilitas. Konsol menunjukkan kesalahan hanya ketika saya secara manual mencoba menyalin / membaca data dari salah satu file yang rusak ini, itu tidak membantu dalam menemukan mereka.
MrCranky
0

Seburuk kedengarannya, sebelum melakukan apa pun Anda harus menduplikasi semua data Anda ke drive yang dikenal baik. Jika boot dari installer dan menyalin data gagal, ada utilitas baris perintah yang disebut 'dd' yang dapat melakukan duplikasi tingkat rendah dan dengan cara yang jauh lebih tanpa kompromi.

 man dd

untuk informasi lebih lanjut tentang dd termasuk penggunaan dan sintaksis yang tepat.


Pilihan lain untuk posting Matt, boot mode pengguna tunggal, dan jalankan

 fsck -fy 

berulang-ulang sampai fsck berhenti melaporkan kesalahan.


Memilih posting Adam, DiskWarrior adalah aplikasi yang mudah digunakan tetapi sangat kuat yang akan melaporkan kegagalan HDD, memeriksa kesalahan file individu dan memperbaikinya jika memungkinkan, serta membangun kembali dan mengoptimalkan struktur direktori.


Solusi lain yang mungkin terdengar tidak masuk akal tetapi seringkali merupakan upaya terakhir untuk memulihkan data dengan banyak bukti anakdotal untuk sukses adalah dengan menarik drive, melindunginya dari kelembaban menggunakan beberapa lapis tas freezer, dan menaruhnya di freezer Anda untuk 30-45 menit. Kemudian ketika drive dingin, pasang drive di dock usb eksternal, dan gunakan sistem sementara lain untuk mencoba lagi menyalin data yang rusak ke drive lain. Umumnya, ini digunakan jika ada masalah perangkat keras dan drive gagal. Jika Anda dapat menduplikasi seluruh drive dengan data Anda utuh, ini sangat ideal, karena sering kali partisi ulang dan memformat ulang akan memberikan drive yang baru seumur hidup.

chillin
sumber
Seperti yang saya katakan, fsck tidak melaporkan kesalahan. Disk belum temperamental atau melaporkan kesalahan acak, dan daftar file yang rusak sepertinya tidak bertambah, jadi saya tidak percaya saya berada di dekat tahap 'beku untuk tarikan darurat terakhir'. Saya juga sudah sangat didukung di tingkat file / folder, dan tidak khawatir kehilangan data, seperti yang saya katakan dalam pertanyaan. Senang mendengar suara lain untuk DiskWarrior.
MrCranky
@ MrCranky: Saya yakin Anda merujuk ke sesuatu yang diposting sebelum Anda memperbarui pertanyaan Anda; Saya memperkuat ide fsck untuk siapa pun yang menemukan halaman ini mencari solusi untuk gejala yang sama. Berkenaan dengan apa pun yang saya posting tentang kegagalan HDD, tidak ada salahnya untuk komprehensif, lagi, untuk orang lain dan tidak harus Anda secara pribadi. Saya telah melihat sebagian kegagalan hard drive. Seringkali tidak ada indikasi kegagalan, bahkan dengan teknologi SMART, sampai Anda tidak dapat lagi mengakses data dengan cara apa pun. Jika Anda peduli dengan data, saya sangat menyarankan Anda mendapatkan drive baru, dan cadangan data Anda.
chillin
Saya tentu saja tidak setuju dengan rekomendasi untuk pencadangan, tetapi semangat format T&J adalah untuk menjawab pertanyaan yang diajukan, bukan pertanyaan umum "bagaimana cara memperbaiki disk yang rusak" (yang ada banyak). Nah sebelum saya mengeditnya untuk menambah fsckdaftar "hal-hal yang berpikir disk baik-baik saja", saya telah menjawab jawaban yang menyebutkan fsckdiskon kegunaannya. fsckdan Disk Utility melakukan banyak fungsi yang sama, dan itu untuk beroperasi pada struktur sistem file, bukan pada level blok. Saya memang mencoba cukup spesifik bahwa ini adalah masalah blok, bukan masalah sistem file.
MrCranky
0

Untuk satu file yang tidak dapat dibaca secara keseluruhan karena kesalahan pembacaan disk, Anda dapat menggunakan ddutilitas untuk menduplikasi file ke volume eksternal, menggantikan NUL byte untuk blok yang tidak dapat dibaca. Sangat disarankan untuk menggandakan ke volume yang berbeda (mis. "Disk USB" pada contoh di bawah).

Contoh:

dd if=/path/to/damaged/file of=/Volumes/USB\ Disk/file bs=512 conv=noerror,sync

Dengan menggunakan blok 512-byte, jumlah maksimum blok yang dapat dibaca akan dipulihkan.

Pemulihan mungkin memakan waktu lama, karena kernel akan memblokir untuk beberapa waktu pada setiap pembacaan yang gagal.

pemutih
sumber