Где в системе solaris располагаются файлы загрузки

Обновлено: 05.07.2024

Visual editor, vi, обычно используется системными администраторами для редактирования текстовых файлов. О работе с редактором vi написаны целые книги. В этом разделе приводится таблица со ссылками на наиболее часто используемые команды для редактирования.

Для запуска vi, наберите vi filename и нажмите Return. Если такой файл не существует, но открывается новый файл. Новый файл создается в момент, когда вы сохраняете изменения. Если файл существует, то выводится начало его содержимого (the beginning of the file is displayed).

В таблице 2-1 приведена небольшая часть команд для редактирования в редакторе vi.

Table 2-1 Некоторые основные команды vi Задача Команда Как сохранить изменения в файле / выйти без сохранения Выйти без сохранения изменений :q! Сохранить изменения :w Сохранить изменения и выйти :wq Сохранить изменения и выйти ZZ Перемещение внутри файла Переместить курсор на один символ влево h Переместить курсор на один символ вправо l Переместить курсор на одну строку вверх k Переместить курсор на одну строку вниз j Перейти в конец файла G Как добавить текст Вставить текст (режим вставки) i text Esc Присоединить текст в том месте, где расположен курсор a text Esc Присоединить текст в конец определенной строки A text Esc Как выйти в командную строку Esc Как вносить изменения в файл Удалить строку dd Удалить символ x Удалить слово dw Вставить (Open) новую строку выше O text Esc Вставить (Open) новую строку ниже o text Esc Копировать в буфер/копировать строку Y Вставить (Put) перед P Вставить (Put) после p

Объединение команд и перенаправление вывода

Система SunOS 5. x позволяет объединять команды несколькими способами. В этом разделе описаны три способа для комбинирования (объединения) команд.

Ввод нескольких команд в одной командной строке

Вы можете вводить несколько команд в одну командную строку, разделяя их точкой с запятой (;) .

Например, можно сменить каталог и вывести список команд, набрав cd/usr/bin;ls и нажав Return. В следующем примере задается переменная окружения для оболочки Bourne, и затем экспортируется переменная:

Перенаправление вывода (<>)

Ниже приводится содержимое файла sample.file :

Объединение команд (|)

Вы можете использовать оператор pipe ( | ) для соединения двух или более команд, используя вывод одной команды как ввод для следующей команды. В этом разделе приводятся только два примера из множества способов объединения команд в конвейер (pipeline).

Для печати man-страницы руководства для команды cat (1), наберите man cat | lp и нажмите Return. Man-страница не выводится на экран. Вместо этого вывод направляется команде lp , которая его распечатывает на принтере по умолчанию.

Вы можете найти список процессов для определенной команды путем передачи вывода команды ps -e команде grep . Результат выводится на экран. Например, для вывода информации о процессах для OpenWindows:

Если вы хотите распечатать эту информацию, добавьте еще одну команду печати на принтер ( | lp ) в конец последовательности команд:

Использование страниц руководства (Man-страниц)

Вывод страницы руководства (Man-страницы) ( man )

Файловая систем - структура каталогов, которая операционная система использует, чтобы сохранить и организовать файлы. Дерево каталогов Solaris, хотя это похоже на одну файловую систему, состоит из нескольких файловых систем, подключенных к дереву, которое создается при установке файловых систем.

Изначально в Solaris использовалась файловая система UFS. В 2004 Sun Microsystems разработала файловую систему ZFS, которая стала включаться в Solaris 10, начиная с релиза 6/06 (июнь 2006).

Всего Solaris 10 поддерживает 14 файловых систем:

  • · UFS (Unix File System)
  • · ZFS (Zettabyte File System)
  • · SMBFS (SMB)
  • · VxFS (Veritas File System)
  • · PCFS (FAT и FAT32)
  • · HSFS (для CD-ROM)
  • · TMPFS
  • · NFS (Network File System)
  • · CacheFS
  • · AutoFS
  • · SpecFS
  • · ProcFS
  • · SockFS
  • · fifos [5].

Solaris 10 - мощная ОС, пригодная для решения самых разнообразных задач. Система доступна для свободного использования, может быть инсталлирована как на выделенных серверах, так и на персональных компьютерах пользователей. ОС Solaris 10 предоставляет вам более 600 новых возможностей, многие из которых не реализованы ни в какой другой операционной системе. Solaris опережает конкурирующие системы как по быстродействию приложений, так и по результатам стандартных для отрасли тестов. После выхода основной версии Solaris 10 выпускаются ее обновленные варианты, в которых реализуются новые возможности.

Инновационные технологии, используемые в Solaris 10: Контейнеры - технология в области системной виртуализации и утилизации ресурсов; ZFS (Zetabyte File System) - самовосстанавливающаяся, самоуправляемая 128 разрядная файловая система; PSH (Predictive Self-Healing) - упреждающее самовосстановление; BrandZ - технология запуска в среде Solaris приложений Linux; Process Rights Management - установка прав исполняющимся процессам; Security Toolkit - автоматически настраивает систему на максимум безопасности, DTrace - уникальный механизм динамической трассировки задач [6].

В сентябре 2010 года корпорация Oracle выпустила обновление для операционной системы Solaris 10. Параллельно с этим, были выпущены пакеты программного обеспечения Oracle Solaris Cluster 3.3 и среда разработки приложений Oracle Solaris 12.2.

Выпущенное обновление было протестировано на совместимость с другими решениями корпорации и популярными серверными решениями других производителей. Вместе с релизом системы были обновлены и сертификационные курсы по Solaris, куда были включены порядка 50 000 различных вопросов и практических кейсов.

В версии 10/09 компания повысила производительность сетевой подсистемы и ядра ОС в целом, добавлены новые возможности, касающиеся виртуализации на базе x86- и SPARC-серверов. Также в новинке появилась новая версия фирменной файловой системы ZFS, поддерживающей очень большие дисковые массивы.

С аппаратной точки зрения 10/09 поддерживает последние версии x86-процессоров AMD и Intel. В Oracle также заявляют, что новая версия полностью совместима с 11 000 сторонних приложений, написанных ранее под среду Solaris 10.

Что касается Solaris Cluster 3.3, то здесь Oracle предлагает набор решений для создания отказоустойчивых производственных кластеров уровня предприятия. Здесь в наличии присутствуют кластерные приложения Oracle Solaris Containers и Oracle Solaris Cluster Geographic Edition. Поддерживает кластерная платформа и другие популярные продукты, ориентированные на кластерные среды, в частности Oracle WebLogic Server, Oracle's Siebel CRM, MySQL Cluster и Oracle Business Intelligence Enterprise Edition 11g.

Кластерный пакет программ на уровне системы также поддерживает расширения Solaris Trusted Extensions для повышения безопасности данных и технологию InfiniBand для скоростного обмена данными.

Среда Solaris Studio 12.2 получила новые инструменты для разработки многопоточных и распределенных Solaris-приложений.

Среди других осей Solaris стоит особняком,
но, несмотря на некоторые непривычности в работе
, она подходит для создания защищённого сервера ничуть не хуже,
чем Linux и FreeBSD. Фаерволы IPFilter, Sun Screen, хорошо организованная парольная безопасность,
Samba и LDAP, поддержка IPSec и многое другое вытянут и пользователей,
и админа. В общем, стоит во всём разобраться.
Не боись, мотор не заглохнет. Поехали!


Немного истории

Операционная система Solaris (компания Sun Microsystems) выросла из SunOS-классического юникса,
построенного на базе bsd-шного ядра и продолжающего лучшие традиции AT&T System
V. Но в отличие от SunOS это полноценная рабочая среда,
поэтому, если тебе нужно что-то большее, чем просто юникс,
- выбирай Solaris. Главное достоинство Solaris-высокая степень масштабируемости и,
как следствие, реализация концепции симметричных многопроцессорных вычислений
SMP (Symmetric Multi-Processing), то есть линейный рост производительности при увеличении числа процессоров в системе.
Солярка одинаково хорошо будет стоять и на слабенькой рабочей станции,
и на супермощном сервере, так что более мощной и удобной системы для любых запросов не найти.
Итак, общее представление о системе получили,
теперь можно устанавливать.

Если на компьютер не планируется ставить ещё какую-нибудь систему,
то можно удалить все разделы, которые у тебя до этого были,
клавишей 3. Теперь создавай с помощью клавиши 1 раздел с типом "x86 boot" и разделы
"Solaris". Так как мы с тобой строим сервер,
то, как и в линухе, одного корневого раздела на всю систему недостаточно,
поэтому нужно создать разделы /var, /usr, /home, /tmp,
/, после чего клавишей 2 выбери загрузочный. Последует вопрос:
делать ли его активным. Если осей других на компе нет,
и ты будешь использовать соляровый менеджер загрузки,
то отвечай положительно. Если тебе больше нравится
lilo, BootMagic или любой другой загрузчик, - отвечай отрицательно.
Когда ты создал все нужные разделы и выбрал активный,
можешь выходить (клавиша 4 - Exit). После этого и начнётся настоящая установка с помощью мастера Web
Start. Тебе предложат форматнуть диск или, при необходимости,
разделы в ФС UFS. Соглашаешься, подтверждаешь установку соляры и перезапись содержимого загрузочного диска.
Затем тебя спросят, какого размера делать свап.
Это на твоё усмотрение. Если не хватит, то командой swap ты сможешь выделить дополнительные сегменты под виртуальную память.
На вопрос, нужно ли размещать свап в начале диска,
отвечай утвердительно, поскольку размер файла подкачки в процессе формирования файловых систем изменён быть не может. Подтверждай сохранение всех настроек и жди.
Произойдёт форматирование диска, создание корневой файловой системы,
копирование платформо-зависимых файлов и перезагрузка.
Перед ней тебя попросят нажать Enter. После ребута ты увидишь соляровый менеджер загрузки
(если ты его выбрал). Я расскажу только про него,
так как с lilo, grub и т. п. , проблем быть не должно.


CDE-Рабочий стол в Solaris.


Логинимся в солярке

Итак, перед тобой появился Solaris Boot Manager (а точнее SunOS Intel Platform Edition Primary Boot Subsystem) и предложил выбрать загрузку с активного раздела.
Нажимай клавишу с номером раздела и милостиво позволяй ему сделать это.
Процесс автобута можно прервать с помощью
Esc. Затем система инициализируется и - последний шаг подготовки - запустится
kdmconfig, который настроит тебе видюлю, монитор и т.
п. для запуска графического мастера установки Web
Start. Поздравляю - самый сложный этап установки соляры завершён.
Работать с WebStart не труднее, чем с дружелюбным инсталлятором какого-нибудь
Mandrake, хотя русский язык и не поддерживается.
Копирование файлов, очередная перезагрузка,
и перед тобой появится рабочий стол CDE(Common Desktop Environment-не путать с KDE)..

Работа с суперсервером

Если ты когда-нибудь строил сервер на базе никсов,
то ты наверняка знаком с суперсервером inetd. Есть он и в солярке.
Использовать его или нет - дело твоё. Я бы посоветовала не делать этого.
Причина известна: если inetd повалится, то он потянет за собой и все сервисы,
которые на нём держатся. Да и применение его избыточно:
сегодня все мало-мальски приличные сервисы умеют работать в режиме
standalone, и помощник им не нужен. Для тех, кто всё-таки решился завязать свой сервер на
inetd, я скажу пару слов о соляровой версии суперсервера.
Все файлы лежат на привычных местах:/etc/services,
/etc/inetd. conf. Закомментируй в них все ненужные сервисы
и настрой нужные следующим образом:

Файл /etc/inetd. conf имеет формат:

имя тип протокол флаги пользователь параметры,
например

ftp stream tcp(tcp6) nowait root /usr/sbin/in. ftpd in. ftpd (бывает и internal)..

В записи может быть wait или nowait. Если указан
wait, то это значит, что суперсервер не будет прослушивать этот порт до его освобождения сервером,
а если nowait, то будет слушать. Telnet и ftp-сервисы наиболее часто привязываются к
inetd, но тем не менее использовать их ни в коем случае нельзя,
поэтому ставь OpenSSH. Его конфиг находится в /etc/sshd2/sshd2_config.

О пользователях

Большинство задач администрирования в Solaris выполняется при помощи графического пакета
Admintool. Но в консоли огромный диапазон проблем можно решить гораздо быстрее и удобнее,
поэтому нет смысла использовать медленные и глючащие иксы. Добавление пользователей осуществляется при помощи банальной правки
/etc/passwd, /etc/shadow и /etc/group, а также командой useradd. Зашифрованные пароли генерируются автоматически при помощи функции crypt() и сохраняются в
/etc/shadow. Все пароли криптуются DES-подобным алгоритмом и не могут быть длиннее восьми символов,
среди которых вся клава плюс особые нечитаемые сочетания клавиш.
Ручное удаление пользователей кроме правки
/etc/passwd, /etc/group и /etc/shadow включает в себя удаление домашней диры пользователя,
почтового ящика(rm -rf /var/mail/имя юзера), почтовых псевдонимов(/etc/aliases),
проверку cron, at и процессов пользователя(ps -eaf | grep имя юзера). Для того,
чтобы временно заблокировать вход пользователя в систему,
достаточно в /etc/passwd или в /etc/shadow заменить криптованный пароль символом
*. Все файлы, задачи и настройки пользователя останутся на месте,
а войти в систему он не сможет. Теперь о квотах.
Они реализованы практически также, как и в
Linux. Необходимые параметры прописываются в /etc/fstab или прямо в консоли при использовании команды
mount. После прописывания квот желательно перезагрузиться или размонтировать/смонтировать файловую систему,
для которой устанавливались квоты. Затем создаёшь файл quotas в нужных каталогах,
набиваешь команду edquota и вводишь количество inode-узлов и блоков дискового пространства в "жёстком" или "мягком" ограничениях.
Последний штрих-команда quotaon, предназначенная для включения квот.

Управление пакетами

Управление пакетами - паккаджами - в Solaris реализовано очень просто,
удобно и эффективно. Сначала поговорим о добавлении и удалении пакетов из системы,
а затем о более интересном - создании собственных пакетов.
Вот список команд, необходимых для работы с паккаджами:
pkgadd-добавить пакет;
pkgchr-проверить пакет;
pkginfo-посмотреть информацию о пакете;
pkgmk-создать новый пакет на базе прототипа;
pkgproto-создать новые спецификации пакета и добавить в прототип;
pkgrm-удалить пакет;
pkgtrans-упаковать все файлы пакета в архив.
Например, чтобы получить информацию о том, к какому пакету принадлежит файл,
нужно набить в консоли следующую команду:

pkgchk -l -p путь к пакету

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

Теперь о создании пакетов. Первым делом нужно создать файл
pkginfo. Его формат такой(перечислю наиболее часто встречающиеся параметры):

ARCH - архитектура, для которой создаётся пакет;
BASEDIR-каталог, в который происходит распаковка файлов;
CATEGORY-тип архива(системный или обычное приложение);
EMAIL-контактная информация автора пакета;
NAME-название пакета(например, "My cool proga");
PKG - имя пакета(например, BAS_LOCAL);
PSTAMP-имя автора пакета;
VENDOR-имя автора или название фирмы - разработчика программы.

Затем создаём файл прототипа. . .

. . . и не забываем добавить в этот самый файл информацию о pkginfo:

i pkginfo=путь до файла pkginfo

Теперь в каталоге установки(поле BASEDIR файла pkginfo) выполняем команду для создания в файле прототипа относительныx путей и имён файлов:

find . -print | pkgproto >> prototype

Загляни в только что созданный файл прототипа.
Буква f-это файл, а d-директория. Каждая запись включает в себя информацию о пользователе,
группе и правах доступа. Листай этот файлик дальше,
что не понравится - исправишь. Затем набирай команду:

pkgmk -o -r путь до папки, где лежит pkginfo

С этого момента файлы для упаковки будут лежать в /var/spool/pkg/имя пакета.
Последний шаг:

pkgtrans -s /var/spool/pkg /backup/имя пакета. pkg

На экране появится список найденных пакетов,
и тебя спросят, какие из них нужно устанавливать.
Нажимаешь клавишу с номером, соответствующим имени пакета.
Все файлы твоего пакета скомпонуются в один архивный файл и будут лежать в /backup/имя пакета.
pkg. Пакет готов!

Ипсековские правила определяются командой
ipsecconf. Конфиги лежат в /etc/inet/ipsecinit. conf и /etc/inet/ipsecpolicy.
conf. Формат последнего следующий(настраиваем ftp):

Таким образом мы защитили весь трафик 21-ого порта
AH, используя DES или 3-DES, и организовали проверку подлинности с использованием алгоритма
MD5. Это был пример для порта, но можно сделать то же самое для целой подсети:

Сходства и различия двух настроек видны невооружённым взглядом и в пояснении не нуждаются.


Домашняя страница IPFilters


Выбираем и настраиваем фаервол

Существует два основных фаервола под Solaris:
IPFilter и
SunScreen. IPFilter-бесплатный и с исходниками, а SunScreen-коммерческий.
Но недавно вышел его бесплатный вариант, правда с чуть меньшей
функциональностью.
По возможностям оба брандмауэра примерно одинаковы:
поддержка
IPv6, MBone, качественное распределение нагрузки,
перенаправление, NAT, хорошее ведение и отображение статистики.
Отличия SunScreen от его собрата заключаются в наличии графического фейса,
который вряд ли кому и нужен. В данном разделе я подробнее разберу
IPFilter, а SunScreen`а коснусь вкратце. Кстати, оба эти пакета не входят в стандартную поставку дистрибутива
Solaris. IPFilter отдалённо напоминает IPTables, хотя далеко не так удобен в
конфигурировании,
но это нисколько не умаляет его достоинств.
IPFilter выполнен в виде загружаемого модуля к ядру.
Важнейшее его свойство состоит в том, что он просматривает все правила из своего конфига,
а не только те, что соответствуют определённому условию.
Вывод: концепция конфигурирования IPFilter заключается в том,
что можно (и нужно) описать как общие правила,
так и частные, причём первые обязательно должны предшествовать вторым.
Если не выполнить этого условия, фаервол не будет работать должным образом,
частные правила будут произвольно изменяться следующими за ними общими.
Общие правила определяются так:

пропускает весь входящий трафик, а

соответственно блокирует его.

block in on hme1 proto tcp from any to 193. 34. 207. 12/24 port=80

Разберёмся, что же мы тут нашаманили. Вышеприведённое правило запрещает
(block) приём входящих пакетов на интерфейс hem1 по протоколу tcp с любых (from any) адресов на 80 порт данной подсети.
From всегда означает откуда, to - куда, а all - ссылка на все адреса сразу.
Правда, просто?

Если тебе не нравится, что IPFilter применяет сразу все правила,
то это можно изменить при помощи ключевого слова
quick. Так, если в предыдущем примере мы прописали слово
quick, то следующее за ним в конфиге правило,
разрешающее пакеты в данную подсеть, будет уже пропущено.
Посмотреть статистику по соединениям можно командой
ipfstat. Ну, что ж, пожалуй и хватит на первый раз про этот брандмауэр.

Итак, пакеты ты установил, пользователей настроил,
фаерволом защитился. Пора переходить к маленьким,
но не менее от этого важным, мелочам безопасности.


Мелочи безопасности

Блокировку портов решай ковырянием в /etc/services и
/etc/inetd. conf. Что касается переполнения буфера,
то проблема частично решается установкой некоторых параметров в /etc/system:

set noexec_user_stack=1
set noexec_user_stack_log=1

Эффективным методом защиты от подмены приложений является сравнение MD5 сумм.
Достаточно один раз собрать MD5 суммы нужных бинарников и сохранить их в надёжном месте
(наилучший вариант - на компакте или на другом компьютере).
Это выполняется вызовом программы . /md5. Важно периодически сверять MD5 суммы приложений в системе с суммами,
записанными на проверенном носителе. Если сумма изменилась
- самое время искать злоумышленника.
Но необходимо помнить, что контрольная сумма может измениться,
если ты обновлял данный пакет или файл.


Заключение

Для создания суперзащищённого сервера нужна самая малость:
голова на плечах и некривые руки
. Впрочем, эти маленькие детали очень важны и сами по себе.
А так патчься три раза в день, читай на ночь логи,
и слава суперадмина тебе обеспечена. Да не облысеют твои пятки!

Всем привет! Вот мы и открыли очередной, четвёртый по счёт уже, поток курса «Администратор Linux», который уверенно занимают свою нишу рядом с девопсерским курсом. Больше преподавателей, больше информации и стендов. Ну и как всегда больше интересной информации, которую подобрали преподаватели.

Задумывались ли вы когда-нибудь, что нужно для того, чтобы ваша система была готова к запуску приложений?

Понимать процессы загрузки ядра и запуска системы Linux, важно для настройки Linux и решения проблем запуска. В этой статье представлен обзор процесса загрузки ядра с использованием GRUB2 загрузчика и запуска, выполняемого системой инициализации systemd.

На самом деле, есть два ряда событий, необходимых для приведения компьютера с Linux в рабочее состояние: загрузка ядра (boot) и запуск системы (startup). Процесс загрузки ядра начинается при включении компьютера и заканчивается с инициализацией ядра и запуском systemd. После этого начинается процесс запуска системы, и именно он доводит компьютер Linux до рабочего состояния.


В целом, процесс загрузка ядра и запуск системы Linux довольно прост. Он состоит из следующих шагов, которые будут описываться более детально в разделах ниже:

  • BIOS POST;
  • Загрузка ядра (GRUB2);
  • Инициализация ядра;
  • Запуск systemd, родителя всех процессов.

Процесс загрузки ядра

Процесс загрузки ядра может быть инициирован несколькими способами. Во-первых, если питание отключено, включение компьютера запустит процесс загрузки. Во-вторых, если на компьютере уже запущен локальный пользователь, включая рут и непривилегированного пользователя, пользователь может программно инициировать процесс загрузки ядра, используя GUI или командную строку для перезагрузки. Перезагрузка сначала выключит компьютер и только затем произведет рестарт.

BIOS POST

Первый шаг процесса загрузки ядра Linux не имеет никакого отношения к Linux. Это аппаратная часть процесса, одинаковая для всех операционных систем. Когда питание подается на компьютер, в первую очередь происходит запуск POST (Power On Self Test), являющегося частью BIOS (Basic I/O System, Базовая Система Ввода-Вывода).

Когда IBM выпустила первый персональный компьютер в 1981 году, BIOS был разработан для инициализации аппаратных компонентов. POST — часть BIOS, задачей которого является обеспечение корректной работы компьютерного оборудования. Если POST заканчивается неудачно, то возможно компьютер неисправен, и процесс загрузки не продолжается.

BIOS POST проверяет базовую работоспособность железа, а затем вызывает прерывание BIOS — INT 13H, которое находит секторы загрузки ядра на всех подключенных устройствах с возможностью загрузки. Первый найденный сектор, в котором содержится валидная загрузочная запись, загружается в RAM, после чего контроль передается коду из загрузочного сектора.
Загрузочный сектор — только первый этап. В большинстве дистрибутивов Linux используется один из трех вариантов загрузчика: GRUB, GRUB2 и LILO. GRUB2 — самый новый и сейчас его используют гораздо чаще более старых вариантов.

GRUB2 расшифровывается как “GRand Unified Bootloader, version 2”, и теперь он является основным загрузчиком для большинства современных дистрибутивов Linux. GRUB2 — программа, которая делает компьютер достаточно “умным”, чтобы тот смог найти ядро операционной системы и загрузить его в память. Поскольку говорить и писать просто GRUB легче, чем GRUB2, в этой статье я возможно буду использовать термин GRUB, но подразумевать GRUB2, если не будет иного уточнения.

GRUB совместим со спецификацией мультизагрузки, что позволяет ему загружать разные версии Linux и других операционные системы; он также может запустить по цепочке загрузочную запись проприетарных операционных систем.

GRUB также позволяет пользователю выбрать загрузку ядра из нескольких возможных для любого предоставленного дистрибутива Linux. Это дает возможность загрузить предыдущую версию ядра, если обновленная не сможет загрузиться корректно или окажется несовместима с какой-то важной частью ПО. GRUB можно настроить в файл /boot/grub/grub.conf .

GRUB1 сейчас уже считается устаревшим и в большинстве современных дистрибутивов заменен на GRUB2, который является его переписанным вариантом. Дистрибутивы на основе Red Hat обновились до GRUB2 около Fedora 15 и CentOS/RHEL 7. GRUB2 имеет тот же загрузочный функционал, что и GRUB1, но в дополнении предоставляет mainframe-like, pre-OS окружение на базе команд и бОльшую гибкость на предзагрузочном этапе. Настройка GRUB2 происходит в /boot/grub2/grub.cfg .

Основная задача любого из GRUB — загрузить ядро Linux в память и запустить его. Обе версии GRUB работают схожим образом в три этапа, но в этой статье я буду использовать именно GRUB2 для описания работы GRUB. Настройка GRUB и GRUB2 и использование команд GRUB2 выходит за рамки этой статьи.

Хоть официально GRUB2 не использует нумерацию этапов, ради удобства я воспользуюсь ей в этой статье.

Как уже упоминалось в разделе BIOS POST, в конце POST BIOS ищет загрузочные записи на прикрепленных дисках, обычно расположенных в Главной Загрузочной Записи (Master Boot Record, MBR), после чего он загружает первую найденную запись в память и приступает к ее исполнению. Bootstrap-код, то есть 1-ый этап GRUB2, занимает очень мало места, потому что должен влезать в первый 512-байтовый сектор на жестком диске вместе с таблицей разделов. Общее количество места, выделенного для самого bootstrap-кода в стандартной MBR — 446 байт. 446-байтовый файл для этапа 1 называется boot-img и не содержит таблицу разделов — она добавляется в загрузочную запись отдельно.

Поскольку загрузочная запись должна быть настолько маленькой, она не очень “умная” и не понимает структуру файловой системы. Поэтому единственной целью этапа 1 является обнаружение и загрузка этапа 1.5. Чтобы достичь этого, этап 1.5 GRUB должен располагаться в пространстве между самой загрузочной записью и первым разделом на диске. После загрузки этапа 1.5 GRUB в RAM, этап 1 передает контроль этапу 1.5.

Как было замечено выше, этап 1.5 GRUB должен находиться между загрузочной записью и первый разделом на диске. Исторически сложилось, что это пространство остается неиспользованным по техническим причинам. Первый раздел на жестком диске начинается в 63 секторе, а с учетом MBR в секторе 0, остается 62 512-байтовых секторов — 31744 байта — в которых можно хранить файл core.img — 1.5 этап GRUB. Файл core.img весит 25389 байт, что достаточно места для его хранения между MBR и первым разделом диска.

Поскольку для этапа 1.5 можно использовать больше кода, его может быть достаточно для содержания нескольких распространенных драйверов файловых систем, например, стандартной EXT и прочих Linux файловых систем, FAT и NTFS. core.img в GRUB2 более сложный и функциональный, чем в этапе 1.5 GRUB1. Это значит, что этап 2 GRUB2 может находиться в стандартной EXT файловой системе, но не в логическом томе. Поэтому стандартное местоположение для файлов этапа 2 — файловая система /boot , а точнее /boot/grub2 .

Обратим внимание, что директория /boot должна располагаться в файловой системе, которая поддерживается GRUB. Не все файловые системы имеют эту поддержку. Задача этапа 1.5 — начать с необходимыми драйверами файловой системы поиск файлов этапа 2 в файловой системе /boot и загрузить нужные драйверы.

Все файлы этапа 2 GRUB находятся в директории /boot/grub2 и нескольких поддиректориях. В GRUB2 нет файла образа как в этапах 1 и 2. Вместо этого он по большей части состоит из runtime модулей ядра, которые грузятся по необходимости из директории /boot/grub2/i386-pc .

Задача этапа 2 GRUB2 — обнаружить и загрузить ядро Linux в RAM и передать контроль управления компьютером ядру. Ядро и связанные с ним файлы находятся в директории /boot . Файлы ядра легко узнать, поскольку их названия начинаются с vmlinuz. Вы можете составить список содержимого директории /boot , чтобы посмотреть текущие установленные ядра в вашей системе.

GRUB2, как и GRUB1, поддерживает загрузку одного из нескольких ядер Linux. Система управления пакетами Red Hat поддерживает сохранение нескольких версий ядра, чтобы можно было загрузить старую версию ядра в случае возникновения проблем с самой новой. По умолчанию, GRUB предоставляет предварительно загруженное меню установленные ядер, включая опцию rescue, а после настройки, и опцию recovery.

Этап 2 GRUB2 загружает выбранное ядро в память и передает контроль управления компьютером ядру.

Все ядра находятся в самораспаковывающемся, сжатом формате для экономии места. Ядра расположены в директории /boot , вместе с исходным образом диска RAM и списком разделов на жестких дисках.

После того, как выбранное ядро загружено в память и начинает исполняться, в первую очередь, оно должно извлечь самого себя из сжатой версии файла, перед тем как начать выполнять полезную работу. Как только извлечение произошло, оно загружает systemd, который является заменой старой программе SysV init, и передает ему контроль.

Это конец процесса загрузки ядра. К этому моменту, ядро Linux и systemd запущены, но не могут выполнять какие-либо полезные задачи для конечного пользователя, так как выполнять еще нечего.

Процесс запуска системы

Процесс запуска системы следует за процессом загрузки ядра и приводит компьютер с Linux в рабочее состояние.

systemd — родитель всех процессов, ответственный за приведение хоста Linux в состояние эффективной работы. Некоторые его функции, более обширные, чем те, что были представлены в старой программе инициализации, и должны управлять множеством аспектов запущенного хоста Linux, включая монтирование файловой системы, запуск и управление системными сервисами, необходимыми для продуктивной работы хоста Linux. Все задачи systemd, которые не относятся к процессу запуска системы, выходят за рамки обсуждения в этой статье.

Сначала, systemd монтирует файловые системы, как определено в /etc/fstab , включая любые swap-файлы и разделы. К этому моменту, он может получить доступ к файлам конфигурации, расположенным в /etc , включая его собственным. Он использует собственный конфигурационный файл /etc/systemd/system/default.target , чтобы определить таргет (target), по которому нужно загрузить хост. Файл default.target — просто симлинк на настоящий target файл. Для настольной рабочей станции обычно это graphical.target, эквивалентный runlevel 5 в старом инициализаторе SystemV. Для сервера, по умолчанию скорее всего будет multi-user.target, аналогичный runlevel 3 в SystemV. emergency.target похож на однопользовательский режим.

Обратите внимание, что target’ы и сервисы являются юнитами systemd.

Ниже представлена Таблица 1, в которой идет сравнение всех таргетов systemd со старыми уровнями выполнения (runlevel) в SystemV. Псевдонимы таргета systemd предоставляются systemd для обратной совместимости. Псевдонимы таргета разрешают скриптам — и многим сисадминам, мне в том числе — использовать такие SystemV команды как init3 для изменения уровней выполнения. Конечно, команды SystemV направлены systemd для интерпретации и исполнения.

Runlevel aliases Description
halt.target Приостанавливает систему без отключения питания
0 poweroff.target runlevel0.target Приостанавливает систему и отключает питание
S emergency.target Однопользовательский режим. Сервисы не запущены; файловые системы не смонтированы. Это самый базовый уровень оперирования. Для взаимодействия пользователя с системой в главной консоли запущена только аварийная оболочка.
1 rescue.target runlevel1.target Базовая система, включающая монтирование файловой системы с самым базовым набором сервисов и rescue оболочкой в главной консоли.
2 runlevel2.target Многопользовательский режим, без NFS, но все сервисы, не относящиеся к GUI, запущены.
3 multi-user.target runlevel3.target Все сервисы запущены, но только через интерфейс командной строки (CLI).
4 runlevel4.target Не используется.
5 graphical.target runlevel5.target Многопользовательский режим с GUI.
6 reboot.target runlevel6.target Перезагрузка.
default.target Этот таргет всегда имеет симлинк с multi-user.target или graphical.target. systemd всегда использует default.target для запуска системы. default.target никогда не должен быть связан с halt.target, poweroff.target или reboot.target.

Таблица 1: Сравнение уровней управления SystemV с target’ами systemd и некоторые псевдонимы таргетов.

У каждого таргета есть набор зависимостей, описанных в файле конфигурации. systemd запускает необходимые. Эти зависимости представляют собой сервисы, требуемые для запуска хоста Linux с определенным уровнем функционирования. Когда все зависимости, перечисленные в конфигурационных файлах таргета, загружены и запущены, система работает на этом уровне таргета.

systemd также просматривает устаревшие директории инициализации SystemV на предмет наличия стартап файлов. Если они есть, systemd использует их в качестве файлов конфигурации для запуска сервисов описанных в файлах. Устаревший сетевой сервис — хороший пример одного из тех, что до сих пор используют стартап файлы SystemV в Fedora.

Рисунок 1, представленный ниже, напрямую скопирован с главной страницы bootup. На нем показана общая последовательность событий во время запуска systemd и базовые требования для обеспечения его успешности.

Таргеты sysinit.target and basic.target можно считать чекпоинтами в процессе запуска системы. Хоть одна из целей systemd — параллельно запускать системная сервисы, есть некоторые сервисы и функциональные таргеты, которые должны быть запущены раньше других. Эти контрольные точки не могут быть пройдены до тех пор, пока все сервисы и таргеты, необходимые для них, не будут выполнены.

Таким образом, sysinit.target достигается, когда завершены все юниты, от которых он зависит. Должны быть завершены все следующие юниты: монтирование файловых систем, настройка swap-файлов, запуск udev, настройка начального состояния генератора случайных чисел, инициализация низкоуровневых сервисов, настройка криптографических сервисов, если хотя бы одна файловая система зашифрована. В sysinit.target они могут выполняться параллельно.
sysinit.target запускает все низкоуровневые сервисы и юниты необходимые для минимальной функциональности системы, и те, что нужны для перехода к basic.target.



Рисунок 1. Карта запуска systemd

После выполнения sysinit.target, systemd запускает basic.target, начиная со всех юнитов, необходимых для его выполнения. Базовый таргет предоставляет дополнительный функционал, запуская юниты необходимые для следующего таргета, включая настройку путей до различных исполняемых директорий, коммуникационных сокетов и таймеров.

Наконец, можно начать инициализацию таргетов пользовательского уровня: multi-user.target или graphical.target. Стоит отметить, что multi-user.target должен быть достигнут до того, как будут выполнены зависимости графического таргета.

Подчеркнутые таргеты в Рисунке 1 — обычные стартап таргеты. Запуск системы завершается по достижении одного из них. Если multi-user.target является таргетом по умолчанию, то в консоли вы увидите логин в текстовом режиме. Если же по умолчанию задан graphical.target, то увидите графический логин; GUI экрана логина зависит от экранного менеджера, который вы используете.

Недавно мне пришлось поменять дефолтное загрузочное ядро на компьютере Linux, который использовал GRUB2. Я обнаружил, что некоторые команды перестали работать корректно, или же я пользовался ими как-то некорректно. До сих пор не знаю, в чем была проблема, потребуется больше времени на ее исследование.

Команда grub2-set-default неправильно настроила дефолтный индекс ядра в файле /etc/default/grub , поэтому желаемое альтернативное ядро не загружалось. Я вручную поменял /etc/default/grub GRUB_DEFAULT=saved на GRUB_DEFAULT=2 , где 2 — индекс установленного ядра, которое я хотел запустить. Затем, я запустил команду grub2-mkconfig > /boot/grub2/grub.cfg для создания нового конфигурационного файла grub. Эта уловка сработала, и альтернативное ядро было запущено.

Вот и всё. Ждём вопросы и комментарии тут или их можно задать напрямую на открытом уроке.

Читайте также: