Назад | Перейти на главную страницу

Как запустить fsck при запуске после сбоя без пароля root?

когда рабочая станция пользователя Red Hat 5.x выходит из строя и покидает файловую систему с ошибками, при следующей загрузке она запрашивает пароль root для входа в одиночный режим и запуска fsck вручную.

Это раздражает, потому что пользователь не может использовать свою рабочую станцию, и нам нужно послать кого-нибудь, чтобы просто запустить fsck.

Пользователи не хранят никаких ценных данных на своих рабочих станциях, поэтому есть ли способ настроить этот fsck для автоматического запуска при ошибках без пароля?

... Думаю, я нашел это. В /etc/rc.d/rc.sysinit есть несколько строк, которые выглядят так:

if ! [[ " $fsckoptions" =~ " -y" ]]; then
        fsckoptions="-a $fsckoptions"
fi
  • который, если я их правильно читаю, добавьте -a к параметрам fsck, если ранее в $ fsckoptions нет -y (файл, который может не существовать). Немного обновил:
if ! [[ " $fsckoptions" =~ " -y" ]]; then
        if ! [[ " $fsckoptions" =~ " -a" ]]; then
                if ! [[ " $fsckoptions" =~ " -p" ]]; then
                        fsckoptions="-y $fsckoptions"
                fi
        fi
fi
  • который основан на командной строке e2fsck: если он не включает -y, -a или -p, он добавляет -y.

Конечно, фокус в том, чтобы проверить глупость; Я не знаю, как вызвать ошибку файловой системы, которая заставит обычный автоматический fsck запросить пароль root, чтобы я мог знать, действительно ли это сработало или нет.

Все эти предполетные проверки контролируются начальным образом RAM-диска (опция initrd в grub.conf), созданным операционной системой, который выполняет быструю проверку на наличие ошибок в файловой системе и переходит в однопользовательский режим при обнаружении ошибок. Ваше путешествие по изменению этого поведения на бег fsck -y без пароля начинается с распаковки образа initrd, включенного в RPM ядра. К сожалению, вам, вероятно, придется делать это после каждого обновления системы (поскольку redhat поставляет новый initrd с каждым ядром (или, точнее, генерирует новый с помощью mkinitcpio на основе вашего оборудования)).

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

Что, вероятно, ближе всего к "официальному" способу сделать это, обычно не рекомендуется (по уважительной причине!):

echo ' -y ' > /fsckoptions
chattr +i /fsckoptions

Все версии /etc/rc.d/rc.sysinit Я проверил добавление содержимого /fsckoptions к $fsckoptions переменная перед запуском fsck. chattr +i следит за тем, чтобы ничего не изменилось автоматически.

Пользователи не хранят никаких ценных данных на своих рабочих станциях, поэтому есть ли способ настроить этот fsck для автоматического запуска при ошибках без пароля?

Все это контролируется /etc/rc.d/rc.sysinit, который представляет собой просто сценарий оболочки. Вы можете изменить это в соответствии со своими потребностями (хотя вам нужно быть осторожным, чтобы ваши изменения не были потеряны в случае обновления пакета). Ищите места, где вызывает сценарий sulogin.

При просмотре этого сценария кажется, что вы удалили следующую строку:

touch /.autofsck &> /dev/null

Система больше не будет запускать fsck при следующей загрузке. Если вы используете ext3 (или ext4), вам обычно не нужно запускать fsck.

Я не знаю, как для этого обойти пароль. Если вас не беспокоит целостность файловой системы, вы можете полностью обойти fsck, добавив fastboot в строку ядра в файле grub.conf.

Другой способ решения проблемы: в GRUB / LILO добавьте init=/bin/bash до конца командной строки. Это позволит вам обойти приглашение sulogin, которое вы получаете для fsck.