Czy BTRFS gwarantuje spójność danych w przypadku awarii zasilania?

11

Jak podaje wyłącznie ZFS ,ZFS jest uważany za niewrażliwy ZFS akceptuje fakt, że może być podatny na awarie zasilania.

Nie mogłem znaleźć takiego oświadczenia dla BTRFS. Czy jest (lub zaprojektowany / ma być) trwały między przerwami w dostawie prądu?

ceremcem
źródło
Przeczytaj ponownie. „Jeśli twoja pula jest uszkodzona z powodu awarii sprzętu lub awarii zasilania, zobacz Naprawianie uszkodzeń w całej puli pamięci ZFS.” (..) Próba odzyskania puli za pomocą zpool clear -F polecenia
Michael D.
Więc mówisz: „ZFS nie gwarantuje spójności danych, próbuje jedynie odzyskać”?
ceremonie
Tak. Istnieje kilka pamięci podręcznych, wbudowana pamięć podręczna dysków twardych, pamięci podręczne / bufory systemu operacyjnego. W pewnym momencie nie jest synclub flushktóry pisze pamięci podręcznej na dysku, lub nie podczas przerwy w zasilaniu, że dane zostaną utracone. ZFS może działać idealnie, jeśli dysk twardy jest w dobrej kondycji i nie występują przerwy w dostawie prądu (lub UPS jest podłączony, aby prawidłowo wyłączyć komputer w przypadku awarii). Czego nie możesz powiedzieć o FAT32.
Michael D.
2
Utrata danych nie stanowi problemu, ponieważ jest naturalną konsekwencją wystąpienia utraty zasilania, ale spójność danych jest problemem w moim przypadku. System plików może utracić dane w tak ekstremalnych warunkach, ale nie powinien powodować niespójności danych na dysku. Potrzebuję funkcji ciągłego tworzenia migawek, więc będę kontynuować korzystanie z BTRFS. NILFS2 jest jednak najbliższą opcją w moim przypadku.
ceremonie
1
Zadałem pytanie na #btrfs IRC, powiedzieli should be ok if your hw isn't "buggy"gdzie nie znaczy „buggy” your hw has correct flush/barrier semantics. Zamieściłem link do tego pytania na IRC, mam nadzieję, że ktoś poświęci trochę czasu na opracowanie; ale na razie to jest to.
Cześć Anioł,

Odpowiedzi:

5

Zadałem pytanie na #btrfs IRC, powiedzieli should be ok if your hw isn't "buggy"gdzie nie znaczy „buggy” your hw has correct flush/barrier semantics.

TL; DR: Oznacza to, że btrfs jest chroniony przed uszkodzeniem danych spowodowanym utratą zasilania w podobny sposób jak ZFS.

Oto dlaczego: Ogólna idea ZFS i btrfs jest podobna. Oba wykorzystują drzewa Merkle jako strukturę danych . Zapisy mogą wymagać aktualizacji wielu bloków na dyskach. System plików obsługuje to, zapisując nowe dane w pustych blokach (nawet jeśli istniejący plik jest modyfikowany, więc nie trzeba modyfikować bloków odzwierciedlających stary stan) i budując nowe zaktualizowane drzewo. Gdy wszystkie ciężkie podnoszenie zostanie wykonane, a dane + zaktualizowane drzewo zostaną zapisane na dysku, wskaźnik głowy zostanie zaktualizowany do nowego drzewa, dzięki czemu zmiana będzie widoczna.

Oto, jak mają się zachowywać zapisy do pliku:

  1. Zapisuj dane do wolnych bloków na dysku.
  2. Zrób kopię drzewa Merkle *, zaktualizuj go zgodnie ze zmianami zapisanymi w (1).
  3. Poproś sprzęt o przepłukanie danych na dysk - sprzęt zapisuje wszystkie oczekujące dane.
  4. Zaktualizuj wskaźnik głowy do nowego drzewa Merkle.
  5. Darmowe stare bloki, które nie są już potrzebne.

W przypadku utraty zasilania po (4) transakcja jest zakończona. W przypadku utraty zasilania w krokach (1) do (3) system plików powróci do starego stanu (dane zapisane w kroku (1) zostaną utracone, ale system plików będzie spójny). Pamiętaj, że nie ma potrzeby sprawdzania błędów systemu plików, co oznacza, że ​​system plików jest dostępny natychmiast, co jest dużą zaletą (sprawdzanie dużych systemów plików może trwać bardzo długo!).

Oto przykład, jak coś może pójść nie tak z „buggy” sprzętem:

  1. Zapisuj dane do wolnych bloków na dysku.
  2. Zrób kopię drzewa Merkle *, zaktualizuj go zgodnie ze zmianami zapisanymi w (1).
  3. Poproś sprzęt o wypłukanie danych na dysk - sprzęt potwierdza zakończenie, ale nie jest całkowicie opróżniany (np. Dane mogą pozostać w pamięci podręcznej zapisu).
  4. Zaktualizuj wskaźnik głowy do nowego drzewa Merkle. Dane te są zapisywane na dysku przed innymi oczekującymi danymi (np. Ponieważ głowa dysku znajduje się we właściwej lokalizacji).
  5. Dane zapisane w krokach (1) i (2) zostają zapisane na dysk.
  6. Darmowe stare bloki, które nie są już potrzebne.

System plików stanie się niespójny, jeśli nastąpi utrata zasilania między (4) a (5) lub podczas wykonywania kroku (5). W konsekwencji drzewo Merkle i / lub dane mogą być tylko częściowo zapisane, powodując niespójność systemu plików.

W praktyce należy zachować szczególną ostrożność podczas korzystania z kontrolerów RAID . Zwykle wyłączają pamięci podręczne zapisu na dysku i zamiast tego używają własnej pamięci podręcznej zapisu. Istnieją dwa typowe sposoby, aby coś poszło nie tak:

* Upraszczam tutaj. W rzeczywistości nie jest konieczne kopiowanie całego drzewa. Należy dodać tylko te części, które uległy zmianie - pozostałe części można współdzielić między starym i nowym drzewem .

Jaskółka oknówka
źródło
Dziękuję za to miłe wytłumaczenie. Jednak potrzebne jest cytowanie wszystkich roszczeń, w tym rozmowy IRC. Twoja odpowiedź zostanie zaakceptowana.
ceremonie
Odnośnie dzienników IRC odnosiłem się tutaj do komentarza @ Hi-Angel. Może może podać referencje? Dodałem jednak kilka innych odniesień do innych części.
Martin
BTRFS nie korzysta z drzew Merkle, używa drzewek B (stąd „B-TRee FileSystem”), a twoje przykłady awarii wymagają, aby bariery zapisu nie były poprawnie implementowane przez sprzęt (co w rzeczywistości jest raczej rzadkim przypadkiem) . W przeciwnym razie dobra odpowiedź.
Austin Hemmelgarn
Drzewa używane przez btrfs to tak naprawdę zarówno B-drzewa (ta właściwość dotyczy „kształtu” drzewa i faktu, że są one samowyważące) oraz drzewa hash / Merkle (liście zawierają skrót niektórych danych, węzły zawierają skrót ich dzieci, dlatego każda zmiana rozprzestrzenia się aż do korzenia). Możliwość sprawdzenia tych skrótów pozwala btrfs i ZFS wykryć uszkodzone dane (i odczytać je z innego dysku, jeśli jest używany w trybie „dublowania”).
Martin