BTRFS Düzeltilemeyen Hatalarla dosya bulma


17

Bir BTRFS dosya sistemindeki kurtarılamayan hatalarla ilgili bir sorum var. Özellikle, RAM çubuklarımdan birinde bir sorun yaşadıktan sonra son zamanlarda bir BTRFS Scrub çalıştırdım ve 4 düzeltilemeyen hata keşfetmiş gibi görünüyor. Bu çıktı:

scrub status for <UUID>
    scrub started at Thu Dec 25 15:19:22 2014 and was aborted after 89882 seconds
    total bytes scrubbed: 1.87TiB with 4 errors
    error details: csum=4
    corrected errors: 0, uncorrectable errors: 4, unverified errors: 0

Neyse ki her şeyi bir üçüncül yedeklemede yedekledim, bu yüzden özellikle dosyaları kaybetmekten endişe etmiyorum (BTRFS'nin deneysel durumu ile ilgili sorunların farkındayım, verilerimi güvende tutmak için birden fazla yedeklemem var ve kullanmaya devam edin, lütfen hayır: "Çözüm; BTRFS kullanma" gönderileri).

Ancak, hangi dosyaların düzeltilemez hatalarla ilişkili olduğunu nasıl belirleyebilirim? Onları bulmak, silmek ve yedeklenmiş kopyaları ile değiştirmek istiyorum.

Herhangi birinin bunun nasıl yapılacağı hakkında bilgisi varsa, sizden duymak isterim.

Şimdiden teşekkür ederim.

Yanıtlar:


8

Aşağıdaki yöntemi yararlı buldum ...

btrfs scrub ses.

Yukarıda gösterildiği gibi size herhangi bir sayıda csum hatası verilecektir.
Örnek hata ayrıntılarınızı kullanma : csum = 4 . Bu sayıyı aşağıdaki ifadenin kuyruk yönergesinde kullanın :

dmesg | grep "checksum error at" | tail -4 | cut -d\  -f24- | sed 's/.$//'

O (örneğin boruya bir dosyaya bunu kullanışlı > csums.txt)

Ben önerilen inode arama yaklaşımları bir dizi denedim ve hepsi herhangi bir başarı ile sınırlı bir araya geldi.


anladığım kadarıyla, görüntülenen satır sayısını sınırlamak ve yinelenenleri yoksaymak için kuyruk kullanıyorsunuz. Ben sort | uniqböyle kopyaları kurtulmak için kullanmanızı tavsiye ederim :dmesg | grep "checksum error at" | cut -d\ -f24- | sed 's/.$//' | sort | uniq
niklasfi

3

Evet, INODE veya Block Number ile bir dosya adına eşleme yapmak zor olabilir. Gerçekten ilgileniyorsanız, böyle bir şey deneyebilir ve hangi dosya dosyalarının kopyalanacağını görebilirsiniz ... afterall dosya kötüyse kopyalama sırasında bir hata atmalıdır. Daha önce bu tür bir teknik kullandım.

 find /mount-point -type f -exec cp {} /dev/null \;

 where mount-point is the ROOT node/mount-point of the affected filesystem

Şimdi koşmak, umarım bir şey ortaya çıkarır. Tavsiyeniz için teşekkür ederim, sonuç olarak sizi güncelleyeceğim.
RedHack

1
Çalışmıyor gibi görünüyor üzgünüm = / düzeltilemeyen hataya neden olan ilk dosyayı buldu, ancak sonlandırmadıkça "eski dosya tanıtıcısı" terminale gönderir. Dosyayı buldu, ama şimdi ondan nasıl kurtulacağımı anlayamıyorum. BTRFS posta listesine başvurmak zorunda kalacaksınız.
RedHack

Özel bir dizine taşıyabilir ve daha sonra başka bir aramanın dışında tutabilirsiniz.
mdpc

1
Taşınmayacak veya kopyalanmayacak, sadece dosya tanıtıcısının eski olduğunu söylüyor. Ben bile yapamam.
RedHack

Eğer kullanırsanız cp -v, ayrıca ilerlemeyi izleyebilir: find / -type f -exec cp -v {} /dev/null \; 2> corrupted-files.txt. Ancak, /proc/kcoredosya büyük olabilir (benimki 128 TB), bu nedenle kopyalama işlemi büyük olasılıkla askıda kalacaktır. Yana /procdizin özel büyülü dosyaları içeren, biz onlar için kontrol etmek gerekmez. /procDizini hariç tut :sudo find / -type f -and -not -path /proc -exec cp -v {} /dev/null \; 2> corrupted-files.txt
ceremcem

2

dmesgdüzeltilemez sağlama toplamı hatalarıyla ilgili dosyalar hakkında ayrıntılı bilgi verir. Mesajlar genellikle şöyle görünür: "BTRFS: dev [...], sektör [...], kök [...], inode [...], ofset [...] üzerinde mantıksal [...] sağlama toplamı hatası [ ...], uzunluk [...], bağlantılar [...] (yol: [...]) "; son bilgi parçası bozuk dosyanın mutlak yoludur.


1

Buraya da BTRFS'den "Düzeltilemez hata" aramaya geldim. Yukarıdaki grep benim için işe yaramadı; Bunun yerine kullanmak zorunda kaldım:

$ dmesg | sed -n -r 's#.*BTRFS.*i/o error.*path: (.*)\)#\1#p' | sort -u
somepath/somefile.txt

Yolun, alt hacmin başlangıcına nasıl göründüğüne dikkat edin - hangi alt hacmin içinde olduğuna dair bir belirti yok. Bu neyse ki benim için bir sorun değildi.


Nedir somepath/somefile.txt? Ayrı bir komut olarak yazıyormuşsunuz gibi görünüyor mu - yoksa yazdığınız komutun çıktısı mı? Tümünün bir komut satırı olması gerekiyorsa, lütfen komut satırlarını görüntüleme amacıyla ayırmayın - sadece uzun bir satır olarak cevaba koyun. Ama bu ne? İki giriş sağlıyor musunuz sort(kanal ve dosya)? Yoksa somepath/somefile.txtçıktı dosyası mıdır? (Tekrar kullandığınız ara dosyalar olmadıkça çıktı dosyalarını belirtmek çok yararlı değildir. İnsanlar sonuçları nasıl kullanacağını bilir; örneğin, piping yoluyla.)
Scott

Bu asıl soruya cevap veriyor mu? Söyleyemem.
Monica diyorum

@TwistyImpersonator Şey, IMO'nun açıkça Mark'ın cevabına bir alternatif olması gerekiyordu ve bu sekiz oy aldı (ve arrrr'ın cevabının bir uzantısı ).
Scott

1
@Scott ikinci satırı komutun örnek çıktısıydı.
crusaderky
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.