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?
18
Odpowiedzi:
Nie wiem, czy robi cokolwiek innego, ale wiem, że co najmniej
btrfs scrub
wykonuje 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 scrub
moż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 niewielebtrfs scrub
moż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ż:
źródło
100-1/10^14
ma 16 dziewiątek, a post ma tylko 14 (co odpowiada 10 ^ 12).1-10^n
nastę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.Opierając się na doskonałej odpowiedzi Marka Haferkampa,
btrfs scrub
czytanie 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 scrub
pojawia 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.źródło