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.