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 )
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
journal
urządzeńtune2fs
lub 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.
SYNC
hronous MountsKiedy bezpieczeństwo jest najważniejsze, montaż systemu plików z
sync
opcją 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ć.
źródło
sync
po 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łaniesync
spowoduje opróżnienie wszystkich oczekujących zapisów, ale nadal istnieje okno (nawet krótkie) między momentem powrotu zapisu a wywołaniemsync
powrotu, podczas którego dane mogą nie zostać jeszcze zapisane na dysk.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) idata=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 obecnieordered
jest to domyślne w większości dystrybucji Linuksa ...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.
źródło
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ć.
źródło