Как сделать Ubuntu «защитой от потери мощности»?

18

Мне нравится запускать систему без присмотра для ежедневного использования в киоске.

Тем не менее, система может быть отключена в любое время, если кто-то не произвел надлежащего отключения. По умолчанию Ubuntu не отключается из-за потери питания. После перезагрузки после отключения питания можно запустить fsck для проверки файловой системы, а fsck может дать команду системе перезагрузиться после ее завершения. Таким образом, даже если никакие данные конфигурации не будут повреждены, машина может не загрузиться после потери питания. Итак, я протестировал некоторые обходные пути:

  1. измените приоритет fsck монтирования root на 0(последнее поле в fstabкорневой записи), что предотвращает запуск fsckпосле каждой потери питания. Тем не менее, система может загружаться с монтируемым root-доступом только для чтения, что не ожидается многими службами, и вместо графического входа в систему появляется приглашение для входа в консоль.

  2. Заменить errrors=remount-roна errors=continue. Это создает плохое предчувствие, что дальнейшая потеря данных может произойти из-за незавершенной файловой системы. Тем не менее, при fsckвключении снова, это должно увеличить загрузочную способность системы после потери питания. Итак, я бросил 1).

  3. Переконфигурируйте grub2 для использования обычного времени ожидания по умолчанию после неудачной загрузки. Для этого я добавил GRUB_RECORDFAIL_TIMEOUT=0к /etc/default/grub.

Тем не менее, трудно понять, являются ли эти взломы доказательством потери мощности системы. Есть идеи? Еще можно сделать?

dronus
источник
1
Я действительно не понимаю, чего вы пытаетесь достичь. Что вы подразумеваете под «доказательством потери мощности»? Вы можете немного прояснить это?
Андре Станнек
Добавлено уточняющее вступление. Мне нравится система, которая быстро встает снова в обычном режиме без взаимодействия с пользователем после потери питания.
Дронус

Ответы:

16

Для приложения киоска проблема решается с помощью корневого раздела только для чтения. Кроме того, любые изменения, внесенные или сохраненные пользователями, отменяются при следующей перезагрузке.

Чтобы обеспечить доступный для записи корень для большинства нужд приложений, можно использовать overlayfs для наложения раздела только для чтения на доступный для записи ram tempfs.

В нижней части https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash есть скрипт, который помогает создать такую ​​настройку . Скрипт содержит инструкции по настройке:

  • поместите файл в / etc / initramfs-tools / scripts / init-bottom / root-ro
  • sudo chmod 0755 root-ro
  • sudo update-initramfs -u

Я предлагаю , чтобы добавить GRUB_RECORDFAIL_TIMEOUT=0к /etc/default/grubи работать sudo update-grubтоже, иначе меню загрузки может появиться без тайм - аута.

После этого перезагрузите компьютер. Затем машина запускается в режиме только для чтения, который можно проверить с помощью mount. Любое изменение вступит в силу при следующей перезагрузке. Для внесения любых изменений, установки программного обеспечения, обновлений и т. Д. Вам просто нужно войти в меню GRUB, нажать, eчтобы изменить командные строки загрузки, и добавить disable-root-ro=trueстроку, начинающуюся с ядра. Нажмите F10, чтобы продолжить загрузку. Затем вы можете использовать mountдля подтверждения того, что root монтируется как доступный для записи. Внесите изменения и перезагрузитесь, система снова будет доступна для чтения.

dronus
источник
+1, потому что корневая файловая система только для чтения была первым, что пришло мне в голову.
Натан Осман
Это на самом деле работает довольно хорошо. Тем не менее, после любого монтирования для чтения / записи систему необходимо перезагрузить, чтобы убедиться, что все чисто. Такие вещи, как отказоустойчивость GRUB, браузер, показывающий, что он не был полностью закрыт, или fsck в противном случае будут сохраняться слишком долго. Если это произойдет, нужно перезагрузить чтение / запись в другой раз и снова полностью отключить.
Дронус
9

Несколько раз после нечистой перезагрузки (скажем, при отключении питания или нажатии кнопки сброса или даже при панике ядра) система не загружается и просит вас нажать «y», чтобы fsck восстановил раздел.

Если вы хотите избежать этого, отредактируйте / etc / default / rcS и измените:

FSCKFIX=no

Для того, чтобы:

FSCKFIX=yes

Это обеспечит автоматическое выполнение этого ремонта без запроса вас.

Недостатком может быть то, что вы можете потерять данные и, возможно, захотите сначала извлечь жесткий диск и клонировать его, если на нем есть что-то критическое, что не скопировано.

Например, если в контроллере жесткого диска произошла ошибка, и fsck ошибочно определил раздел как поврежденный и попытался восстановить его, это может привести к потере данных, которой в противном случае можно избежать. Я никогда не сталкивался с этим сам и за последние 7 лет или около того имел дело с почти тысячей серверов - но все же об этом нужно помнить.

Роман Гауфман
источник
7

На сегодняшний день для решения, доступного только для чтения, можно также установить пакет, overlayrootвыполнив

sudo apt-get install overlayroot

который легко предоставит вам полное решение, подобное утвержденному ответу. Это также позволяет для полезной команды

sudo overlay-chroot

который войдет в оболочку, на которой установлен прежний базовый диск только для чтения /. Затем можно внести любые изменения в защищенную систему, например, и использовать ее apt-getдля установки пакетов на прежний диск только для чтения. Однако после выхода из оболочки настоятельно рекомендуется перезагрузить компьютер, поскольку временно перезаписанные файлы в ОЗУ могут затенить вновь установленные.

dronus
источник