Czy systemy plików kronikowania gwarantują ochronę przed uszkodzeniem po awarii zasilania?


Odpowiedzi:


21

Nie ma gwarancji. System plików kroniki jest bardziej odporny i mniej podatny na korupcję, ale nie jest odporny.

Cały dziennik jest listą operacji, które zostały ostatnio wykonane w systemie plików. Kluczowe jest to, że zapis księgowy jest dokonywany przed operacjami. Większość operacji ma wiele kroków. Usunięcie pliku może na przykład pociągać za sobą usunięcie wpisu pliku ze spisu treści systemu plików, a następnie oznaczenie sektorów na dysku jako wolnych. Jeśli coś się stanie między dwoma krokami, kronikowany system plików może natychmiast powiedzieć i wykonać niezbędne czyszczenie, aby wszystko było spójne. Nie dzieje się tak w przypadku niezarejestrowanego systemu plików, który musi przeglądać całą zawartość woluminu, aby znaleźć błędy.

Chociaż dziennikowanie jest znacznie mniej podatne na korupcję niż brak księgowania, nadal może wystąpić korupcja. Na przykład, jeśli dysk twardy działa nieprawidłowo mechanicznie lub zapisy do samego dziennika nie powiodły się lub zostały przerwane.

Podstawowym założeniem kronikowania jest to, że pisanie pozycji kroniki jest zwykle znacznie szybsze niż faktyczna transakcja, którą opisuje. Tak więc okres między systemem zamawiającym zapis (dziennik) a spełnianiem go przez dysk twardy jest znacznie krótszy niż w przypadku zwykłego zapisu: węższe okno, w którym mogą się nie udać, ale nadal istnieje okno.

Dalsza lektura


Czy mógłbyś wyjaśnić, dlaczego tak jest? Być może mógłbyś podać przykład, w jaki sposób korupcja wystąpiłaby w określonym scenariuszu.
Nathan Osman

1
@George Edison Zobacz moją rozszerzoną odpowiedź.
Andrew Lambert

2
Ten ostatni bit jest niepoprawny; nie ma okna, aby coś poszło nie tak. Ponieważ rejestruje, co zamierza zrobić, zanim zacznie to robić, operację można wznowić po awarii zasilania, niezależnie od tego, w którym momencie ma ona miejsce. Jest to kwestia zamawiania, a nie czasu.
psusi

@psusi nadal jest okno do przerwania zapisu do dziennika. Zapisy w dzienniku mogą wydawać się atomowe w systemie operacyjnym, ale nadal zapisują się na dysku.
Andrew Lambert,

5
@Zdziwione, że są atomowe, ponieważ mają numery sekwencyjne i / lub sumy kontrolne, więc zapis do dziennika jest zapisany w całości lub nie. Jeśli nie jest napisane w całości, jest po prostu ignorowane po ponownym uruchomieniu systemu i nie wprowadzono żadnych dalszych zmian w fs, więc pozostaje spójny.
psusi

18

Nie.

Najpopularniejszy rodzaj kronikowania, zwany kronikowaniem metadanych, chroni jedynie integralność systemu plików, a nie danych. Obejmuje to xfsi ext3/ lub ext4w data=orderedtrybie domyślnym .

Jeśli system plików bez kronikowania ulegnie awarii, zostanie sprawdzony przy fscknastępnym uruchomieniu. fsckskanuje każdy i- węzeł w systemie plików, szukając bloków oznaczonych jako używane, ale nieosiągalnych (tj. bez nazwy pliku) i zaznacza te bloki jako nieużywane. Wykonanie tego zajmuje dużo czasu.

Dzięki systemowi kronikowania metadanych zamiast robić fsck, wie, które bloki były w trakcie zmiany, więc może oznaczyć je jako wolne bez przeszukiwania całej partycji.

Istnieje mniej powszechny rodzaj kronikowania, zwany kronikowaniem danych, co ext3ma miejsce, jeśli zostanie zamontowany z data=journalopcją.

Stara się chronić wszystkie dane, pisząc nie tylko listę operacji logicznych, ale także całą zawartość każdego zapisu do dziennika. Ale ponieważ zapisuje dane dwa razy, może być znacznie wolniejszy.

Jak zauważyli inni, nawet to nie stanowi gwarancji, ponieważ dysk twardy mógł powiedzieć systemowi operacyjnemu, że przechował dane, chociaż w rzeczywistości wciąż znajdował się w pamięci podręcznej dysku twardego.

Aby uzyskać więcej informacji, zapoznaj się z artykułem Wikipedia Fileing System System i sekcją Data Mode w dokumentacji ext4 .


1
+1 za rozróżnienie między uszkodzeniem systemu plików a uszkodzeniem danych. To niewielkie rozróżnienie jest dość niefortunne w praktyce.
SplinterReality

Przepraszam za moją całkowitą ignorancję, ale czy to nie data=journalma żadnego sensu?
boehj

Ponownie, system operacyjny wie, kiedy dysk buforuje dane i zmusza go do opróżnienia, gdy jest to potrzebne, aby zachować spójny fs. Twój plik danych może oczywiście zostać utracony lub uszkodzony, jeśli aplikacja, która zapisywała go, gdy nastąpiła awaria zasilania, nie robiła tego ostrożnie, i dotyczy to tego, czy używasz data = Journal.
psusi

@psusi nie ważne jak ostrożny program jest zapisywanie danych, wiele dysków twardych cicho uszkodzenie danych na czytanie stackoverflow.com/q/34141117/3338098
user3338098

@ user3338098, dyski, które dyskretnie uszkadzają dane, są strasznie zepsute i nie powinny być nigdy używane, i są zupełnie inną rozmową niż uszkodzenie spowodowane przez oprogramowanie działające niewłaściwie.
psusi

8

System plików nie może zagwarantować spójności swojego systemu plików w przypadku awarii zasilania, ponieważ nie wie, co zrobi sprzęt.

Jeśli dysk twardy buforuje dane do zapisu, ale informuje system operacyjny, że je zapisał i nie obsługuje odpowiednich barier zapisu, wówczas zapis poza kolejnością może wystąpić, gdy wcześniejszy zapis nie uderzył w talerz, ale późniejszy ma. Zobacz ten ServerFault odpowiedź więcej szczegółów.

Również położenie głowy na magnetycznym dysku twardym jest kontrolowane za pomocą elektromagnesów. Jeśli w trakcie zapisu nastąpi awaria zasilania, niektóre dane mogą być nadal zapisywane podczas ruchu głowic, co powoduje uszkodzenie danych w blokach, których system plików nigdy nie zamierzał zapisywać.


Czy oprogramowanie układowe napędu nie jest wystarczająco inteligentne, aby zawiesić pisanie podczas chowania głowy?
Nathan Osman

@George: To zależy od napędu. Jest ich wiele i nie wiesz, jak dobrze działa Twój (tani) dysk.
camh

1
Dysk twardy informuje system operacyjny, czy korzysta z zapisu za pamięcią podręczną, a system operacyjny podejmuje kroki w celu zapewnienia, że ​​zostaną one opróżnione we właściwej kolejności. Również dyski są zaprojektowane tak, aby w przypadku awarii zasilania przestały zapisywać. Widziałem niektóre przypadki, w których sektor zapisywany w chwili utraty zasilania ulega uszkodzeniu, ponieważ nie zakończył on aktualizacji ECC (ale może być łatwo ponownie poprawnie zapisany), ale nigdy nie słyszał o uszkodzeniu losowych sektorów po utracie zasilania.
psusi

3

ZFS, który jest blisko, ale nie do końca systemem plików kronikowania, z założenia gwarantuje uszkodzenie przed awarią po awarii zasilania.

Nie ma znaczenia, czy ciągły zapis zostanie przerwany w środku, ponieważ w takim przypadku jego suma kontrolna z pewnością będzie niepoprawna, więc blok zostanie zignorowany. Ponieważ system plików kopiuje podczas zapisu, poprzednie poprawne dane (lub metadane) wciąż znajdują się na dysku i zostaną użyte zamiast tego.


2

Odpowiedź jest w większości przypadków nie:

  • Jak już powiedział Mikel , większość systemów plików kronikowania może chronić tylko metadane pliku (informacje takie jak nazwa pliku, jego rozmiar, uprawnienia itp.), A nie dane pliku (zawartość pliku). Dzieje się tak, ponieważ ochrona danych plików powoduje bardzo wolny (w praktyce bezużyteczny) system plików.
  • Ponieważ dziennik jest również specjalnym rodzajem pliku przechowywanym na dysku twardym, może zostać uszkodzony po awarii zasilania. Dlatego jeśli dziennik jest uszkodzony, system plików nie może dokończyć żadnych niekompletnych transakcji, które miały miejsce, gdy wystąpiła awaria zasilania.

Jakie wydarzenia mogą prowadzić do uszkodzenia dziennika? Jedyne, co mogłem wymyślić, to złe sektory - czy jest coś jeszcze?
Nathan Osman

Zgadza się, awarie sprzętu są typowym przypadkiem.
sakisk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.