Рейтинг:10

Как я могу перезагрузить Linux вместо перемонтирования файловой системы только для чтения?

флаг us

Системы Linux иногда перемонтируют корневую файловую систему как доступную только для чтения, например. если есть ошибка ввода-вывода.

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

Есть ли способ заставить Linux просто автоматически перезагружаться, когда это происходит? Монтирование только для чтения для меня бесполезно.

флаг br
Я бы также исследовал источник этих ошибок ввода-вывода.В последний раз, когда файловая система ext2 была у меня доступна только для чтения, это было в 1994 году, и причина могла быть связана со сломанным вентилятором процессора.
флаг mx
У вас здесь [проблема XY] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Правильное решение состоит не в том, чтобы перезагрузить систему при ошибке ввода-вывода (принятый ответ объясняет, как это сделать, _но_ это довольно рискованно по нескольким причинам), а в том, чтобы _исправить основную причину ошибок ввода-вывода_ , потому что тогда файловая система не будет случайно смонтирована только для чтения. Если это только прерывисто, а устройство хранения в порядке, у вас, вероятно, есть подозрение на ОЗУ или ненадежный блок питания, оба из которых могут вызвать гораздо более серьезные проблемы, чем простая ошибка файловой системы.
флаг us
@AustinHemmelgarn: у меня нет проблемы с XY. Вы просто делаете много предположений, которые не соответствуют действительности в случаях, о которых я спрашиваю.
флаг us
@SimonRichter: я действительно пытался выяснить причину, но спасибо за напоминание, другим, вероятно, следует сделать это перед перезагрузкой.
флаг us
Я только что понял, что как-то разместил это на ServerFault, а не на Unix.SE, как собирался! Рад, что это все еще в теме, я думаю, но не стесняйтесь мигрировать, если это необходимо.
флаг cn
Перезагрузка, а не выяснение причины повторного монтирования R/O, с высокой вероятностью усугубит проблему, особенно если не удается смонтировать систему при перезагрузке, и теперь вы застряли с полностью не отвечающей системой.
флаг mx
@ user541686 У вас случайные ошибки ввода-вывода. Это _вызовет_ в конечном итоге другие проблемы (и поверьте мне, исправить их будет гораздо сложнее, чем просто перезагрузить систему), поэтому я утверждаю, что это проблема XY. Тот факт, что вы не признаете X проблемой, не делает ее менее проблемой XY.
флаг us
@AustinHemmelgarn: я хорошо знаю, что происходит в моей ситуации, и почему я прибег к этому решению. К сожалению, это не так. Тот факт, что вы не осознаете, что все еще делаете необоснованные предположения о моей ситуации, не делает вас более правильным, но, по общему признанию, я не могу помешать вам читать лекции.
флаг us
@Shadur: я все это прекрасно понимаю, хотите верьте, хотите нет. Никто не говорит, что это решение следует использовать в любой ситуации. Я просто говорю вам, что у меня есть **чертовски** ситуация, когда это решение имеет смысл. Если вы не можете себе представить, почему, это нормально. Просто поверь мне, что я не дурак и что я спрашиваю об этом только потому, что у меня есть информация, которой нет у тебя.
Mark avatar
флаг tz
@ user541686, если есть соответствующая информация, предоставьте ее. Не говорите просто «доверься мне».
флаг us
@Mark: Нет, я не буду предоставлять ненужную информацию. Буквально никого не касается, в какой ситуации я имею дело, что вызвало этот вопрос. Если вы предпочитаете верить, что это из-за моей глупости, не стесняйтесь продолжать верить в это; не чувствуйте себя обязанным «доверять мне». Я не могу заставить тебя.
Andrew Henle avatar
флаг ph
@user541686 user541686 Вы устраняете ошибки ввода-вывода в корневой файловой системе с помощью перезагрузки, *** НАДЕЯСЬ ***, что ваша система вернется в рабочее состояние. Вы производите впечатление человека, который думает, что знает все, но на самом деле достаточно умен, чтобы быть опасным. Вы можете думать, что знаете, почему вы получаете ошибки ввода-вывода, но что происходит, **когда** вы получаете ошибку, которая не соответствует вашим представлениям? Вы получаете мертвую систему, к которой вы не можете получить доступ. "Я знаю, что происходит!" не накладывает никаких ограничений на то, что **может** продолжаться — вселенной нет дела до того, что вы думаете, что знаете.
marcelm avatar
флаг ng
@Mark (и другие) _ "... если есть соответствующая информация, предоставьте ее. Не говорите просто "доверься мне"". _ - Я не думаю, что здесь стоит лаять дерево XY. Прежде всего, вопрос в его нынешнем виде (паника / перезагрузка вместо перемонтирования ro) является вполне обоснованным и на него можно ответить. Во-вторых, ОП, кажется, хорошо знает, что ошибки ввода-вывода, кхм, не идеальны, и теперь явно объявил эту область не по теме. К сожалению, иногда вы ничего не можете сделать, чтобы исправить основную причину _прямо сейчас_, и требуется обходной путь. Имея это в виду, я не думаю, что мы находимся в том положении, чтобы требовать от ОП предоставления большего контекста.
Рейтинг:23
флаг ca

Я делаю вывод, что вы используете доб3 или же доб4 как файловая система. Если это так, вы можете установить его с помощью ошибки = паника вариант и настроить сторожевая собака для перезагрузки системы в случае паники.

Хотя более сложный, чем ответ роэлванмеера (за который я проголосовал), у него есть дополнительный бонус: он работает при всех сбоях ядра на уровне паники.

Как предложил Никита Киприянов, установка паника=5 опция загрузки ядра может быть более простой альтернативой сторожевая собака (который имеет больше параметров конфигурации, но в результате он немного сложнее).

Nikita Kipriyanov avatar
флаг za
Альтернативой сторожевому таймеру может быть добавление чего-то вроде `kernel.panic = 5` в `/etc/sysctl.d/panic-reboot.conf`.
флаг us
Спасибо! Я попробую. Надеюсь, это не [не удастся перезагрузить](https://forums.debian.net//viewtopic.php?f=5&t=102033)!
shodanshok avatar
флаг ca
@NikitaKipriyanov хорошее предложение, я отредактирую свой ответ. Спасибо.
joshudson avatar
флаг cn
предупреждение: возможная петля перезагрузки
флаг us
@joshudson: Да, я планирую следить за этим, это определенно важное предупреждение для всех, кто пытается это сделать.
Andrew Henle avatar
флаг ph
@joshudson Если он вообще перезагрузится. Полагаться на систему, которая знает, что ее корневая файловая система может быть повреждена и/или ее корневой диск неисправен для перезагрузки, основано на принятии желаемого за действительное и единорогах.
joshudson avatar
флаг cn
@AndrewHenle: я поднял много систем с поврежденной корневой файловой системой. Обычно я могу взять на себя процесс загрузки и запустить fsck, потому что повреждение редко затрагивает `/sbin` или файлы, которые не менялись какое-то время.
Andrew Henle avatar
флаг ph
@joshudson Вы надеетесь ... ;-) Мои мысли здесь основаны на идее о том, что попытка бороться с тем, когда ваше устройство с корневой файловой системой выдает ошибки ввода-вывода, в первую очередь является ошибочным усилием, а перезагрузка только усугубляет серьезные проблемы. вероятно - «Мое корневое устройство выходит из строя, поэтому давайте сделаем что-нибудь, что *** действительно *** зависит от того, будет ли корневое устройство полностью функциональным и имеет надлежащий доступ к большей части файловой системы!»
Рейтинг:14
флаг ie

Возможно, не очень красивое решение, но моей первой мыслью было запускать команду из cron каждую минуту:

тест -w / || перезагрузка
флаг us
+1 спасибо, это будет отличным запасным вариантом, если другое решение не сработает!
флаг im
Я думаю, что не гарантируется, что `test -w` проверяет, доступна ли файловая система для чтения и записи. Хотя GNU `test` и `test`, встроенные в `bash`, кажется, делают это. --- Здесь вы можете увидеть, что должен делать POSIX-совместимый `test`: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html#tag_20_128_05 Насколько я понимаю, `test` требуется только для проверки права доступа к файлу.
joshudson avatar
флаг cn
В этом случае `tee -a /root/.bash_history
shodanshok avatar
флаг ca
@joshudson Еще проще: `touch /writecheck || перезагрузить`
флаг br
@shodanshok Это здорово, если вы не возражаете против файла с именем `/ writecheck`, лежащего в корне вашей файловой системы, поскольку он будет создан, когда файловая система _не_ будет доступна только для чтения. Другие предложенные методы пытались избежать создания ложных пустых файлов. (Хотя, если Пабук прав — в чем я лично 50/50 — на самом деле создание файла может быть неизбежным, чтобы полностью определить состояние файловой системы только для чтения.)
флаг im
Еще один вопрос о проблеме тестирования доступа на запись: [Как неинвазивно проверить доступ на запись в файл?] (https://unix.stackexchange.com/q/159557/19702)
флаг cn
@shodanshok, которые могут привести к неожиданным перезагрузкам - или циклам перезагрузки - из-за ошибок, не связанных с ошибками файловой системы, например, временные сбои установки libc, условия OOM, все, что может привести к сбою touch ....
shodanshok avatar
флаг ca
@rackandboneman уверен, но *любой* скрипт с `|| reboot` подвержен этим проблемам. Более того, если `touch` не работает в вашей системе из-за проблем с libc, у вас, вероятно, есть более серьезная проблема, чем цикл перезагрузки. В любом случае, как указано в моем ответе, «сторожевой пес» - это способ удовлетворить более продвинутые потребности.

Ответить или комментировать

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