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

LXF147:Sysadmin

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «==По рецептам доктора Брауна== :'''Д-р Крис Браун''' Доктор обучает, пишет и консультирует по…»)
 
 
Строка 5: Строка 5:
 
:Эзотерическое системное администрирование из причудливых заворотов кишок серверной
 
:Эзотерическое системное администрирование из причудливых заворотов кишок серверной
  
{{Врезка|left|Заголовок=Во славу круглого ПО|Содержание=Почему мыльные пузыри круглые? Потому что поверхностное натяжение мыльной пленки старается минимизировать площадь поверхности, а при заданном объеме наименьшую площадь поверхности имеет сфера.
+
{{Врезка|right|Заголовок=Во славу круглого ПО|Содержание=Почему мыльные пузыри круглые? Потому что поверхностное натяжение мыльной пленки старается минимизировать площадь поверхности, а при заданном объеме наименьшую площадь поверхности имеет сфера.
  
 
Идею объема и площади поверхности можно применить и к ПО. Объемом программы можно назвать ее функциональность – то, что она умеет делать. Ну, а площадь поверхности – это то, сколько нам необходимо знать о программе, чтобы заставить ее продемонстрировать свои умения.
 
Идею объема и площади поверхности можно применить и к ПО. Объемом программы можно назвать ее функциональность – то, что она умеет делать. Ну, а площадь поверхности – это то, сколько нам необходимо знать о программе, чтобы заставить ее продемонстрировать свои умения.
Строка 23: Строка 23:
 
При написании кода разработчики воспаряют ввысь, и им, естественно, чужда модель мышления обычного пользователя.
 
При написании кода разработчики воспаряют ввысь, и им, естественно, чужда модель мышления обычного пользователя.
  
А вы думайте сферически, парни. Помните мыльный пузырь.|Ширина=20%}}
+
А вы думайте сферически, парни. Помните мыльный пузырь.|Ширина=40%}}
  
 
===Готов ко всему===
 
===Готов ко всему===
Строка 68: Строка 68:
  
 
Когда вашему компьютеру нечего делать, сэкономить энергию можно несколькими способами: отключить ему питание или перевести его в ждущий или спящий режимы – в обоих перезапуск будет быстрее, чем запуск с нуля. А теперь есть и другая возможность – «короткий сон» [англ. nap].
 
Когда вашему компьютеру нечего делать, сэкономить энергию можно несколькими способами: отключить ему питание или перевести его в ждущий или спящий режимы – в обоих перезапуск будет быстрее, чем запуск с нуля. А теперь есть и другая возможность – «короткий сон» [англ. nap].
 +
 +
{{Врезка|right|Заголовок=Под итоговой чертой|Содержание=В [[LXF144]] я обмолвился, что PowerNap «не потрясает», но потом решил немного посчитать «на салфетке». Дастин сообщает, что PowerNap сэкономил 12 Вт на четырехъядерном сервере-стойке 1u. При стоимости электроэнергии где-то в 10 пенсов/кВт*ч и линейке из 40 серверов за год вы накопили бы 420 фунтов. За эти деньги можно купить четырехгодовую подписку на Linux Format! Я все еще не потрясен, но впечатлен гораздо больше.|Ширина=20%}}
  
 
Идея родилась у разработчиков Canonical Дастина Керкленда [Dustin Kirkland] и Андреса Родригеса [Andres Rodriguez], и PowerNap ввели в установку Ubuntu Server по умолчанию, а для других версий Ubuntu можно взять его из репозиториев. Это своего рода «хранитель экрана» для серверов, но кроме активности клавиатуры и мыши он следит за «внутренней» активностью системы.
 
Идея родилась у разработчиков Canonical Дастина Керкленда [Dustin Kirkland] и Андреса Родригеса [Andres Rodriguez], и PowerNap ввели в установку Ubuntu Server по умолчанию, а для других версий Ubuntu можно взять его из репозиториев. Это своего рода «хранитель экрана» для серверов, но кроме активности клавиатуры и мыши он следит за «внутренней» активностью системы.
Строка 76: Строка 78:
  
 
В ждущем режиме компьютер также переходит в режим с почти нулевым энергопотреблением, но образ памяти сохраняется на диске, для более быстрого запуска системы. Спящий режим похож на ждущий, но память при этом не отключается, позволяя еще быстрее оживить систему. Опять же, для пробуждения компьютера нужно нажать кнопку включения питания или получить пакет WOL. Режим энергосбережения, пожалуй, наиболее интересен, хотя экономия энергии в нем самая низкая. Ради экономии применяются всякие трюки, причем компьютер готов к работе, а демон PowerNap продолжает следить за активностью системы – и, обнаружив таковую, работу возобновит.
 
В ждущем режиме компьютер также переходит в режим с почти нулевым энергопотреблением, но образ памяти сохраняется на диске, для более быстрого запуска системы. Спящий режим похож на ждущий, но память при этом не отключается, позволяя еще быстрее оживить систему. Опять же, для пробуждения компьютера нужно нажать кнопку включения питания или получить пакет WOL. Режим энергосбережения, пожалуй, наиболее интересен, хотя экономия энергии в нем самая низкая. Ради экономии применяются всякие трюки, причем компьютер готов к работе, а демон PowerNap продолжает следить за активностью системы – и, обнаружив таковую, работу возобновит.
 +
 +
{{Врезка|left|Заголовок=Пояснение к запросам Xpath|Содержание=;МОНИТОР: ЧТО ОН ДЕЛАЕТ
 +
;WolMonitor: Слушает сеть, проверяя наличие пакетов Wake On LAN
 +
;ConsoleMonitor: Отслеживает активность консоли (tty), локальной клавиатуры и мыши
 +
;ProcessMonitor: Отслеживает таблицу процессов на предмет наличия имен, соответствующих регулярным выражениям
 +
;LoadMonitor: Отслеживает пороговую нагрузку из /proc/loadavg
 +
;TCPMonitor: Отслеживает активность заданного набора портов TCP
 +
;UDPMonitor: Отслеживает активность заданного набора портов UDP
 +
;IOMonitor: Отслеживает активность портов ввода/вывода для заданного набора процессов
 +
;InputMonitor: Отслеживает ввод USB-устройств (клавиатура и мышь)|Ширина=30%}}
 +
 +
[[File:LXF147.powernap.jpg|thumb|PowerNap обеспечивает логику, объединяющую усилия мониторов активности системы и утилит управления питанием.]]
  
 
Большинство низкоуровневых операций входа в ждущий, спящий или энергосберегающий режим обрабатывается набором утилит командной строки из пакета pm-utils. Утилиты называются по типу pm-suspend, pm-hibernate и pm-powersave, и дейстуют согласно именам. Pm-powersave – самая сложная из них. Она запускает скрипты из каталога /etc/pm/power.d, которые
 
Большинство низкоуровневых операций входа в ждущий, спящий или энергосберегающий режим обрабатывается набором утилит командной строки из пакета pm-utils. Утилиты называются по типу pm-suspend, pm-hibernate и pm-powersave, и дейстуют согласно именам. Pm-powersave – самая сложная из них. Она запускает скрипты из каталога /etc/pm/power.d, которые
Строка 90: Строка 104:
 
Администраторы могут вручную инициировать и прекращать процесс «спячки» на своих серверах с помощью утилит powernap-now и powerwake-now, запуская их в локальной системе. Также есть утилита powerwake, используемая для отправки компьютеру WOL-пакетов через сеть.
 
Администраторы могут вручную инициировать и прекращать процесс «спячки» на своих серверах с помощью утилит powernap-now и powerwake-now, запуская их в локальной системе. Также есть утилита powerwake, используемая для отправки компьютеру WOL-пакетов через сеть.
  
{{Врезка|left|Заголовок=Под итоговой чертой|Содержание=В [[LXF144]] я обмолвился, что PowerNap «не потрясает», но потом решил немного посчитать «на салфетке». Дастин сообщает, что PowerNap сэкономил 12 Вт на четырехъядерном сервере-стойке 1u. При стоимости электроэнергии где-то в 10 пенсов/кВт*ч и линейке из 40 серверов за год вы накопили бы 420 фунтов. За эти деньги можно купить четырехгодовую подписку на Linux Format! Я все еще не потрясен, но впечатлен гораздо больше.|Ширина=20%}}
+
{{Врезка|right|Заголовок=Начальный RAM-диск|Содержание=Grub также отвечает за загрузку образа диска начальной инициализации, файла, где хранится небольшая файловая система ОЗУ. Она содержит загружаемые модули ядра и другие компоненты, необходимые ядру на ранних этапах процесса загрузки – до того момента, когда возможно монтирование раздела root. Файл представляет собой сжатый архив cpio. Для его просмотра используйте следующие команды, соответственно заменив во второй строке имя файла:
  
{{Врезка|left|Заголовок=Пояснение к запросам Xpath|Содержание=;МОНИТОР: ЧТО ОН ДЕЛАЕТ
+
cd /tmp
;WolMonitor: Слушает сеть, проверяя наличие пакетов Wake On LAN
+
cp /boot/initramfs.img junk.gz
;ConsoleMonitor: Отслеживает активность консоли (tty), локальной клавиатуры и мыши
+
gunzip junk.gz
;ProcessMonitor: Отслеживает таблицу процессов на предмет наличия имен, соответствующих регулярным выражениям
+
cpio -it < junk.gz
;LoadMonitor: Отслеживает пороговую нагрузку из /proc/loadavg
+
;TCPMonitor: Отслеживает активность заданного набора портов TCP
+
;UDPMonitor: Отслеживает активность заданного набора портов UDP
+
;IOMonitor: Отслеживает активность портов ввода/вывода для заданного набора процессов
+
;InputMonitor: Отслеживает ввод USB-устройств (клавиатура и мышь)|Ширина=20%}}
+
  
[[File:LXF147.powernap.jpg|thumb|PowerNap обеспечивает логику, объединяющую усилия мониторов активности системы и утилит управления питанием.]]
+
Вы удивитесь, как много здесь всего.|Ширина=20%}}
  
 
===Осваиваем Grub===
 
===Осваиваем Grub===
Строка 113: Строка 122:
  
 
Последняя версия разрабатывается с 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.
 
Последняя версия разрабатывается с 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.
 +
 +
{{Врезка|left|Заголовок=Grub Legacy и Grub 2|Содержание=* Файл настройки (grub.cfg) сильно отличается от старого menu.lst, и его синтакис гораздо ближе к полноценному скриптовому языку.
 +
* Для генерации grub.cfg есть утилиты; обычно редактировать его вручную не приходится.
 +
* Grub 2 умеет идентифицировать разделы по меткам файловой системы или UUID.
 +
* Grub 2 умеет читать файлы прямо с устройств LVM и RAID.
 +
* Файлы образов полностью изменены. Старые этап 1, этап 1.5 и этап 2 исчезли. Многие возможности теперь реализованы в динамически загружаемых модулях.
 +
* Доступны графический терминал и графическая система меню с обширной поддержкой тем оформления.
 +
* Grub 2 поддерживает и другие архитектуры загрузки, кроме BIOS ПК, включая PC EFI, Power PC и SPARC.|Ширина=20%}}
  
 
====Картина в целом====
 
====Картина в целом====
Строка 140: Строка 157:
 
  4. grub> initrd /boot/initrd.img-2.6.38-8-generic
 
  4. grub> initrd /boot/initrd.img-2.6.38-8-generic
 
  5. grub> boot
 
  5. grub> boot
 +
 +
{{Врезка|right|Заголовок=Пояснение к параметрам|Содержание=;GRUB_DEFAULT: Пункт меню по умолчанию (он будет выбран, если пользователь ничего не выберет за отпущенный период времени).
 +
;GRUB_TIMEOUT: Промежуток времени в секундах, в течение которого будет отображаться меню.
 +
;GRUB_SAVEDEFAULT: Если “true”, то выбранный в этот раз пункт меню станет пунктом меню по умолчанию при следующей загрузке.
 +
;GRUB_DISABLE_LINUX_UUID: Если “true”, grub-mkconfig перестает определять корневой раздел в Linux по UUID. Вместо этого используется простое имя устройства Linux.
 +
;GRUB-INSTALL: Устанавливает Grub на устройство.
 +
;GRUB-MKIMAGE: Создает core.img, содержащий заданный список модулей.
 +
;GRUB-MKRESCUE: Создает ISO-образ загрузочного аварийного CD Grub.
 +
;GRUB-MENULST2CFG: Конвертирует файл menu.lst Legacy в grub.cfg.
 +
;GRUB-MKNETDIR: Копирует дерево каталогов Grub на TFTP-сервер, чтобы Grub можно было бы загружать через сеть (с использованием загрузки PXE).|Ширина=20%}}
  
 
Рассмотрим эти команды по очереди. Строка 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 завершена.
 
Рассмотрим эти команды по очереди. Строка 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 завершена.
Строка 155: Строка 182:
  
 
Синтаксис файла настройки по сути представляет собой полноценный скриптовый язык, поддерживающий переменные, циклы и условия, во многом в духе Bash.
 
Синтаксис файла настройки по сути представляет собой полноценный скриптовый язык, поддерживающий переменные, циклы и условия, во многом в духе Bash.
 +
 +
[[File:LXF147.grub.jpg|left|thumb|Grub отвечает за вызов ядра Linux в память во время загрузки системы, под управлением автоматически сгенерированного файла настройки.]]
  
 
====Создание файла настройки====
 
====Создание файла настройки====
Строка 177: Строка 206:
  
 
Grub 2 – довольно сложная зверюга. Чтобы узнать о нем больше, скомандуйте info grub или загрузите руководство с сайта http://www.gnu.org/software/grub/manual.
 
Grub 2 – довольно сложная зверюга. Чтобы узнать о нем больше, скомандуйте info grub или загрузите руководство с сайта http://www.gnu.org/software/grub/manual.
 
{{Врезка|left|Заголовок=Начальный RAM-диск|Содержание=Grub также отвечает за загрузку образа диска начальной инициализации, файла, где хранится небольшая файловая система ОЗУ. Она содержит загружаемые модули ядра и другие компоненты, необходимые ядру на ранних этапах процесса загрузки – до того момента, когда возможно монтирование раздела root. Файл представляет собой сжатый архив cpio. Для его просмотра используйте следующие команды, соответственно заменив во второй строке имя файла:
 
 
cd /tmp
 
cp /boot/initramfs.img junk.gz
 
gunzip junk.gz
 
cpio -it < junk.gz
 
 
Вы удивитесь, как много здесь всего.|Ширина=20%}}
 
 
{{Врезка|left|Заголовок=Grub Legacy и Grub 2|Содержание=* Файл настройки (grub.cfg) сильно отличается от старого menu.lst, и его синтакис гораздо ближе к полноценному скриптовому языку.
 
* Для генерации grub.cfg есть утилиты; обычно редактировать его вручную не приходится.
 
* Grub 2 умеет идентифицировать разделы по меткам файловой системы или UUID.
 
* Grub 2 умеет читать файлы прямо с устройств LVM и RAID.
 
* Файлы образов полностью изменены. Старые этап 1, этап 1.5 и этап 2 исчезли. Многие возможности теперь реализованы в динамически загружаемых модулях.
 
* Доступны графический терминал и графическая система меню с обширной поддержкой тем оформления.
 
* Grub 2 поддерживает и другие архитектуры загрузки, кроме BIOS ПК, включая PC EFI, Power PC и SPARC.|Ширина=20%}}
 
 
{{Врезка|left|Заголовок=Пояснение к параметрам|Содержание=;GRUB_DEFAULT: Пункт меню по умолчанию (он будет выбран, если пользователь ничего не выберет за отпущенный период времени).
 
;GRUB_TIMEOUT: Промежуток времени в секундах, в течение которого будет отображаться меню.
 
;GRUB_SAVEDEFAULT: Если “true”, то выбранный в этот раз пункт меню станет пунктом меню по умолчанию при следующей загрузке.
 
;GRUB_DISABLE_LINUX_UUID: Если “true”, grub-mkconfig перестает определять корневой раздел в Linux по UUID. Вместо этого используется простое имя устройства Linux.
 
;GRUB-INSTALL: Устанавливает Grub на устройство.
 
;GRUB-MKIMAGE: Создает core.img, содержащий заданный список модулей.
 
;GRUB-MKRESCUE: Создает ISO-образ загрузочного аварийного CD Grub.
 
;GRUB-MENULST2CFG: Конвертирует файл menu.lst Legacy в grub.cfg.
 
;GRUB-MKNETDIR: Копирует дерево каталогов Grub на TFTP-сервер, чтобы Grub можно было бы загружать через сеть (с использованием загрузки PXE).|Ширина=20%}}
 
 
[[File:LXF147.grub.jpg|thumb|Grub отвечает за вызов ядра Linux в память во время загрузки системы, под управлением автоматически сгенерированного файла настройки.]]
 

Текущая версия на 15:07, 16 июля 2014

Содержание

[править] По рецептам доктора Брауна

Д-р Крис Браун Доктор обучает, пишет и консультирует по 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 продолжает следить за активностью системы – и, обнаружив таковую, работу возобновит.


(thumbnail)
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-пакетов через сеть.


[править] Осваиваем 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.

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

[править] Создание файла настройки

Я проверил приведенный выше пример, редактируя файл 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.

Персональные инструменты
купить
подписаться
Яндекс.Метрика