Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 9:

Запуск и останов системы

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

Начальная загрузка системы

Загрузка Solaris 9 на компьютерах SPARC

После включения компьютера записанное в ПЗУ программное обеспечение (firmware) запускает процедуру самотестирования компьютера (power-on self-test - POST). То, как проходит эта процедура, зависит от конфигурации и модели компьютера.

Если тест прошел нормально, то программа автозагрузки пытается загрузить систему, используя имя устройства и имя файла ядра, записанные в ПЗУ.

Эти параметры могут быть изменены программой eeprom при интерактивной работе с Solaris из командной строки или после остановки системы - из командной строки ok, которую выдаст firmware по завершении останова системы.

Программа, которая запускается после начального загрузчика, называется ufsboot, если загрузка происходит с диска, или inetboot, если выполняется загрузка по сети.

Загрузка по сети

Загрузка по сети может идти с использованием DHCP или RARP/bootparams, в зависимости от настроек, записанных в ПЗУ, и реальной конфигурации сети (для настройки по DHCP в сети должен быть доступен DHCP-сервер).

Команду boot среды OpenBoot (иначе говоря, командной строки firmware) можно использовать для задания протокола загрузки явным образом:

boot net:rarp
boot net:dhcp

или полагаясь на выбор сценария по умолчанию (тогда сценарий не указывается):

boot net

При этом загрузка осуществляется через тот интерфейс, для которого определен псевдоним net.

Загрузка через сеть с использованием RARP/bootparams

Начальный загрузчик из ПЗУ выполняет ARP-запрос (подробнее об ARP-запросах см. "лекции 2" курса "Администрирование ОС Solaris") и, после получения ответа, посылает широковещательный запрос в локальную сеть по протоколу TFTP для загрузки программы inetboot из сети. Загрузив с ответившего TFTP-сервера программу inetboot, загрузчик передает ей управление, а она отправляет еще один ARP-запрос, после чего находит файловую систему в сети, с которой следует произвести загрузку ядра. Для этого inetboot использует протокол bootparams (см. man bootparams для получения детальной информации о протоколе). После того как файловая система найдена, с нее по протоколу NFS загружается ядро и ему передается управление.

Загрузка через сеть с использованием DHCP

При загрузке по сети с использованием DHCP начальный загрузчик из ПЗУ посылает широковещательный запрос, в котором сообщает MAC-адрес своего компьютера и его архитектуру, запрашивая в ответ IP-адрес, параметры загрузки и настройки сети. После получения ответа (детали протокола DHCP см. в "лекции 2" курса "Администрирование ОС Solaris") начальный загрузчик загружает inetboot через сеть, inetboot загружает ядро, которое, в свою очередь, загружает необходимые ему файлы через сеть, после чего выгружает inetboot. Стартовые скрипты запускают dhcpagent, который выполняет оставшуюся часть настроек по DHCP.

Загрузка с диска

При загрузке с диска разделяют два этапа: начальную загрузку и вторичную. Начальная загрузка заключается в том, что программа загрузки из ПЗУ считывает вторичный загрузчик с загрузочного раздела диска, из блоков с первого по пятнадцатый.

Если имя файла ядра указано не как полное имя файла (начинающееся с символа / ), то такое имя расценивается как относительное и вторичный загрузчик ищет ядро в каталоге, соответствующем аппаратной платформе компьютера. Тогда путь к ядру точно будет лежать через каталог /platform/platform-name. Для многих компьютеров SPARC после этого выполняется поиск в каталоге /platform/hardware-class-name. Если указано полное имя файла, загрузчик будет пытаться загрузить в точности тот файл, что указан. После загрузки файла ядра в память загрузчик передает ему управление.

Если имя файла ядра не указано, и из других настороек непонятно, какое ядро следует загружать, загрузчик сам решает, какое ядро требуется, основываясь на том, какое ПО установлено в системе, на известных свойствах аппаратуры и firmware и на записях в файле политики загрузки boot.conf. О местоположении и содержимом этого файла будет сказано ниже, в разделе "Файлы и каталоги, используемые при загрузке".

Среда OpenBoot. Команда boot

В системах с архитектурой SPARC после процедуры самотестирования компьютера (POST), которую выполняет firmware, запускается загрузчик, предоставляющий интерфейс среды OpenBoot. В этой среде можно вводить команды в командной строке в ответ на приглашение среды. Приглашение среды представляет собой слово

ok

Здесь мы рассмотрим команду boot среды OpenBoot.

Синтаксис команды boot предполагает возможность указания загрузочного устройства и дополнительных аргументов:

boot [device] [arguments]

Если дать команду boot без параметров, то будет выполнена загрузка с устройства по умолчанию. По умолчанию загрузка производится с того устройства, которое указано в переменной boot-device или diag-device в ПЗУ (NVRAM variable). Если система запускается в режиме диагностики, вместо переменных boot-device и boot-file используются diag-device и diag-file.

Аргументы команды boot могут быть многострочными, они не анализируются загрузчиком OpenBoot, а передаются вторичному загрузчику как есть. Если команде boot переданы какие-нибудь аргументы, содержимое переменных boot-file и diag-file игнорируется. Например, если дана команда

boot -s

то подстрока -s расценивается как аргумент, а переменные boot-file и diag-file не принимаются во внимание.

Если команды

boot net

и

boot cdrom

если они даны без аргументов, то они будут использовать содержимое переменных boot-file и diag-file как путь к файлу ядра. Стало быть, если boot-file содержит имя 64-разрядного ядра, а вы пытаетесь загрузиться с CD-ROM командой boot cdrom, то загрузка не состоится, если на CD-диске имеется только 32-разрядное ядро.

Для загрузки в специфическом режиме следует указывать команде boot соответствующие аргументы, в ответ на приглашение ok вводится команда:

  • boot -as - загрузка ядра, используемого по умолчанию, в однопользовательском режиме ;
  • boot kernel/unix -as - принудительная загрузка 32-разрядного ядра в однопользовательском режиме (для принудительной загрузки указывается имя файла явным образом);
  • boot kernel/sparcv9/unix -as - принудительная загрузка 64-разрядного ядра в однопользовательском режиме (для принудительной загрузки указывается имя файла явным образом).

Для более детального изучения команды boot в вашей системе следует использовать man boot ; помните, что на некоторых платформах, в зависимости от firmware, могут наблюдаться отклонения от схемы, описанной здесь и в документации.

Загрузка Solaris 9 на компьютерах x86

На компьютерах x86 загрузка состоит из двух разных этапов: начальной загрузки и вторичной загрузки. Начальная загрузка выполняется BIOS системной платы и BIOS контроллеров. После процедуры POST начальный загрузчик пытается прочесть первый сектор с дискеты, компакт-диска или жесткого диска, или, если эта функция поддерживается, загрузить вторичный загрузчик через сеть. После того как вторичный загрузчик записан в оперативную память, ему передается управление. Начальный загрузчик работает в режиме real mode процессора, а вторичный - в защищенном режиме (32-bit protected mode).

Вторичный загрузчик называется boot.bin и способен считать ядро с диска из файловой системы UFS, компакт-диска или через сеть с использованием NFS. Вторичный загрузчик запускает программу DCA (device configuration assistant), которая определяет физические устройства компьютера. При этом системный администратор может вмешаться в процесс определения устройств, если DCA их не может верно определить автоматически.

После возвращения управления от DCA вторичный загрузчик выполняет скрипт /etc/bootrc, который управляет дальнейшим процессом загрузки. Обычный /etc/bootrc предлагает администратору ввести символ b для загрузки с определенными ключами и аргументами, символ i для запуска интерактивного командного интерпретатора, и любой другой символ - для загрузки ядра с установками по умолчанию.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >