Jak działa peeling btrfs i co robi?

18

Co dokładnie robi peeling btrfs? Według strony podręcznika, która jest całkowicie niejasna, wykonuje pewne sprawdzanie błędów. Jakiego rodzaju sprawdzanie błędów? Jaka jest niezawodność? Czy jest w stanie odzyskać niektóre błędy? Jak to działa? Czy to działa na każdym dysku btrfs?

Petr
źródło
3
Kontekst: BTRFS przechowuje sumy kontrolne, więc zawsze jest w stanie stwierdzić, czy plik (lub metadane) jest w porządku, czy też został uszkodzony. Prawie wszystkie inne systemy plików, takie jak ext4, nie mają sumy kontrolnej, więc nie powstrzymają cię przed odczytaniem pliku, który został uszkodzony przez zły dysk (który wkrótce umiera i już zaczął uszkodzić dane). Jest to ważna funkcja ochrony danych w BTRFS, która umożliwia czyszczenie.
basic6,

Odpowiedzi:

23

Nie wiem, czy robi cokolwiek innego, ale wiem, że co najmniej btrfs scrubwykonuje szorowanie danych na pełnym dysku. Zasadniczo odczytuje wszystkie dane * na dysku, przelicza sumę kontrolną i porównuje obliczoną sumę kontrolną z zapisaną. Gdy zapisane i ponownie obliczone sumy kontrolne nie pasują, system wie, że występuje uszkodzenie.

Po wykryciu uszkodzenia zachowanie zależy od konfiguracji dysku. Na przykład, jeśli masz RAID 1 (dublowanie), btrfs scrubmożesz naprawić uszkodzone dane, kopiując nieuszkodzoną wersję z innego dysku. Jeśli wszystkie kopie niektórych danych są uszkodzone (np. Uszkodzenie wielu dysków lub brak kopii zapasowych), wtedy niewiele btrfs scrubmożna zrobić, oprócz ostrzeżenia.

Powodem tego jest to, że dyski twarde są niezawodne w odczytywaniu i zapisywaniu tylko w 99,99999999999999%. Tak więc co kilka terabajtów danych We / Wy może wystąpić błąd. Chociaż można wykryć (i naprawić) błędy (i je naprawić, zakładając, że nadmiarowa kopia jest nadal ważna) podczas normalnego dostępu do dysku, rutynowe czyszczenie całego dysku jest w stanie znaleźć i naprawić błędy, zanim zgromadzi się wystarczająco dużo, aby wszystkie kopie tych samych danych zostały uszkodzone.

* Używam „danych” zamiast „pliku”, aby uwzględnić również metadane. Btrfs przechowuje pliki i odpowiednie metadane (w tym sumy kontrolne) w blokach danych, z których wszystkie są sumowane i sprawdzane przez btrfs scrub.

Zobacz też:

Mark Haferkamp
źródło
Nie liczyłem, ale zgaduję, że twoja niezawodność jest o kilka rzędów wielkości mniejsza. Dyski twarde dla konsumentów są zwykle podawane z szybkością UBE 10 ^ -14 bitów. Innymi słowy, jeden nieodwracalny błąd odczytu na odczyt 10 ^ 14 bitów. Problem polega na tym, że dotyczy to całego sektora; albo dostajesz pełny sektor, albo nic nie dostajesz (albo taki jest pomysł; ciche błędy to zupełnie kolejna filiżanka herbaty). Zatem błąd jest wzmacniany przez rozmiar sektora, który w przypadku dysków Advanced Format ma 32 768 bitów. Zatem rzeczywisty poziom błędu jest bardziej podobny do 10 ^ -10 do 10 ^ -11 błędów odczytu.
CVn
@ MichaelKjörling Nie sądzę, żeby sektory miały tutaj znaczenie ... Mam zapisy ostatnich 29 operacji btrfs na dwóch wewnętrznych dyskach twardych 1 TB. Ilość danych wahała się między 270 a 300 GiB (w sumie od 1,35 * 10 ^ 14 do 1,49 * 10 ^ 14 bitów odczytanych dla wszystkich połączonych operacji scrub). Podczas tych operacji znaleziono 3 błędy. Zakładając, że nie-szorowanie we / wy nie spowodowało ani nie spowodowało stałej rotacji bitów, to tylko 2 do 2 ¼ krotności oczekiwanego poziomu błędu dla dysków o „99,999999999999% niezawodności”. Nawet z 4096-bitowymi sektorami, myślę, że twój argument spodziewałby się, że na moich dyskach pojawiły się tysiące błędów.
Mark Haferkamp,
@ MichaelKjörling O ile rozumiem specyfikacje producenta (Seagate i WD), to trochę błędów, a nie całe sektory giną. A liczba dziewiątek w odpowiedzi jest nawet optymistyczna: 100-1/10^14ma 16 dziewiątek, a post ma tylko 14 (co odpowiada 10 ^ 12).
Luc
@ Luc Dobrze, że śmierć sektora jest mniej powszechna; umierające sektory oznaczają, że dysk faktycznie (może) ulega awarii i może wymagać wymiany. Błędy bitowe prowadzą tylko do cichego uszkodzenia danych, które mogą być na tyle głośne, że można je przywrócić z kopii zapasowych. Uwaga matematyczna: Rzeczywiste obliczenia są 1-10^nnastępnie przeliczane na procenty, ponieważ ludzie nie lubią wiodących miejsc po przecinku. Ponadto w poprzednim komentarzu nie wspomniałem, że dyski są w RAID 1 (stąd te same dane 270-300 GiB są na każdym z nich), co naprawia kolejny pozorny błąd obliczeniowy.
Mark Haferkamp
5

Opierając się na doskonałej odpowiedzi Marka Haferkampa, btrfs scrubczytanie wszystkich danych zamiast wszystkich plików jest kluczową właściwością i tak naprawdę czyni je tak użytecznymi. Pamiętaj, że btrfs ma wbudowaną obsługę RAID. Załóżmy, że masz system plików btrfs obejmujący dwa dyski skonfigurowane do korzystania z RAID1. W takim przypadku podczas zapisu do pliku zapis ten jest replikowany na oba dyski. (Sprawa komplikuje się na bardziej złożonym przykładzie, ale w tym prostym przypadku tak się zawsze dzieje.) Jednak gdy czytasz z tego pliku, odczyt trafi tylko na jeden dysk (ponieważ marnowanie tego pliku jest marnotrawstwem chyba że pierwsza kopia jest z jakiegoś powodu bezużyteczna).

Teraz powiedz, że twój drugi dysk btrfs degraduje i zaczyna uszkadzać dane w twoim systemie plików. Kiedy czytasz bloki z tego dysku, btrfs zauważy, że suma kontrolna nie pasuje i przywróci blok wewnątrz pasma ze znanej dobrej kopii - kopii na pierwszym dysku. Zwróci dane do wywołania aplikacji read()(lub cokolwiek innego), jakby nic się nie wydarzyło.

Ale co, jeśli btrfs nie zdecyduje się na odczyt z drugiego dysku? Pamiętaj, że są dwie kopie, dzięki czemu można odczytać z pierwszego lub drugiego dysku. Jeśli odczyta z pierwszego dysku, nie zauważy niczego złego. Jedyny raz zauważy, że coś jest nie tak, kiedy pierwszy dysk również ulegnie degradacji. Teraz naprawdę masz problemy, ponieważ jest już za późno, aby odzyskać dane - kopia drugiego dysku została na jakiś czas uszkodzona, a pierwsza kopia (która byłaby używana do przywrócenia drugiego dysku) jest teraz uszkodzona!

W tym miejscu btrfs scrubpojawia się. Odczytuje wszystkie dane , nie wszystkie pliki. Obejmuje to metadane, ale także wtórne kopie plików, które normalnie nie byłyby w ścieżce odczytu. Gdy czyta te wtórne kopie, stwarza to możliwość korekcji błędów wewnątrz pasma btrfs, aby uruchomić i przywrócić dane z kopii zapasowej.

strugee
źródło
2
Czy jesteś pewien, że w RAID1 odczyt odbywa się tylko z 1 dysku? Przynajmniej w przypadku mdadm RAID tak nie powinno być. Odczyt powinien odbywać się równolegle z obu dysków, ale różnych danych, co oznacza, że ​​powinien być dwa razy szybszy niż odczyt z jednego dysku. Zwiększenie wydajności odczytu jest jedną z głównych cech macierzy RAID 1.
Petr
@Petr tak, masz rację. poszczególne bloki są odczytywane tylko z jednego dysku.
strugee
@Petr: Aby rozwinąć, - w normalnym użyciu ani MDADM, ani BTRFS nie odczytują obu kopii tych samych danych z obu dysków. Czytają tylko jedną kopię. - MDADM jest w stanie wyrównać obciążenie i rozdzielić odczyt między kopie, aby uzyskać dwukrotnie większą prędkość odczytu. (ponieważ wszystkie kopie A trafiają na dysk 1, a wszystkie kopie B trafiają na dysk 2. Ponieważ mdadm użyje dokładnie 2 dysków). - BTRFS ma więcej trudności. (ponieważ kopia A i B przejdzie na dowolne 2 dyski (spośród 2 lub więcej dysków), które w tej chwili mają najwięcej wolnego miejsca - tj. 2 kopie zostaną losowo rozmieszczone na wszystkich obecnych dyskach)
DrYak
a co do bezpieczeństwa: - zarówno MDADM, jak i BTRFS wypróbują drugą kopię w razie problemu. - w przypadku MDADM jedynym problemem, który może wykryć, jest „dysk nie odpowiada” (ponieważ nie ma rzeczywistego pojęcia o plikach przechowywanych powyżej) - w przypadku BTRFS może dodatkowo wykryć ciche uszkodzenie danych (ponieważ dane są sumowane, i tak warstwa RAID BTRFS wie, czy jednej kopii można zaufać, czy też musi pobrać inną)
DrYak,
wreszcie, jeśli chodzi o RAID5 / 6: - w MDADM to po prostu działa . (Ale nie wykryje cichego zepsucia) - w BTRFS ciche działanie nie jest na razie obsługiwane (ponieważ łatwiej jest po prostu pobrać kolejną kopię (w RAID1) niż wykonywać obliczenia z kodem wymazywania, aby odgadnąć, który element paska jest uszkodzony i powinien zostać przebudowany z pozostałych danych / parzystości). Innymi słowy: na dzień dzisiejszy (sierpień 2017 r.) Nie korzystaj z RAID5 / 6 btrfs.
DrYak,