Я разрабатываю безголовое встраиваемое устройство под управлением CentOS 6.2. Пользователь может подключить клавиатуру, но не монитор, а для последовательной консоли потребуется открыть корпус, чего мы не хотим, чтобы пользователь делал. Все это в значительной степени исключает возможность использования USB-накопителя для восстановления для загрузки, если только он не слепо воссоздает образ жесткого диска. Я хотел бы предоставить некоторые средства восстановления, и я написал инструмент, который появляется на / dev / tty1 вместо getty для обеспечения этих функций.
Одна из таких функций - fsck. Я узнал, как перемонтировать корневую и другие файловые системы в режиме только для чтения. Теперь, когда они доступны только для чтения, их можно безопасно проверить с помощью fsck и затем перезагрузить. К сожалению, fsck жалуется мне, что файловые системы смонтированы, и отказывается что-либо делать.
Как заставить fsck запускаться на смонтированном разделе только для чтения?
Основываясь на моем исследовании, это должно быть что-то неясное. "-f" означает принудительное восстановление чистого (но не смонтированного) раздела. Мне нужно восстановить чистый или нечистый смонтированный раздел. Из того, что я читал, это то, что должны делать «только эксперты», но никто не удосужился объяснить, как это делают эксперты. Я надеюсь, что кто-нибудь сможет мне это рассказать.
Кстати, я заметил, что e2fsck 1.42.4 в Gentoo позволит вам fsck смонтированный раздел, даже смонтированный для чтения и записи, но, похоже, это происходит только в том случае, если fsck запускается с терминала, поэтому он может спросить пользователя, если они уверен, что они хотят сделать что-то настолько опасное. Я не уверен, что версия CentOS делает то же самое, но похоже, что fsck МОЖЕТ восстановить смонтированный раздел, но он категорически отказывается, когда не запускается с терминала.
Последний вариант для меня - скомпилировать собственный взломанный fsck. Но боюсь, что неожиданно все испорчу.
Спасибо!
Примечание: изначально опубликовано Вот.
Обновление: я не думал, что это будет иметь значение в то время, когда я писал это, но, чтобы перемонтировать fs только для чтения, мне пришлось сделать следующее:
echo s > /proc/sysrq-trigger
echo s > /proc/sysrq-trigger
echo u > /proc/sysrq-trigger
Это был единственный способ сделать это. Все остальные жаловались на то, что файловая система занята. Насколько я знаю, это «безопасно», но, вероятно, он немного отличается от обычного подхода. И это может быть причиной, по которой fsck не хочет его ремонтировать. Он все еще думает, что смонтирован для чтения-записи.
Вы жестяная банка fsck
файловая система только для чтения, поскольку монтирование в режиме только для чтения не помечает ее как «грязную», как это делается при монтировании для чтения и записи. В кэше записи нет изменений, которые могут быть только частично сброшены на диск, поэтому все структуры на диске согласованы и безопасны для fsck
модифицировать.
Однако если fsck
вносит какие-либо изменения, драйвер файловой системы ядра может запутаться, потому что вещи, которые он ожидал оставаться постоянными, вместо этого изменились из-под него. Это не повлияет на целостность самой файловой системы (поскольку драйвер не записывает в нее), но может сделать работающую систему нестабильной. Чтобы этого избежать, перезагрузитесь, если fsck
внес какие-либо изменения в вашу файловую систему.
Раньше я работал над проектом типа "устройство", но кое-что сделал, чтобы частично решить эту проблему.
У одного устройства было достаточно памяти, поэтому корневая файловая система запускалась непосредственно из initrd. В initrd было достаточно fsck (force), затем смонтировать «/ mounts / persistent» и «/ mount / static»; почти все файлы, необходимые после этого, находились в одной из этих двух файловых систем.
Это имело то преимущество, что корневая файловая система никогда не нуждалась в «исправлении» - если что-то пойдет не так, она перезагрузится, и initrd будет очищен (так как тот, который использовался, был не тем на диске). Все обновления initrd были просто установлены (предыдущие были доступны для загрузки); любые файлы, не относящиеся к исходному "статическому", необходимы после "обновления прошивки" (= новый initrd) с этого момента на initrd. «Статическая» файловая система в любом случае была доступна только для чтения. Требовалось создать резервную копию только постоянной файловой системы и «текущей версии прошивки». У меня были копии всех прошивок до их рассылки.
Вы пробовали с -p
или -y
переключатели? Я всегда делаю это на машине Debian без головы, и это работает.
Из Справочная страница fsck.ext2:
-p Automatically repair ("preen") the file system. This option
will cause e2fsck to automatically fix any filesystem problems
that can be safely fixed without human intervention. If e2fsck
discovers a problem which may require the system administrator
to take additional corrective action, e2fsck will print a
description of the problem and then exit with the value 4 logi-
cally or'ed into the exit code. (See the EXIT CODE section.)
This option is normally used by the system's boot scripts. It
may not be specified at the same time as the -n or -y options.
-y Assume an answer of `yes' to all questions; allows e2fsck to be
used non-interactively. This option may not be specified at the
same time as the -n or -p options.
Помните, что перед повторным монтированием чтения-записи вам необходимо перезагрузиться!