Czy niespodziewane wyłączenia są szkodliwe dla systemu Linux, podobnie jak dla innych systemów operacyjnych? Czytaj dalej, ponieważ badamy skutki katastroficznych wyłączeń systemu w systemach plików Linux.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, społecznościowego forum z pytaniami i odpowiedziami.
Czytnik SuperUser User208554 jest ciekawy struktury plików systemu Linux i martwi się o aplikację / instalację, nad którą pracuje:
Zajmuję się tworzeniem aplikacji na płycie wbudowanej w Linuksie (działa na Debianie), np. Raspberry Pi, Beagle Board / Bone lub olimex. Płyty działają w środowisku, w którym elektryczność jest nieoczekiwanie przerywana (jest to zbyt skomplikowane, aby umieścić zasilacz itp.), A zdarzy się to każdego dnia kilka razy. Zastanawiam się, czy niespodziewane przerwy w zasilaniu spowodowałyby problem w systemie operacyjnym Linux? Jeśli jest to coś, o co powinienem się martwić, co sugerowałbyś, aby zapobiec uszkodzeniom systemu operacyjnego w obliczu nieoczekiwanych przerw w dostawie prądu?
PS. Aplikacja musi zapisać niektóre dane na nośniku pamięci (karcie SD), myślę, że nie byłoby odpowiednie zamontowanie go jako tylko do odczytu.
Więc jaki jest werdykt?
Nadawca SuperUser l0b0 oferuje wgląd w systemy plików kronikowania / nie-księgowania:
To będzie zależeć od
- czy używasz systemu plików księgowania i
- jak dobrze aplikacje są w stanie obsłużyć przerwane przetwarzanie.
Rozważmy na przykład aplikację, która przetwarza plik i zapisuje wyniki w trakcie ich obliczania (jeden wiersz wyjściowy na linię wejściową) do innego pliku. Jeśli zasilanie zostanie odcięte podczas przetwarzania, a ta sama aplikacja zostanie uruchomiona po ponownym uruchomieniu, nie będzie mogła ponownie uruchomić przetwarzania od początku pliku wejściowego - oznaczałoby to, że plik wyjściowy zawierałby zduplikowane informacje.
Może być bardzo trudno powiedzieć coś konkretnego na temat hipotetycznego złożonego systemu, ale najbardziej stabilne oprogramowanie Linux wydaje się być w stanie całkiem dobrze radzić sobie z wypadkami.
Stu sugeruje oddzielenie systemu operacyjnego i danych, a także dodanie kopii zapasowej baterii:
Aby zminimalizować możliwość uszkodzenia systemu operacyjnego, najlepiej jest mieć oddzielne partycje "system" i "dane" na karcie SD. W ten sposób możesz zamontować partycję "systemową" tylko do odczytu i użyć silnie odpornego FS na partycji "dane".
Ponadto większość z tych kart ma bardzo niskie wymagania dotyczące zasilania, więc możliwe jest tworzenie kopii zapasowych baterii. Płyta "LiPo rider" dla Raspberry Pi może być używana jako podstawowy zasilacz UPS w celu zapewnienia czystego wyłączenia przy zaniku zasilania.
Wreszcie, Jenny D rozwija sugestię dotyczącą systemu plików księgowania:
Nieoczekiwane przerwy w zasilaniu mogą spowodować uszkodzenie danych systemu plików - np. jeśli proces zaczął zapisywać do pliku, ale jeszcze nie skończył go pisać, plik może zakończyć się tylko w połowie. A teraz wyobraź sobie, że wyłączenie zasilania ma miejsce, gdy jesteś w połowie aktualizacji jądra ...
Jak napisał l0b0, pomocne będzie korzystanie z systemu plików z księgowaniem, ponieważ będzie on w stanie śledzić, co faktycznie zostało zrobione. Oprócz informacji wikipedii związanych z L0b0, być może zainteresuje Cię również system gwarancji plików dziennikarzy przeciwko korupcji po awarii zasilania.
Ty, jako programista, oczywiście musisz uważnie zastanowić się, jak traktować zapisywanie do plików, aby stał się procesem atomowym (tzn. Albo został w pełni wykonany, albo w ogóle go nie wykonano, ale nigdy w połowie nie został zrobiony). To dość złożony problem.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.