Вы находитесь на странице: 1из 57

"Инновационные технологии

OpenSolaris"

Ситников Г.В.
Введение

Если у вас недостаточно времени для чтения всей книги, то вот вкратце о чём она:

• Мир стремительно меняется, а с ним изменяются и наши понятия об


операционных системах. То, о чём раньше вы могли только мечтать -
теперь становится реальностью с помощью OpenSolaris.

• Задачи, над чем раньше часами трудились системные администраторы, вы


сможете выполнить за пару команд. Впервые мощь операционных систем
Unix сочетается с удобством и простотой использования. Всё это вы
найдёте в OpenSolaris.

Возможно, вы уже имели дело с операционными системами на основе Unix. В таком случае,
многие идеи покажутся вам знакомыми. Но приглядитесь внимательнее! OpenSolaris
предлагает принципиально новый подход к решению большинства задач.

Если вы — пользователь Windows, то вас ожидает ещё больший сюрприз. Это мир свободного
программного обеспечения. Забудьте про проприетарные лицензии и кряки! Почти все
программы под OpenSolaris бесплатны, как и сама операционная система. И ещё приятная
новость: в OpenSolaris не работают вирусы.

Если вы — пользователь Solaris, то и для вас найдётся немало интересных деталей. Многие
операции в OpenSolaris стали гораздо проще.

После прочтения книги «Инновационные технологии OpenSolaris» вы:

• Узнаете о преимуществах OpenSolaris по сравнению с Windows и Linux


• Познакомитесь с базовыми возможностями системы
• Научитесь администрировать файловую систему ZFS
• Сможете выполнять динамическую трассировку приложений с DTrace
Введение Solaris11.ru

Содержание
Введение...................................................................................................................................................1
Глава 1: Знакомство с OpenSolaris....................................................................................................5
Из истории..................................................................................................................................................5
Лицензирование.........................................................................................................................................5
Отличия от Linux и Windows....................................................................................................................6
Главные особенности................................................................................................................................6
Глава 2: Интерфейс пользователя и приложения..........................................................................8
Настройка внешнего вида.........................................................................................................................8
Командная строка......................................................................................................................................8
"Машина времени"....................................................................................................................................9
Глава 3: Сеть в OpenSolaris...............................................................................................................11
Виртуальные интерфейсы и Crossbow...................................................................................................12
Глава 4: Приложения для OpenSolaris...........................................................................................14
Добавление новых репозиториев...........................................................................................................15
Свободные репозитории.........................................................................................................................15
Несвободные репозитории......................................................................................................................15
Установка пакетов SVR4........................................................................................................................16
Глава 5: Драйверы устройств...........................................................................................................17
Установка из репозитория......................................................................................................................17
Установка не из репозитория..................................................................................................................17
Глава 6: Пользователи и группы.....................................................................................................19
Выполнение команд от имени администраторам..................................................................................20
Глава 7: Установка OpenSolaris.......................................................................................................21
Аппаратные платформы..........................................................................................................................21
Поддерживаемое оборудование.............................................................................................................21
Где взять диск?........................................................................................................................................21
Работа с LiveCD.......................................................................................................................................21
Особенности загрузки для SPARC.........................................................................................................22
Установка на жёсткий диск....................................................................................................................22
Обновление с предыдущих версий OpenSolaris....................................................................................26
Автоматический установщик.................................................................................................................27
Текстовый установщик...........................................................................................................................27
Полезные приложения.............................................................................................................................27
Глава 8: Управление демонами........................................................................................................29
Включение демонов................................................................................................................................29
Как запустить службу из GUI.................................................................................................................29
Как запустить службу из Терминала......................................................................................................29
Глава 9: Контейнеры Solaris.............................................................................................................31
Создание зон............................................................................................................................................31
Брендовые зоны.......................................................................................................................................32
Бинарная совместимость с Linux............................................................................................................32
Глава 10: Файловая система ZFS.....................................................................................................34
Что такое ZFS?.........................................................................................................................................34

2
Введение Solaris11.ru
Пулы ZFS.................................................................................................................................................34
Семантика транзакций............................................................................................................................35
Контрольные суммы и самовосстановление данных............................................................................35
Масштабируемость..................................................................................................................................35
Снимки файловой системы.....................................................................................................................35
Лёгкость администрирования.................................................................................................................36
Начало работы с ZFS..........................................................................................................................36
Создание базовой файловой системы....................................................................................................36
Создание пула ZFS..................................................................................................................................37
Создание иерархии файловых систем....................................................................................................38
Детализация ZFS......................................................................................................................................39
Учёт места в ZFS.....................................................................................................................................39
Монтирование файловых систем...........................................................................................................40
Глава 11: Снимки и клоны ZFS.......................................................................................................41
Создание и удаление снимков................................................................................................................41
Переименование снимков.......................................................................................................................41
Отображение и доступ к снимкам ZFS..................................................................................................42
Учёт места в снимках..............................................................................................................................43
Восстановление файловых систем.........................................................................................................43
Обзор клонов ZFS....................................................................................................................................44
Создание и удаление клонов...................................................................................................................44
Замена файловой системы ZFS на клон.................................................................................................45
Заключение..............................................................................................................................................45
Глава 12: DTrace..................................................................................................................................46
Обзор DTrace............................................................................................................................................46
Введение в скрипты D.............................................................................................................................46
Описание датчиков..................................................................................................................................47
Предикат...................................................................................................................................................48
Действие...................................................................................................................................................49
Разработка скриптов D............................................................................................................................49
Использование групповых функций......................................................................................................50
Подсчёт времени, проведённого в функции..........................................................................................51
Игнорирование уже работающих функций...........................................................................................51
Работа с многопоточными приложениями............................................................................................51
Сбор информации о приложении...........................................................................................................52
Глава 13: DTrace для разработчиков..............................................................................................53
Провайдер pid..........................................................................................................................................53
Провайдер syscall.....................................................................................................................................53
Провайдер sysinfo....................................................................................................................................53
Провайдер proc........................................................................................................................................53
DTrace для Web 2.0..................................................................................................................................54
Наблюдение за несколькими слоями.....................................................................................................54
Наблюдение за одним приложением......................................................................................................55
Наблюдение за MySQL...........................................................................................................................55
Заключение..............................................................................................................................................56
Приложение: Полезные ссылки.......................................................................................................57
Официальные страницы..........................................................................................................................57
На русском...............................................................................................................................................57
На английском.........................................................................................................................................57
Книги........................................................................................................................................................57

3
Введение Solaris11.ru
Для разработчиков...................................................................................................................................57
Дистрибутивы на основе OpenSolaris....................................................................................................57
OpenSolaris на альтернативных платформах.........................................................................................58
Разное.......................................................................................................................................................58
Послесловие переводчика/автора....................................................................................................59

4
Глава 1: Знакомство с OpenSolaris

Из истории
История OpenSolaris началась в 1983 году, когда корпорация Sun Microsystems создала свою
первую операционную систему SunOS. Эта система была основана на BSD-версии UNIX.
Изначально она работала на машинах Sun-1, Sun-2 и Sun-3, оснащёнными процессорами
семейства Motorola m68k. Начиная с SunOS 3.2 появилась поддержка рабочих станций и
серверов серии Sun-4, основанных на микропроцессорах архитектуры SPARC V7. Версия
SunOS 4.0 также поддерживала рабочие станции Sun386i с процессором Intel 80386.

В 1987 компании Sun и AT&T объединились, чтобы создать UNIX System V Release 4 (SVR4).
Эта версия появилась в 1990 и объединяла в себе лучшие черты SunOS, 4.3BSD и Xenix. В
1991 Sun Microsystems объявила о переводе SunOS на кодовую базу SVR4 под брендом Solaris.
Однако название SunOS используется и по сей день, в основном в документации. Например:

# uname -a
SunOS sparc 5.11 snv_98 sun4u sparc SUNW,Sun-Blade-1000

Хотя Solaris традиционно применяется на высокопроизводительных серверах и рабочих


станциях с процессорами SPARC, версия для архитектуры x86 существует с 1994. Версия
Solaris 2.5.1 (1996) была перенесена на PowerPC, но в следующих версиях поддержка этой
платформы была прекращена. Solaris 7 была выпущена в 1998 и впервые поддерживала 64-
битные микропроцессоры UltraSPARC. Версия Solaris 10 (2005) включила поддержку
архитектуры x86-64 (AMD, Intel).

Sun Microsystems сделала свою операционную систему общедоступной для скачивания,


начиная с версии 9. Несмотря на бесплатность, исходные коды Solaris 9 и 10 закрыты.

В июле 2005 Sun открыла часть исходного кода Solaris. Проект по развитию открытого кода
стал называться OpenSolaris. Через три дня после открытия кода был создан первый
дистрибутив на его основе — SchilliX. Чуть позднее появились дистрибутивы BeleniX и
Nexenta OS, разработанные независимыми разработчиками.

Официальный дистрибутив, поддерживаемый Sun Microsystems, появился в мае 2008. Этот


дистрибутив получил имя OpenSolaris, такое же как и название всего проекта. Именно о нём
пойдёт речь в нашей книге. Последняя версия OpenSolaris 2009.06 появилась 1 июня 2009.

Лицензирование
Исходный код OpenSolaris выпускается по лицензии Common Development and Distribution
License (CDDL). Эта лицензия позволяет свободно копировать, изменять и распространять
выпущенные под ней программы. CDDL создана на основе Mozilla Public License

В отличие от некоторых распространённых лицензий, например GPL, CDDL даёт возможность


совмещать в одном модуле файлы, распространяемые под разными открытыми и
проприетарными лицензиями. Лицензии CDDL и GPL несовместимы, и это обстоятельство не
позволяет перенести в Linux некоторые технологии из OpenSolaris, в частности ZFS и DTrace.
Глава 1: Знакомство с OpenSolaris Solaris11.ru
Так как Solaris содержит в себе исходный код UNIX System V, права на который в данный
момент принадлежат SCO, не весь код был открыт. Таким образом, OpenSolaris содержит
закрытые фрагменты, которые распространяются в бинарном виде по лицензии OpenSolaris
Binary License.

Отличия от Linux и Windows


Несмотря на то, что OpenSolaris, как Linux, является свободной и открытой операционной
системой, они сильно различаются. Дистрибутивы Linux, например, Ubuntu, Fedora и
OpenSUSE, построенных на ядре Linux, тогда как OpenSolaris построена на базе ядра Solaris.
Это определяет фундаментальные отличия между системами. Однако OpenSolaris, как и Linux,
и многие другие Юникс-подобные операционные системы, совместима со стандартом POSIX,
поэтому тысячи приложений для Linux, работают и в OpenSolaris.

OpenSolaris имеет множество уникальных функций, недоступных пользователям Linux.


Например, в Linux используются файловые системы Ext3 или Ext4; OpenSolaris имеет ZFS -
более продвинутую файловую систему. Мы ещё вернёмся к ZFS в этой книге. OpenSolaris
также предоставляет такое средство разработки как DTrace, которые позволяет программистам
и системным администраторам наблюдать за внутренним функционированием приложений во
время их работы. Модуль DTrace будет рассмотрен в главе DTrace.

OpenSolaris сильно отличается от операционных систем семейства Microsoft Windows. Как уже
упоминалось, OpenSolairs является бесплатной и открытой системой, в отличие от Windows,
которая является платной и проприетарной. Хотя возможно запускать некоторые приложения
под Windows с помощью WINE, OpenSolaris и Windows различны в большинстве технических
аспектов.

Главные особенности
OpenSolaris предлагает не имеющие себе равных характеристики во всех аспектах
использования.

OpenSolaris предоставляет технологии, призванные максимально упростить работу


пользователя. В их числе:

• Image Packaging System (IPS) - поиск и установка новых приложений ещё никогда не были
настолько просты! IPS позволяет пользователю находить и безопасно устанавливать
программы из различных репозиториев онлайн. Также можно создать собственный
локальный репозиторий на отдельной машине.
• Time Slider (или "Машина времени") - эта утилита доступна только пользователям
OpenSolaris. Она использует преимущества файловой системы ZFS и позволяет нажатием
одной кнопки восстанавливать файлы, которые были стёрты или изменены.
• Device Driver Utility - проверяет оборудование и подсоединённые устройства и оповещает
пользователя о неисправностях. Также эта утилита позволяет посылать отчёты об ошибках
в группу поддержки OpenSolaris Device Driver.
• Большое количество пакетов открытых программ.
• Эффекты 3D - засчёт предустановленных Compiz Visual Effects.

По-настоящему почувствовать сильные стороны OpenSolaris могут системные администраторы


6
Глава 1: Знакомство с OpenSolaris Solaris11.ru
разработчики программ. OpenSolaris предлагает уникальный набор программ и утилит,
позволяющих писать, эффективно оптимизировать и отлаживать программы быстрее и проще.
Наиболее интересными технологиями считаются:

• DTrace - фреймворк динамической трассировки, позволяющий вставлять датчики (probes)


в приложение с целью узнать его внутреннее функционирование. Существует более 60,000
стандартных датчиков, помогающих профилировать приложения, и новые датчики
регулярно добавляются.
• Service Management Facility (SMF) - простой способ управления службами. Включение и
выключение служб осуществляется несколькими простыми командами. SMF позволяет
легко создавать собственные службы.
• Виртуализация сети с помощью Crossbow. Возможно, вы слышали о возможности
создавать виртуальные машины для запуска операционных систем, но OpenSolaris имеет
инновационную технологию Crossbow, позволяющую осуществлять виртуализацию сети. С
её помощью можно создавать несколько виртуальных сетевых карт.
• Контейнеры (зоны) Solaris - виртуальные копии операционной системы, дающие высокий
уровень изоляции приложений друг от друга. В зонах возможно запускать приложения,
скомпилированные под другие операционные системы. На этом основана двоичрая
совместимость OpenSolaris с Linux.
• Zettabyte File System - революционно новая файловая система, с возможностями,
недоступными ни одной другой файловой системе. ZFS надёжна, масштабируема и проста
для администрирования. На данный момент, ZFS считается лучшей в мире файловой
системой.

7
Глава 2: Интерфейс пользователя и приложения

Пользовательский интерфейс OpenSolaris основан на среде GNOME. Таким образом, если вы


знакомы с дистрибутивами Linux, использующими GNOME (например, Ubuntu или Fedora), вы
найдёте много общего во внешнем виде. Однако среда GNOME была изменена в соответствие
новым возможностям системы и называется OpenSolaris Desktop.

В Solaris 10 существует оконная среда Java Desktop System (JDS), она также основана на
GNOME. OpenSolaris Desktop является усовершенствованным вариантом JDS.

Настройка внешнего вида


OpenSolaris даёт возможность настроить практически
любую деталь графического интерфейса, например,
тему, обои рабочего стола или шрифты. Для этого
нажмите правой кнопкой мыши на любое свободное
пространство рабочего стола и выберите из
выпадающего меню Desktop Appearance. В
появившемся окне Настройка внешнего вида
можно выбрать темы во вкладке Тема или создавать
новые. Для смены обоев рабочего стола, используйте
вкладку Фон; для изменения шрифтов - вкладку
Шрифт. Также вы можете изменить некоторые
настройки внешнего вида во вкладке Интерфейс. Разрешить, запретить и изменить 3D-
эффекты можно во вкладке Visual Effects.

Командная строка
Для ввода команд в режиме командной строки откройте
программу Терминал (Программы > Стандартные >
Терминал). Также можно нажать правой кнопкой мыши на
рабочем столе и выбрать Открыть Терминал или нажать
иконку на верхней панели.
Глава 2: Интерфейс пользователя и приложения
Solaris11.ru
"Машина времени"
Time Slider ("Машина времени") - наверное, самая интересная для пользователя технология
OpenSolaris. Обычно, если вы изменяете или удаляете файл, не существует простого способа
вернуть его назад. Часто приходится создавать по несколько копий файлов при
незначительных изменениях. Машина времени автоматически сохраняет снимки файлов и
каталогов, которые затем можно просматривать назад и вперёд. Используйте Машину , чтобы
сохранить снимок файла нажатием мыши и при надобности вернуть изменения. Машина
времени удобно интегрирована в менеджер файлов и крайне проста в использовании.

С помощью Машины вы можете сравнить различные


версии графических или текстовых файлов. Машина
времени не включена по умолчанию; для её включения
используйте Time Slider Manager, который
находится в Система > Администрирование >
Time Slider.

Чтобы восстановить данные из снимков, откройте любой


каталог в файловом менеджере. вы увидите кнопку с
часами, при нажатии на неё появляется дополнительная
навигационная панель. Панель появится только в том
случае, если для данной директории есть сохранённые
копии (снимки). Передвиньте ползунок назад, чтобы просмотреть содержимое каталога в
прошлом. Для восстановления файла (каталога) из копии:
• перетащите файл в другое окно файлового менеджера;
• нажмите на файл правой кнопкой и выберите Restore to Desktop.

Тому, как провести эти операции из командной строки, и многому другому посвящена глава
про ZFS.

9
Глава 3: Сеть в OpenSolaris

Настройка сети в OpenSolaris обычно не представляет труда. В систему входит утилита


Network Automagic (NWAM), которая автоматически подсоединяется к сети, если в ней
применяется DHCP. Для ручной настройки откройте Система > Администрирование >
Сеть. Также Network Automagic поддерживает технологию Wi-Fi.

В случае возникновения трудностей с настройкой сети,


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

Настройка в текстовом режиме выполняется с помощью


команды ifconfig. Перед этим узнайте имя сетевого
интерфейса, который хотите настроить. Можно узнать имя
интерфейса командой ifconfig -a.
$ ifconfig -a
lo0:
flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
eri0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.168.1.3 netmask ffffff00 broadcast 192.168.1.255
ether 0:3:ba:68:ab:8
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index
1
inet6 ::1/128
eri0: flags=2004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu 1500 index 2
inet6 fe80::203:baff:fe68:ab08/10
ether 0:3:ba:68:ab:8
$

В примере выше у машины два интерфейса: eri0 и lo0. Активируйте интерфейс с помощью
$ ifconfig имя_интерфейса plumb

В других системах этой команды нет; не забывайте про неё!

После этого назначьте интерфейсу IP-адрес:


$ ifconfig имя_интерфейса IP-адрес

С помощью ключей netmask и broadcast можно указать маску подсети и


широковещательный адрес сети.

Теперь включите интерфейс командой


$ ifconfig имя_интерфейса up

Три предыдущие команды можно объединить в одну:


$ ifconfig имя_интерфейса IP-адрес plumb up

Для выключения интерфейса дайте команду


$ ifconfig имя_интерфейса down

Чтобы удалить интерфейс вообще, выполните


$ ifconfig имя_интерфейса unplumb
Глава 3: Сеть в OpenSolaris Solaris11.ru
Проверить работоспособность сети можно командой ping:
$ ping IP-адрес

Виртуальные интерфейсы и Crossbow


Одному физическому интерфейсу можно присвоить несколько сетевых адресов. Традиционно
в Solaris виртуальные интерфейсы создавались командой ifconfig:
$ ifconfig имя_интерфейса:0 plumb
$ ifconfig имя_интерфейса:1 plumb
$ ifconfig имя_интерфейса:0 IP-адрес up
$ ifconfig имя_интерфейса:1 IP-адрес up

Созданный таким образом интерфейс не является реальным интерфейсом, что порождало


некоторые проблемы при администрировании. В 2008 был выпущен проект Crossbow; он
позволил создавать виртуальные интерфейсы, полностью эквивалентные реальным сетевым
интерфейсам.

Для дальнейшего изложения нам потребуются два понятия.


vnic — Virtual NIC, или виртуальный интерфейса;
etherstub — виртуальный коммутатор. По сути, это vnic без IP-адреса, с помощью которого
можно связать несколько виртуальных коммутаторов в сеть.

Основная команда для администрирования Crossbow: dladm (от англ. "Data Link
Administration"). Для отображения всех интерфейсов используйте команду
dladm show-link:
LINK CLASS MTU STATE OVER
e1000g1 phys 1500 up --

Теперь создадим виртуальные интерфейсы vnic0, vnic1, vnic2, vnic3 и один


виртуальный коммутатор etherstub0.
root@quadra ~$ dladm create-vnic -l e1000g1 vnic0
root@quadra ~$ dladm create-etherstub etherstub0
root@quadra ~$ dladm create-vnic -l etherstub0 vnic1
root@quadra ~$ dladm create-vnic -l etherstub0 vnic2
root@quadra ~$ dladm create-vnic -l etherstub0 vnic3
root@quadra ~$ dladm show-link
LINK CLASS MTU STATE OVER
e1000g1 phys 1500 up --
e1000g2 phys 1500 down --
e1000g0 phys 1500 unknown --
vnic0 vnic 1500 up e1000g1
etherstub0 etherstub 9000 unknown --
vnic1 vnic 9000 up etherstub0
vnic2 vnic 9000 up etherstub0
vnic3 vnic 9000 up etherstub0

Теперь мы имеем несколько виртуальных интерфейсов, которыми можно управлять обычным


образом с помощью ifconfig:
root@quadra ~$ ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g1: flags=201000843 mtu 1500 index 2
inet 10.0.0.18 netmask ffffff00 broadcast 10.0.0.255
ether 0:1b:21:25:3e:7b
11
Глава 3: Сеть в OpenSolaris Solaris11.ru

root@quadra ~$ ifconfig vnic0 plumb 10.0.0.19 up


root@quadra ~$ ifconfig vnic1 plumb 10.100.0.2 netmask 255.255.255.0 up
root@quadra ~$ ifconfig vnic2 plumb 10.100.0.3 netmask 255.255.255.0 up
root@quadra ~$ ifconfig vnic3 plumb 10.100.0.4 netmask 255.255.255.0 up

root@quadra ~$ ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g1: flags=201000843 mtu 1500 index 2
inet 10.0.0.18 netmask ffffff00 broadcast 10.0.0.255
ether 0:1b:21:25:3e:7b
vnic0: flags=201000843 mtu 1500 index 7
inet 10.0.0.19 netmask ff000000 broadcast 10.255.255.255
ether 2:8:20:3a:70:5a
vnic1: flags=201000843 mtu 9000 index 8
inet 10.100.0.2 netmask ffffff00 broadcast 10.100.0.255
ether 2:8:20:f2:56:4d
vnic2: flags=201000843 mtu 9000 index 9
inet 10.100.0.3 netmask ffffff00 broadcast 10.100.0.255
ether 2:8:20:bc:b1:a1
vnic3: flags=201000843 mtu 9000 index 10
inet 10.100.0.4 netmask ffffff00 broadcast 10.100.0.255
ether 2:8:20:55:11:56

Заметьте, что все интерфейсы имеют различные MAC-адреса.

Виртуализация сети в OpenSolaris — ещё один шаг к виртуализации на уровне операционной


системы. Crossbow может успешно применяться с другими технологиями вируализации,
например, контейнерами Solaris.

Для написания этого раздела был использован блог Бена Роквуда


http://cuddletech.com/blog/pivot/entry.php?id=999.

Посетите страницу проекта Crossbow:


http://hub.opensolaris.org/bin/view/Project+crossbow/WebHome

12
Глава 4: Приложения для OpenSolaris

Для OpenSolaris доступны тысячи приложений. Большинство программ с открытым кодом


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

С первой же версии, OpenSolaris поставляется с новой системой управления пакетами Image


Packaging System (IPS). IPS предоставляет очень простой интерфейс для добавления,
обновления или удаления пакетов. Управление пакетами производится через графический и
текстовый интерфейсы, и даже из браузера Firefox!

Управление пакетами в Solaris осуществляется в стиле SVR4, то есть с помощью таких команд
как pkgadd и pkgrm. Однако такая система не имеет графического интерфейса. В случае
наличия зависимостей от других приложений (то есть когда для функционирования
устанавливаемого компонента требуется наличие других компонентов) разрешение
зависимостей является трудоёмким процессом. IPS имеет много преимуществ, как для
пользователя, так и для разработчика, о чём мы расскажем в следующем разделе. Также мы
приведём примеры установки пакетов с помощью утилиты pkgadd.

Для установки нового приложения с помощью IPS, откройте Диспетчер Пакетов с


помощью нажатия на иконку Add More Software на рабочем столе или Система >
Администрирование > Диспетчер Пакетов. Теперь используйте графический
интерфейс для поиска и установки пакетов. Та же программа используется для обновления и
удаления программ.

Для поиска введите в поле поиска название пакета или любое ключевое слово, которое могло
бы соответствовать искомому пакету. Выберите из списка найденных пакетов нужный,
отметьте его и нажмите кнопку Установить/Обновить. Если поле Статус напротив пакета
отмечено — значит, он уже установлен. Для удаления пакета пометьте его и нажмите
Удалить.

Менеджер Пакетов позволяет устанавливать приложения из разных репозиториев


одновременно. О том, как это сделать, написано в следующем разделе.
Глава 4: Приложения для OpenSolaris Solaris11.ru
Добавление новых репозиториев
IPS даёт возможность пользователям OpenSolaris легко находить, и скачивать пакеты со всеми
зависимостями из надёжных мест, и устанавливать их. Это делается с помощью нескольких
репозиториев; некоторые из них официально поддерживаются Sun Microsystems Inc., а другие
поддерживает сообщество. По умолчанию, репозиторий /release
(http://pkg.opensolaris.org/release) включён в Менеджер Пакетов. При желании добавить
дополнительные репозитории это можно сделать следующим образом.

Откройте Диспетчер Пакетов (Система > Администрирование > Диспетчер


Пакетов) и нажмите Файл > Управление хранилищами. Теперь выберите Название
для нового репозитория. Это может быть любое имя, но оно не должно содержать
запрещённых символов. Затем введите адрес репозитория IPS. Нажмите Добавить.

Некоторые репозитории требуют сертификат SSL (Secure Sockets Layer) - это, например,
бывает при использовании специальных репозиториях, доступных только зарегистрированным
пользователям, или при скачивании несвободных программ. В этом случае Диспетчер Пакетов
попросит предъявить ключ SSL и файл с сертификатом SSL.

После добавления репозитория вы можете использовать его из выпадающего списка для


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

Свободные репозитории
Вот некоторые популярные репозитории IPS, из которых вы можете бесплатно скачать
приложения:
• http://pkg.opensolaris.org/contrib/
Здесь собраны пакеты, добавленные сообществом OpenSolaris.

• http://jucr.opensolaris.org/pending/
В этом репозитории находятся приложения, добавленные членами сообщества, но ещё не
протестированные.

• http://opensolaris.homeunix.com:10906/
Данный репозиторий содержит все мультимедийные пакеты, доступные для OpenSolaris.
Используйте его для поиска кодеков MP3 и видео, а также видеоплееров, например, MPlayer.
Узнайте больше на http://solaris.homeunix.com/. Имейте в виду, что homeunix - это
неофициальный репозиторий. Проще установить MPlayer как пакет SVR4.

Несвободные репозитории
• https://pkg.sun.com/extra
Используйте этот репозиторий для установки дополнительных несвободных пакетов. В нём
находятся такие полезные компоненты как плагин Flash для Firefox. Использование программ
бесплатно, но для скачивания необходимо зарегистрироваться в Sun Developer Network (это
бесплатно).

• https://pkg.sun.com/opensolaris/support/
14
Глава 4: Приложения для OpenSolaris Solaris11.ru
Это платный репозиторий, доступный лишь пользователям, которые купили поддержку для
OpenSolaris. Прочитать об опциях платной поддержки можно на http://tr.im/osolsupport.

Установка пакетов SVR4


Существуют программы, которые распространяются в файлах PKG в стиле SVR4 (System V
Release 4). В этом разделе вы узнаете, как устанавливать файлы PKG на примере трёх пакетов,
разработанных GNU.

Множество приложений GNU распространяются в виде пакетов SVR4 и требуют для работы
GNUbase (Basic GNU Libraries), GNU gettext и GNU libinconv. Установим их с сайта
http://www.sunfreepacks.com. Для этого:

• Откройте окно терминала из файлового менеджера в директории с файлом PKG или


используйте команду cd для перехода в эту директорию.

• выполните pkgadd -d <filename.pkg> для установки пакета. Для упомянутых трёх


пакетов это будут команды:
$ pfexec pkgadd -d GNUbase.pkg
$ pfexec pkgadd -d Asgettext-0.17.pkg
$ pfexec pkgadd -d ASlibiconv-1.12.pkg

Убедитесь в правильности имени файла. Если файл PKG не присутствует в рабочей


директории, укажите полный путь.

Для использования этих программ напрямую важно добавить /opt/gnu/bin в системный


путь. Для этого откройте терминал и выполните $ gedit ~/.bashrc. Откроется окно
программы gedit, в котором можно отредактировать файл bashrc. В конец файла добавьте
строку PATH=$PATH:/opt/gnu/bin, затем сохраните файл.

После добавления этих трёх утилит вы можете установить и другие приложения GNU в
формате PKG.

15
Глава 5: Драйверы устройств

Если драйверы устройств не установлены в системе, периферийные устройства могут работать


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

Установка из репозитория
Запустите Служебную программу драйверов устройств. Выберите Приложения >
Системные > Служебная программа драйверов устройств. Если недостающий
драйвер есть в репозитории, утилита поможет скачать и установить пакет с драйвером.
Убедитесь в наличии доступа к Интернет. Нажмите правой кнопкой мыши на подсвеченную
строку, указывающую на отсутствующий драйвер. выберите опцию Установить Драйвер
из ниспадающего меню. Или же нажмите Установить Все Драйверы.

Установка не из репозитория
Если недостающий драйвер доступен на сайте сторонних организаций (third-party), то утилита
подскажет адрес URL сайта. Нажмите на подсвеченную строку правой кнопкой, выберите
опцию Отобразить подробности. Сверху окна Details указан рекомендуемый адрес
драйвера. Для его установки следуйте инструкциям, приведённым в документации к драйверу.
В большинстве случаев драйвер устанавливается путём копирования бинарных и
конфигурационных файлов в правильное место.

64-битные драйверы копируются в каталог /kernel/drv/sparcv9 на машинах


архитектуры SPARC и в каталог /kernel/drv/amd64/ на x64; 32-битные драйверы
находятся в /kernel/drv/.

Установка драйвера осуществляется с помощью команды add_drv имя_драйвера. После


этого бывает нужно выполнить команду devfsadm. Если запущен демон автоконфигурации
Глава 5: Драйверы устройств Solaris11.ru
devfsadmd, то команда devfsadm будет выполнена автоматически. OpenSolaris имеет
монолитное ядро с динамически подгружаемыми модулями, поэтому перезагрузка системы
после установки драйвера не требуется.

Ссылки на сайты с драйверами для Solaris/OpenSolaris доступны на сайте http://solaris-


x86.org/software/drivers/. Если вы нигде не нашли драйвера, вы можете скомпилировать какой-
нибудь драйвер с открытым кодом или написать собственный. О том, как это делается, читайте
в Solaris Device Driver Tutorial: http://docs.sun.com/app/docs/doc/817-5789/.

17
Глава 6: Пользователи и группы

После установки OpenSolaris нужно создать учётные записи всем пользователям данной
машины. Это очень простая задача. выберите Система > Администрирование >
Пользователи и Группы.

Для добавления нового пользователя нажмите Добавить пользователя. В появившемся


окне Редактора пользовательских счетов введите основную информацию о пользователе. Вы
можете приписать полномочия пользователю во вкладке Профили пользователей и роли
во вкладке User Roles.

Для создания пользователей из командной строки


используйте команду useradd:
# useradd имя_пользователя

По умолчанию команда создаёт пользователя,


устанавливает домашний каталог пользователя в
/home/имя_пользователя, командный процессор
/bin/sh и группу other.

Чаще useradd используется с параметрами, например:


# useradd -d /export/home/каталог -m -g имя_группы -s /bin/ksh имя_пользователя

Ключ -d указывает домашний каталог пользователя, -m создаёт этот каталог, -g добавляет


пользователя в группу, -s задаёт командный процессор. У этой команды есть и другие ключи.

Для изменения свойств пользователя воспользуйтесь программой usermod с теми же


ключами.

Для удаления пользователя используйте userdel имя_пользователя.

Управление группами пользователей осуществляется командами groupadd, groupmod и


groupdel.

После создания пользователя требуется создать пароль командой passwd


имя_пользователя. Запущенная без параметров, passwd изменяет пароль текущего
пользователя.
Глава 6: Пользователи и группы Solaris11.ru

Интересной особенностью OpenSolaris в области управления пользователями является Role


Based Access Control (RBAC). С помощью RBAC можно предоставить каждому пользователю
ровно столько полномочий, сколько требуется для выполнения его или её работы. Это
означает, что пользователю не нужен полный доступ суперпользователя (root) для выполнения
нескольких задач, требующих прав суперпользователя. RBAC даёт возможность предоставить
каждому пользователю только те права, которые ему действительно необходимы. Это
повышает защищённость системы. Узнать больше о RBAC можно в Getting Started with
OpenSolaris 2009.06 Guide на http://dlc.sun.com/osol/docs/content/dev/getstart/.

Выполнение команд от имени администраторам


Вход пользователя root в систему запрещён в целях повышения безопасности. Для выполнения
команд, доступных администратору, войдите в систему от своего имени, и выполните команду
su. Введите пароль root, если он вам известен.
$ su
Password:
#

Для входа от имени другого пользователя используйте su имя_пользователя.

В Solaris 10 и OpenSolaris не существует команды sudo. Вместо этого применяется более


современный механизм RBAC.

19
Глава 7: Установка OpenSolaris

Аппаратные платформы
OpenSolaris поддерживает микропроцессорные архитектуры SPARC, x86 и x86-64 (Sun
использует название x64). В отличие от Solaris, развитие OpenSolaris развивается прежде всего
для платформы x86/x64. Так, официальный дистрибутив OpenSolaris поддерживает SPARC
только с версии 2009.06. Большинство дистрибутивов на основе OpenSolaris также
предназначены для x86/x64.

В октябре 2008 австралийская компания Sine Nomine Associates показала свою версию
OpenSolaris для мейнфреймов IBM System z.

В версии OpenSolaris 2009.06 появилась поддержка архитектуры ARM.

Также существует экспериментальная версия для PowerPC (проект Polaris). Из-за


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

Поддерживаемое оборудование
Список оборудования, на котором работает OpenSolaris, можно получить на сайте
http://www.sun.com/bigadmin/hcl/. OpenSolaris обычно поддерживает стандартное железо, но с
редким или очень новым оборудованием могут возникнуть проблемы.

Где взять диск?


Раньше Sun Microsystems бесплатно высылала установочные диски с OpenSolaris по почте.
Корпорация Oracle приостановила эту рассылку.

Вы можете скачать образ диска на http://www.opensolaris.com/get/index.jsp. Запишите образ на


чистую болванку (700 МБ CD) и используйте.

Работа с LiveCD
OpenSolaris распространяется на дисках LiveCD, поэтому вы можете протестировать
OpenSolaris без фактической установки его на жёсткий диск. Если же вы решите его
установить, то это можно сделать с помощью того же диска. В этой главе будут описаны
работа с LiveCD и установка OpenSolaris на жёсткий диск.

Вставьте LiveCD в дисковод и перезагрузите машину. Как только машина загрузится с LiveCD,
вы увидите меню загрузчика GRUB. выберите первый пункт меню: OpenSolaris 2009.06.
Система начнёт загружаться с LiveCD и вскоре попросит выбрать раскладку клавиатуры и
язык.

Для того, чтобы загрузиться с CD, вам, возможно придётся изменить порядок загрузки с
помощью настройки BIOS. Убедитесь в том, что BIOS настроен на загрузку с CD, иначе
система загрузится с жёсткого диска.

После выбора раскладки и языка (для выбора опций по умолчанию нажмите [Enter]), вы
Глава 7: Установка OpenSolaris Solaris11.ru
увидите окно для ввода имени пользователя. Не вводите туда ничего и дождитесь загрузки
графического интерфейса. После запуска GNOME появится рабочий стол с тремя иконками:
Служебная программа драйверов устройств, Начало работы в ОС
OpenSolaris и Установить OpenSolaris. Вы можете использовать Программу
драйверов устройств для проверки наличия драйверов для всех устройств, подключённых к
компьютеру. Если все важные драйвера присутствуют в системе, можно приступить к
непосредственной установке.

Особенности загрузки для SPARC


LiveCD для машин SPARC отсутствует. Установка на эти машины осуществляется при
помощи автоматического установщика. Эти системы имеют прошивку OpenBoot в отличие от
BIOS на PC-совместимых компьютерах. После включения машина загрузится в интерфейс
OpenBoot (так называемая «ok» prompt). Для загрузки системы используется команда boot.

Если машина не останавливается на интерфейсе PROM и начинает сразу грузить систему,


установленную на жёстком диске, прервите загрузку одновременным нажатием клавиш STOP
и A. После этого выполните auto-boot? false.

Установка на жёсткий диск


Дважды нажмите на иконку Установить OpenSolaris на рабочем столе и следуйте
инструкциям установщика.

OpenSolaris требует минимум 512 МБ оперативной памяти. Однако рекомендуется иметь хотя
бы 1 ГБ, в особенности если вы намерены использовать инструменты разработки, такие как
NetBeans и Sun Studio. При установке OpenSolaris в VirtualBox рекомендуются 1.5 ГБ RAM.

Прочтите текст в окне Добро пожаловать и нажмите Далее.

В окне Диск выберите раздел диска, на который будет установлен OpenSolaris. Это может
быть один из четырёх первичных разделов. Измените тип выбранного раздела на Solaris.
Рекомендуемый размер раздела составляет 9 ГБ, минимальный 3.5 ГБ. Если вы планируете

21
Глава 7: Установка OpenSolaris Solaris11.ru
использовать OpenSolaris в качестве единственной операционной системы на компьютере,
выберите опцию Использовать Весь Диск.

При использовании OpenSolaris совместно с другими системами выберите один из разделов


диска. Будьте крайне внимательны при выборе разделов! Установка OpenSolaris в раздел
означает, что все данные в этом разделе будут уничтожены.

Далее установщик просит выбрать временную зону и локаль (язык). Затем создаются учётные
записи для пользователя и администратора (root), после чего система готова к установке. В
подтверждающем окне будет выведена конфигурация будущей системы. Проверьте
правильность всех данных и нажмите Установить для начала установки.

Если на вашей машине установлен Linux, то его GRUB будет переписан. Вам придётся
изменить файл menu.lst в OpenSolaris GRUB для двойной загрузки OpenSolaris и Linux.

Если на машине установлен Windows, то OpenSolaris Boot Loader (изменённая версия GRUB)
автоматически определит его и добавит соответствующую запись в меню загрузчика. Таким
образом, двойная загрузка OpenSolaris и Windows не составляет труда. В случае с Linux,
создайте копию загрузочного меню Linux, чтобы потом добавить в меню OpenSolaris
22
Глава 7: Установка OpenSolaris Solaris11.ru
необходимые строчки.

Обычно установка занимает от 15 до 25 минут в зависимости от оборудования. После


окончания установки необходимо перезагрузить систему. вытащите LiveCD из дисковода и
нажмите Перезагрузить для завершения установки. Регистрация OpenSolaris необязательна,
но имеет некоторые преимущества. Зарегистрированные пользователи получают информацию
об обновлениях по email. Для регистрации нажмите на кнопку Зарегистрировать
OpenSolaris.

Обновление с предыдущих версий OpenSolaris


Если на компьютере установлена предыдущая версия OpenSolaris, то обновление до последней
версии будет очень простым. Его можно провести двумя способами. Сначала откройте
Диспетчер Обновлений. Для этого, выберите Система > Администрирование >
Диспетчер Обновлений. Нажмите Update All.

Будет создана новая Среда Загрузки (Boot Environment), в которую будет установлена
обновлённая версия. Это одна из специфичных для OpenSolaris функций. После обновления
системы создаётся новая Среда Загрузки и добавляется в меню GRUB. При этом предыдущая
версия сохраняется засчёт возможности клонирования, которую предоставляет файловая
система ZFS. вы можете загрузить предыдущую версию, выбрав необходимую опцию в меню
GRUB.

Если вы не хотите, чтобы старая версия осталась на диске, загрузитесь в обновлённую систему
и используйте меню Управление загрузочными средами из Диспетчера Пакетов для
удаления старой версии. Клоны не копируют все файлы в системе, а только ссылаются на них,
поэтому для хранения клонов почти не требуется дополнительное дисковое пространство. На
диск сохраняются лишь изменения.

Если вы предпочитаете использовать текстовый интерфейс, выполните команду pfexec pkg


image-update. Это обновит систему до последней версии. Для этого необходимо
подключение к сети. Промежуточные выпуски OpenSolaris появляются примерно раз в две
недели. Если вы хотите пользоваться последним нестабильным выпуском, добавьте
репозиторий http://pkg.opensolaris.org/dev в меню Управление хранилищами программы
Диспетчер Пакетов. После этого выполните команду pfexec pkg image-update.
Подробнее об этом можно узнать на http://pkg.opensolaris.org/dev.

Автоматический установщик
Представьте ситуацию, что вам нужно установить OpenSolaris в одинаковой конфигурации, но
не на одну, а на десять машин одновременно. Такая ситуация часто возникает при
использовании OpenSolaris на большом числе серверов и сетевых компьютеров. Поэтому
OpenSolaris имеет сетевой Автоматический Установщик (Automated Installer). До версии
2010.03 это был единственный способ установить OpenSolaris на платформу SPARC.

Текстовый установщик
В OpenSolaris 2010.03 появилась возможность устанавливать систему в текстовом режиме.
23
Глава 7: Установка OpenSolaris Solaris11.ru
Подробнее об этом читайте на странице проекта:
http://hub.opensolaris.org/bin/view/Project+caiman/TextInstallerProject

Полезные приложения
Теперь, когда вы установили OpenSolaris 2010.03 и познакомились с его основными
функциями, давайте расширим возможности системы, установив несколько полезных
программ. Здесь перечислены 10 самых важных, на наш взгляд, приложений для разработки и
развлечения под OpenSolaris. С помощью нажатия на ссылки их можно установить прямо из
браузера!

Приложение Репозиторий Описание Ссылка


1 OpenOffice /release Набор офисных приложений, openoffice.org
совместимый с Microsoft Office
2 Java-Dev /release Набор утилит для разработчика java.sun.com
Java, включая JDK и NetBeans
3 VirtualBox /extra Виртуальная машина для запуска virtualbox.org
операционных систем
4 Sun Studio 12 /release Компиляторы и IDE для языков developers.sun.co
Си, Си++ и Фортран m/sunstudio/
5 GCC-Dev /release Набор компиляторов GNU gcc.gnu.org
Compiler Collection
6 AMP-Dev /release Apache, MySQL и PHP для вэб- mysql.com/
разработчика
7 Transmission /release Клиент BitTorrent transmissionbt.co
m/
8 WINE /contrib Запускает программы Windows в winehq.org/
OpenSolaris (только x86/64)
9 Elisa Media Center /release Медиацентр для просмотра видео moovida.com
10 GIMP /release Растровый графический редактор gimp.org

24
Глава 8: Управление демонами

Операционные системы Unix традиционно имеют набор демонов (служб), то есть программ, не
связанных ни с одним из активных пользователей. Service Management Facility (SMF)
предоставляет инфраструктуру, которая заменяет традиционные загрузочные скрипты, уровни
выполнения, конфигурационные файлы и другие службы и программы. Службы слушают и
отвечают на запросы для выполнения определённых задач, например:
• Доставка почты
• Ответ на запросы по протоколу FTP
• Обработка команд при удалённом администрировании

SMF упрощает управление системными демонами, создавая единую модель


администрирования. Основной единицей администрирования в SMF является экземпляр
службы. Каждый экземпляр именуется с помощью Fault Management Resource Identifier
(FMRI). FMRI хранит имя службы и имя экземпляра. Например, FMRI для демона sendmail
будет svc:/network/smtp:sendmail, где network/smtp указывает имя службы, а
sendmail - имя экземпляра. Примеры допустимых FMRI:
• svc://localhost/system/system-log:default
• svc:/system/system-log:default
• system/system-log:default

Управление службами осуществляется через графический интерфейс или из командной


строки.

Включение демонов
Вы можете включить или выключить некоторые службы в OpenSolaris с помощью приложения
Настройка служб (Система > Администрирование > Службы). Управление
службами из этого приложения эквивалентно использованию команды svcadm. Пользователи
могут просматривать или изменять службы в зависимости от своих прав и типа службы.

Как запустить службу из GUI


• Выберите Система > Администрирование >
Службы. Появится окно программы. Включённые
службы помечены флажком.
• Для запуска службы поставьте флажок напротив её
названия и сохраните изменения. Выключение служб
осуществляется аналогично.

Как запустить службу из Терминала


Для вывода работающих служб используется команда
svcs. Команда svcadm применяется для управления
состоянием службы. Для конфигурирования SMF вам
необходимы соответствующие полномочий, например, роль суперпользователя или основного
администратора.

Например, для выяснения статуса сервиса Network Automagic (nwam) откройте Терминал и
Глава 8: Управление демонами Solaris11.ru
выполните:
$ svcs -a | grep nwam
online Jan_14 svc:/network/physical:nwam

Если вы хотите вывести список всех работающих служб, выполните:


# svcs -a |grep online|less
online 12:52:36 svc:/system/svc/restarter:default
online 12:52:37 svc:/network/pfil:default
online 12:52:37 svc:/network/tnctl:default
online 12:52:37 svc:/network/loopback:default
online 12:52:38 svc:/system/filesystem/root:default
online 12:52:38 svc:/system/installupdates:default
online 12:52:39 svc:/system/scheduler:default
online 12:52:40 svc:/system/boot-archive:default
online 12:52:40 svc:/system/filesystem/usr:default
online 12:52:40 svc:/network/physical:default
online 12:52:41 svc:/system/identity:node
online 12:52:41 svc:/system/keymap:default
online 12:52:41 svc:/system/device/local:default
online 12:52:42 svc:/system/filesystem/minimal:default
online 12:52:42 svc:/system/resource-mgmt:default
online 12:52:42 svc:/system/rmtmpfiles:default
online 12:52:42 svc:/system/name-service-cache:default
online 12:52:43 svc:/system/identity:domain
[...]

Нажмите q для достижения конца списка. Таким же образом, для вывода всех отключённых
служб замените online на offline после grep.

Чтобы запустить Apache (если прежде вы установили пакет amp-dev)


$ pfexec svcadm enable svc:/network/http:apache22

Для его отключения выполните ту же команду, заменив enable на disable.

Чтобы показать статус конкретной службы, выполните svcs -l. Например:


$ svcs -l svc:/network/http:apache22
fmri svc:/network/http:apache22
name Apache 2.2 HTTP server
enabled true
state online
next_state none
state_time Thu Jan 14 16:04:18 2010
logfile /var/svc/log/network-http:apache22.log
restarter svc:/system/svc/restarter:default
contract_id 70
dependency require_all/error svc:/milestone/network:default (online)
dependency require_all/none svc:/system/filesystem/local:default (online)
dependency optional_all/error svc:/system/filesystem/autofs:default (online)

Для более полной информации обратитесь к man команд svcs и svcadm.

26
Глава 9: Контейнеры Solaris

Зоны (контейнеры) Solaris увеличивают возможности виртуализации на уровне операционной


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

Каждая зона имеет своё файловое пространство, свой список пользователей, в том числе
администратора root. При этом все зоны наследуют каталоги /sbin, /usr, /lib и
/platform, а также используют одно ядро.

В OpenSolaris всегда есть хотя бы одна зона: это глобальная зона, то есть основной экземпляр
операционной системы. Чтобы показать все зоны в системе используйте команду zoneadm
list:
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared

В системе может существовать только одна глобальная зона. Все остальные зоны называются
неглобальными.

Создание зон
Создадим новую неглобальную зону с именем myzone:
# zonecfg -z myzone
sunhelp: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:myzone> create
zonecfg:myzone> set zonepath=/myzone
zonecfg:myzone> set autoboot=true
zonecfg:myzone> add inherit-pkg-dir
zonecfg:myzone:inherit-pkg-dir> set dir=/opt
zonecfg:myzone:inherit-pkg-dir> end
zonecfg:myzone p> add net
zonecfg:myzone:net> set address=192.168.22.14
zonecfg:myzone:net> set physical=pcn0
zonecfg:myzone:net> end
zonecfg:myzone> verify
zonecfg:myzone> commit
zonecfg:myzone> exit

В этом примере создаётся новая зона myzone. Ей приписываются свойства, такие как корень
файловой системы, автозагрузка при загрузке глобальной зоны, разделяемые каталоги,
настройки сети.
# zoneadm list -cv
ID NAME STATUS PATH
0 global running /
- myzone configured /myzone

Как видите, новая зона появилась в выводе команды zoneadm list. Хотя параметры зоны
существуют, сама зона ещё не установлена. Для установки используйте команду zoneadm
install:

# zoneadm -z myzone install


Preparing to install zone .
Глава 9: Контейнеры Solaris Solaris11.ru
Creating list of files to copy from the global zone.
Copying <2393> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <892> packages on the zone.
Initialized <892> packages on zone.
Zone is initialized.
The file contains a log of the zone installation.

После этого можно загрузить новую зону:


# zoneadm -z myzone boot

Проверяем список зон:


# zoneadm list -cv
ID NAME STATUS PATH
0 global running /
1 myzone running / myzone

Для входа в зону:


# zlogin -C myzone

Остановка зоны:
# zoneadm -z myzone halt

Удаление:
# zoneadm -z myzone uninstall
# zonecfg -z myzone delete

Типизированные зоны
После создания обыкновенной зоны она практически эквивалента по функциональности
глобальной зоне и позволяет запускать те же приложения. Однако существуют разновидности
зон, в которых можно запускать неродные приложения, они называются типизированными
(Branded Zones, или BrandZ). В Solaris 10 поддерживаются четыре разновидности
типизированных зон:
• 'solaris8' - для запуска приложений, написанных под Solaris 8 (только на платформе
SPARC);
• 'solaris9' - для запуска приложений под Solaris 9 (только на платформе SPARC);
• 'lx' - для приложений, скомпилированных под Linux (только на платформе x86/x64);

В OpenSolaris реализована поддержка трёх типов зон:


• 's10brand' - для приложений под Solaris 10.
• 'lx' - для linux
• 'sn1' - используется для отладки

Также планировалось реализовать возможность запуска приложений для FreeBSD и Mac OS X


на платформе x86, однако пока такая возможность отсутствует.

Начиная с версии ядра snv_143, поддержка зон 'lx' прекращена. Частично это связано с тем,
что под OpenSolaris появилось уже достаточно скомпилированных приложений. Однако на
момент написания в OpenSolaris 2009.06 такая поддержка всё ещё существует.

28
Глава 9: Контейнеры Solaris Solaris11.ru
Бинарная совместимость с Linux
Для операционной системы Linux сейчас доступно больше скомпилированных приложений,
чем для OpenSolaris. Для запуска программ под Linux в OpenSolaris нужно использовать
брендовые зоны lx. Официально поддерживается совместимость с RHEL 3.x (Red Hat Enterprise
Linux), CentOS 3.x и Scientific Linux 3.0.8. Дальше мы рассмотрим установку CentOS в зону.

Для работы приложений требуется скачать системные библиотеки CentOS на сайте:


http://hub.opensolaris.org/bin/view/Community+Group+zones/brandz_downloads

Для создания зоны запускаем zonecfg с ключом -z:


$ zonecfg -z centos

centostest: No such zone configured


Use 'create' to begin configuring a new zone.
zonecfg:centos> create -t SUNWlx
zonecfg:centos> add net
zonecfg:centos:net> set physical=ni0
zonecfg:centos:net> set address=192.168.1.25
zonecfg:centos:net> end
zonecfg:centos> set zonepath=/zones/centos
zonecfg:centos> set autoboot=true
zonecfg:centos> verify
zonecfg:centos> commit
zonecfg:centos> exit

Обратите внимание на команду create. В отличие от обычной зоны здесь надо указать ключ
-t и пакет с именем зоны. Для Linux надо указать SUNWlx, а например, для Solaris 8:
SUNWsolaris8.

Далее устанавливаем зоны командой zoneadm с ключом install.

$ zoneadm -z centos install -d /export/home/gleb/CentOS/centos_fs_image.tar.bz2

Здесь -z указывает имя зоны, а -d путь к скачанному образу.

После этого можно загрузить зону:


$ zoneadm -z centos boot

и войти в неё:
$ zlogin -C centos

Для запуска графических программ иногда бывает проще подключиться к зоне через ssh:
# ssh -X centos имя_программы

29
Глава 10: Файловая система ZFS
Файловая система отвечает за работу с файлами. Хотя для выполнения большинства задач
требуется участие файловой системы, мало кто из нас по-настоящему обращает внимание на
файловую систему в повседневной работе. В этой главе мы рассмотрим одно из самых
инновационных решений OpenSolaris - файловую систему ZFS. Такие утилиты как Машина
времени и Среды Загрузки опираются на возможности ZFS для предоставления своей
уникальной функциональности. Далее мы исследуем возможности и администрирование
файловой системы. Полнее ознакомиться со всеми функциями вы можете в официальной
документации Sun Microsystems. Русский перевод документации также доступен:
http://dlc.sun.com/pdf/820-0836/820-0836.pdf.

Для выполнения упражнений этой главы необходимо войти в систему как суперпользователь.
Это делается командой $ pfexec su в Терминале.
Если вы не знаете какого-нибудь термина, относящегося к ZFS, узнайте его в таблице
Терминология ZFS, приведённой ниже.

Что такое ZFS?


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

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

ZFS решает эти трудности кардинальным образом, уничтожая менеджер томов. Вместо того,
чтобы вынуждать пользователя создавать виртуальные тома, ZFS собирает все устройства в
пулы хранения данных. Пул хранения описывает физические характеристики хранилища и
служит произвольным хранилищем данных, на базе которого создаются файловые системы.
Таким образом, файловые системы больше не привязаны к индивидуальным устройствам, что
позволяет им разделять пространство с другими файловыми системами в пуле. Вам больше не
нужно предопределять размер файловой системы, так как их размер автоматически
увеличивается в пределах, ограниченных пространством, выделенным под пул. При
добавлении нового физического диска все файловые системы могут сразу использовать
дополнительное дисковое пространство без дополнительной работы. Когда в систему
добавляется память DIMM, операционная система не принуждает администратора выполнять
команды для выделения памяти индивидуальным процессам. Все процессы в системе будут
автоматически использовать дополнительную память.

Семантика транзакций
ZFS является транзакционной файловой системой. Это означает, что состояние файловой
Глава 10: Файловая система ZFS Solaris11.ru
системы всегда согласовано (консистентно). Традиционные файловые системы
перезаписывают данные на диск. Если во время записи, например, произойдёт отключение
питания, операция не будет завершена и файловая система будет рассогласована. Исторически,
эта проблема решалась с помощью команды fsck. Эта утилита проверяла состояние файловой
системы и делала попытки устранить несогласованности. Данная процедура доставляла
администраторам большие неприятности, так как fsck не гарантировала успех восстановления
системы. В более поздних системах была представлена концепция журналирования.

Журналируемые файловые системы имеют специальный журнал, куда записываются все


операции перед их фактическим совершением. Это позволяет сохранять информацию об
операциях и после сбоях перевыполнять незавершённые операции для сохранения целостности
данных. Процесс журналирования требует больших накладных расходов, потому что данные
записываются дважды; часто это порождает новые проблемы, так как не всегда журнал может
быть прочитан правильно. В транзакционной файловой системе данные никогда не
перезаписываются; любая последовательность операций (включённых в транзакцию) либо
выполняется полностью, либо не выполняется вообще. Такой механизм гарантирует, что
файловая система не будет повреждена при случайном отключении питания или системном
сбое. Таким образом, отпадает необходимость в утилите fsck. Хотя небольшой кусок данных,
предполагавшийся к записи прямо перед сбоем, может быть потерян, целостность файловой
системы сохраняется.

Контрольные суммы и самовосстановление данных


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

В ZFS контрольные суммы хранятся таким образом, что ошибки могут быть легко обнаружены
и исправлены. Процесс восстановления данных происходит на уровне файловой системы и не
влияет на работу приложений. Также ZFS предоставляет данные для самовосстановления. ZFS
поддерживает пулы хранения с различными уровнями избыточности, включая зеркалирование
и RAID-5. При обнаружении ошибки ZFS берёт данные из копии и вставляет на место
повреждённых данных.

Масштабируемость
ZFS изначально разрабатывалась как масштабируемая файловая система. Это 128-битная
система; она позволяет хранить 256 квадрильонов зеттабайт данных. В одной директории
может хранится до 256 файлов. Максимальное количество пулов хранения - 264, устройств в
каждом пуле - 264.

Снимки файловой системы


Снимок — это копия файловой системы или тома, предназначенная только для чтения. В ZFS
снимки создаются быстро и легко. При этом снимки не занимают дополнительного дискового
пространства. Если данные изменяются, в снимке записываются только старые данные.

31
Глава 10: Файловая система ZFS Solaris11.ru

Снимки ZFS обладают следующими особенностями:


• Сохраняются после перезагрузки;
• Теоретическое максимальное количество снимков (248);
• Не используют дополнительные хранилища. Снимки используют дисковое пространство
тех пулов, в которых были созданы;
• Создание снимка осуществляется как неделимая операция. Снимки либо создаются
полностью, либо не создаются совсем. Это гарантирует целостность данных в снимке.

Снимки томов не доступны напрямую, однако их можно клонировать и сохранять.

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

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

Начало работы с ZFS


В этом разделе мы покажем простые команды, которые пригодятся при создании и управлении
файловыми системами.
Например, для создания файла объёмом 1 ГБ выполните $ mkfile 1g мой_файл; а для
файла объёмом 100 МБ - $ mkfile 100m мой_файл.

Создание базовой файловой системы


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

Следующий пример показывает, как создать простой зеркальный пул хранения с именем tank
и файловую систему с тем же именем за одну команду. Предположим, что устройства
/dev/dsk/c1t0d0 и /dev/dsk/c2t0d0 полностью доступны для использования. Вместо
дисков вы можете использовать два файла размером больше чем 128 МБ.

# zpool create tank mirror c1t0d0 c2t0d0

OpenSolaris и Solaris следуют соглашению об именовании дисков в формате cCtTd0pP. Имя


устройства связано с его SCSI-адресом. С - номер контроллера, T - целевой SCSI-номер, P -
32
Начало работы с ZFS Solaris11.ru
номер раздела (partition, или slice). Например, c0t0d0s0 обозначает диск, подсоединённый к
контроллеру 0, SCSI ID 0 и раздел диска 0. Так как выше мы используем весь диск, указывать
раздел необязательно.

С каждым дисковым устройством связаны два файла: block device (находится в /dev/dsk),
который служит для доступа к диску на уровне файловой системы, и raw device (/dev/rdsk),
который используется в остальных случаях, например, командами fsck и format. Под
словом «устройство» может пониматься и раздел диска, то есть каждый раздел имеет свои
файлы устройств.

Чтобы узнать имена дисковых устройств, подсоединённых к системе, используйте команду $


format -e.

# format -e
Searching for disks...done

AVAILABLE DISK SELECTIONS:


0. c1t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
/pci@8,600000/SUNW,qlc@4/fp@0,0/ssd@w500000e0107369b1,0
1. c1t2d0 <NETAPP-X273_S15K3073F15-NA00 cyl 30625 alt 2 hd 8 sec 573>
/pci@8,600000/SUNW,qlc@4/fp@0,0/ssd@w21000011c64d3bbb,0
Specify disk (enter its number): ^C

Новая файловая система с именем tank может использовать столько места, сколько ей
необходимо, и автоматически монтируется в /tank.
# mkfile 100m /tank/foo
# df -h /tank
Filesystem size used avail capacity Mounted on
tank 80G 100M 80G 1% /tank.

Возможно, вы захотите создать дополнительные файловые системы в пуле. Следующий


пример показывает, как создать файловую систему под названием fs в пуле хранения с
именем tank.
# zfs create tank/fs

Новая файловая система, tank/fs, занимает столько места в пуле, сколько ей требуется, и
автоматически монтируется в /tank/fs.

# mkfile 100m /tank/fs/foo


# df -h /tank/fs
Filesystem size used avail capacity Mounted on
tank/fs 80G 100M 80G 1% /tank/fs

Создание пула ZFS


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

Следующие действия приведут к созданию пула ZFS:

33
Начало работы с ZFS Solaris11.ru
• Войдите в систему как root или пользователь с правами на администрирование ZFS
• Выберите имя пула
• Создайте пул
Например, для создания пула tank используйте
# zpool create tank mirror c1t0d0 c2t0d0

Если хотя бы одно из устройств содержит другую файловую систему или использовано каким-
либо ещё образом, пул не может быть создан.
• Посмотрите результат

Узнать о том, что пул был создан, можно с помощью команды zpool list.
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 80G 137K 80G 0% ONLINE -

Создание иерархии файловых систем


После создания пула хранения мы можем создать в нём иерархию файловых систем. ZFS
позволяет создавать произвольные иерархии файловых систем, где каждая файловая система
имеет лишь одного родителя. Корнем иерархии всегда является имя пула. ZFS поддерживает
наследование свойств, так что общие свойства могут быть легко заданы для целых деревьев
файловых систем.

Для создания файловой системы ZFS:


1/ Зайдите в систему как администратор или как пользователь с правами на
администрирование ZFS.

2/ Создайте желаемую иерархию. В этом примере мы создадим файловую систему, которая


будет играть роль контейнера для других файловых систем
# zfs create tank/home
Далее отдельные файловые системы будут сгруппирована в файловой системе home.

3/ Задайте свойства, которые будут унаследованы.


После того как иерархия создана, задайте свойства, которые будут общими для всех
пользователей:
# zfs set mountpoint=/export/zfs tank/home
# zfs set sharenfs=on tank/home
# zfs set compression=on tank/home
# zfs get compression tank/home
NAME PROPERTY VALUE SOURCE
tank/home compression on local

Эти свойства можно указать и при создании файловой системы, например:


# zfs create
-o mountpoint=/export/zfs \
-o sharenfs=on \
-o compression=on tank/home

4/ Создайте отдельные файловые системы


Заметьте, что эти файловые системы можно было создать и до указания свойств. Все свойства
можно динамически изменять во время работы.
# zfs create tank/home/bonwick
# zfs create tank/home/billm
34
Начало работы с ZFS Solaris11.ru

Созданные файловые системы наследуют свойства от своего предка, то есть они


автоматически монтируются в /export/zfs/user и расшарены. Вам больше не надо
редактировать файлы /etc/vfstab или /etc/dfs/dfstab.

5/ Задайте специфические свойства для каждой файловой системы


В этом примере мы установим квоту 10 ГБ для пользователя bonwick. Это свойство
ограничивает объём доступного пользователю пространства, в независимости от наличия
свободного места на диске.
# zfs set quota=10G tank/home/bonwick

6/ Посмотрите результат с помощью команды zfs list


# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 92.0K 67.0G 9.5K /tank
tank/home 24.0K 67.0G 8K /export/zfs
tank/home/billm 8K 67.0G 8K /export/zfs/billm
tank/home/bonwick 8K 10.0G 8K /
export/zfs/bonwick

Обратите внимание, что пользователь bonwick может использовать лишь 10 ГБ дискового


пространства, тогда как billm может использовать весь пул (67 ГБ).
Теперь, когда вы узнали базовые команды для создания и управления пулами и файловыми
системами ZFS, было бы интересно более подробно остановиться на различиях между ZFS и
другими файловыми системами.

Детализация ZFS
Исторически, файловые системы ограничивались одним устройством, поэтому и их размер
ограничивался размерами устройства. Создание традиционной файловой системы требовало
затрат времени. Создание менеджера томов несколько упростило эту задачу. Так как файловые
системы ZFS не привязаны к конкретным устройствам, они могут создаваться очень быстро,
наподобие директорий. Файловые системы ZFS автоматически увеличиваются в объёме в
пределах, ограниченных пулом хранения. Вместо создания одной файловой системы,
например /export/home, и подкаталогов для каждого пользователя, вы легко можете
создать отдельную файловую систему для каждого пользователя. Также ZFS даёт возможность
организовать иерархию файловых систем и управлять ими как единым целым засчёт
наследования свойств.

Учёт места в ZFS


ZFS основана на концепции пулов хранения. В отличие от типичных файловых систем,
ориентированных на конкретные устройства, файловые системы ZFS разделяют все доступные
устройства хранения данных. Таким образом, свободное пространство, показываемое утилитой
df, может изменяться даже если файловая система неактивна, так как другие файловые
системы потребляют или освобождают место. Максимальный объём файловой системы можно
ограничить квотами. Файловой системе может быть гарантировано определённое пространство
с помощью резервирования. Эта модель очень напоминает NFS, где несколько директорий
монтируются из одной файловой системы (например, /home).

35
Начало работы с ZFS Solaris11.ru
Все метаданные в ZFS выделяются динамически. Большинство других файловых систем
выделяют пространство под метаданные при создании. Это означает, что общее число файлов,
поддерживаемое файловой системой, заранее предопределено. Так как ZFS выделяет место для
метаданных по мере необходимости, они не требует начального выделения места, а количество
файлов ограничено только доступным пространством. вывод команды df -g для ZFS должен
пониматься не так, как для других файловых систем. Сообщаемое количество файлов является
приблизительным. ZFS является транзакционной файловой системой. Большинство операций
объединены в группы транзакций и совершаются асинхронно. До тех пор, пока все операции в
группе не завершены, транзакция имеет статус незавершённой. При сообщении свободного
места изменения, произошедшие засчёт незавершённых транзакций, не учитываются. Даже
после завершения всех операций, обновление информации происходит не моментально.

Монтирование файловых систем


ZFS спроектирована для упрощения администрирования. Например, раньше вам приходилось
редактировать файл /etc/vfstab каждый раз, когда добавлялась новая файловая система.
ZFS устраняет эту процедуру, монтирую и размонтирую файловые системы на основании
свойств, которые были указаны при создании.

36
Глава 11: Снимки и клоны ZFS

Из начала этой главы вы уже получили представление о снимках ZFS. В этом разделе мы
узнаем о нескольких командах для управления снимками и клонами.

Создание и удаление снимков


Снимки создаются при помощи команды zfs snapshot, которая в качестве единственного
аргумента принимает имя создаваемого снимка. Имя снимка формируется как
имя_файловой_системы@название_снимка

В следующем примере создаётся снимок файловой системы tank/home/ahrens с именем


friday.
# zfs snapshot tank/home/ahrens@friday

Вы можете создать снимки всех нижестоящих по иерархии файловых систем опцией -r.
Например:
# zfs snapshot -r tank/home@now
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
tank/home@now 0 - 29.5K -
tank/home/ahrens@now 0 - 2.15M -
tank/home/anne@now 0 - 1.89M -
tank/home/bob@now 0 - 1.89M -
tank/home/cindys@now 0 - 2.15M -

Снимки не имеют изменяемых параметров. Исходные параметры файловой системы в снимке


не могут быть изменены.
# zfs set compression=on tank/home/ahrens@tuesday
cannot set compression property for ’tank/home/ahrens@tuesday’: snapshot
properties cannot be modified

Снимки удаляются при помощи команды zfs destroy. Например:


# zfs destroy tank/home/ahrens@friday

Файловая система не может быть уничтожена, если существуют её снимки:


# zfs destroy tank/home/ahrens
cannot destroy ’tank/home/ahrens’: filesystem has children
use ’-r’ to destroy the following datasets:
tank/home/ahrens@tuesday
tank/home/ahrens@wednesday
tank/home/ahrens@thursday
Также, при наличии клонов снимка, их следует уничтожить прежде, чем будет удалён сам
снимок.

Переименование снимков
вы можете переименовать снимки, но они должны оставаться в тех же пуле и файловой
системе, из которых были созданы:
# zfs rename tank/home/cindys@083006 tank/home/cindys@today

Имеется укороченный вариант этой команды:


# zfs rename tank/home/cindys@083006 today
Глава 11: Снимки и клоны ZFS Solaris11.ru
Следующая операция переименования не поддерживается, так как имя целевого пула и
файловой системы отличаются от пула и файловой системы, в которых был создан снимок.
# zfs rename tank/home/cindys@today pool/home/cindys@saturday
cannot rename to ’pool/home/cindys@today’: snapshots must be part of same
dataset

Снимки можно переименовывать рекурсивно командой zfs rename -r:


# zfs list
NAME USED AVAIL REFER MOUNTPOINT
users 270K 16.5G 22K /users
users/home 76K 16.5G 22K /users/home
users/home@yest 0 - 22K -
users/home/markm 18K 16.5G 18K /users/home/markm
users/home/markm@yest 0 - 18K -
users/home/marks 18K 16.5G 18K /users/home/marks
users/home/marks@yest 0 - 18K -
users/home/neil 18K 16.5G 18K /users/home/neil
users/home/neil@yest 0 - 18K -
# zfs rename -r users/home@yest @2daysago
# zfs list -r users/home
NAME USED AVAIL REFER MOUNTPOINT
users/home 76K 16.5G 22K /users/home
users/home@2daysago 0 - 22K -
users/home/markm 18K 16.5G 18K /users/home/markm
users/home/markm@
2daysago 0 - 18K -
users/home/marks 18K 16.5G
18K /users/home/marks
users/home/marks@
2daysago 0 - 18K -
users/home/neil 18K 16.5G 18K /users/home/neil
users/home/neil@
2daysago 0 - 18K -

Отображение и доступ к снимкам ZFS


вы можете разрешить или запретить показ снимков в выводе команды zfs list с помощью
свойства listsnapshots. Эта опция включено по умолчанию. Если эта опция выключена,
то для отображения снимков надо набрать zfs list -t или включить опцию. Например:
# zpool get listsnapshots tank
NAME PROPERTY VALUE SOURCE
tank listsnapshots on default
# zpool set listsnapshots=off tank
# zpool get listsnapshots tank
NAME PROPERTY VALUE SOURCE
tank listsnapshots off local

Снимки файловых систем доступны в каталоге .zfs/snapshot в корне соответствующей


файловой системы. Например, если tank/home/ahrens смонтирована в /home/ahrens,
то снимок tank/home/ahrens@thursday находится в каталоге /home/ahrens/.zfs/
snapshot/thursday.
# ls /tank/home/ahrens/.zfs/snapshot
tuesday wednesday thursday
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
pool/home/anne@monday 0 - 780K -

38
Глава 11: Снимки и клоны ZFS Solaris11.ru
pool/home/bob@monday 0 - 1.01M -
tank/home/ahrens@tuesday 8.50K - 780K -
tank/home/ahrens@wednesday 8.50K - 1.01M -
tank/home/ahrens@thursday 0 - 1.77M -
tank/home/cindys@today 8.50K - 524K -

Вы можете вывести список всех снимков, созданных для конкретной файловой системой:
# zfs list -r -t snapshot -o name,creation tank/home
NAME CREATION
tank/home/ahrens@tuesday Mon Aug 31 11:03 2009
tank/home/ahrens@wednesday Mon Aug 31 11:03 2009
tank/home/ahrens@thursday Mon Aug 31 11:03 2009
tank/home/cindys@now Mon Aug 31 11:04 2009

Учёт места в снимках


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

Удаление снимка может привести к увеличению объёма уникальных данных в других снимках.

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


использованное пространство в снимках.
$ zfs list -o space
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
rpool 60.6G 6.37G 0 97K 0 6.37G
rpool/ROOT 60.6G 4.87G 0 21K 0 4.87G
rpool/ROOT/zfs1009BE 60.6G 4.87G 0 4.87G 0 0
rpool/dump 60.6G 1.50G 0 1.50G 0 0
rpool/swap 60.6G 16K 0 16K 0 0

Восстановление файловых систем


Команда zfs rollback используется для отмены всех изменений, произошедших со
времени определённого снимка. Файловая система возвращается в состояние, в котором она
находилась во время взятия снимка. По умолчанию, команда не может возвратить систему в
состояние, ранее чем последний снимок. Для возвращения в состояния более раннего снимка
необходимо удалить все промежуточные снимки. Это делается добавлением опции -r. При
наличии клонов промежуточных снимков используйте опцию -R для удаления снимков вместе
с клонами.

Файловая система, подвергающаяся восстановлению, должна быть размонтирована и


смонтирована заново. Если она не может быть размонтирована, восстановление не может быть
осуществлено. Опция -f вынуждает размонтирование файловой системы.

В следующем примере файловая система tank/home/ahrens будет возвращена в


состояние, соответствующее снимку tuesday:
# zfs rollback tank/home/ahrens@tuesday
cannot rollback to ’tank/home/ahrens@tuesday’: more recent snapshots exist use
’-r’ to force deletion of the following snapshots:
tank/home/ahrens@wednesday
tank/home/ahrens@thursday
39
Глава 11: Снимки и клоны ZFS Solaris11.ru
# zfs rollback -r tank/home/ahrens@tuesday

Эта команда удаляет снимки wednesday и thursday для того, чтобы возвратиться в
состояние tuesday.
# zfs list -r -t snapshot -o name,creation tank/home/ahrens
NAME CREATION
tank/home/ahrens@tuesday Wed Aug 27 16:35 2008

Обзор клонов ZFS


Клон — это доступный для записи том или файловая система, чьи начальные данные
совпадают с данными файловой системы, из которой он был создан. Как и в случае снимков,
создание клонов происходит практически моментально; изначально они не занимают места на
диске. вы можете сделать снимок клона.

Клоны могут быть созданы только из снимков. Когда снимок клонируется, создаётся неявная
зависимость между клоном и снимком. Хотя клон создаётся в другой иерархической
структуре, нельзя уничтожить изначальный снимок, не удалив прежде всех его клонов. Клоны
не наследуют свойства наборов данных, из которых были созданы. Для просмотра и изменения
свойств клонов используются команды zfs get и zfs set.

Создание и удаление клонов


Для создания клона используйте команду zfs clone с указанием снимка, из которого
создаётся клон и имя новой файловой системы или тома. Новая файловая система или том
могут быть расположены где угодно в иерархии ZFS. Тип нового набора данных (например,
файловая система или том) остаётся тем же, что и тип снимка, из которого он создан. вы не
сможете создать клон файловой системы в пуле, отличном от исходного пула.

В следующем примере создаётся клон с именем tank/home/ahrens/bug123, имеющий те


же данные, что и снимок tank/ws/gate@yesterday.
# zfs snapshot tank/ws/gate@yesterday
# zfs clone tank/ws/gate@yesterday tank/home/ahrens/bug123

В другом примере, для временного пользователя создаётся клонированный проект из снимка


projects/newproject@today под именем projects/teamA/tempuser. Затем
устанавливаются свойства клонированого проекта.
# zfs snapshot projects/newproject@today
# zfs clone projects/newproject@today projects/teamA/tempuser
# zfs set sharenfs=on projects/teamA/tempuser
# zfs set quota=5G projects/teamA/tempuser

Клоны удаляются с помощью команды zfs destroy.


# zfs destroy tank/home/ahrens/bug123

Замена файловой системы ZFS на клон


Используйте команду zfs promote для замены активной файловой системы ZFS на клон
этой файловой системы. Эта особенность даёт возможность клонировать и заменять файловые
системы, так что начальная файловая система становится клоном. Также она позволяет
40
Глава 11: Снимки и клоны ZFS Solaris11.ru
уничтожать файловую систему, из которой был создан клон.

В следующем примере файловая система tank/test/productA клонируется и затем клон,


tank/test/produstAbeta, становится файловой системой tank/test/productA.
# zfs create tank/test
# zfs create tank/test/productA
# zfs snapshot tank/test/productA@today
# zfs clone tank/test/productA@today tank/test/productAbeta
# zfs list -r tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 314K 8.24G 25.5K /tank/test
tank/test/productA 288K 8.24G 288K /tank/test/productA
tank/test/productA@today 0 - 288K -
tank/test/productAbeta 0 8.24G 288K /tank/test/productAbeta
# zfs promote tank/test/productAbeta
# zfs list -r tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 316K 8.24G 27.5K /tank/test
tank/test/productA 0 8.24G 288K /tank/test/productA
tank/test/productAbeta 288K 8.24G 288K /tank/test/productAbeta
tank/test/productAbeta@today 0 - 288K -

В выводе zfs list вы можете видеть, что файловая система produstA была замещена на
productAbeta.

После этого можно переименовать файловые системы, например:


# zfs rename tank/test/productA tank/test/productAlegacy
# zfs rename tank/test/productAbeta tank/test/productA
# zfs list -r tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 316K 8.24G 27.5K /tank/test
tank/test/productA 288K 8.24G 288K /tank/test/productA
tank/test/productA@today 0 - 288K -
tank/test/productAlegacy0 8.24G 288K /tank/
test/productAlegacy

Теперь вы можете удалить исходную файловую систему:


# zfs destroy tank/test/productAlegacy

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

41
Глава 12: DTrace

Как отличить профессионального программиста от любителя? Хороший программист создаёт


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

Есть и другой аспект проблемы. Представьте себе вэб-приложение, которое используют


тысячи пользователей (например, Gmail или Facebook). Если в приложении обнаружена
ошибка, вы не сможете изменять код во время его работы. В большинстве случаев, ошибка
воспроизводится на машине разработчика, но это может потребовать дополнительных усилий.
Поэтому системные администраторы и разработчики программного обеспечения нуждаются в
инструменте, который дал бы им заглянуть внутрь приложения во время его работы, не снижая
его производительность и не нарушая безопасность.

DTrace позволяет устранить эти трудности. Это инструмент, который разработчики могут
использовать для оптимизации и отладки программ, а системные администраторы могут
использовать его для выявления ошибок в реальных условиях. В этой главе мы сделаем
подробный обзор функциональности DTrace. Для более глубокого ознакомления рекомендуем
Solaris Dynamic Tracing Guide.

Обзор DTrace
DTrace — это всеобъемлющее средство динамической трассировки, встроенное в Solaris OS,
позволяющее администраторам и разработчикам изучать поведение пользовательских
программ и самой операционной системы. С DTrace вы сможете исследовать систему, понять,
как она работает, найти причины снижения производительности и некорректного поведения.
DTrace безопасен при использовании в рабочей среде и не требует перезагрузки приложений.

DTrace динамически изменяет ядро операционной системы и пользовательские процессы для


сбора данных, называемых датчиками.

вы можете пользоваться возможностями DTrace с помощью команды dtrace или скриптов


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

Введение в скрипты D
DTrace работает по модели событие/обратный вызов: вы подписыватесь на событие и
реализуете обратный вызов, который исполняется при совершении события. В качестве
примеров можно указать исполнение определённой функции, доступ к файлу, выполнение
запроса SQL или сборку мусора в JVM (Java Virtual Machine). Примерами информации,
получаемой в качестве ответа, являются аргументы функции, время выполнения функции,
ответы SQL. Описания событий в DTrace называется датчиком (probe), при возникновении
события происходит срабатывание датчика (probe firing), обратный вызов называется
Глава 12: DTrace Solaris11.ru
действием (action). Предикаты используются для ограничения срабатываемых датчиков.
Предикаты являются утверждениями, которые обрабатывают логические выражения. Действие
происходит только если значение логического выражения верно. Скрипт на языке D состоит из
описания датчика, предиката и действий:
probe description
/predicate/
{
actions
}

При исполнении скрипта D включаются описанные датчики. Действия совершаются, когда


срабатывают датчики значение предиката верно.

Рассмотрим следующий простой скрипт:


syscall::write:entry
/execname == "bash"/
{
printf("bash with pid %d called write \
system call\n",pid);
}

Здесь описанием датчика является syscall::write:entry. Это означает, что датчик


сработает при системном вызове write.

Предикатом является /execname == "bash"/. Скрипт проверяет, является ли


вызывающее приложение оболочкой bash. Действие printf совершается каждый раз, когда
bash делает системный вызов write.

Предикаты и действия указывать необязательно.


• Если отсутствует предикат, то действие выполняется всегда;
• Если не указано действия, то выводится имя сработавшего датчика.

В следующем скрипте отсутствует предикат, поэтому действие всегда выполняется. Этот


скрипт выводит все успешно начатые процессы в системе.
proc:::exec-success
{
trace(execname)
}

Следующий скрипт немного сложнее. Он показывает все открытые файлы в системе.


syscall::open:entry
{
printf("%s opened %s\n",execname,copyinstr(arg0))
}

Описание датчиков
Датчик состоит из четырёх полей, разделённых двоеточием:
провайдер:модуль:функция:имя

Провайдер — Обозначает уровень, на котором производится контроль. Например, провайдер


syscall используется для отслеживания системных вызовов, а провайдер io - для
мониторинга операций с диском.
43
Глава 12: DTrace Solaris11.ru
Модуль — Указывает модуль, в котором производятся измерения.
Функция — Описывает функцию, в которой производятся измерения.
Имя — Обычно обозначает местонахождение функции. Например, используйте имя entry для
контроля входа в функцию.

Обязательным является только указание провайдера.

Можно использовать также символы-джокеры * и ?. Отсутствие значения в поле эквивалентно


символу *. Приведём несколько примеров.

Описание датчика Пояснение


syscall::open:entry Вход в системный вызов open()
syscall::open*:entry Вход в любой системный вызов, начинающийся с "open",
например, open() или open64()
syscall:::entry Вход в любой системный вызов
syscall::: Все датчики, предоставляемые провайдером syscall
pid1234:libc:malloc:entry вызов функции malloc() из библиотеки libc процессом с
PID 1234
pid1234::*open*:entry вызов любой функции, имеющей "open" в своём имени,
процессом с PID 1234
pid1234:::entry вызов любой функции процессом с PID 1234

Предикат
Предикаты являются логическими выражениями в языке D. вы можете создать предикат из
множества встроенных переменных или аргументов датчиков. Ниже приведены некоторые
примеры. Действие происходит тогда, когда значение предиката верно.

Предикат Пояснение
cpu == 0 Верно, если датчик срабатывает на процессоре cpu0
pid == 1029 Верно, если PID процесса, вызвавшего срабатывание датчика, равен
1029
uid == 123 Верно, если UID процесса, вызвавшего срабатывание датчика, равен
123
execname == "mysql" Верно, если срабатывание датчика вызвал процесс с именем mysql
execname != "sched" Верно, если процесс не является планировщиком (sched)
ppid !=0 && arg0 == 0 Верно, если PPID (PID родительского процесса) не 0 и первый
аргумент равен 0

Действие
Секция, описывающая действие, состоит из одной или нескольких команд, разделённых
44
Глава 12: DTrace Solaris11.ru
точкой с запятой (;). Ниже приведены примеры. Действие происходит только если значение
предиката верно.

Действие Пояснение
printf() Выводит что-либо наподобие функции printf() в Си
ustack() Печатает пользовательский стек
trace() Выводит значение данной переменной

Разработка скриптов D
Следующая команда dtrace выведет все функции, вызываемые процессом 1234. Опция -n
указывает имя датчика.
# dtrace -n pid1234:::entry

Следующий пример показывает, как использовать команду dtrace в скрипте. Опция -s означает
необходимость скомпилировать программу.
#!/usr/sbin/dtrace -s
/* Предыдущая строка означает, что последующий скрипт
следует интерпретировать с помощью dtrace
D использует Си-подобные коментарии.
*/
pid1234:::entry
{}

Замените 1234 в вышеприведённых команде или скрипте на PID процесса, который вы хотите
изучить. Не забудьте сделать скриптовый файл исполняемым. Используйте Ctrl-C для
возвращения из скрипта.

Вы должны будете увидеть примерно такой вывод:


# dtrace -n pid23:::entry
dtrace: description ’pid23:::entry’ matched 7954 probes
CPU ID FUNCTION:NAME
1 105673 set_parking_flag:entry
1 105912 queue_lock:entry
^C
#

На системах, отличных от Solaris/OpenSolaris, вы должны быть суперпользователем (root),


чтобы выполнять команду dtrace или запускать скрипты D. В Solaris вы должны быть
суперпользователем или иметь права для выполнения DTrace. вы должны быть
суперпользователем, чтобы изучать процессы, принадлежащие суперпользователю. Для
предоставления прав на исполнение DTrace другим пользователям станьте суперпользователем
и используйте команду usermod или отредактируйте файл /etc/user_attr напрямую.
Достаточно предоставить только привилегии dtrace_user и dtrace_proc.

Чтобы упростить повторное использование скрипта, приведённого выше, измените скрипт так,
чтобы он принимал идентификатор процесса в качестве параметра.
#!/usr/sbin/dtrace -s
pid$1:::entry
{}

45
Глава 12: DTrace Solaris11.ru
Этот скрипт должен вызываться с одним и только одним аргументом. В противном случае
произойдёт ошибка. DTrace - это динамический инструмент: он показывает события по мере
того, как они происходят.

Использование групповых функций


Если ли вы указали работающий процесс, вероятно, вы получили на выходе большой объём
информации. Для обработки выходного потока в D предусмотрены групповые функции
(aggregate functions). Они сохраняют выходную информацию в виде таблиц в памяти и выводят
отчёт. Групповые функции имеют вид:
@name[table index(es)] =aggregate_function()

Вот пример групповой конструкции:


@count_table[probefunc] = count() ;

Добавьте её в действия в скрипте


#!/usr/sbin/dtrace -s
pid$1:::entry
{
@count_table[probefunc] = count() ;
}

Когда вы запустите новую версию скрипта, вы получите примерно такой вывод:


# ./myDscript.d 23
dtrace: script ’./myDscript’ matched 7954 probes
^C
__clock_gettime 5
ioctl 20
mutex_lock 767
sigon 1554

Этот скрипт собирает информацию в таблицу до тех пор, пока вы не введёте Ctrl-C. После
этого DTrace выведет данные, собранные во время исполнения. Таблица показывает каждую
функцию только один раз, число указывает количество её вызовов, начиная с самого
большого. Встроенная переменная probefunc хранит имя вызываемой функции. Групповая
функция count() подсчитывает число вызовов каждой функции. Датчики автоматически
отключаются при остановке скрипта. Также DTrace автоматически освобождает затраченную
память.

В следующем скрипте в таблице выводятся имя библиотеки (probemod), имя функции


(probefunc) и число вызовов.
#!/usr/sbin/dtrace -s
pid$1:::entry
{
@count_table[probemod,probefunc]=count();
}

После исполнения:
# ./myDscript.d 23
dtrace: script ’./myDscript’ matched 7954 probes
^C
libc.so.1 __clock_gettime 5
libc.so.1 ioctl 20
libc.so.1 mutex_lock 767
46
Глава 12: DTrace Solaris11.ru
libc.so.1 sigon 1554

Подсчёт времени, проведённого в функции


Для определения времени, проведённого в каждой функции, используйте встроенную
переменную timestamp. Создайте датчики определения времени на входе и выходе из функции
и подсчитайте разницу между временами. Время выдаётся в наносекундах.
#!/usr/sbin/dtrace -s
pid$1:::entry
{
ts[probefunc] = timestamp;
}
pid$1:::return
{
@func_time[probefunc] = sum(timestamp - ts[probefunc]);
ts[probefunc] = 0;
}

Обратите внимание на то, что ts[] является массивом, который D автоматически объявляет и
инициализирует. Присваивание 0 даёт dtrace указание очистить память, занятую массивом.
Скрипт выводит имя функции и общее время, затраченное на её выполнение за время работы
скрипта.
# ./myDscript.d 23
dtrace: script ’./myDscript’ matched 15887 probes
^C
enqueue 2952
mutex_lock 3151262
cond_timedwait 31282360711332

Игнорирование уже работающих функций


Строка cond_timedwait имеет очень большое временное число. Это произошло из-за того,
что функция cond_timedwait() начала выполняться до начала работы скрипта. Для
устранения некорректного поведения используйте предикат в секции return. Если во время
работы скрипта не произошло входа в функцию, значение /ts[probefunc] != 0/ будет
ложным, и действие не будет совершено.
pid$1:::return
/ts[probefunc] != 0/
{
@func_time[probefunc] = sum(timestamp \
- ts[probefunc]);
ts[probefunc] = 0;
}
Как и в Си, часть != 0 можно не использовать, а писать просто /ts[probefunc]/.

Работа с многопоточными приложениями


Два потока могли выполнить одну и ту же функцию и создать эффект гонки (race condition).
Для обработки такой ситуации необходимо создать копию ts[] для каждого потока. DTrace
решает это с помощью переменной self. Всё, что вы добавите к переменной self, будет
относится к одному потоку. Следующий скрипт игнорирует запущенные функции и пригоден
для многопоточных приложений.
47
Глава 12: DTrace Solaris11.ru
#!/usr/sbin/dtrace -s
pid$1:::entry
{
self->ts[probefunc] = timestamp;
}
pid$1:::return
/self->ts[probefunc]/
{
@func_time[probefunc] = sum(timestamp - self->ts[probefunc]);
self->ts[probefunc] = 0;
}

Сбор информации о приложении


Вместо указания идентификатора процесса вы можете указать команду. В этом случае DTrace
соберёт данные о процессе, запущенном этой командой, и всех процессах-потомках. DTrace
выведет собранные данные после завершения исполнения команды. Что отследить команду,
используйте опцию -c. В скриптах используйте макрос $target для получения
идентификатора процесса из аргумента командной строки.

Следующий скрипт подсчитывает число вызовов функций из библиотеки libc определённой


командой:
#!/usr/sbin/dtrace -s
pid$target:libc::entry
{
@[probefunc]=count();
}

Используйте опцию -c для обозначения целевой команды:


# ./myDscript.d -c "man dtrace"

В этом примере сначала будет показана страница руководства dtrace. Когда вы нажмёте q, то
увидите похожий вывод:
dtrace: script ’./myDscript.d’ matched 2914 probes
dtrace: pid 1111 has exited
___lwp_private 1
strncpy 125
strlen 7740

48
Глава 13: DTrace для разработчиков

В этом разделе обсуждаются провайдеры, собирающиеся данные, которые будут особенно


интересны разработчикам приложений: syscall, proc, pid, sdt, vminfo. Используйте эти
провайдеры, чтобы наблюдать за работающими процессами, созданием и завершением
процессов, созданием и завершением потоков, обработкой сигналов.

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

Провайдер syscall
Провайдер syscall сообщает о сделанных системных вызовах. Следующий скрипт выводит
стек вызовов write().
#!/usr/sbin/dtrace -s
syscall::write:entry
{
@[ustack()]=count();
}

Провайдер sysinfo
Провайдер sysinfo собирает данные статистики ядра, которые классифицируются как sys.
Эти данные могут использоваться для анализа утилитами, например, mpstat. Следующий
скрипт подсчитывает количество запусков процессов на процессоре. Событие
sysinfo:::pswitch происходит каждый раз, когда запускается процесс.
Введите Ctrl-C для вывода результатов работы скрипта.
#!/usr/sbin/dtrace -s
sysinfo:::pswitch
{
@[execname] = count();
}

Провайдер proc
Провайдер proc сообщает информацию о процессах. Следующий скрипт выводит имя
процесса, PID и UID, когда в системе запускается новый процесс. Событие proc:::exec-
success происходит каждый раз, когда новый процесс успешно запускается.
Опция -q подавляет вывод заголовков колонок и количества сработавших датчиков.
#!/usr/sbin/dtrace -qs
proc:::exec-success
{
printf("%s(pid=%d) started by uid \
- %d\n",execname, pid, uid);
}
Глава 13: DTrace для разработчиков Solaris11.ru
DTrace для Web 2.0
Современная среда разработки вэб-приложений становится всё более сложной. Она включает
JavaScript в вэб-браузере, несколько слоёв API (например, OpenSocial), сервер приложений,
вэб-сервер, базы данных, нативный код на Java или Си/Си++, и операционную систему. Один
клик на вэб-странице вызовет исполнение кода на нескольких слоях. Эксперты в одной
области могут не являться специалистами в другой, что делает настройку производительности
ещё более трудной задачей. На каждом уровне существуют свои средства отладки.
Администраторы баз данных имеют инструменты с графическим и текстовым интерфейсами,
которые позволяют им видеть каждую деталь в базе. Языковые отладчики, такие как gdb или
dbx, помогают повысить производительность приложений. Такие утилиты как JProbe, JMeter и
VisualVM полезны при отладке кода на Java. Такие средства как vmstat, iostat, mpstat и
truss позволяют контролировать работу операционной системы.

Все эти инструменты крайне важны для оптимизации приложения на каждом уровне. Однако
они не дают возможность наблюдать систему целиком и взаимодействие между
компонентами. С их помощью вы не сможете, например, понять, какие запросы выполняются к
БД при нажатии кнопки в браузере. Также некоторые из утилит невозможно использовать в
реально работающем приложении. Например, truss слишком замедляет работу приложений.
Часто разработчики создают дополнительный код для отладки, однако он тоже снижает
производительность. Поэтому этот код можно увидеть только в отладочных версиях программ.

DTrace решает эти трудности с помощью динамических инструментов. Хотели бы вы легко


отлаживать и оптимизировать производительность вэб-приложений? Что, если бы вы могли
вставлять код в работающее приложение и собирать информацию в этих точках? Что, если бы
вы могли динамически включать и выключать эти средства? Что, если бы вы могли
использовать одинаковые инструменты на всех уровнях приложения? Что, если бы эти
инструменты поддерживали такие популярные языки как Java, Си, Си++, PHP, Pythin, Ruby,
JavaScript? Все эти возможности - как раз то, что предлагает DTrace!

DTrace позволяет контролировать каждый уровень в инфраструктуре приложения. Он собирает


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

Наблюдение за несколькими слоями


Скрипты D могут охватывать несколько слоёв. Следующий скрипт сообщает, сколько времени
проведено на разных уровнях в комплекса приложений AMP (Apache/MySQL/PHP). На выходе
будет показано время, затраченное на Apache, Java, MySQL, браузер и операционную систему.
Этот скрипт подобен утилите top для AMP.
#!/usr/sbin/dtrace -qs
BEGIN
{
total=mysqlcnt=httpcnt=phpcnt=javacnt=ffxcnt=othercnt=0;
printf("%10s %10s %10s %10s %10s %10s\n","% MYSQL","% APACHE",\
"% FIREFOX","% PHP","% Java","% OTHER");
}
php*:::request-startup
{

50
Глава 13: DTrace для разработчиков Solaris11.ru
inphp[pid,tid]=1;
}
php*:::request-shutdown
{
inphp[pid,tid]=0;
}
profile-1001
{
total++;
(execname=="mysqld")?mysqlcnt++:\
(execname=="httpd")?(inphp[pid,tid]==1?phpcnt++:httpcnt++):\
(execname=="java")?javacnt++:\
(execname=="firefox-bin")?ffxcnt++:othercnt++;
}
tick-30s
{
printf("%10s %10s %10s %10s %10s %10s\n","% MYSQL","% APACHE",\
"% FIREFOX","% PHP","% Java","% OTHER");
}
tick-2s
{
printf("%10d %10d %10d %10d %10d %10d\n",mysqlcnt*100/total,\
httpcnt*100/total,ffxcnt*100/total, phpcnt*100/total,\
javacnt*100/total,othercnt*100/total);
total=mysqlcnt=httpcnt=phpcnt=ffxcnt=javacnt=othercnt=0;
}

Наблюдение за одним приложением


В предыдущем примере мы увидели, как с помощью DTrace контролировать несколько
уровней приложения. Остальные примеры в этом разделе покажут, как использовать DTrace
для наблюдения за одним конкретным приложением. Имея некоторое представление о
функционировании приложения, вы сможете разработать скрипт D, который выдаст важную
информацию о работающем приложении.

Наблюдение за MySQL
Рассмотрим в качестве примера СУБД MySQL. Эта база имеет открытый код, поэтому не
составляет труда узнать, что функция, которая вызывается при исполнении запроса SQL,
называется dispatch_command(). Также просто можно узнать, что запрос SQL передаётся
в качестве строки в третьем аргументе. Располагая лишь этими знаниями, мы можем написать
простой скрипт D, который будет выводить строку запроса SQL во время их исполнения.
#!/usr/sbin/dtrace -qs
#pragma D option strsize=1024
pid$1::*dispatch_command*:entry
{
printf("%d::%s\n",tid,copyinstr(arg2));
}

Опция strsize используется, чтобы увеличить длину хранимых строк в D для обработки
длинных запросов SQL.

51
Глава 13: DTrace для разработчиков Solaris11.ru
Заключение
Как видите, DTrace поднимает разработку приложений на принципиально новый уровень! Мы
рекомендуем вам потренироваться в написании собственных скриптов.

52
Приложение: Полезные ссылки

Официальные страницы
• http://www.opensolaris.com
• http://www.opensolaris.org

На русском
• Документация на русском
http://dlc.sun.com/osol/g11n/downloads/docs/current
• Начало работы с OpenSolaris 2009.06
http://dlc.sun.com/osol/g11n/content/2009.06/getstart/ru/solarisinstall.html
• http://www.sunhelp.ru
• http://www.opennet.ru/mp/solaris
• http://solaris10.ru

На английском
• BigAdmin:
http://www.sun.com/bigadmin/home/index.jsp
• Solaris на x86:
http://solaris-x86.org
• http://www.sunhelp.org
• http://www.planetsolaris.org
• http://www.solarisinternals.com
• http://solaris.reys.net
• http://sun.systemnews.com

Книги
• Операционная система Solaris / Ф.И. Торчинский, Е.С. Ильин - 2-е изд., испр. - М.:
Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2009.
• «Fast Track to OpenSolaris»
http://www.scribd.com/doc/26659478/Fast-Track-to-OpenSolaris

Для разработчиков
• Тестовые сборки
http://genunix.org
• Исходный код
http://src.opensolaris.org/source

Дистрибутивы на основе OpenSolaris


• BeleniX (http://www.belenix.org)
• NexentaOS (http://www.nexenta.org)
• SchilliX (http://schillix.berlios.de)
• MilaX (http://www.milax.org)
Приложение: Полезные ссылки Solaris11.ru
• MarTux (http://www.martux.org)
• StormOS (http://stormos.org)

OpenSolaris на альтернативных платформах


• PowerPC (http://hub.opensolaris.org/bin/view/Project+ppc-dev/WebHome)
• System z (http://hub.opensolaris.org/bin/view/Project+systemz/WebHome)
• ARM (http://hub.opensolaris.org/bin/view/Project+osarm/WebHome)
• MIPS (http://hub.opensolaris.org/bin/view/Project+mips/WebHome)

Архитектура SPARC
• http://www.opensparc.net
• http://sparc.org

Разное
• Сообщества в ЖЖ
http://community.livejournal.com/ru_opensolaris
http://community.livejournal.com/ru_solaris
• Группа Вконтакте
http://vkontakte.ru/club6149433
• Группа на OSUM:
http://osum.sun.com/group/osumopensolarisgroup
• Группа на Facebook
http://www.facebook.com

54
Послесловие переводчика/автора

Это руководство изначально задумывалось как перевод английского книги "Fast Track to
OpenSolaris". Во время перевода я осознал, что могу сам дописать некоторые вещи. С другой
стороны, в исходной книге затрагивались темы, которые показались мне явно лишними для
человека, впервые столкнувшегося с операционной системой OpenSolaris.

Я надеюсь, что данное руководство окажется полезным для начинающих и продолжающих


изучать OpenSolaris/Solaris.

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


рассмотрены сборка системы из исходников, портирование приложений и разработка в
OpenSolaris.

Глеб Ситников