Журнал LinuxFormat - перейти на главную

LXF147:Sysadmin

Материал из Linuxformat
Версия от 20:32, 15 июля 2014; 2sash-kan (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

По рецептам доктора Брауна

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


Готов ко всему

BoxGrinder Создание с нуля образов виртуальных машин на базе Fedora, Red Hat и CentOS.

При создании образов систем для разворачивания (скажем) на облаке EC2 вы часто начинаете с образа-шаблона, инициализируете его, затем подключаетесь к нему по SSH, чтобы добавить нужные вам пакеты.

В Fedora 15 есть утилита BoxGrinder, позволяющая создавать и разворачивать образы систем («устройства»), «готовые к работе» без необходимости дополнительных настроек. Она может создавать образы на основе Fedora, RHEL или CentOS для KVM, Xen, VMware и Amazon EC2, разворачивать их в локальной файловой системе или загружать в Amazon S3 либо как AMI (Amazon Machine Image – образ системы Amazon), либо по SFTP.

На входе BoxGrinder принимает простой файл «описания устройства»:

name: grinder-test
os:
 name: fedora
 version: 14
 password: mysecret
hardware:
 cpus: 2
 memory: 512
 partitions:
  “/”:
  size: 2
packages:
 - httpd

В примере не показана поддержка наследования в BoxGrinder – можно определить «базовый» образ в файле .appl и затем ссылаться (и расширять) его в других файлах .appl.

С этим файлом я создал образ для VMware:

# boxgrinder-build boxtest.appl -p vmware \
--platform-config type:personal \
-d local --delivery-config path:/tmp/boxtest

Сборка не мгновенная, так как необходимые пакеты загружаются из репозиториев. В результате в каталоге /tmp/boxtest у меня получился сжатый tar-архив с должными файлами .vmx и .vmdk, которые прекрасно загрузились на мою VMware Workstation. Я прервал загрузку образа на EC2, потому что на загрузку 2 ГБ по моему ADSL-каналу ушли бы не одни сутки. При создании образа системы для развертывания на облаке гораздо лучше запустить BoxGrinder на том компьютере в облаке, на котором вы хотите развернуть систему.

Одно из достоинств BoxGrinder в том, что после сборки образа для «устройства» можно перезапустить сборку для другой платформы гипервизора, и программа употребит собранный образ, не затевая сборку заново. Подробности ищите на http://boxgrinder.org.


Дайте отдых компьютеру

PowerNap В Ubuntu 11.04 появилась новая версия «хранителя экрана» для сервера – рассмотрим, нельзя ли сэкономить с ней немного денег.

Когда вашему компьютеру нечего делать, сэкономить энергию можно несколькими способами: отключить ему питание или перевести его в ждущий или спящий режимы – в обоих перезапуск будет быстрее, чем запуск с нуля. А теперь есть и другая возможность – «короткий сон» [англ. nap].

Идея родилась у разработчиков Canonical Дастина Керкленда [Dustin Kirkland] и Андреса Родригеса [Andres Rodriguez], и PowerNap ввели в установку Ubuntu Server по умолчанию, а для других версий Ubuntu можно взять его из репозиториев. Это своего рода «хранитель экрана» для серверов, но кроме активности клавиатуры и мыши он следит за «внутренней» активностью системы.

Работает он так. Демон powernapd через регулярные интервалы времени (по умолчанию, каждую секунду) просыпается и запускает несколько программ-мониторов, по числу типов активности системы. Если в течение заданного промежутка времени (по умолчанию – пять минут, но все эти параметры можно изменить в файле настройки) ни один монитор не фиксирует активности, демон принимает меры по снижению энергопотребления.

Мер (настраиваемых) у него четыре: отключение питания или вход в указанный режим – спящий, ждущий или энергосберегающий. Крайняя мера – отключение питания; тогда электроэнергия не расходуется вообще, но возобновление работы требует полной перезагрузки. Для этого нужно нажать кнопку включения питания или получить сетевой пакет Wake-On-LAN (WOL), если сетевой интерфейс и материнская плата поддерживают эту функцию.

В ждущем режиме компьютер также переходит в режим с почти нулевым энергопотреблением, но образ памяти сохраняется на диске, для более быстрого запуска системы. Спящий режим похож на ждущий, но память при этом не отключается, позволяя еще быстрее оживить систему. Опять же, для пробуждения компьютера нужно нажать кнопку включения питания или получить пакет WOL. Режим энергосбережения, пожалуй, наиболее интересен, хотя экономия энергии в нем самая низкая. Ради экономии применяются всякие трюки, причем компьютер готов к работе, а демон PowerNap продолжает следить за активностью системы – и, обнаружив таковую, работу возобновит.

Большинство низкоуровневых операций входа в ждущий, спящий или энергосберегающий режим обрабатывается набором утилит командной строки из пакета pm-utils. Утилиты называются по типу pm-suspend, pm-hibernate и pm-powersave, и дейстуют согласно именам. Pm-powersave – самая сложная из них. Она запускает скрипты из каталога /etc/pm/power.d, которые

  • Отключают все ядра процессора, кроме ядра 0.
  • Снижают частоту работы процессора CPU.
  • Снижают скорость работы гигабитного Ethernet до 100 Мбит/с.
  • Приостанавливают работу шины USB.

Заметив возобновление системной активности, демон PowerNap перезапускает скрипты (с аргументом false) для отмены «охранных мероприятий». Учтите: пакет pm-utils есть в Fedora и других дистрибутивах, а утилита PowerNap – пока только в Ubuntu.

Сейчас в PowerNap задано 8 мониторов (см. врезку вверху), хотя немалая их часть, включая монитор дисковой активности, уже на подходе. Для их включения, выключения и настройки нужно изменить параметры в файле /etc/powernap/config. Там также задаются интервал опроса, время бездействия, после которого система переводится в спящий режим, и другие временные параметры. Файл хорошо комментирован, и в нем есть примеры настроек, но, может быть, в пакет стоило добавить несколько образцов «профилей конфигурации» для наиболее типичных серверов?

Администраторы могут вручную инициировать и прекращать процесс «спячки» на своих серверах с помощью утилит powernap-now и powerwake-now, запуская их в локальной системе. Также есть утилита powerwake, используемая для отправки компьютеру WOL-пакетов через сеть.



(thumbnail)
PowerNap обеспечивает логику, объединяющую усилия мониторов активности системы и утилит управления питанием.

Осваиваем Grub

Grub 2 Этот загрузчик, невоспетый герой мира Linux, недавно подвергся полной переработке. Встречаем новую версию старого друга.

У каждого из нас есть программы, без которых мы как без рук – допустим, Firefox, Evolution или среда разработки Eclipse. Есть и другие программы, без которых нам тоже не обойтись, но мы о них особо не думаем – например, рабочий стол Gnome или ядро Linux. И остается невоспет один из настоящих героев – это Grub, загрузчик. Именно Grub отвечает за загрузку в память ядра Linux при запуске системы. Обычно он делает это быстро и без вмешательства пользователя, и легко забыть, что он вообще существует. Данный урок – моя небольшая дань Grub. Мы рассмотрим, как он работает и как взаимодействовать с ним, если понадобится.

Grub – сокращение от “Grand Unified Bootloader» (Великий унифицированный загрузчик), и существуют две его версии. Версия 0.97 изначально называлась просто Grub, но теперь ее официальное название – Grub Legacy. Эта версия больше не разрабатывается; релиз 0.97 был в 2005 году. Версия 1.98 (или, может быть, 1.99) официально называется Grub 2.

Последняя версия разрабатывается с 2007 года и была загрузчиком по умолчанию в по меньшей мере трех последних релизах Ubuntu. Но она принята не везде. В RHEL 6 по-прежнему используется Grub Legacy и, к моему удивлению, то же происходит в Fedora 15, хотя Grub 2 есть в его репозиториях. Поэтому, несмотря на четырехлетний возраст, Grub 2 все еще вызывает у некоторых ощущение «крутой новинки». Grub 2 появился на свет в 2002 году как проект под названием PUPA (Preliminary Universal Programming Architecture [Предварительная универсальная программируемая архитектура] – расшифровка из старомодных, если я вообще их слышал!) Меня так и тянет сказать, что если Grub Legacy был PUPA [англ. куколка (насекомого)], он должен бы превратиться в MOTH [англ. мотылек, бабочка], а не в Grub 2.

Картина в целом

Первая программа, которую компьютер запускает при загрузке – это BIOS, она хранится в ПЗУ на материнской плате. Если компьютер загружается с жесткого диска, BIOS загружает главную загрузочную запись (MBR – Master Boot Record) – первый сектор жесткого диска. Небольшая программа, размещенная в MBR загрузчиком Grub, используется для следующего этапа загрузки – загрузки модуля Grub core.img.

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

Этот файл – действительно сердце Grub. Его задача – найти образ ядра Linux и образ initrd в файловой системе на жестком диске, загрузить их в память и передать управление ядру. Обычно он считывает файл настройки (/boot/grub/grub.cfg), где определено число записей в загрузочном меню. (Даже если задано всего одно загружаемое ядро, будет показан второй вариант для его загрузки в «безопасном» режиме).

Обычно взаимодействие с Grub – если оно вообще происходит – осуществляется через интерфейс меню. Но у Grub есть похожий на оболочку командный интерпретатор, о котором я сперва и расскажу. Во время загрузки можно зайти в командную строку Grub из меню загрузки, нажав клавишу C. (В зависимости от конфигурации GRUB может потребоваться в нужный момент нажать Esc, чтобы увидеть меню загрузки). Grub также входит в режим командной строки, если не найден файл настройки. (Прежде чем вы в поисках приключений рванулись удалять на пробу свой grub.cfg, предупреждаю, что вероятнее всего вам в итоге придется прибегнуть к загрузочному диску, чтобы вернуть этот файл обратно).

В своей командной строке с подсказкой grub> интерпретатор предлагает более 150 встроенных команд. Команды

grub> set pager=1
grub> help

поэкранно выведут их список. Чтобы получить подробную справку (например) про команду search, попробуйте команду:

grub> help search

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

1. grub> insmod ext2
2. grub> set root=’(hd0,1)’
3. grub> linux /boot/vmlinuz-2.6.38-8-generic root=/dev/sda1 ro
4. grub> initrd /boot/initrd.img-2.6.38-8-generic
5. grub> boot

Рассмотрим эти команды по очереди. Строка 1 загружает модуль (/boot/grub/ext2.mod), который понимает файловые системы ext2/3/4. Это всего один из примерно 160 динамически загружаемых модулей Grub. В строке 2 задается корневой раздел Grub (root). Как видите, Grub применяет собственные обозначения для именования разделов – (hd0,1), вероятно, соответствовало бы /dev/sda1 в терминах Linux. (Если вы привыкли ко Grub Legacy, обратите внимание, что разделы теперь нумеруются с 1, а не с 0.) Строка 3 загружает образ ядра Linux. Имя файла интерпретируется по отношению к разделу root, заданному в предыдущей строке, и если вы печатаете с ошибками, как я, то будете рады узнать, что в Grub реализовано автодополнение имен файлов в стиле Bash. Аргументы, следующие за именем файла, передаются ядру как «аргументы командной строки». Строка 4 загружает образ «диска начальной инициализации» [initial ram disk], и, наконец, в строке 5 управление передается ядру Linux. Работа Grub завершена.

Разумеется, все эти команды обычно не приходится набирать при каждой загрузке Linux. Обычно Grub считывает свой файл, выводит меню загрузки на основе того, что он нашел, и выполняет команды согласно выбранному пункту меню в файле настройки. Вот строки из файла grub.cfg, соответствующие введенным ранее вручную командам :

menuentry ‘Simplified Boot’ {
 insmod ext2
 set root=’(hd0,1)’
 linux /boot/vmlinuz-2.6.38-8-generic root=/dev/sda1 ro
 initrd /boot/initrd.img-2.6.38-8-generic
}

На практике записи в grub.cfg в Ubuntu выглядят немного сложнее. Основное различие в том, что Ubuntu предпочитает идентифицировать свои разделы по UUID, а не по имени устройства Linux. Поэтому вы увидите добавочные команды Grub, задающие корневой раздел по UUID. Но мой упрощенный пример превосходно работает.

Синтаксис файла настройки по сути представляет собой полноценный скриптовый язык, поддерживающий переменные, циклы и условия, во многом в духе Bash.

Создание файла настройки

Я проверил приведенный выше пример, редактируя файл grub.cfg вручную. Но обычно стоит для этого запустить скрипт grub-mkconfig. Он проверит вашу систему на предмет загружаемых образов и сгенерирует пункты меню для создания рабочего файла grub.cfg, и даже найдет засидевшуюся у вас установку Windows и добавит пункт меню для нее.

Подробности работы данной схемы немного сложны. Во-первых, в файле /etc/default/grub определяется набор параметров, управляющих работой grub-mkconfig (см. врезку).

Кроме того, grub-mkconfig запускает скрипты из каталога /etc/grub.d. Вывод этих скриптов включается в созданный grub.cfg. Например, скрипт 30_os_prober обследует разделы на наличие загружаемых образов ядра и добавляет в grub.cfg записи для их загрузки. В /etc/grub.d можно добавить собственные скрипты, если вы хотите разместить свои пункты меню в grub.cfg.

Grub может напрямую загружать множество операционных систем, включая Linux и различные версии BSD. Для других систем, типа Windows, Grub использует «загрузку по цепочке», т. е. вызывает «родной» загрузчик Windows с соответствующего раздела. Вот запись для этого пункта меню в моей системе с двойной загрузкой:

menuentry “Windows 7 on /dev/sda3” {
 insmod ntfs
 set root=’(hd0,3)’
 chainloader +1
}

Таинственный аргумент +1 – несколько вырожденный пример списка блоков. Он означает «загрузить 1 блок. начиная с блока 0 на корневом разделе» (в этом примере – /dev/sda3).

Существует компромисс между вводом собственных команд Grub вручную и выбором пункта меню. В меню загрузки выберите пункт и наберите e. Вы попадете в редактор в стиле emacs и сможете изменить команды из файла настройки. Он часто используется, например, при добавлении параметра single, для загрузки в однопользовательском режиме.

Grub 2 – довольно сложная зверюга. Чтобы узнать о нем больше, скомандуйте info grub или загрузите руководство с сайта http://www.gnu.org/software/grub/manual.




(thumbnail)
Grub отвечает за вызов ядра Linux в память во время загрузки системы, под управлением автоматически сгенерированного файла настройки.
Персональные инструменты
купить
подписаться
Яндекс.Метрика