Jak sprawić, aby Ubuntu było odporne na utratę zasilania?

18

Lubię uruchamiać system bez nadzoru na co dzień w „kiosku”.

Jednak system może zostać wyłączony w dowolnym momencie bez wcześniejszego prawidłowego wyłączenia. Domyślnie nie oczekuje się, że Ubuntu zostanie zamknięty z powodu utraty zasilania. Po ponownym uruchomieniu po utracie zasilania można uruchomić program fsck, aby sprawdzić system plików, a program fsck może nakazać systemowi ponowne uruchomienie po zakończeniu. Więc nawet jeśli żadne dane konfiguracyjne nie zostaną uszkodzone, maszyna może nie uruchomić się dobrze po utracie zasilania. Więc przetestowałem kilka obejść:

  1. zmień priorytet fsck montowania roota na 0(ostatnie pole we fstabwpisie roota), aby uniemożliwić działanie fsckpo każdej utracie zasilania. System może się jednak uruchomić z zamontowanym rootem tylko do odczytu, co nie jest oczekiwane przez wiele usług i powoduje wyświetlenie monitu logowania do konsoli zamiast logowania graficznego.

  2. Zastąp errrors=remount-roprzez errors=continue. Daje to złe wrażenie, że niespójny system plików może spowodować dalszą utratę danych. Jednak po fsckponownym włączeniu powinien zwiększyć zdolność rozruchową systemu po utracie zasilania. Upuściłem więc 1).

  3. Ponownie skonfiguruj grub2, aby używał normalnego domyślnego limitu czasu opcji po nieudanym uruchomieniu. Do tego dodałem GRUB_RECORDFAIL_TIMEOUT=0do /etc/default/grub.

Jednak trudno jest ustalić, czy włamania te są odporne na utratę zasilania systemu. Jakieś pomysły? Coś więcej można zrobić?

dronus
źródło
1
Naprawdę nie rozumiem tego, co próbujesz osiągnąć. Co rozumiesz przez „dowód na utratę zasilania”? Czy możesz to trochę wyjaśnić?
André Stannek
Dodano wyjaśnienie wprowadzające. Lubię system, który szybko wstaje normalnie, bez interakcji konserwacyjnych po utracie zasilania.
dronus

Odpowiedzi:

16

W przypadku aplikacji kiosku problem został rozwiązany za pomocą partycji root tylko do odczytu. Ponadto wszelkie zmiany wprowadzane lub zapisywane przez użytkowników są cofane przy następnym uruchomieniu.

Aby zapewnić zapisywalny katalog główny dla większości potrzeb aplikacji, overlayfs można użyć do nałożenia partycji tylko do odczytu zapisywalnymi plikami RAM.

Istnieje skrypt, który pomaga utworzyć taką konfigurację na dole https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash . Skrypt zawiera instrukcje konfiguracji:

  • umieść plik w / etc / initramfs-tools / scripts / init-bottom / root-ro
  • sudo chmod 0755 root-ro
  • sudo update-initramfs -u

Proponuję, aby dodać GRUB_RECORDFAIL_TIMEOUT=0do /etc/default/grubi uruchomić sudo update-grubteż, w przeciwnym razie mogą pojawić się menu startowe bez limitu czasu.

Następnie uruchom ponownie. Maszyna następnie uruchamia się w trybie tylko do odczytu, co można sprawdzić za pomocą mount. Wszelkie zastosowane zmiany znikną przy następnym uruchomieniu. Aby wprowadzić zmiany, zainstalować oprogramowanie i aktualizacje itp., Wystarczy wejść do menu GRUB, nacisnąć, eaby zmienić wiersze poleceń rozruchu, i dołączyć disable-root-ro=truedo linii zaczynającej się od jądra. Naciśnij klawisz F10, aby kontynuować uruchamianie. Następnie możesz użyć, mountaby potwierdzić, że root jest zamontowany w zwykły sposób do zapisu. Wprowadź zmiany i uruchom ponownie, system jest ponownie tylko do odczytu.

dronus
źródło
+1, ponieważ główny system plików tylko do odczytu był pierwszą rzeczą, która przyszła mi do głowy.
Nathan Osman
To faktycznie działa całkiem dobrze. Jednak po każdym zamontowaniu odczytu / zapisu system powinien zostać ponownie ponownie uruchomiony w celu sprawdzenia, czy wszystko jest czyste. Takie rzeczy, jak GRUB w razie awarii, przeglądarka pokazująca, że ​​nie została ona odpowiednio zamknięta lub w przeciwnym razie fsck zostałby zachowany zbyt na zawsze. Jeśli tak się stanie, należy ponownie uruchomić odczyt / zapis i ponownie wyczyścić system.
dronus
9

Kilka razy po nieczystym ponownym uruchomieniu (np. Naciśnięciu przycisku utraty zasilania lub resetu, a nawet panice jądra), system nie uruchomi się z prośbą o naciśnięcie „y”, aby fsck naprawić partycję.

Jeśli chcesz tego uniknąć, edytuj / etc / default / rcS i zmień:

FSCKFIX=no

Do:

FSCKFIX=yes

Zapewni to automatyczne uruchomienie naprawy bez monitowania użytkownika.

Minusem może być to, że możesz stracić dane i możesz chcieć wyjąć dysk twardy i sklonować go jako pierwszy, jeśli jest na nim coś krytycznego, czego nie ma kopii zapasowej.

Na przykład jeśli kontroler dysku twardego ma błąd i fsck błędnie zidentyfikował partycję jako uszkodzoną i spróbuje ją naprawić, może to doprowadzić do utraty danych, której można by uniknąć. Sam tego nigdy nie doświadczyłem i miałem do czynienia z blisko tysiącem serwerów w ciągu ostatnich 7 lat - ale nadal warto o tym pamiętać.

Roman Gaufman
źródło
7

Na dzień dzisiejszy do kiosku tylko do odczytu rozwiązanie można również zainstalować pakiet overlayrootprzez

sudo apt-get install overlayroot

który z łatwością zapewni kompletne rozwiązanie, takie jak jedno z zatwierdzonych odpowiedzi. Pozwala także na korzystne dowodzenie

sudo overlay-chroot

który zaloguje się do powłoki, na której jest zamontowany poprzedni dysk podstawowy tylko do odczytu /. Następnie można wprowadzić dowolne zmiany w chronionym systemie, takie jak np. Użyć apt-getdo zainstalowania pakietów na poprzednim dysku tylko do odczytu. Jednak po wyjściu z powłoki zdecydowanie zaleca się ponowne uruchomienie komputera, ponieważ tymczasowo nadpisane pliki w pamięci RAM mogą zasłaniać nowo zainstalowane.

dronus
źródło