Загрузка ОС Linux — процесс
Каждое семейство операционных систем производит загрузку по-своему. Это связанно с различной архитектурой ядра операционной системы, разными инструкциями по работе с подключенными устройствами. В данной статье попробую разобрать загрузку популярной операционной системы на ядре Linux Ubuntu.
Схематично процесс загрузки можно отобразить следующим образом.
Загружаемся
Итак, Нажимаем кнопку включения компьютера, и центральный процессор переходит на адрес BIOS. BIOS или UEFI, в более современных компьютерах, проводит систему проверок и выбирает носитель информации с которого будет производится загрузка операционной системы. На носителе находится MBR (Master Boot Record) или GPT (Guid Partition table) на новых компьютерах в которых находится загрузчик. А дальше уже в зависимости от настройки. Загрузчик может самостоятельно загружать операционную систему, а может передавать управление следующему загрузчику. Например, если Windows и Linux установлены на одном компьютере и находятся на разных разделах жесткого диска.
В любом случае, если идет речь о Linux у нас есть первая стадия с небольшой частью кода, которая загружает у нас загрузчик. Загрузчик знает где лежит ядро операционной системы, загружает ядро, загружает initial run disk, там находятся необходимые файлы и модули для загрузки ядра. Далее уже ядро берет процесс управления на себя. Происходит инициализация устройств, конфигурирование процессов памяти и так далее. После всех этих процессов ядро запускает процесс init.
Вернемся к вопросу загрузчиков, для каждой операционной системы разработан свой загрузчик, а иногда и несколько. NTLDR — Загрузчик операционной системы Windows, LILO — один из стандартных загрузчиков для Linux и BSD системы. GRUB — загрузчик операционной системы от проекта GNU. Нас интересуют последние два. Данные загрузчики работают в два этапа. На первом этапе у них крошечный код на MBR или GPT, который запускает исполнение кода второго этапа.
Перейдем непосредственно к самой загрузке.
Данное меню мы можем получить при загрузке если зажать клавишу Shift. Как видно на картинке в данном примере загрузчик GRUB версии 2.04. У нас есть несколько вариантов. Загрузка Ubuntu по умолчанию и вариант загрузки с расширенными опциями. В нашем случае расширенные опции не дают многого, а всего лишь позволяют начать загрузку в режиме восстановления recovery mode. Данная опция не является целью стати, и мы ее опустим. Вернемся к первому пункту загрузки. Выбираем, нажимаем «e» получаем следующую картину загрузки.
На данной картинке можно увидеть, что корневой раздел монтируется по uuid, он будет корневым root и непосредственно сам id. ID раздела можно посмотреть после загрузки операционной системы командой blkid. Можно часть параметров отредактировать или большинство. Более подробно можно поискать в интернете. По нажатию F10 осуществляется продолжение загрузки операционной системы.
После загрузки операционной системы, мы можем с помощью команды dmesg посмотреть, сообщения ядра, все что происходило с ядром. Нужно различать сообщения ядра и лог ядра. Который можно посмотреть cat /var/log/dmesg. Данный файл содержи информацию только о загрузке операционной системы. В данном файле содержится информация с самого начала загрузки операционной системы и до конца. Если событие происходит позднее, то в данном файле этой информации вы не найдете.
Система инициализации ОС
Есть такое понятие Init — это первый или родительский процесс, который запускает все последующие процессы. Это может быть проверка и монтирование файловых систем запуск служб и.т.д. Существует 3 варианта работы этого родительского процесса.
- Init в стиле SysV — родительский процесс инициализации системы на одном из заданных уровней запуска (runlevel); Т.е. есть несколько уровней загрузки (runlevel) обычно их 7 штук. Один из них — это обычный многопользовательский режим. Другие это выключение компьютера, перезагрузка, режим восстановления и т.д.
- Init в стиле systemd — родительский процесс инициализации системы в ускоренном режиме, за счёт параллельного запуска задач; Ускоренный режим достигается за счет использования процессора в частности Intel, который позволяет запускать процессы инициализации параллельно. К этому режиму есть еще куча софта библиотек, которые расширяют функционал.
- Init в стиле Upstart — родительский процесс инициализации системы на основе отслеживания событий; Данный режим используется на Ubuntu уже давным — давно, тут не только запускаются скрипты инициализации, но и запускаются скрипты отслеживания событий и реагирования на них. Т.е. это более гибкий процесс инициализации, например, если какая-то служба не запустилась или упала в процессе загрузки то, upstart умеет это отследить и запустить это повторно
В операционной систему Ubuntu можно посмотреть дерево процессов использую команду pstree. В результате ее вывода мы можем увидеть, что родительским процессом являлся процесс systemd. Который запускал уже свои, какие-то дочерние процессы. Перейдем в корневую директорию boot.
Здесь мы можем увидеть директорию загрузчика grub. Ядра линуксовые vmlinuz (ссылка на ядро) и до обновления старое ядро vmlinux.old (ссылка на старое ядро). Соответственно пара initrd* — файлы диска, эти файлы содержат диск, который грузится в оперативную память, данный диск содержит файлы необходимые самому ядру Linux для нормальной загрузки.
Перейдя в директорию grub, мы можем найти конфигурационный файл grub.cfg и несколько вспомогательных, но не менее важных фалов. Соответственно мы можем внести изменения в данный файл на постоянной основе и соответственно данный код будет выполнятся при каждой загрузке операционной системы.
Первая загрузка
Надеюсь, вы успешно справились с установкой Ubuntu на компьютер. Настало время первый раз загрузиться в вашу новую систему. Итак, что же вас ждёт?
Сначала, после экрана BIOS, вы увидите загрузчик GRUB. Если у вас на компьютере кроме свежеустановленной Ubuntu остались другие операционные системы, то GRUB покажет вам меню, в котором вы сможете выбрать, в какую систему загружаться. Ваша новая Ubuntu будет первой в списке, но кроме неё там должны присутствовать ещё как минимум два вспомогательных пункта, про которые я рассказывать не буду 1) .
Если же у вас на компьютере только одна ОС — та Ubuntu, которую вы только что поставили, то GRUB промелькнёт небольшим сообщением и начнётся загрузка самой системы.
Если вы выбрали при установке автовход в Ubuntu без запроса пароля, то вы сразу же попадёте в вашу новую систему. Если же вы предпочли оставить необходимость ввода пароля при загрузке, то вы увидите экран входа вроде такого:
Вам нужно будет выбрать вашего единственного пока что пользователя, нажав на его имя мышкой, появится строчка для ввода пароля 2) :
Введите его, нажмите Enter , и вы попадёте в вашу новую систему:
Выглядит всё так же, как и при загрузке с LiveCD, неправда ли? Только в правом верхнем углу вместо ubuntu написан ваш логин и всё переведено на русский 3) .
Возможно, через некоторое время после загрузки вы увидите одно или несколько всплывающих уведомлений в правом верхнем углу экрана 4) . Чаще всего с помощью подобных сообщений Ubuntu извещает вас, что для вашей системы доступны дополнительные драйвера, которые не были поставлены при установке. Но нас пока это не интересует, поэтому просто ничего не делайте, подробней про драйвера я расскажу позже.
Вот и всё, вообще говоря ничего делать и настраивать в вашей новой системе практически не нужно, и прямо сейчас вы можете начать полноценную работу с ней. Хотя кое-что из приложений всё же надо будет доставить, об этом чуть позже. А пока что можно приступать к началу нормального изучения Ubuntu. Однако перед этим я кратко расскажу, что же делать, если вы не дали Ubuntu возможность поставить пакеты локализации при загрузке:
Хотя пожалуй расскажу. Пункт recovery mode позволяет загрузить систему в режиме восстановления, он вам очень пригодится, если вы что-то сломаете. А различные MemTest нужны для запуска проверки памяти компьютера.
Обратите внимание на появившиеся на нижней панели элементы управления. К сожалению, при разрешении в 800 пикселей в ширину они не все помещаются на экран, а именно такое разрешение у моего скриншота. У вас же всё должно отображаться нормально. С помощью них вы можете выбрать сеанс и язык для него. Если по-простому, то сеанс в данном случае — это графическая оболочка системы. Помните, кроме GNOME для Linux и Ubuntu в частности существуют и другие графические среды, такие как KDE, Xfce и многие другие?
Надеюсь, что вы при установке подключились к интернету и позволили Ubuntu скачать пакеты локализации. Но даже если у вас всё на английском — ничего страшного, чуть ниже я расскажу, как это исправить.
Особенно если вы подключены к интернету, поскольку большинство различных полезных дополнений и драйверов Ubuntu автоматически ищет в сети.