Bozuk / erişilemeyen disk blokları olan dosyaları belirleme ve düzeltme


9

Mavericks 10.9.2 çalıştıran 2011 sonu Macbook Pro'm var. Tek HDD'si, Bootcamp ile biçimlendirilmiş 750GB'lık bir sürücüdür. Hala oldukça iyi çalışıyor, ancak bir birleştirme geçişi çalıştırırken, birleştirici (iDefrag) tarafından taşınmayı reddeden bir grup dosya olduğunu belirledim.

iDefrag, dosyalara erişirken 5 numaralı POSIX hata kodunu bildirir. Rastgele birini seçmek ve dosyayı kabuktaki başka bir konuma kopyalamaya çalışmak da bir hata bildiriyor, bu da sorunun gerçek olduğunu ve disk / FS ile ilgili olduğunu düşündürüyor. Cp çıktısı:

cp: unity_nophysx.nexe: Input/output error

Hata kodu 5, bildiğim kadarıyla 'erişim engellendi', ancak dolandırmak işlemi yönetici olarak çalışıyor ve şüpheli dosyada sudo kullanarak cp'yi çalıştırmanın hiçbir farkı yok.

Disk Yardımcı Programı, fsck ve Apple Hardware Test'in tümü diskin iyi olduğunu iddia ediyor. Hiçbir SMART hatası bildirilmedi ve bazı izin hataları olsa da, iDefrag'ın şikayet ettiği dosyalarla değildi ve Disk İzlencesi bunları şikayet etmeden düzelttiğini iddia ediyor.

Belki yüz veya daha fazla bozuk dosya var, ama yine de sürücünün çok küçük bir kısmı. Anlayabildiğim kadarıyla, hiçbir sistem dosyası veya önemli veri etkilenmez. Verileri almak güzel olsa da, yeniden yüklemeyi veya yedeklemeye gitmeyi umursamıyorum. Bu noktada gerçekten sürücünün ölmekte olup olmadığını bilmiyorum, sadece yazma sırasında hareket ettirilmesi nedeniyle bazı kötü sektörler veya üzerinde çalışılabilecek diğer küçük yolsuzluklar. En kötü durumu varsayıyorum ve büyük olasılıkla biraz daha büyük bir HDD almam ve sistemi yeniden oluşturmak zorunda kalmamak için mevcut sürücüyü klonlamam gerekecek.

Benim sorum gerçekten bu bozuk dosyaları düzgün kırık olarak işaretleme ve onları düzeltme veya temizleme hakkında nasıl gideceğim , böylece diskin bir klonu başarılı olacak ve erişemediği dosyalara / bloklara asılmayacak. Disk Yardımcı Programı sorunu görmüyor ve işi yapacak herhangi bir komut satırı veya üçüncü taraf araç bilmiyorum. Disk başka türlü sağlıklı görünüyor gibi tüm diski yazmak ve sıfırdan başlamak istemiyorum, bu yüzden onarım / teşhis araçları arıyorum.


Bu oldukça ayrıntılı benzer tartışmayı SuperUser'da okumanızı tavsiye ederim: superuser.com/q/148227 .
dan

Ne yazık ki sağlıklı bir diskte test ettim :), volitans-software.com/smart_utility.php . Oldukça basit ve ciddi bir araç gibi görünüyor. Bunu deneyebilir ve en önemlisi "yeniden tahsis edilen sektörler" sayacını kontrol edebilirsiniz.
dan

Yanıtlar:


9

Yapısı düzeyinde sağlıklı bir dosya sistemi ile karşı karşıya ve disk hatalı blokları olan dosyaları bulmak istiyorsanız, işte nasıl devam edecek:

  1. İle diskin tam bir yedeğini yapın Time Machineveya Carbon Copy Cloner

    Bu yedeklemeyi kontrol edin.

  2. Aşağıdaki ağır ve riskli (dosya sistemi yapınızın dışında bozuk bloklarınız varsa) komutunu çalıştırın ({} alan içeren dosya adlarının çalışabilmesi için tırnak içine alındığından emin olun):

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

Bu ağır findkomut, herhangi bir düz dosya için adını yazdırır (böylece onu okumaz, sadece dizin girişini) ve ardından tüm veri bloklarını tam ve hızlı bir şekilde okumaya devam eder.

Kötü blokları içeren ilk dosyayı hiting üzerine, bu findçekirdek log neden olur read errorüzerinde /var/log/system.logve o da yavaşlatmak veya toplam durdurmak için sisteminizi getirecektir. Bu çoğunlukla, dahili havuzunda bulunan ve bu olağan düzeltme görevine adanmış bozuk blokların yerini değiştirmek için sabit sürücü kapasitesine bağlı olacaktır. Bozuk bloklar içeren bu dosya, yazdırdığı soyadı olacaktır find.

Bu dosya adını bir kağıda yazın! Diyelim ki bu dosya adı:

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

Bu noktada + tuşuna basarak findhızlıca öldürme olanağınız olabilir . Güzel bir şekilde öldürmek başarısız olursa, Mac'inizi çökertmeniz yeterlidir.ctrlC

Mac'inizi yeniden başlattıktan sonra, bozuk bloklar içeren dosyayı doğrudan kontrol edin:

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

Komut doğru şekilde sonlandırılırsa, hata diskinizin bu dosyayı okuyabilmesi ve bozuk blokları yeniden tahsis edebilmesi için yeterince hafifti.

  • Komut sona ermezse, normal şekilde öldüremezsiniz, verileriniz tamamen kaybolur ve Mac'inizi bir kez daha kilitlemeniz gerekir.

Bu son durumda, diskinizi değiştirmeyi ve son yedeklemelerinizden çalışmayı düşünmelisiniz. Bazı diğer dosyalar da kötü bloklar içerebilir ve bunları okumadığınız sürece uzun bir süre fark edilmeden kalmış olabilir.

Çekirdek, hiç okumadığınız bir blokta okuma hatası vermez.


Aha, bu kesinlikle umduğum bir numara. Find / dd betiği ile ilk geçiş diskteki tüm dosyalara / bloklara dokunur ve "Giriş / çıkış hatası" veren bir grup dosya bulduğumdan eminim ve komutun günlüğünü bir dosyaya gönderebilirim ve sonra hangi dosyaların duff olduğunu bulmak için grep. Dd komutu, herhangi bir otomatik düzeltmeyi tetiklemek için yeterli değil gibi görünüyor (OS X'in bunu yaptığını bile bilmiyordum), ancak en azından dosyaları tanımlamak için güvenilir bir yol veriyor.
MrCranky

Artı tarafta, OS bu kötü blokları olan dosyalardan okumaya çalıştığında, çökmez veya korkunç bir şekilde kapanmaz. May 10 20:42:15 ICE kernel[0]: disk0s2: I/O error.Günlüklerde bir pop-up görüyorum , ancak hangi dosyanın tetiklediğine dair hiçbir ipucu yok. Ama sonra komut oldukça mutlu çalışıyor.
MrCranky

Çekirdeğiniz BBFH ile takılmıyor çünkü diskinizde hala kötü blokları düzeltmek için yeterli sayıda blok mevcut. ddhiçbir şeyi düzeltmezse, bu komutun amacı verileri kopyalamak ve mümkün olduğunca hızlı bir şekilde dönüştürmektir. Disk hala ışık hatalarını onarabilir. Dikkatli olun, bir diskin fiyatı işinize uygun bir şey değildir.
dan

Mmm, evet, bunu varsaydım: dd sadece bir dosyadaki tüm verileri delmek ve başka bir yere (bizim durumumuzda, ince havaya) koymak için aptal bir araç olmak. Asıl önemli olan dosya ile ilişkili her bloğun okunmasıdır. Elimde olmayan şey, OS X'in bu durumda yapmasını beklediğiniz şey. Çekirdek açıkça bu kötü blokları okuyamıyor, ancak diskin kendisinin bunları düzeltebileceğini ve düzeltebileceğini düşünüyor musunuz? Verileri orijinal bozuk bloktan çıkaramazsa, başka bir yere nasıl kaydırır?
MrCranky

Mükemmel soru. Disk okuma bloklarında otomatik olarak yeniden deneme yapar. Her kafa pozisyonu mekanik olarak farklı bir pozisyondadır. Bu denemeden biri başarılı olursa, veriler bozuk blokları onarmak için kullanılabilir bloklardan birine kopyalanır. Kötü blok kötü olarak işaretlenir ve bir daha asla kullanılmaz. Öte yandan, tüm yeniden denemeler başarısız olursa, veriler kaydedilmez ve çok uzun bir süre sonra disk bloğu kötü olarak işaretler ve görünür diske yeni bir boş disk atar. Çekirdek, kurtarılamayan bir disk hatası bildirecek.
dan

5

Önyükleme sırasında Command+ tuşunu basılı tutarak tek kullanıcı modunda yeniden başlatın S. Bir bilgi istemi gördüğünüzde ( root #benzer veya benzer bir şey olmalıdır ), yazın fsck -fve tuşuna basın Return. Bu, Mac'in yerleşik dosya sistemi tutarlılık kontrol aracıdır ve başlangıç ​​dosya sistemindeki hataları bulmanıza ve onarmanıza olanak tanır. Bu komutu görene **The volume [volume name] was modified.**veya araç arka arkaya üç kez başarısız olana kadar çalıştırın .

Araç başarısız olursa, daha büyük bir sorunun göstergesi olabilir (ancak aracın çıktısını görmeden ne olduğunu söyleyemedim). Her durumda, herhangi bir disk aracını çalıştırmadan önce yapabileceğiniz her şeyi yedeklediğinizden emin olun. İşiniz bittiğinde, rebootistemi yazın ve bilgisayarınızı yeniden başlatmak için enter tuşuna basın (tahmin ettiniz!).

Daha fazla bilgi için fsck kılavuz sayfalarını burada bulabilirsiniz .


İlginç, ancak fsck'e çok benziyor, -f ve tek kullanıcı modunda bile Disk Yardımcı Programı'nın yaptığı şeyi yapıyor. Disk Yardımcı Programı gibi, hiçbir şey bulamaz ve diskin iyi olduğunu düşünür. Dosya sistemi kayıtlarını taradığını varsayıyorum, ancak sorunumun blok düzeyinde olduğunu düşünüyorum - yani dosya sistemi iyi yapılandırılmış, ancak okuma söz konusu olduğunda dosyalardaki gerçek verilere erişilemiyor / kopyalama / birleştirme.
MrCranky

1
→ MrCranky: doğru! fsck& Disk Utilitydosya sistemi yapısı bütünlüğünü kontrol ediyor. Dosya sistemi yapısına tahsis edilmiş disk bloklarını okurlar. Veri bloklarının bütünlüğünü doğrulamak için yapılmamıştır. Bu nedenle, herhangi bir okuma hatası oluşmadan hata blokları olan bir disk üzerinde çalışabilirler. Diskinizi kontrol etmek istiyorsanız, arızalı olabilecek ancak aslında kullanılmayan bloklar bile, sadece dd if=/dev/disk0 of=/dev/null ibs=1kbaşka bir kabuk penceresi içinde ve içinde temel bir araç kullanın tail -f /var/log/system.log. Bu ücretsiz, aşırı ve size herhangi bir hata gizlemek olmaz.
dan

2

DiskWarrior'ı disk kataloglarını yeniden oluşturmak ve potansiyel olarak hasar görmüş dosyaları taramak için şiddetle tavsiye ederim .

Katalog yeniden oluşturma sırasında, disk arızası nedeniyle bir gecikme yaşayıp yaşamadığını da size bildirebilir.


Yardım etmek için bir araç satın almaktan kaçınmıyorum, ancak deneme sürümü yok ve yaşadığım hataları bulmak için bile tasarlandığını garanti etmeden, kendiniz olmadan önce yedeklemeniz için çok daha fazla tavsiyeye ihtiyacım var bir araç üzerinde 100 $ düşmeye hazır.
MrCranky

-1 Sadece bir cevap değil, aynı zamanda bir yorum ve cevap karışımı.
bot47

2

Buscar'ın cevabı üzerinde çalışırken, bunu oldukça ağır bir komut satırı foo kullanarak otomatik olarak yapabilirsiniz.

sudo find / -type f -print0  | xargs -0 -I{} dd if='{}' of=/dev/null bs=1m 2>&1 | grep 'error' >>badfiles.txt  & 
  • sudo: Yönetici modu
  • find -print0: mutlak yol
  • xargs -0 -I {}: sonraki komutta {} yerine
  • dd 2> & 1: std hatasını stdout'a yönlendir
  • dize hatası arıyor grep boru stdout
  • Sonuçları bir liste dosyasına ekleyin. ( Not : Dahili sürücünüzün iffy olduğuna inanıyorsanız, bu harici bir ortamda olmalıdır)

1

Dediğiniz gibi, bu dosyaların zarar gördüğü bile belli değil, en azından Mac'iniz böyle düşünmüyor.

Her işletim sistemi, işlemleri için gerekli olan taşınmaz dosyaları yapar (Geri yükleme noktaları, şu anda aktif dosyalar vb.). Bazı dolandırıcılar gösterecek, bazıları göstermeyecek.

Onlara erişemeyeceğiniz veya taşıyamayacağınız, hasar gördükleri anlamına gelmez.

Normalde Mac'ler kendilerine bakmakta çok iyidir.

Apple bakımını kullanarak: Terminali açıp şunu yazın:

sudo periodic daily weekly monthly 

ardından Return tuşuna Yönetici şifrenizi girin, OS X sizin için her şeyi halledecektir.

İlgileniyorsanız raporlar için Konsol'a bakın.

Konsoldayken, disk yardımcı programına ve fsck bulgularına iltifat etmek için diskinizin sorun yaşamaya başladığını belirten herhangi bir G / Ç hatası arayın (arayın).

Bazen ek bakım görevi için OnyX adlı ücretsiz bir araç kullanıyorum . Fransızlar tarafından yapılır ve onlar yiyecek olarak sadece harika :)

OnyX, OS X için başlangıç ​​diskini ve sistem dosyalarının yapısını doğrulamanızı, sistem bakımının çeşitli görevlerini çalıştırmanızı, Finder, Dock, QuickTime, Safari, Mail, iTunes'un bazı gizli parametrelerini yapılandırmanızı sağlayan çok işlevli bir yardımcı programdır. , giriş penceresi, Spotlight ve Apple'ın birçok uygulaması, önbellekleri silmek, hantal olabilecek belirli sayıda dosya ve klasörü kaldırmak ve daha fazlası.

Bütün bunlar söylendiğinde, bilmediğim için birleştiriciyi (iDefrag) kullanma kararınızı sorgulamıyorum, daha ziyade alternatif çözümler sunuyoruz.


Birleştiricinin kullanımı sorun değil, OS X'in bu konuda ne yaptığını ve yapmadığını gayet iyi biliyorum. Dosyalar kesinlikle kullanımda değildi, bunlar aktif olmayan bir uygulama için veri dosyalarıydı ve aslında uygulama taşınamıyor.
MrCranky

Onyx'te - yine Disk İzlencesi'nden biraz daha fazlasını yapıyor - diskin SMART durumunu kontrol edip fsck tarzı tanılamayı çalıştırıyoruz (tespit ettiğimiz gibi yanlış bir şey olmadığını düşünüyor)
MrCranky

Sadece başkasının bu cevabı okumak için Açık olmak gerekirse, dosyalar kesinlikle edildi hasarlı ve onlardan okumak için izin verilmedi çünkü Mac biliyordu (her ne kopyalayın). Bunun nedeni sistem dosyaları olmaları değildi ya da o sırada kullanımda olan kullanıcı veri dosyaları için bile doğruydu. Periyodik bakım, sorunu çözmedi, çünkü fsckerişilebilirlik sorunlarını engellemediğinden sadece dosya sistemi sorunlarını önemsiyor gibi görünüyor. Konsol yalnızca bu bozuk dosyalardan birindeki verileri kopyalamaya / okumaya çalıştığımda hatalar gösterdi, onları bulmakta yardımcı olmadı.
MrCranky

0

Göründüğü kadar makul değil, bir şey yapmadan önce tüm verilerinizi bilinen iyi bir sürücüye kopyalamanız gerekir. Yükleyiciden önyükleme yapmak ve verileri kopyalamak başarısız olursa, düşük seviyeli çoğaltma ve çok daha uzlaşmaz bir şekilde yapabilen 'dd' adlı bir komut satırı yardımcı programı vardır.

 man dd

kullanım ve uygun sözdizimi dahil olmak üzere dd hakkında daha fazla bilgi için.


Matt'in gönderisi, tek kullanıcı modunu önyükleme ve çalıştırma için başka bir oy

 fsck -fy 

fsck hata bildirmeyi durdurana kadar tekrar tekrar.


Adam'ın gönderisine oy veren DiskWarrior, HDD arızalarını bildirecek, tek tek dosyaları hatalar için kontrol edecek ve mümkünse onaracak ve dizin yapılarını yeniden oluşturacak ve optimize edecek, kullanımı basit ama çok güçlü bir uygulamadır.


Mantıksız gelebilir, ancak genellikle başarı için çok sayıda annakdotal kanıtla veri kurtarma için son bir hendek girişimi olan başka bir olası çözüm, sürücüyü çekmek, birkaç kat dondurucu torbası kullanarak nemden korumak ve dondurucunuza yerleştirmektir. 30-45 dakika. Ardından sürücü soğukken, sürücüyü harici bir usb dock'a takın ve bozuk verileri başka bir sürücüye kopyalamaya çalışmak için başka bir geçici sistem kullanın. Genellikle, bir donanım sorunu varsa ve sürücü arızalanırsa kullanılır. Tüm diski verileriniz bozulmadan çoğaltabiliyorsanız, bu idealdir, çünkü çoğu zaman bir yeniden bölümleme ve yeniden biçimlendirme diske yeni bir kullanım ömrü verecektir.


Dediğim gibi, fsck herhangi bir hata bildirmez. Disk henüz mizaçlı veya rastgele hatalar bildirmiyor ve bozuk dosyaların listesi büyümiyor gibi görünmüyor, bu yüzden henüz 'son acil durum çekme için dondur' aşamasına yakın bir yerde olduğuma inanmıyorum. Ben de zaten bir dosya / klasör düzeyinde çok iyi yedeklenmiş ve soruda dediğim gibi, veri kaybetme konusunda endişelenmiyorum. Yine de DiskWarrior için başka bir oy duymak güzel.
MrCranky

@MrCranky: Sorunuzu güncellemeden önce yayınlanan bir şeye atıf yaptığınıza inanıyorum; Bu sayfayı benzer semptomlara bir çözüm arayan herhangi biri için fsck fikrini güçlendiriyordum. HDD arızası hakkında gönderdiğim herhangi bir şeyle ilgili olarak, başkaları için bir kez daha kapsamlı olmaktan ve kişisel olarak değil. Sabit disk arızalarında adil payımı gördüm. Verilere artık hiçbir şekilde erişemeyene kadar, SMART teknolojisinde bile bir hata göstergesi yoktur. Verilere önem veriyorsanız, yeni bir sürücü almanızı ve verilerinizi yedeklemenizi önemle tavsiye ederim.
chillin

Kesinlikle yedekleme önerisi ile aynı fikirde değilim, ancak soru-cevap formatının ruhu, genel bir "bozuk diski nasıl düzeltebilirim" sorusuna değil, sorusu olan soruyu cevaplamaktır. fsck"Diskin iyi olduğunu düşünüyorum" listesine eklemek için onu düzenlemeden önce , ben fsckonun yararlılık indirim indirim cevabı yanıtladı . fsckve Disk Utility aynı işlevi yerine getirir ve bu, blok düzeyinde değil, dosya sistemi yapılarında çalışır. Bu bir dosya sistemi sorunu değil, bir blok sorunu olduğunu oldukça spesifik olmaya çalıştım.
MrCranky

0

Disk okuma hatası nedeniyle tümüyle okunamayan tek bir dosya ddiçin, dosyayı harici bir birime çoğaltmak ve yardımcı olamayan bloklar için NUL baytlarını değiştirmek için yardımcı programı kullanabilirsiniz . Farklı bir birime çoğaltılması önemle tavsiye edilir (örn. Aşağıdaki örnekte "USB Disk").

Misal:

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

512 baytlık bloklar kullanılarak, okunabilir maksimum blok sayısı geri kazanılır.

Çekirdek her başarısız okumada bir süre bloke olacağından kurtarma işlemi uzun sürebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.