„Bezpieczna” konfiguracja ext4 dla systemów działających bez nadzoru

18

Mam system z systemem Linux, który musi działać bez nadzoru przez długi czas. System wykorzystuje przemysłową kartę CF do przechowywania. Przez większość czasu nie ma zapisywania do flashowania, chociaż od czasu do czasu niektóre dane / ustawienia konfiguracyjne można modyfikować. System musi być odporny na awarie zasilania.

Chciałbym do tego użyć ext4. Jaki jest najlepszy sposób skonfigurowania ext4 dla tego rodzaju konfiguracji? Mając na uwadze:

  • Wydajność wcale nie stanowi problemu (szczególnie wydajność zapisu)
  • Po utracie zasilania system powinien zawsze uruchamiać się w stanie czystym, nawet jeśli oznacza to utratę danych zapisanych w ciągu ostatnich kilku sekund
  • Jeśli można uniknąć fsck, tym lepiej.

(Mam świadomość tego powiązanego pytania: Zapobieganie uszkodzeniu danych na dysku ext4 / Linux po utracie zasilania )

Grodriguez
źródło

Odpowiedzi:

11

Pracowałem nad budowaniem systemu automatyzacji na łodziach i istniała warunek wstępny: w każdej chwili moc mogła spaść i wszystko musiało ponownie poprawnie wzrosnąć.

Moim rozwiązaniem było zbudowanie opartego na Gentoo systemu initramfs z tylko folderem rw do aplikacji i konfiguracji (jest to podejście stosowane przez każdego producenta routera / zapory ogniowej). To rozwiązanie dodaje dodatkową warstwę złożoności podczas aktualizacji systemu, ale zapewniamy, że system ZAWSZE zostanie uruchomiony.

Jeśli chodzi o konkretne pytanie, powinieneś pozostawić włączony dziennik EXT4 , aby mieć szybszy fsck (kilka sekund), użyć opcji montowania danych = dziennik , obniżyć opcję zatwierdzenia lub użyć opcji synchronizacji , aby bufory były zawsze puste.

Refs: http://www.kernel.org/doc/Documentation/filesystems/ext4.txt

Giovanni Toraldo
źródło
Dobry! Jeśli aplikacja nie zapisuje zbyt dużej ilości danych, powinieneś być zadowolony z opcji synchronizacji.
Giovanni Toraldo
1
Lepszym miejscem do obejrzenia jest dokumentacja jądra Linux: kernel.org/doc/Documentation/filesystems/ext4.txt Włącz dane = dziennik i zatwierdzanie = nrsec w celu zminimalizowania potencjalnej utraty danych (* == domyślnie)
Giovanni Toraldo
Czasowe zatwierdzenia są zdecydowanie pomocne - uważam, że możesz skrócić tylko do 1-sekundowych interwałów (choć z MAJOROWĄ karą wydajności za operacje wymagające intensywnego zapisu), ale jeśli nie możesz sobie pozwolić na 1 sekundę utraty danych, masz większe problemy;)
voretaq7
2
jednym z głównych pozytywnych efektów kronikowania jest to, że odzyskiwanie po awarii polega na odtwarzaniu najnowszych niezatwierdzonych zmian, co jest naprawdę szybsze niż sprawdzanie całego woluminu pod kątem niespójności. Jeśli to jest twój główny problem, powinieneś użyć domyślnego EXT4 i być szczęśliwym.
Giovanni Toraldo
1
@ „Zgubienie” danych przez Grodrigueza może być dowolne, od „Plik już nie istnieje” do „Dlaczego w mojej bazie danych jest fragment jądra?” - Wszystko zależy od tego, co jest „zagubione” :)
voretaq7
12

Przedmówię to mówiąc, że moim zdaniem EXT (we wszystkich jego inkarnacjach) jest dość okropnym systemem plików - widziałem więcej „ interesujących ” przypadków uszkodzenia systemu plików w stosunkowo niewielkiej liczbie Linux / EXT {2,3,4} systemów, którymi administrowałem, niż w stosunkowo dużej liczbie systemów plików Not-EXT, z których miałem okazję korzystać.
Jeśli to w ogóle możliwe, spróbuj wybrać bardziej niezawodny system plików. Podziękujesz sobie, gdy stanie się nieuniknione.


To powiedziawszy i wszystkie moje osobiste uprzedzenia otwarte i odepchnięte na bok, EXT4 ma trzy funkcje, o których mogę myśleć, które mogą ci pomóc:

  • Journaling
    EXT4 może być systemem plików Journaled, jeśli chcesz. Włącz funkcję księgowania, (a konkretnie ustawić tryb danych-dziennika do journalurządzeń tune2fslub jako opcję montowania).
    Powoduje to spadek wydajności, ponieważ wszystkie dane muszą zostać zapisane w dzienniku EXT, zanim zostaną one „zatwierdzone” w systemie plików (każdy zapis zasadniczo odbywa się dwa razy), ale zapewnia, że ​​zawsze można odzyskać, o ile odtworzenie dziennika zapewni Ci problemy.

  • SYNChronous Mounts
    Kiedy bezpieczeństwo jest najważniejsze, montaż systemu plików z syncopcją jest zawsze dobrym pomysłem. Wymusza to natychmiastowe zapisywanie na dysk - znowu jest to hit wydajności, ale dobry pomysł, jeśli spodziewasz się awarii zasilania lub przypadkowych nieznajomych wyciągających kartę CF.

  • Ogranicz jak najwięcej systemów plików do zapisu Ten nie jest specyficzny dla EXT, ale zbyt powszechna filozofia Linuksa „po prostu utwórz jedną dużą partycję root i zrzuć na nią wszystko” jest, szczerze mówiąc, głupia . Tworzenie właściwej struktury systemu plików ( /, /var, /usr, /home, etc ...) i zamontować jak wiele systemów plików tylko do odczytu, jak to możliwe.
    Kiedyś była to powszechna rada dla systemów uniksowych ze względu na bezpieczeństwo, ale w twoim przypadku ma to dodatkową zaletę: nie możesz uszkodzić systemu plików, jeśli nie możesz do niego pisać.

voretaq7
źródło
Funkcjonalność w pełni synchronicznych montowań nie jest równoważna zwykłemu wywoływaniu syncpo każdym zapisie - synchroniczne montowania nie powrócą (a przynajmniej nie powinny) wracać z zapisu w systemie plików, dopóki dane nie znajdą się na dysku. Wywołanie syncspowoduje opróżnienie wszystkich oczekujących zapisów, ale nadal istnieje okno (nawet krótkie) między momentem powrotu zapisu a wywołaniem syncpowrotu, podczas którego dane mogą nie zostać jeszcze zapisane na dysk.
voretaq7
Który system plików polecasz? Czy potrafisz skwantyfikować swoje doświadczenia?
Mark Wagner,
@embobo moje doświadczenia są całkowicie anegdotyczne: nigdy nie testowałem w stresie rodziny systemów plików EXT, ale jednym z incydentów, który pojawia się w mojej głowie, jest przypadek, gdy serwer Squid cierpi z powodu „Gdzie poszły wszystkie moje i-węzły?!?” - system plików został narzucony, a następnie jakoś oznaczony jako czysty, ale każdy i-węzeł został jakoś pozostawiony w stanie zastrzeżonym, ale nigdy nie przywołanym. Fsck, aby naprawić ten konkretny bałagan był pozytywnie EPIC (skończyliśmy właśnie tworząc nowy FS). To był dzień, w którym straciłem zaufanie do rodziny systemów plików EXT.
voretaq7
@Grodriguez Re: Kronikowanie, trzy opcje to data=journal(to, co opisałem powyżej), data=ordered(metadane są kronikowane. Dane są zapisywane na dysku przed przesłaniem metadanych do systemu plików) i data=writeback(co w rzeczywistości nie jest kronikowaniem / ochroną danych - Złe rzeczy może się zdarzyć po awarii, np. śmieci w środku plików). Sądzę, że obecnie orderedjest to domyślne w większości dystrybucji Linuksa ...
voretaq7
2
Oprócz „Ograniczaj ilość zapisywalnych systemów plików tak bardzo, jak to możliwe”: W debian wiki jest przewodnikiem, aby zrobić to dokładnie z wieloma przykładami dotyczącymi demonów, które wymagają specjalnego traktowania. Powinien również obowiązywać w przypadku większości innych wersji: wiki.debian.org/ReadonlyRoot
krissi
7

EXT4 nie wydaje się najlepszym wyborem dla twojego systemu; Sugerowałbym spojrzenie na system plików o strukturze dziennika. Działają one, traktując dane jako stały strumień aktualizacji zapisu względem strumienia wirtualnego, ze wskaźnikiem wskazującym najnowszą „głowę”. Aktualizacje są wykonywane przez zapisywanie danych i metadanych w pamięci, a następnie aktualizowanie wskaźnika. W przypadku awarii po zapisie, ale przed aktualizacją wskaźnika, najnowsze dane są tracone, ale system plików jest spójny.

Dwa kandydujące systemy plików to LogFS i NILFS . Oba są dostępne w głównym jądrze Linuksa.

Steve Smith
źródło
1

Intryguje mnie urządzenie, które budujesz. Dążysz do niezawodności urządzenia osadzonego podczas korzystania z systemu plików, który tak naprawdę nie jest odpowiedni.

Ext4 (i rodzina) to świetny system plików ogólnego zastosowania z (jak sądzę) wieloma miliardami godzin użytkowania na zróżnicowanym sprzęcie i różnych przypadkach użycia. Jednak to, o co prosisz, tak naprawdę nie pasuje do ext4. Wskaźniki z voretaq7 i Giovanni pomogą w pełni wykorzystać ext4, jeśli trzeba, ale prawdziwą odpowiedzią jest użycie czegoś bardziej dostosowanego do twoich wymagań. Steve dał ci kilka opcji. Jeśli nadal będziesz pobierał moc z ext4 FS, w końcu dostaniesz bałagan.

Jeśli budujesz ten jednorazowy system, powinieneś wybrać coś bardziej odpowiedniego lub zaakceptować, że w pewnym momencie pojawią się problemy. Może to być tylko 1 przerwa w dostawie prądu na 100 lub 1 na 1000. To może być wystarczająco dobre, abyś zaryzykował, a urządzenie może prawdopodobnie działać przez długi czas (lata) bez żadnej ręcznej interwencji.

Jeśli jest to produkt, który zamierzasz szeroko wdrożyć / wprowadzić na rynek, możesz wybrać coś bardziej odpowiedniego. Lub podejmujesz decyzję biznesową, aby wesprzeć odsetek urządzeń, które co roku będą się cegły i albo trzeba je wymienić, albo ręcznie, aby je odzyskać.

maź
źródło