Znajdowanie plików z błędami niekorygowalnymi BTRFS

17

Mam pytanie dotyczące nieodwracalnych błędów w systemie plików BTRFS. W szczególności niedawno uruchomiłem Scrub BTRFS po napotkaniu problemu z jednym z moich drążków pamięci RAM i wydaje się, że odkryłem 4 błędy, których nie da się naprawić. To jest wynik:

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

Na szczęście mam kopię zapasową wszystkiego w trzeciorzędnej kopii zapasowej, więc nie martwię się szczególnie o utratę plików (jestem świadomy problemów związanych z eksperymentalnym statusem BTRFS, mam wiele kopii zapasowych, aby zapewnić bezpieczeństwo moich danych, i postanowiłem nadal go używaj, więc nie: „Rozwiązanie; nie używaj postów BTRFS”).

Chciałbym jednak wiedzieć, jak ustalić, które pliki są powiązane z błędami, których nie można naprawić? Chcę je znaleźć, usunąć i zastąpić ich kopiami zapasowymi.

Jeśli ktoś ma informacje, jak to zrobić, chciałbym usłyszeć od ciebie.

Z góry dziękuję.

RedHack
źródło

Odpowiedzi:

8

Znalazłem następującą metodę przydatną ...

btrfs scrub objętość.

Zostanie wyświetlona dowolna liczba błędów sumowania, jak pokazano powyżej.
Korzystając z przykładowych szczegółów błędu: csum = 4 . Użyj tego numeru w dyrektywie ogonowej następującego oświadczenia:

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

Przydaje się to wyrzucić do pliku (np. > csums.txt)

Wypróbowałem kilka sugerowanych metod wyszukiwania i-węzłów i wszystkie spotkały się z ograniczonym, jeśli w ogóle, sukcesem.

znak
źródło
o ile rozumiem, używasz ogona, aby ograniczyć liczbę wyświetlanych linii i zignorować duplikaty. Polecam użyć, sort | uniqaby pozbyć się duplikatów, tak:dmesg | grep "checksum error at" | cut -d\ -f24- | sed 's/.$//' | sort | uniq
niklasfi
3

Tak, mapowanie z INODE lub numeru bloku z powrotem na nazwę pliku może być trudne. Jeśli jesteś naprawdę zainteresowany, możesz wypróbować coś takiego i zobaczyć, które pliki należy skopiować ... mimo wszystko, jeśli plik jest zły, powinien zgłosić błąd podczas kopiowania. Wcześniej użyłem tego typu techniki.

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

 where mount-point is the ROOT node/mount-point of the affected filesystem
mdpc
źródło
Uruchamiając go teraz, mam nadzieję, że coś zmieni. Dziękuję za radę, poinformuję cię o wyniku.
RedHack,
1
Przykro mi to mówić, że nie działa = / znalazł pierwszy plik powodujący nieusuwalny błąd, ale następnie wysyła komunikat: „nieaktualny uchwyt pliku” do terminala, chyba że go zakończę. Owszem, znalazł plik, ale teraz nie mogę się dowiedzieć, jak się go pozbyć. Będę musiał skontaktować się z listą mailingową BTRFS.
RedHack,
Możesz przenieść go do specjalnego katalogu, a następnie wykluczyć z dalszego wyszukiwania.
mdpc
1
Nie przesuwa się ani nie kopiuje, po prostu mówi mi, że uchwyt pliku jest nieaktualny. Nie mogę nawet ls.
RedHack,
Jeśli używasz cp -v, można również monitorować postęp: find / -type f -exec cp -v {} /dev/null \; 2> corrupted-files.txt. Jednak /proc/kcoreplik może być ogromny (mój miał 128 TB), więc operacja kopiowania prawdopodobnie się zawiesi. Ponieważ /prockatalog zawiera specjalne magiczne pliki, nie musimy ich sprawdzać. Wyklucz /prockatalog:sudo find / -type f -and -not -path /proc -exec cp -v {} /dev/null \; 2> corrupted-files.txt
ceremcem
2

dmesgpoda szczegółowe informacje na temat plików związanych z błędami sumy kontrolnej, których nie można naprawić. Komunikaty zwykle wyglądają następująco: „BTRFS: błąd sumy kontrolnej przy logicznym [...] w dev [...], sektorze [...], root [...], i-węzle [...], offset [ ...], długość [...], linki [...] (ścieżka: [...]) "; ostatnia informacja to bezwzględna ścieżka do uszkodzonego pliku.

arrrr
źródło
1

Przybyłem tutaj, szukając „błędu niemożliwego do naprawienia” z BTRFS. Powyższy grep nie działał dla mnie; Musiałem zamiast tego użyć:

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

Zwróć uwagę, w jaki sposób ścieżka jest zależna od początku podobjętości - brak wskazania, która podobjętość jest w środku. Na szczęście nie stanowiło to dla mnie problemu.

crusaderky
źródło
Co to jest somepath/somefile.txt? Wygląda na to, że wpisujesz je jako osobne polecenie - czy jest to wynik działania wpisanego polecenia? Jeśli to wszystko ma być jednym wierszem poleceń, nie rozbijaj wierszy poleceń dla celów wyświetlania - po prostu umieść go w odpowiedzi jako jedną długą linię. Ale co to jest? Czy udostępniasz dwa dane wejściowe sort(potok i plik)? Czy ma somepath/somefile.txtto być plik wyjściowy? (Określanie plików wyjściowych nie jest zbyt pomocne, chyba że są to pliki pośrednie, których używasz ponownie. Ludzie wiedzą, jak radzić sobie z wynikami; np. Za pomocą pipingu.)
Scott
Czy to odpowiada na pierwotne pytanie? Nie umiem powiedzieć
Mówię: Przywróć Monikę
@TwistyImpersonator Cóż, to (IMO) wyraźnie miało być alternatywą dla odpowiedzi Marka , która uzyskała osiem głosów (i jest rozwinięciem odpowiedzi arrrra ).
Scott,
1
@Scott drugi wiersz był przykładowym wyjściem polecenia.
crusaderky