Поделиться в соц. сетях
Эта статья расскажет вам, как загружается система Linux — то есть, как ядро работает с памятью, и как начинают работать постоянные системные процессы.
О процессе загрузки можно сказать не так уж много:
1. Загрузчик операционной системы находит образ ядра Linux на диске, загружает его в память и начинает его выполнение.
2. Активированное ядро инициализирует устройства и их драйверы.
3. Затем ядро смонтирует корневую файловую систему.
4. Ядро запускает программу под названием init.
5. init запускает в движение остальные процессы.
6. Последние процессы, которые загружает init в ходе процедуры загрузки позволяют вам войти в систему.
Определение каждого этапа процесса загрузки бесценно при устранении проблем с загрузкой и понимании системы как единого целого.
В начале, сосредоточьте внимание на загрузчике операционной системы, который вы увидите после того, как компьютер завершит самотестирование BIOS.
После того, как вы выберете загрузку ОС Linux, программа-загрузчик вашей операционной системы запустит ядро, передавая контроль за системой ядру.
На этапе инициализации ядра, выводится множество сообщений об аппаратном обеспечении представленном в системе. Ядро Linux запустит выполнение init только после того как выведет сообщение о том, что ядро было подсоединено к корневой системе:
VFS: Mounted root (ext2 filesystem) readonly.
Вскоре после этого вы увидите сообщение о запуске init, с последующими сообщениями о начале работы служб, и, наконец, вы получите приглашение войти в систему.
В Red Hat Linux запись init особенно очевидна, так как она отображается при старте операционной системы «Red Hat Linux». Все соответствующие сообщения показывают успех или неудачу в скобках на правой стороне экрана.
Большая часть этой главы посвящена init, потому что это часть загрузочной последовательности, где вам следует быть особенно внимательным.
Команда init
В init ничего такого особенного нет. Это программа похожа на многие другие в системе Linux, вы найдете ее в /sbin вместе с другими системными программами, написанными в двоичном коде.
Основное назначение init заключается в том, чтобы запускать и останавливать другие программы в определенной последовательности. Вам достаточно знать лишь то, как работает эта последовательность.
Существует несколько различных вариантов, но большинство версий Linux используют описанный здесь стиль System V. Некоторые версии используют упрощенную версию, которая походит на BSD init, но лучше вам с ней не работать.
Функция init
Время от времени, вам придется слегка подталкивать init, чтобы она переключала рабочие уровни, путем повторного чтения в оперативную память файла inittab, или просто завершением работы системы.
Из-за того, что init — это первый процесс системы, его ID процесса всегда равен 1.
Вы можете контролировать init с помощью telinit. Например, если вы хотите переключиться на рабочий уровень 3, воспользуйтесь этой командой:
telinit 3
При переключении рабочих уровней, init старается завершить все процессы, которые не принадлежат файлу inittab для нового рабочего уровня. Следовательно, вам следует быть осторожным при переключении рабочих уровней.
Когда вам нужно добавить или удалить задания по повторному порождению подпроцесса или сделать любые другие изменения в файле inittab, вам нужно сообщить init об этих изменениях и заставить ее повторно прочитать файл.
Некоторые используют kill -HUP l, чтобы init это сделала. Этот традиционный метод работает на большинстве версий Unix до тех пор, пока вы его правильно набираете. Однако, вы также можете запустить эту команду telinit:
telinit q
Вы также можете использовать ‘telinit s’, чтобы переключиться на однопользовательский режим.
Завершение работы
Помимо прочего, init также контролирует то, как система закончит работу и перезагрузится. Правильный способ завершить работу Linux — это вызвать консольную команду shutdown.
Обыкновенно shutdown используют двумя способами. Если вы остановите работу системы, это отключит компьютер и оставит его в таком состоянии. Чтобы срочно остановить работу компьютера воспользуйтесь этой командой:
shutdown -h now
На большинстве современных машин с последними версиями Linux, остановка прекратит доступ питания к компьютеру. Вы можете также перезагрузить компьютер. Для перезагрузки воспользуйтесь -r вместо -h.
Процесс завершения работы занимает несколько секунд. Вам ни в коем случае не следует сбрасывать или выключать питание во время этого этапа.
В предыдущем примере, ‘now’ это время завершения работы. Этот аргумент обязателен, но существует много способов его установки.
Если вы хотите, чтобы компьютер прекратил свою работу, когда-нибудь в будущем, можно воспользоваться +n, где n это число минут, которое shutdown должен подождать, перед тем как выполнить поставленную задачу.
Для других опций, просмотрите страницу руководства shutdown (8).
Чтобы система перезагрузилась через десять минут, запустите эту команду таким образом:
shutdown -r +10
В Linux процесс shutdown извещает каждого, подключенного к системе, что компьютер выключается, но это не всегда полезно. Если вы определите любое время, кроме now, shutdown создаст файл под названием /etc/nologin.
Пока этот файл существует, будет запрещен вход в систему для всех, кроме суперпользователя.
Когда время завершения работы наконец подходит, shutdown сообщает init, чтобы эта программа переключилась на рабочий уровень 0 для остановки и рабочий уровень 6 для перезагрузки.
Когда init войдет на рабочий уровень 0 или 6, произойдет все указанное ниже, вы можете это проверить, просмотрев сценарии внутри rc0. d и гс6.d:
1. init завершает каждый возможный процесс (как это было бы при переключении на любой другой рабочий уровень).
2. Запускаются начальные команды rc0.d/rc6.d, блокирующие файлы и выполняя другие подготовительные операции для завершения работы.
3. Последующие команды rc0.d/rc6.d отмонтируют все ваши файловые системы, оставив только корневую.
4. Дальнейшие команды rcu.d/rc6.d перемонтируют корневую файловую систему в режим только для чтения.
5. Остальные команды rc0.d/rc6.d выполняют контрольное считывание всех буферизованных данных в файловую систему с помощью программы sync.
6. Последние команды rc0.d/rc6.d дают ядру указания перезагрузить или остановиться с помощью программ reboot, halt или poweroff.
Программы reboot и halt ведут себя по-разному в зависимости от каждого рабочего уровня, временами вводя в замешательство.
По умолчанию эти программы вызывают shutdown с опциями -r или -h, но если система уже находится на рабочем уровне остановки или перезагрузки, программы дают ядру указания немедленно прекратить свою работу.
Если вам действительно нужно срочно прекратить работу компьютера (невзирая на возможный ущерб от неправильного завершения работы), воспользуйтесь опцией -f.