Книга: Linux и все, все, все... Статьи и колонки в LinuxFormat, 2006-2013

Управление rpm-пакетами: нынче не то, что давеча

LinuxFormat, #125 (декабрь 2009)

Многие, чьё знакомство с Red Hat и его клонами пришлось на 90-е годы, надолго сохранили предубеждение и против формата их пакетов, и против утилиты управления оными. Конечно, дать команду rpm -ihv – проще, нежели собрать нужный пакет из исходников. Однако, в сравнении с портами FreeBSD, с одной стороны, и с Debian'овским APT'ом – с другой, она приобретала вид вполне бледный.

Но всё течёт, всё меняется – и ныне rpm-based дистрибутивы располагают развитыми системами пакетного менеджмента, работающими как в текстовом, так и в графическом режиме. В настоящей заметке мы остановимся на двух из них – yum и PackageKit на примере использования в дистрибутиве Fedora.

Незнаменитый yum

Yum – система управления rpm-пакетами и их репозиториями, предлагающая автоматическую установку, обновление и удаление пакетов и пакетных групп с автоматическим контролем зависимостей. По механизму действия и функциональности она сходна с системой APT, разработанной для Debian. Однако если последний получил в последние годы широкую известность – не в последнюю очередь благодаря популярности Ubuntu, а также тому, что усилиями сначала Connectiva, а затем Altlinux широко распространился за пределами родного дистрибутива, – то yum остаётся малоизвестным. Однако yum, с одной стороны, по своим возможностям управления rpm-пакетами ничуть не уступает утилитам семейства apt для deb-пакетов, а с другой, используется достаточно широко: эта система принята в качестве основной в Fedora, RHEL и их прямых и косвенных потомках.

Аббревиатура yum интерпретируется как Yellow dog Updater, Modified, то есть Обновитель Yellow dog Модифицированный. Однако его связь с одноимённым дистрибутивом – портом Red Hat на архитектуру Power, не совсем прямая. Его пакетный менеджер, именовавшийся YUP, послужил основой для Сета Видала (Seth Vidal), при написании yum для дистрибутива Red Hat. Символично и дословное его значение (yum – по английски конфетка) – его можно трактовать так, что эта система в состоянии сделать конфетку даже из такого… не самого приятного продукта, как пакеты в формате RPM. Yum быстро получил признание среди ряда клонов Red Hat, в частности, был принят в качестве штатного менеджера пакетов в ASPLinux. Однако в самом Red Hat он долго конкурировал с apt-rpm, и развитие yum’а одно время только силами команды ASPLinux и осуществлялось. Однако в конце концов он утвердился в RHEL и его клонах (CentOS, Scientific Linux), в Fedora и в Yellow Dog.

Система yum включает в себя собственно одноимённую утилиту, набор дополнительных утилит (yum-utils) и многочисленные плагины, в виде самостоятельных пакетов расширяющие функциональность главной программы.

Запускается yum одноимённой командой, требующей указания субкоманды (возможно, с опциями последней), и, в ряде случаев, аргументов в виде имени пакета или группы пакетов, что в общей форме выглядит так:

$ yum subcommand [arguments] —[options]

Команда yum без указания субкоманды выведёт краткую справку касаемо последних и их опций. Аналогичный результат будет получен посредством субкоманды

$ yum help

А указание имени субкоманды в качестве аргумента, например, так

$ yum help install

выведет краткие сведения о её назначении.

Субкоманды yum’а определяют одно из действий, которое команда должна выполнить – установку или удаление пакета, вывод информации о нём, поиск пакетов и так далее. Обычно назначение субкоманды легко угадывается из её названия и (или) краткой характеристики в выводе help’а.

Все субкоманды yum можно разделить на две группы. Первая связана с поиском пакетов и получением информации о них, вторая – с манипуляциями пакетами и группами. В составы первой группы наиболее употребимы:

   • search [string] – поиск пакета по имени или его фрагменту;

   • list – вывод списка пакетов, всех (all или без указания фильтра), установленных (installed) или доступных (available);

   • info pkgname – вывод полной информации о пакете.

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

   • install pkgname1 ... pkgname# – установка из репозиториев единичного пакета или нескольких пакетов, имена которых даны (в краткой форме) в качестве аргумента, вместе со всеми их зависимостями;

   • localinstall path2/fullname.rpm – установка пакета из локально хранящегося файла; зависимости его извлекаются из репозиториев, если таковые доступны;

   • update [pkgname] – обновление пакета, указанного в качестве аргумента; в отсутствие аргумента выполняется тотальное обновление системы, аналогично сумме apt-get update и apt-get upgrade;

   • erase pkgname – удаление пакета вместе со всем, что от него зависит; пакеты, от которых зависит удаляемый, остаются в неприкосновенности, даже если они никем не используются.

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


Рис. 1. Yum с его интерактивной оболочкой

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

$ man (8) yum

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

$ man yum-utils

Важнейшей из этих команд является package-cleanup, предназначенная для получения сведений о непорядках в локальной базе данных пакетов и их устранения. Она имеет несколько опций. Например,

$ package-cleanup —problems

выведет список нарушенных зависимостей, а с помощью команды

$ package-cleanup —leaves

можно вывести список пакетов, от которых не зависят никакие другие компоненты.

Плагины, в отличие от утилит, не запускаются как самостоятельные команды, а встраиваются по умолчанию в команду yum, добавляя ей новые функции. По умолчанию в RFRemix устанавливаются следующие плагины:

   • fastestmirror – проверка скорости доступа к зеркалам репозитория и выбор самого быстрого из них, выполняется при каждом запуске команды yum;

   • presto – при обновлении пакетов скачивает из репозиториев только дельты изменений (deltarpms), минимизируя таким образом трафик;

   • refresh-packagekit – обеспечивает обновление системы PackageKit, о которой будет говориться в следующей заметке.

Эффективное использование yum требует некоторых мероприятий по настройке, включающих:

   • настройку собственно yum;

   • подключение и настройку плагинов;

   • подключение дополнительных репозиториев.

За настройки собственно yum отвечает файл /etc/yum.conf – он содержит общие параметры для этой утилиты в формате:

название=значение

Значение может быть булевым (0 – запрещено, 1 – разрешено), численным – от 1 и до... разумного предела (значение 0 равносильно отключению) или символьным – например, путь к каталогу или список пакетов; в последнем случае значения разделяются пробелами. По умолчанию yum.conf выглядит так:

   • cachedir=/var/cache/yum – каталог для кэширования метаданных репозиториев и пакетов, скачиваемых в ходе установки ;

   • keepcache=0 – определяет, сохранять ли скачанные пакеты в локальном кэше или удалять их после успешной установки;

   • debuglevel=2 – уровень отладочных сообщений;

   • logfile=/var/log/yum.log – каталог для файлов протоколирования действий yum;

   • exactarch=1 – значение по умолчанию предписывает устанавливать пакеты, точно соответствующие архитектуре;

   • obsoletes=1 – определяет логику замены «устаревших» пакетов при тотальном обновлении;

   • gpgcheck=1 – включение этой опции обязывает к проверке подписей при установке;

   • plugins=1 – использовать или нет плагины к yum’у;

   • installonly_limit=3 – максимальное количество пакетов, запрещённых к обновлению (можно только устанавливать параллельно более новую версию).

Кроме перечисленных, существует ещё немало параметров настройки yum. Так, очевидно, что опция installonly_limit имеет смысл только при наличии списка запрещённых к обновлению пакетов. Он задаётся параметром

installonlypkgs=pkgname1 pkgname2 ... pkgname#

Есть возможность и задать список пакетов, для которых запрещено как обновление, так и инсталляция, что иногда требуется при использовании проприетарных пакетов:

exclude=pkgname1 pkgname2 ... pkgname#

Полезной может оказаться параметр skip_broken – он заставляет пропускать установку пакетов с нарушенными зависимостями.

Параметр recent нужен для субкоманды list с одноимённой опцией: он устанавливает срок, в течении которого добавленные в репозиторий пакеты считать новыми.

Что очень раздражает в yum – это синхронизация метаданных о репозиториях, происходящая каждый раз при его запуске с любой субкомандой – даже от лица пользователя, когда реально кэш метаданных обновлён быть не может. Такая ситуация изменяется параметром metadata_expire, которому можно дать то значение, которое покажется разумным. Или вписать строку

metadata_expire=never

И тогда обновление кэша метаданных будет производиться только по запросу.

Обратимся к плагинам. Они устанавливаются точно так же, как и любые другие пакеты. Соответствующие каждому из установленных плагинов конфигурационные файлы располагаются в каталоге /etc/yum/pluginconf.d и имеют имена, по которым легко догадаться, к какому из плагинов относится любой конфиг.

Большинство плагинных конфигов предельно просто и содержит единственную строку, разрешающую его подключение:

enabled=1

В конфиге плагина presto можно запретить локальное кэширование дельт, раскомментировав параметр

keepdeltas = false

А можно определить, что же считать дельтой. Например, параметр

minimum_percentage = 95

указывает, что если изменённая часть пакета составляет 95% или менее от цельного, то будет скачиваться она, если же больше – загрузится пакет целиком.

Чтобы настраивать параметры доступа к репозиториям, их необходимо сначала подключить. Подключение «левых» репозиториев не сложно: вся метаинформация о любом репозитории, пригодном для эксплуатации yum’ом, собрана в виде обычного rpm-пакета, который может быть обычным же образом установлен. Вся загвоздка в том, что пакет этот хранится внутри собственного, ещё не подключённого, репозитория, и потому yum’ом установлен быть не может.

Так что нам придётся добраться до нужного пакета, описывающего репозиторий, в Сети, скачать его, установить с помощью команды rpm, а затем уже обеспечить доступность репозитория.

Рассмотрим эту процедуру на примере подключения репозитория для пакетов флэш-плейера. Для этого заходим на официальный сайт Adobe, в пункте Download отыскиваем строку Get flash player, и из выпадающего списка Select version to download… выбираем YUM for Linux, какой (в виде файла adobe-release-i386-1.0-1.noarch.rpm) и скачиваем. Затем даём команду

# rpm -Uhv adobe-release-i386-1.0-1.noarch.rpm

По её успешном исполнении в каталоге с конфигами репозиториев можно будет увидеть новый файл adobe-linux-i386.repo. Одновременно он станет доступным для обновляющих манипуляций командой

# yum update

Подключить новый репозиторий можно и совсем вручную. Проделаем эту операцию для репозитория (почти) ежедневных сборок браузера Chromium от Тома Колловея: создадим в каталоге /etc/yum.repos.d файл chromium.repo и впишем в него такие строки:

[chromium] name=Google Chrome baseurl=http://spot.fedorapeople.org/chromium/F$releasever/ enabled=1 gpgcheck=0

Надеюсь, мне удалось показать, что yum делает употребление rpm-пакетов абсолютно безвредным. В случае же напряжённых отношений с командной строкой для управления rpm-пакетами можно обратиться к графической утилите PackageKit, речь о которой пойдёт в следующем разделе.

PackageKit – кит пакетного менеджмента

Если yum всегда оставался в тени Debian'овского APT'а, то о графической надстройке PackageKit говорят ещё меньше. Хотя она не является чем-то специфическим для rpm-based дистрибутивов: её можно прикрутить к пакетам любого формата в любых дистрибутивах, вплоть до Archlinux и Gentoo.

Система PackageKit распадается на серию бэк-эндов для работы с конкретными менеджерами пакетов и интерфейсные надстройки.

Бэк-энды PackageKit предполагают работу с такими системами, как yum, apt, smart и так далее, вплоть до pacman. Интерфейсом к ним служат

   1. либо консольная утилита pkcon, одинаковая во всех дистрибутивах и в отношении синтаксиса команд не зависящая от нижележащего пакетного менеджера,

   2. либо графические фронт-энды, каковых минимум два – gnome-packagekit и kpackagekit, ориентированные на работу в средах GNOME/Xfce/LXDE и KDE, соответственно.

При инсталляции в Fedora по умолчанию устанавливается бэк-энд для yum и фронт-энд gnome-packagekit (при выборе в качестве рабочей среды KDE он заменяется на kpackagekit). Но в репозиториях доступны пакеты поддержки apt и smart, а также консольный клиент pkcon.

Пакетные менеджеры, поддерживаемые системой PackageKit, имеют обычно собственный развитый инструментарий для управления пакетами из командной строки (не исключение и Fedora, как мы видели в заметке про yum). Поэтому консольная утилита pkcon представляет интерес только своей теоретической универсальностью – она одинакова в любых дистрибутивах, поддерживающих PackageKit, так что задерживаться на ней не будем.

Графическая ипостась PackageKit в виде субпакета gpk-application запускается из главного стартового меню, в зависимости от используемой среды, через пункты Приложения -> Установка и удаление программ (GNOME) или Администрирование -> Установка и удаление программ (Xfce). Причём сделать это можно от лица обычного пользователя – пароль администратора будет запрашиваться по ходу дела, при необходимости выполнения действий, требующих соответствующих полномочий. После запуска перед нами появляется окно следующего вида:


Рис. 2. PackageKit – общий вид

Переключаясь в левом фрейме окна на соответствующие пункты, в правом можно видеть список всех пакетов – как установленных, так и доступных в репозиториях. Списки пакетов и коллекций можно фильтровать по:

   • статусу – установлен или доступен;

   • назначению – для разработчиков или конечных пользователей;

   • режиму – графическому или текстовому;

   • «степени свободы» – free или non-free.

По умолчанию никакая фильтрация не проводится.

Свободное поле с кнопкой Find рядом прямо так и провоцирует выполнить поиск некоего пакета. Каковой осуществляется по совпадению (не чувствительно к регистру) не только в именах пакетов, но и в их описаниях. В результате в выводе будет список всех пакетов, имеющих хоть какое-то отношение к искомому.

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

Более подробную информацию о пакете можно получить через меню Selection. Так, пункт Get file lists выведет список файлов и путей к ним в том виде, в котором они будут установлены в системе. Пункт Depends on даст список его зависимостей. А пункт Required by – список пакетов, которые зависят от выбранного.

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


Рис. 3. Вывод списка зависимых пакетов

Нажатие кнопки Установить повлечёт за собой скачивание пакета вместе со всеми его зависимостями, из распаковку и инсталляцию. Кнопка Отмена вызовет отказ от установки не только зависимостей, но и выбранного пакета.

Если всё идёт как надо, после описанных выше манипуляций мы будем иметь в системе установленный работоспособный пакет. Что и предлагается проверить в панели сообщения об успехе инсталляции – на ней имеется кнопка Запустить, которая вызывает старт свежеустановленной программы.

Однако нельзя исключить ситуации, что в ходе проверки зависимостей будут выявлены ошибки – как правило, они связаны с конфликтом версий пакетов, от которых зависит устанавливаемый. И единственное, что тут можно сделать – открыть вывод More details, тупо просмотреть его и закрыть панель ошибок. Выбранный пакет при этом, разумеется, установлен не будет.

Удаление пакетов происходит аналогично – только в обратном порядке:

   • сначала снимается отметка с установленного пакета;

   • затем нажимается кнопка Применить – и наступает ожидание проверки зависимостей, завершающееся появлением окна со списком пакетов, которые будут удалены вместе с заказанным;

   • список очень внимательно изучается, после чего следует согласие на удаление или отказ от него.

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

PackageKit в 12-й версии Fedora получит (за счёт отдельных плагинов) такие дополнительные возможности, как автоматическая установка пакетов по щелчку на имени файла в браузере или из командной строки – в ответ на сообщение command not found.

Все действия по установке и удалению пакетов (а также тотальному обновлению системы, о чём будет говориться позднее) через PackageKit фиксируются в специальном лог-файле – /var/log/yum.log; как явствует из названия, он не специфичен для этой системы, а отражает действия через менеджер пакетов yum. Однако gnome-packagekit предоставляет удобную форму визуализации его содержимого, вызываемую через пункты меню System -> Software log, где показываются: дата действия и его характер (установка, обновление или удаление), имя совершившего его пользователя и приложения (субпакета в составе gnome-packagekit):


Рис. 4. Журнал установки, обновления и удаления пакетов

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

Первое из них – проверить доступные репозитории, те самые, которые подключались на стадии установки, что делается через меню System -> Software sources. Скорее всего, все нужные источники пакетов из числа официальных для Fedora вообще и Russian Fedora в частности уже включены, но лишний раз убедиться в этом не мешает.

Затем имеет смысл обновить систему – через пункт меню System -> Refresh package lists, который сначала приведёт список доступных пакетов в актуальное (и соответствующее подключённым репозиториям) состояние, а затем предложит список пакетов, могущих быть обновлёнными, с которым остаётся только согласиться.

И теперь обновление будет выполнено, если не произойдёт ошибки —. хотя нельзя исключить и последнего варианта. В этом случае придётся обратиться к командной строке и yum’у.

Пунктами меню Software sources и Refresh package lists вызывают самостоятельные субпакеты, входящие в gnome-packagekit – gpk-repo и gpk-update-viewer, соответственно. Но они могут быть запущены автономно, через главное стартовое меню среды – Система -> Администрирование -> Источники программ/Обновление программ.

Из сказанного можно сделать вывод, что PackageKit в своей графической ипостаси – простое и удобное в обращении средство управления пакетами, функционально сходное с Synaptic’ом для deb-пакетов. В сравнении с последним он производит впечатление более медлительного. Однако это связано не с ним самим, а с rpm-форматом и базами данных для yum, требующими скачивания существенно большего объёма метаинформации. Второй недостаток PackageKit – трудность определения причин возникновения ошибок как при установке конкретного пакета, так и тотального обновления системы. Это я отнёс бы к некоторой недоработанности системы PackageKit в целом – ведь по сравнению с Synaptic’ом она ещё очень молода.

Однако и в нынешнем своём виде PackageKit пригоден для повседневного использования в сфере управления пакетами, если не выходить за пределы штатных ситуаций – при их возникновении yum нам в руки.

openSUSE LiveCD: нетривиальная установка

LinuxFormat, #162 (октябрь 2012)

Большинство современных дистрибутивов Linux распространяется в двух основных вариантах: в виде образов оптических дисков, служащих исключительно для установки системы, и в виде образов LiveCD/DVD, предназначенных как для знакомства с ней, так и и для последующей инсталляции. Не исключение тут и openSUSE, официальный набор образов которой включает:

   • полный установочный DVD;

   • небольшой образ для установки по Сети;

   • GNOME-Live и KDE-LiveCD, различающиеся используемыми рабочими средами.

О последних и пойдёт речь в настоящей статье.

Вступление

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

Это мнение имеет под собой основания: в большинстве случаев при установке с LiveCD возможности пользователя вмешаться в этот процесс минимальны или напрочь отсутствуют. Результатом же такой установки является точная копия образа «живого» диска со всеми его умолчальными настройками и заранее предопределённым набором приложений. А поскольку в отношении последних предпочтения составителей LiveCD наверняка не на 100% совпадают с предпочтениями пользователя «со стажем», в дальнейшем ему придётся затратить немало времени на индивидуализацию своей системы.

Однако инсталляция openSUSE с LiveCD оказывается исключением из общего правила. И предоставляет не меньше возможностей по индивидуализации системы, нежели установка с полного DVD или «сетевого» диска. А в отношении настроек – даже больше. Как это оказывается возможным – и будет предметом настоящей статьи.

Как уже было сказано, официально в рамках проекта распространяется два варианта LiveCD – с KDE и GNOME в качестве рабочих сред, каждый в сборках для 32-битной и 64-битной архитектур. В силу личных предпочтений автора дальнейшее изложение проводится на примере KDE-LiveCD – но пользователи GNOME вполне могут применить те же приёмы при установке своего любимого десктопа.

Официальные LiveCD в отношении версий ядра, рабочих сред и приложений точно соответствуют установочному DVD на момент выхода текущего релиза. Однако существуют и периодические «верстовые» (Milestomes) сборки, предназначенные для тестирования релиза будущего. По своему наполнению они идентичны официальным, однако версии этого наполнения повышаются «от столба к столбу». В промежутках же между «верстовыми столбами» с периодичностью примерно раз в неделю собираются «саженные столбики» – снапшоты текущего состояния подготавливаемого релиза. Разумеется, за стабильность «вестовых» и особенно «саженных» сборок никто не ручается, и использование их для «рабочих» инсталляций не рекомендуется.

Кроме официальных LiveCD, существует большое количество неофициальных их вариантов. Например, для KDE это версии с «чистым» KDE 4.X (то есть в оригинальном оформлении проекта KDE), и с ностальгическим KDE 3.5.10. Сборки LiveCD с прочими рабочими средами – XFce, LXDE, Enlightenment – также имеют статус неофициальных.

Live-среда: запуск

Работа в Live-режиме, будь то знакомство с системой или её установка, начинается с загрузки с соответствующего носителя. В ходе её весьма желательно выбрать русский язык интерфейса. Правда, для Live-среды она мало чего даст, ибо на 700 Мбайт вместить полную поддержку даже основных языков, как это имеет место быть на DVD, довольно сложно, а ожидать предпочтения русскому от интернационального дистрибутива было бы опрометчиво. Но в случае последующей инсталляции она будет унаследована установленной системой – хотя в ходе её придётся мириться со смесью нижегородского с оксфордским. Но зато в дальнейшем для окончательной русификации потребуется куда меньше телодвижений.

Из меню загрузчика следует, что можно либо загрузить Live-среду, из которой, как мы скоро увидим, будет доступна опция установки, либо непосредственно приступить к инсталляции. В данный момент нас интересует как раз первый вариант. Почему он является предпочтительным – станет ясным из дальнейшего изложения.Никаких дополнительных опций, вроде настройки сети, Live-вариант загрузки пока не предусматривает – этим можно будет заняться уже непосредственно в «живом» режиме. Так что нажимаем Enter на первом пункте главного меню и через некоторое время видим рабочий стол KDE.

Первая наша цель – ознакомиться с возможностями Live-режима. Однако делать это лучше в комфортной обстановке, что для меня, например, подразумевает в первую очередь шрифты, подходящие для глаз, для кого-то – иные параметры внешнего вида. Чем мы для начала и займёмся. Впрочем, те, кого внешний вид среды по умолчанию устраивает, могут спокойно пропустить следующий раздел.И ещё важное предупреждение: знакомство с LiveCD – занятие довольно медленное и печальное. Ибо привод компактов нынче не самое быстрое устройство хоранения данных, а кэширование его содержимого в оперативную память (даже если её более чем вдоволь) в openSUSE не предусмотрено.

Подготовка Live-режима

Дабы привести рабочий стол Live-среды в соответствие если и не со своими эстетическими идеалами , то хотя бы с физическими возможностями восприятия, отправляемся в стартовое меню главной управляющей панели, где выбираем пункт Configure desktop (я предупреждал, что с Великим и Могучим в Live-среде будет напряжонка) и по открытии окна настройки параметров щёлкаем по иконке Applications Appearance. В развернувшейся панели слева выбираем пункт Fonts, а справа жмём на кнопку Adjust all fonts.

Теперь отмечаем «птицами» боксики Font и Size и выбираем подходящие гарнитуру и кегль, сверяясь с образцом в нижней части окошка. Выбрав подходящий вариант, в панели шрифтов, включаем режим anti-aliasing'а в соответствие со своим визуальным восприятием. Каковое, впрочем, будет получено только впоследствие, после перезапуска сеанса (ни ни в коем случае не системы – это убёт все сделанные настройки). Однако перед этим я подгоняю управляющую панель к размеру, воспринимаемому моими глазами. Для чего щёлкаю на ней правой кнопкой мыши, в контекстном меню выбираю пункт Panel Options, а затем – Panel Settings. После чего, ухватившись мышью за кнопку Height, тащу её вверх до получения удовлетворительного результата.

Вот теперь в первом приближении дело с настройкой можно считать законченным – остаётся только перезапустить сеанс KDE и авторизоваться заново, введя в качестве логина значение linux, а поле для ввода пароля оставить пустым. После чего рабочий стол KDE загрузится снова – но уже с применением всех сделанных ранее настроек.

Настройка окружения администратора

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

Так что последний штрих в подготовке к дальнейшей работе – это настройка «административного окружения». Для чего следует запустить ту же самую программу конфигурирования десктопа, но уже от лица суперпользователя. Самый простой способ сделать это – с помощью комбинации клавиш Alt+F2 вызвать командную строку минитерминала, в которой и надлежит ввести

kdesu systemsettings

где kdesu – команда для получения временных, на одну операцию, прав суперпользователя, а systemsettings – команда для запуска программы установки параметров рабочего стола.

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

Предвижу резонное замечание: зачем возиться с настройками окружения пользователя и администратора, если все эти действия будут иметь силу только для текущего Live-сеанса? Столь же резонно возражу. Во-первых, не такие уж это сложные действия, чтобы пренебречь комфортом в ходе знакомства с LiveCD и установки. А во-вторых, и главных, не пропадёт ваш скорбный труд по настройке пользовательского и административного окружения. Почему? Пусть это пока остаётся Военной Тайной.

Преамбула к установке

На знакомстве с Live-средой я останавливаться не буду. Замечу только, что это самая обычная среда KDE, с набором типовых её приложений – достаточно обширным, так что начинающему пользователю есть где порезвиться. Однако занятие это наскучит ему достаточно скоро. Не в последнюю очередь и потому, что все они не блистают быстродействием в условиях «живого» режима. И тут пользователю захочется посмотреть на те же приложения во всей красе – в инсталлированном виде. Наступает психологический момент для установки системы.

Установка openSUSE – дело не шести секунд. Конечно, в Live-режиме это время можно скрасить рядом приятных и полезных занятий. Так, те, кто ещё не наигрался в игрушки, имеют все условия, чтобы резаться, скажем, в Reversi или раскладывать пасьянсы, каковых немного больше, чем вдоволь. Люди же серьёзные могут почитать материалы официального сайта проекта, в том числе и на русском языке. Благо, для этой цели в Live-режиме имеется целых два браузера.

Конечно, для этого хорошо бы иметь и соединение с Интернетом. Если провайдер обеспечивает DHCP-подключение, всё просто: сеть волшебным образом поднимется сама собой. Однако в данном варианте не фатально будет и любое иное подключение: в нашем распоряжении есть рабочий Network Manager, который, при всех его недостатках, позволит настроить и VPN-, и DSL-, и WiFi-соединение. Ибо нет таких настроек, которые не могли бы выполнить большевики-линуксоиды, и сеть, тем или иным способом, будет поднята. Так что никаких препятствий к повышению своего образовательного уровня не будет.

Так что возможность занять время установки делами разной степени полезности – это первый довод в пользу установки системы из Live-среды, а не методом «лобового напора».

Однако чтение материалов, как я уже сказал, – занятие для серьёзных людей. Люди же несерьёзные, вроде автора этих строк, предпочтут провести время установки за непринуждёнными беседами, например, в Джуйке. И на первый взгляд их ожидает облом: в Live-среде ни малейшего Jabber-клиента не найти и следов.

Однако это решается легко: если Jabber-клиента в системе нет, его следует установить. На вопрос как? ответить очень легко: либо с помощью консольной системы zypper, либо посредством модуля управления программами универсальной системы YaST2 в графическом режиме. Оба способа – предмет отдельной тему. Здесь лишь отмечу, что во втором случае и пригодились нам настройки «административного окружения», ибо YaST2 запускается от лица суперпользователя.

Так что возможность читать документацию и поговорить с приятными собеседниками online – это второй довод в пользу инсталляции openSUSE из Live-среды. Правда, те самые серьёзные люди поставят это в упрёк: мол, не стоит ради пустопорожнего трёпа городить огород с установкой дополнительных приложений. На что у меня есть два возражения:

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

   2. и второе – как это ни парадоксально, но приложения, установленные в Live-среде, сохранятся и в инсталлированной системе; почему – опять же будет предметом отдельного разговора.

Так что Kopete может оказаться далеко не единственным кандидатом на установку. Так, не помешает установить в Live-среде и пакеты русификации, такие, как kde4-l10n-ru, kde4-l10n-ru-data и kde4-l10n-ru-doc для русификации KDE, libreoffice-l10n-ru для русификации LibreOffice. Впрочем, полностью русифицировать систему можно и иным способом (см. врезку). Прочие дополнительные пакеты каждый выбирает в меру своих предпочтений.

Наконец, самое интересное: пакеты можно не только устанавливать в Live-среду, но и удалять из неё – и после инсталляции на диск их не будет! Здесь я «отдельно, с большим наслажденьем» удаляю немало того, что полагаю лишним на «живом» диске, в частности, всю мультимедиа – но и это дело личных предпочтений.

Таким образом, Live-среда даёт ничуть не меньше возможностей для индивидуализации системы, нежели выборочная установка с DVD или по сети. И даже больше: потому что никто не в силах запретить подключение, наряду со штатными, также и сторонних репозиториев, в том числе содержащих так называемые не вполне свободные программы (типа мультимедийных кодеков), которые при других раскладах установки приходится доустанавливать впоследствии.

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

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

При установке же с openSUSE LiveCD от всего лишнего можно избавиться радикально. Потому как предварительно можно должным образом настроить YaST или отредактировать конфигурационный файл zypper‘а, в зависимости от того, что используется для удаления и установки пакетов.

Четвёртый довод в пользу установки в Live-режиме по сравнению с прямой инсталляцией: возможность выполнять её в визуально приятном окружении, о чём говорилось в предыдущем разделе.

Есть и пятый довод, но и он пока останется Маленьким Секретом, который я раскрою под занавес.

Дабы при удалении пакетов вместе с ними удалялись и их ставшие ненужными зависимости (если они больше нигде не задействованы), при использовании zypper'а следует отредактировать файл /etc/zypp/zypp.conf, а именно: снять символ комментария со строки

# solver.cleandepsOnRemove = false

и заменить значение false на true.

При использовании же модуля управления пакетами YaST2 тот же эффект достигается включением в меню Параметры пункта Удалять ставшие ненужными зависимости.

Чтобы при установке пакетов они тянули за собой только обязательные зависимости, не затрагивая так называемых рекомендованных, в файле /etc/zypp/zypp.conf следует снять символ комментария со строки

# solver.onlyRequires = false

и заменить значение false на true.

Та же цель в модуле управления пакетами YaST2 достигается включением в меню Параметры пункта Игнорировать рекомендованные пакеты для уже установленных пакетов.

Однако торопиться с отключением установки рекомендованных пакетов не следует. Ибо в число оных входят и языково-зависимые пакеты, о которых говорилось ранее. Так что, вместо того чтобы устанавливать их попакетно, достаточно при отключённом игнорировании рекомендованных пакетов выполнить операцию тотального обновления системы командой zypper up или через YaST2. Результатом будет полная русификация системы.

Установка

И вот настал решительный момент щелкнуть мышью по иконке Install на предмет заняться установкой системы. Она начинается с панели приглашения к оной. После приглашения можно видеть отличительные особенности инсталляции в Live-режиме:

   • нет пункта выбора режимов – то есть режим обновления установленной системы не предусмотрен;

   • нет возможности отключить автоматическую настройку после инсталляции;

   • нельзя включить использование диска Add-on.

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

Стадия выбора рабочего стола при Live-установке пропускается. Что естественно – выбор этот делается в тот момент, когда диск с соответствующей средой (KDE или GNOME) ставится на закачку.

Так что следующим номером нашей программы будет разметка диска – возможности установщика openSUSE в этой области поистине необъятны, так что здесь мы на них задерживаться не будем, это должно быть предметом отдельного разговора. Далее создаётся аккаунт обычного пользователя, после чего выводится итоговая панель Live Installation Settings (то, что в русском переводе интерфейса типовой установки обозвали Параметрами установки).

Не ищите здесь секции индивидуального выбора пакетов: её здесь нет. Да и не нужна она, ибо все необходимые пакеты мы имели возможность установить «вживе» ещё до запуска инсталлятора.

Теперь по нажатии кнопки Install будет запрошено подтверждение этого судьбоносного решения. А дальше процесс разметки диска, создания и монтирования файловых систем, а также собственно установки пойдёт сам по себе.

А пока он идёт – ответим на вопрос, как нам удалось устанавливать и удалять пакеты, да так, что сделанные в Live-среде изменения сохранятся в инсталлированной системе. Хотя, казалось бы, после перезагрузки они должны были бы бесследно исчезнуть. Для чего дождёмся в окне инсталлятора окончания разметки диска и расправы с файловыми системами. После чего текущим действием будет одно-единственное – копирование корневой файловой системы (Copying root filesystem).

Вот вам и разгадка Военной Тайны. Ибо где расположена корневая файловая система Live-среды? Правильно, в оперативной памяти. А куда инкорпорируются исполняемые файлы, библиотеки и прочие компоненты установленных в ходе Live-сеанса пакетов? В корневую файловую систему. А откуда изымаются компоненты пакетов удаляемых? И где отражаются изменения, выполненные в общесистемных конфигах? Опять таки, всё это модификации корневой файловой системы – точнее, её образа в оперативной памяти.

Так что в процессе установки с LiveCD не происходит ни развёртывания образов метапакетов, ни попакетной распаковки индивидуально выбранных пакетов. В сущности всё дело сводится к переносу текущего слепка оперативной памяти на целевой носитель. И потому на нём по завершении установки все изменения, сделанные в Live-среде до запуска инсталлятора, сохранятся в неприкосновенности. В этом и заключается сила описанного метода – насколько мне известно, не имеющего аналогов в более иных дистрибутивах Linux.

Итоги установки

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

Торопиться с перезагрузкой мы не будем. Ибо пора раскрыть Маленький Секрет пятого довода в пользу установки из Live-режима: это возможность сохранения пользовательских настроек рабочей среды. Причём за настройки для административного аккаунта можно не волноваться: поскольку каталог /root, где они упокоились, лежит на корневой файловой системе, все конфигурационные файлы из него будут скопированы в соответствующее место на винчестере.

А вот пользовательские настройки среды были сделаны для временного пользователя с именем linux, и его домашний каталог /home/linux, существующий в Live-режиме, при перезагрузке будет уничтожен.

Однако никто не запрещает нам скопировать конфиги уходящего в небытие пользователя linux‘а, например, на флэшку, а затем перенести их в установленную систему. Или сразу поместить их в /mnt_point/home/username, где mnt_point – точка монтирования для раздела на винчестете (не следует забывать, что по окончании установки все задействованые во время неё файловые системы размонтируются), а username – учётное имя пользователя, чей аккаунт был создан во время установки. Нужно будет только потом изменить их владельца и проверить права доступа.

Файлы, подлежащие копированию, – это в первую очередь конфиги KDE (/home/linux/.kderc) и Kopete (/home/linux/.kde4/share/config/kopeterc), а возможно, и других установленных в Live-среде программ.

Вот теперь можно и перезагрузиться. Установка в Live-режиме не предполагает отказа от автоматического конфигурирования системы. Каковое и происходит сразу после её рестарта. И завершается появлением умолчального рабочего стола KDE.

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

Заключение

Из всего сказанного выше можно сделать вывод, что установка с LiveCD – отнюдь не обязательно прерогатива совсем начинающих пользователей Linux'а. Конечно, для них такая инсталляция as is обеспечивает максимально быстрое развёртывание системы, содержащей необходимый для начала работы минимум приложений. Но если затратить некоторое время на настройку и наращивание возможностей Live-среды, то систему эту можно сделать и актуальной, и индивидуализированной. Причём существенно более простыми методами, чем при ручном выборе пакетов при установке с DVD или NET-диска.

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

Правда, следует оговорить, что способ этот подходит только тем, кто отдаёт предпочтение средам KDE 4 или GNOME 3, потому что официальных LiveCD с другими десктопами просто нет. Что же до неофициальных – они обычно выходят с некоторой (а иногда и значительной) задержкой относительно текущего релиза. Хотя и эта проблема в принципе решаема – но с существенно большими затратами времени и сил. Так что любителям Xfce, LXDE или, тем более, оконных менеджеров проще прибегнуть к установке с полного DVD или диска для сетевой инсталляции.

ZFS on Linux: практика применения

LinuxFormat, #165-166 и #167 (январь и февраль 2013).

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

Обзор возможностей

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

Для начала – немного цифр. В отличие от всех предшествовавших файловых систем и систем размещения данных, ZFS является 128-битной. То есть теоретическое ограничение на её объём и объёмы её составляющих превышают не только реальные, но и воображаемые потребности любого пользователя. По выражению создателя ZFS, Джеффа Бонвика [Jeff Bonwick], для её заполнения данными и их хранения потребовалось бы вскипятить океан. Так, объём пула хранения данных (zpool – максимальная единица в системе ZFS) может достигать величины 3?1023 петабайт (а один петабайт, напомню, это 1015 или 250 байт, в зависимости от системы измерения). Каждый пул может включать в себя до 264 устройств (например, дисков), а всего пулов в одной системе может быть тоже не больше 264.

Пул может быть разделён на 264 наборов данных (dataset – в этом качестве выступают, например, отдельные файловые системы), по 264 каждая. Правда, ни одна из таких файловых систем не может содержать больше 248 файлов. Зато размер любого файла ограничивается опять же значением в 264 байт. Количество таких ограничений можно умножить. Как уже было сказано, они лежат вне пределов человеческого воображения и возможностей. И привожу я их только для того, чтобы вселить в пользователя уверенность: ни он сам, ни его внуки и правнуки в реальности не столкнутся c ограничениями на размер файловой системы или отдельного файла, как это бывало при использовании FAT или ext2fs.

Так что перейду к особенностям ZFS, наиболее интересным, по моему мнению, десктопному пользователю. Здесь в первую очередь надо отметить гибкое управление устройствами. В пул хранения данных можно объединить произвольное (в обозначенных выше пределах) число дисков и их разделов. Устройства внутри пула могут работать в режиме расщепления данных, зеркалирования или избыточности с подсчётом контрольных сумм, подобно RAID’ам уровней 0, 1 и 5, соответственно. В пул можно включать накопители, специально предназначенные для кэширования дисковых операций, что актуально при совместном использовании SSD и традиционных винчестеров.

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

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

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

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

   • создание снапшотов файловой системы, позволяющих восстановить её состояние в случае ошибки;

   • клонирование файловых систем;

   • компрессия данных файловой системы и дедупликация (замена повторяющихся данных ссылками на «первоисточник»);

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

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

Разумеется, есть. Хотя большая их часть – скорее особенности: например, ограничения при добавлении или удалении накопителей в пуле, или отсутствие поддежки TRIM.

По большому счёту для пользователя Linux’а у ZFS обнаруживается два кардинальных недостатка: некоторая усложнённость её использования, обусловленная юридическими факторами, и высокие требования к аппаратуре.

Первый недостаток если не ликвидирован, то сглажен трудами Брайана Белендорфа [Brian Behlendorf] со товарищи и майнтайнерами прогрессивных дистрибутивов вкупе с примкнувшими к ним независимыми разработчиками. Аппаратные же претензии ZFS мы сейчас и рассмотрим.

Аппаратные потребности

Итак, ZFS предоставляет пользователю весьма много возможностей. И потому вправе предъявлять немало претензий к аппаратной части – процессору (изобилие возможностей ZFS создает на него достаточную нагрузку), оперативной памяти и дисковой подсистеме.

Впрочем, претензии эти отнюдь не сверхъестественные. Так, процессор подойдёт любой из относительно современных, начиная, скажем, с Core 2 Duo. Минимальный объём памяти определяется в 2 ГБ, с оговоркой, что применение компрессии и дедупликации требуют 8 ГБ и более.

Сама по себе ZFS прекрасно функционирует и на одиночном диске. Однако в полном блеске показывает себя при двух и более накопителях. В многодисковых конфигурациях рекомендуется разнесение накопителей на разные контроллеры: современные SSD способны полностью загрузить все каналы SATA-III, и равномерное распределение нагрузки на пару контроллеров может увеличить быстродействие.

К «железным» претензиям добавляются и притязания программные. В первую очередь, ZFS on Linux требует 64-битной сборки этой ОС, поскольку в 32-разрядных системах действует ограничение на адресное пространство физической памяти. Кроме того, в конфигурации ядра должнв быть отключена опция CONFIG_PREEMPT. Поэтому, например, в openSUSE ZFS может использоваться с ядром kernel-default, но не kernel-desktop, каковое, вопреки названию, устанавливается по умолчанию при стандартной настольной инсталляции.

Если вас привлекли достоинства ZFS и не устрашили её «железные» аппетиты, самое время опробовать её в деле. Что потребует знакомства с некоторыми специфическими понятиями.

Терминология

Центральным понятием ZFS является пул хранения данных [zpool]. В него может объединяться несколько физических устройств хранения – дисков или дисковых разделов, причём первый вариант рекомендуется. Но не запрещено и создание пула из одного диска или его раздела.

Каждый пул состоит из одного или нескольких виртуальных устройств [vdev]. В качестве таковых могут выступать устройства без избыточности (то есть всё те же диски и/или их разделы), или устройства с избыточностью – зеркала и массивы типа RAID-Z.

Зеркальное устройство [mirror] – виртуальное устройство, хранящее на двух или более физических устройствах, но при чётном их количестве, идентичные копии данных на случай отказа диска,

RAID-Z – виртуальное устройство на нескольких устройств физических, предназначенное для хранения данных и их контрольных сумм с однократным или двойным контролем чётности. В первом случае теоретически требуется не менее двух, во втором – не менее трёх физических устройств.

Если пул образован устройствами без избыточности (просто дисками или разделами), то одно из vdev, соответствующее ему целиком, выступает в качестве корневого устройства. Пул из устройств с избыточностью может содержать более одного корневого устройства – например, два зеркала.

Пулы, образованные виртуальными устройствами, служат вместилищем для наборов данных [dataset]. Они бывают следующих видов:

   • файловая система [filesystem] – набор данных, смонтированный в определённой точке и ведущий себя подобно любой другой файловой системе;

   • снапшот [snalishot] – моментальный снимок текущего состояния файловой системы, доступный только для чтения;

   • клон [clone] – точная копия файловой системы в момент его создания; создаётся на основе снимка, но, в отличие от него, доступен для записи;

   • том [volume] – набор данных, эмулирующий физическое устройство, например, раздел подкачки.

Наборы данных пула должны носить уникальные имена такого вида:

pool_name/path/[dataset_name][@snapshot_name]

Пулы и наборы данных в именуются по правилам пространства имён ZFS, впрочем, довольно простым. Запрещёнными символами для всех являются символы подчёркивания, дефиса, двоеточия, точки и процента. Имя пула при этом обязательно должно начинаться с алфавитного символа и не совпадать с одним из зарезервированных имён – log, mirror, raidz или spare (последнее обозначает имя устройства «горячего» резерва). Все остальные имена, в соответствие с демократическими традициями пространства имён ZFS, разрешены.

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

Модели именования устройств

В современном Linux’е использование для накопителей имён «верхнего уровня», имеющих вид /dev/sda, не является обязательным, а в некоторых случаях и просто нежелательно. Однако правила менеджера устройств udev позволяют определять и другие модели идентификации накопителей. В частности, штатными средствами дисковой разметки openSUSE предусмотрены варианты идентификации по:

   • метке тома (/dev/disk/by-label);

   • идентификатору диска (/dev/disk/by-id);

   • пути к дисковому устройству (/dev/disk/by-path);

   • универсальному уникальному идентификатору, Universally Unique IDentifier (/dev/disk/by-uuid).

А с полным списком вариантов идентификации блочных устройств можно ознакомиться, просмотрев имена подкаталогов в каталоге /dev/disk, их содержимое – это символические ссылки на имена «верхнего уровня».

С идентификацией по метке тома и по UUID, вероятно, знакомо большинство читателей. И к тому же в пространстве имён ZFS они не используются. А вот с идентификацией by-path и by-id нужно познакомиться поближе.

Модель именования by-path использует имена устройств, привязанные к их положению на шине PCI и включающие номер шины и канала на ней. Имя дискового устройства выглядит примерно так:

pci-0000:00:1f.2-scsi-0:0:0:0

Дисковые разделы маркируются добавлением к имени устройства суффикса part#. Модель именования by-path идентифицирует устройства вполне однозначно, и особенно эффективна при наличии более чем одного дискового контроллера. Однако сами имена и устройств, и разделов описываются довольно сложной для восприятия последовательностью. Да и в большинстве «десктопных» ситуаций модель эта избыточна.

Модель идентификации by-id представляет имена носителей информации в форме, наиболее доступной для человеческого понимания. Они образованы из названия интерфейса, имени производителя, номера модели, серийного номера устройства и, при необходимости, номера раздела, например:

ata-SanDisk_SDSSDX120GG25_120823400863-part1

Таким образом, все компоненты имени устройства в модели by-id определяются не условиями его подключения или какими-то правилам, а задаются производителем и жестко прошиты в «железе». И потому эта модель является наиболее однозначной для именования устройств. А также, что немаловажно, строится по понятной человеку логике. Не случайно именно она принята по умолчанию в инсталляторе openSUSE.

Какую из моделей именования устройств выбрать для данного пула – зависит от его назначения и масштабов. Имена «верхнего уровня» целесообразно применять для однодисковых пулов (особенно если в машине второго диска нет и не предвидится, как обычно бывает в ноутбуках). Они же, по причине простоты и удобопонятности, рекомендуются для экспериментальных и разрабатываемых пулов. И очень не рекомендуются – во всех остальных случаях, так как зависят от условий подключения накопителей.

Этого недостатка лишена модель by-id: как пишет Брайан, при её использовании «диски можно отключить, случайно смешать и подключить опять произвольным образом – и пул будет по-прежнему корректно работать». Как недостаток её рассматривается сложность конфигурирования больших пулов с избыточностью. И потому она рекомендуется для применения в «десктопных» и «квартирных» (типа семейного сервера) условиях.

Для больших (более 10 устройств) пулов из дисков, подключённых к нескольким контроллерам, рекомендуется идентификация by-path. Однако в наших целях она громоздка и избыточна.

Наконец, ZFS on Linux предлагает и собственную модель идентификации – /dev/disk/zpool, в котором именам by-path ставятся в соответствие уникальные и осмысленные «человекочитаемые» имена, даваемые пользователем. Модель эта рекомендуется для очень больших пулов, каковых на настольной машине ожидать трудно.

Так что дальше я буду использовать имена «верхнего уровня», говоря об абстрактных или экспериментальных ситуациях, и об именах by-id, когда речь зайдёт о практических примерах применения ZFS.

Включение поддержки ZFS

Для практического использования ZFS on Linux перво-наперво необходимо обеспечить её поддержку в вашем дистрибутиве – ибо по причинам, описанным в предыдущей статье, сама собой она не поддержится ни в одном Linux’е.

Как это сделать, зависит от дистрибутива. В Сети можно найти подробные инструкции для Ubuntu и Gentoo, которые легко распространяются на клоны обеих систем. Не столько инструкции, сколько руководства к самостоятельному действию имеются на сайте проекта ZFS on Linux для абстрактных RPM- и Deb-based дистрибутивов. Я же расскажу о том, как это делается в openSUSE релизов 12.1 и 12.2.

Как вы наверняка догадались, ZFS не поддерживается в openSUSE ни «искаропки», ни в официальных репозиториях. Но зато в репозиториях неофициальных, так называемых «домашних», пакеты её поддержки представлены аж в двух экземплярах: в mUNIX9 и в ghaskins. Точные их адреса легко найти через систему OBS (Open Builging System) по ключевому слову zfs.

Какому из репозиториев отдать предпочтение – вопрос спорный. Первые свои опыты с ZFS on Linux я проводил, основываясь на пакетах из mUNIX9. И они прошли без всяких осложнений, хотя и велись в сугубо экспериментальном режиме. Однако к моменту понимания, что эта система для меня – «всерьёз и надолго», последняя тогда версия zfs имелась только в репозитории ghaskins. Однако его использование требует некоторых дополнительных манипуляций.

Кроме того, в репозитории ghaskins на данный момент имеются пакеты только для openSUSE релизов 12.1 и 12.2. Репозиторий же mUNIX9 охватывает все актуальные ныне версии SLE и openSUSE. включая Tumbleweed и Factory.

Различаются репозитории и набором пакетов. В ghaskins, кроме «рабочих» модулей zfs и spl для ядра default, можно видеть массу отладочных их сборок (рис. 1).


В репозитории mUNIX9 с этим существенно скромнее – имеются модули только для ядра default и для xen (рис. 2)


Так что окончательный выбор я предоставляю читателю. Но на какой бы репозиторий он ни пал, его следует подключить. И сделать это можно любым из трёх способов. Первый – с помощью zypper’а:

# zypper ar -f [URL] [Name]

Второй способ – через модуль Репозитории... центра управления YaST2 посредством кнопки Добавить (рис. 3):


выбора пункта Указать URL (рис. 4):


и ввода необходимых значений в поля Имя репозитория и URL (рис. 5):


Наконец, третий способ, для самых ленивых – отыскать пакеты zfs, spl и сопутствующие через OBS и прибегнуть к «установке в один клик». В этом случае подключение репозиториев будет совмещено с установкой пакетов.

В первых двух же вариантах после подключения репозитория надо будет установить (с помощью zypper’а или модуля управления пакетами YaST’а) следующее (пример дан для репозитория mUNIX9, но из ghaskins потребуются те же компоненты):


Возможно, не вредным окажется и пакет zfs-test. А вот zfs-dracut, предназначенный для создания initrd с поддержкой ZFS, несмотря на его потенциальную нужность, установить не удастся: требуемый для него пакет dracut в openSUSE пока не поддерживается.

Следует учесть, что при использовании ядра kernel-desktop (а скорее всего, так оно и есть) пакет zfs-kmp-default потянет за собой и соответствующее ядро kernel-default. Пункт загрузки которого будет внесён в меню GRUB, но не будет отмечен как умолчальный – этим надо озаботиться самому.

И, наконец, при использовании пакетов из ghaskins потребуется, скорее всего, сделать в каталогах /etc/init.d/rc3.d и /etc/init.d/rc5.d символические ссылки на файл /etc/init.d/zfs. Иначе файловые системы ZFS, к созданию которых мы приближаемся, не будут автоматически монтироваться при старте и размонтироваться при останове системы.

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

Вот теперь можно приступать к применению ZFS в мирных практических целях.

Создаём простой пул

Освоив ранее основные понятия, мы научились понимать ZFS. Для обратной же задачи – чтобы ZFS понимала нас – нужно ознакомиться с её командами. Главные из них – две: zpool для создания и управления пулами, и zfs для создания и управления наборами данных. Немного, правда? Хотя каждая из этих команд включает множество субкоманд, с которыми мы со временем разберёмся. Очевидно, что работу с ZFS следует начинать с создания пула хранения. Начнём с этого и мы. В простейшем случае однодисковой конфигурации это делается так:

# zpool create tank dev_name

Здесь create – субкоманда очевидного назначня, tank – имя создаваемого пула (оно обычно даётся в примерах, но на самом деле может быть любым – с учётом ограничений ZFS), а dev_name – имя устройства, включаемого в пул. Каковое может строиться по любой из описанных ранее моделей. И, чтобы не повторяться, напомню: все команды по манипуляции с пулами и наборами данных в них выполняются от лица администратора.

В случае, если в состав пула включается один диск, и второго не предвидится, можно использовать имя устройства верхнего уровня – например, sda для цельного устройства (обратим внимание, что путь к файлу устройства указывать не нужно). Однако реально такая ситуация маловероятна: загрузка с ZFS проблематична, так что как минимум потребуется раздел с традиционной файловой системой под /boot (и/или под корень файловой иерархии), так что команда примет вид:

# zpool create mypool sda2

Однако если можно ожидать в дальнейшем подсоединения новых накопителей и их включения в существующий пул, то лучше воспользоваться именем по модели by-id, например:

# zpool create mypool ata-ata-ST3500410AS_5VM0BVYR-part2

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

# zpool create mypool dev_name1 dev_name2

где dev_name1 и dev_name1 – имена устройств в принятой модели именования. В приведённом случае будет создано нечто вроде RAID’а нулевого уровня, с расщеплением [stripping] данных на оба устройства. Каковыми могут быть как дисковые разделы, так и диски целиком. Причём, в отличие от RAID0, диски (или разделы) не обязаны быть одинакового размера:

# zpool create mypool sdd sdf

После чего никаких сообщений не последует. No news – good news, говорят англичане; в данном случае это означает, что пул был благополучно создан. В чём можно немедленно убедиться двумя способами. Во-первых, в корневом каталоге появляется точка его монтирования /mypool. А во-вторых, этой цели послужит субкоманда status:

# zpool status mypool

которая выведет нечто вроде этого:

pool: mypool state: ONLINE scan: none requested config:
NAME STATE READ WRITE CKSUM mypool ONLINE 0 0 0 sdd ONLINE 0 0 0 sdf ONLINE 0 0 0
errors: No known data errors

А с помощью субкоманды list можно узнать объём новообразованного пула:

# zpool list mypool NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT mypool 18,9G 93K 18,9G 0% 1.00x ONLINE -

Легко видеть, что он равен сумме объёмов обеих флэшек, если «маркетинговые» гигабайты пересчитать в «настоящие».

К слову сказать, если дать субкоманду list без указания аргумента – имени пула, то она выведет информацию о всех пулах, задействованных в системе. В моём случае это выглядит так:

# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT mypool 18,9G 93K 18,9G 0% 1.00x ONLINE - tank 199G 20,8G 178G 10% 1.00x ONLINE -

Обращаю внимание, что даже чисто информационные субкоманды вроде list и status требуют прав администратора.

Разумеется, два пула в одной, да ещё и настольной, машине – излишняя роскошь. Так что пул, созданный в экспериментальных целях, подлежит уничтожению, что делается с помощью субкоманды destroy:

# zpool destroy mypool

После чего он пропадёт из списка пулов. А что можно сделать с пулом до его уничтожения, увидим со временем.

«Избыточные» пулы

Избавившись от ставшего ненужным пула, рассмотрим второй вариант – создание пула с зеркальным устройством. Создаём его из двух накопителей одинакового объёма:

# zpool create -f mypool mirror sdf sdg

Проверка показывает, что итоговый пул, как и следовало ожидать, равен объёму одного накопителя:

# zpool list mypool NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT mypool 3,72G 91,5K 3,72G 0% 1.00x ONLINE -

При различии объёмов больший диск будет «обрезан» до объёма меньшего.

Полное зеркалирование любыми, по моему мнению, в настольных условиях – роскошь непозволительная: банальные бэкапы данных проще и надёжнее. Тем не менее, не исключаю, что некоторая избыточность на уровне проверки контрольных сумм может оказаться не лишней, да и не столь накладна. Так что давайте посмотрим и на третий вариант пула из более чем одного устройства – RAID-Z.

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

# zpool create mypool raidz sdd sdf sdg

что даст нам следующую картину:

# zpool list mypool NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT mypool 11,1G 205K 11,1G 0% 1.00x ONLINE -

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

Пул кэшируемый

И, наконец, последний вариант организации пула из более чем одного устройства – создание пула с кэшированием. Для чего создаём из двух устройств простой пул без избыточности и подсоединяем к нему устройство для кэша:

# zpool create mypool sdd sdf cache sdg

Очевидно, что устройство для кэширования не должно входить в пул любого рода – ни в простой, ни в избыточный. Что мы и видим в выводе субкоманды list:

# zpool list mypool NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT mypool 18,9G 82K 18,9G 0% 1.00x ONLINE -

где никаких следов его обнаружить не удаётся. Если же появляются сомнения, а подключилось ли оно на самом деле, обращаемся к субкоманде status, которая покажет беспочвенность наших опасений.

Как я уже говорил в обзоре возможностей ZFS, подключение устройства кэширования имеет смысл при наличии большого традиционного винчестера (или винчестеров) и относительно небольшого SSD, которое и играет роль дискового кэша.

О некоторых опциях команды zpool

Команда zpool поддерживает ещё множество субкоманд, предназначенных для экспорта и импорта пула, добавления к нему устройств и изъятия оных, и так далее. Но сейчас я расскажу о некоторых опциях, которые могут оказаться необходимыми при создании пула.

Одна из важный опций – -f: она предписывает принудительное выполнение данной операции и требуется, например, при создании пула из неразмеченных устройств.

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

Интересна также опция -m mountpoint. Как уже говорилось, при создании пула по умолчанию в корне файловой иерархии создаётся каталог /pool_name, который в дальнейшем будет точкой монтирования файловых систем ZFS. Возможно, что это окажется не самым лучшим местом для их размещения, и, как мы увидим в дальнейшем, это несложно будет изменить. Но можно задать каталог для пула сразу – например, /home/data: это и будет значением опции -m. Никто не запрещает определить в качестве такового и какой-либо из существующих каталогов, если он пуст, иначе автоматическое монтирование файловых систем пула в него окажется невозможным.

Наконец, нынче важное значение приобретает опция ashift=#, значением которой является размер блока файловой системы в виде степеней двойки. По умолчанию при создании пула размер блока определяется автоматически, и до некоторого времени это было оптимально. Однако затем, с одной стороны, появились диски так называемого Advanced Format, с другой – получили распространение SSD-накопители. И в тех, и в других размер блока равен 4 КБ, хотя в целях совместимости по-прежнему эмулируется блок в 512 байт. В этих условиях автоматика ZFS может работать некорректно, что приводит к падению производительности пула.

Для предотвращения означенного безобразия и была придумана опция ashift. Значение её по умолчанию – 0, что соответствует автоматическому определению размера блока. Прочие же возможные значения лежат в диапазоне от 9 для блока в 512 байт (29 = 512) до 16 для 64-килобайтного блока (216 = 65536). В интересующем нас случае четырёхкилобайтного блока оно составляет 12 (212 = 4096). Именно последнее значение и следует указать явным образом при создании пула из винчестеров AF или SSD-накопителей.

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

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

Для создания файловых систем предназначена субкоманда create команды zfs, которая требует единственного аргумента – имени создаваемой ФС и обычно не нуждается ни в каких опциях:

# zfs create pool_name/fs_name

Внутри пула можно создавать сколь угодно сложную иерархию файловых систем. Единственное условие – родительская файловая система для системы более глубокого уровня вложенности должна быть создана заблаговременно. Ниже я покажу это на конкретном примере создания файловых систем внутри каталога /home – наиболее оправданное место для размещения наборов данных ZFS.

Начну я немножечко издалека. При стандартной установке openSUSE не обойтись без создания учетной записи обычного пользователя, и, следовательно, в каталоге /home будет присутствовать по крайней мере один подкаталог – /home/username.

Смонтировать же файловую систему ZFS в непустой каталог невозможно, и, значит, мы не можем сразу прибегнуть к опции -m для определения «постоянной прописки» создаваемого пула.

Поэтому для начала делаем для пула «прописку» во временной точке – пусть это будет традиционный /tank:

# zpool create -o ashift=12 tank ata-SanDisk_SDSSDX120GG25_120823400863-part3 ata-SanDisk_SDSSDX120GG25_120823402786-part3

Теперь создаём файловую систему для будущего домашнего каталога:

# zfs create tank/home

А внутри же неё – необходимые дочерние ветви, как то:

# zfs create tank/home/alv

которая потом заменит мой домашний каталог – в нём я не держу ничего, кроме конфигурационных файлов;

# zfs create tank/home/proj

это файловая система для моих текущих проектов, и так далее.

Как и было обещано разработчиками ZFS, процедура ничуть не сложнее, чем создание обычных каталогов. Благодаря этому файловые системы можно легко создавать по мере надобности, для решения какой-либо частной задачи. И столь же легко уничтожать их, когда задача эта выполнена. Что делается таким образом:

# zfs destroy pool_name/fs_name

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

Ни в какой специальной операции монтирования новообразованные файловые системы не нуждаются – оно происходит автоматически в момент их создания, о чём свидетельствует следующая команда:

$ mount | grep tank tank/home on /tank/home type zfs (rw,atime,xattr) tank/home/alv on /tank/home/alv type zfs (rw,atime,xattr) tank/home/proj on /tank/home/proj type zfs (rw,atime,xattr) ...

Для обеспечения монтирования файловых систем ZFS при рестарте машины не требуется и никаких записей в файле /etc/fstab: это также происходит само собой, совершенно нечувствительно для пользователя. Правда, если для файловой системы ZFS определить свойство mountpoint=legacy, то с ней можно управляться и традиционным способом.

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

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

Файловые системы: устанавливаем свойства

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

# zfs get all fs_name

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

Так, абсолютно лишним представляется свойство atime, то есть обновление времени последнего доступа к файлам. Оно, во-первых, снижает быстродействие, с другой – способствует износу SSD-накопителей (правда, нынче и то, и другое чисто символичны). Так что отключаем это свойство для всех файловых систем:

# zfs set atime=off tank/home

Аналогичным образом расправляемся и со свойством xattr:

# zfs set xattr=off tank/home

А вот дальше можно заняться и индивидуализацией. Как я уже говорил, в момент создания файловые системы ZFS «безразмерны». Если это не подходит, для них можно установить квоты. Однако я этого делать не буду – в моём случае это приводит к потере половины смысла ZFS. А вот зарезервировать место для критически важных каталогов, дабы его не отъела, скажем, мультимедиа, известная своей прожорливостью, будет не лишним. И потому я для файловых систем tank/home/proj и tank/home/alvустанавливаю свойство reservation. Для файловой системы проектов оно будет максимальным:

# zfs set reservation=10G tank/home/proj

Для остальных ограничусь более скромным гигабайтом резерва.

Далее, поскольку данные в файловой системе tank/home/proj для меня действительно важны, и шутить с ними я склонен даже гораздо меньше, чем с дамами, предпринимаю дополнительные меры по их сохранности путём удвоения числа копий (по умолчанию оно равно 1):

# zfs set copies=2 tank/home/proj

А для данных не столь важных – тех, что часто проще скачать заново, нежели отыскать на локальной машине, можно выполнить и обратную операцию – отказаться от подсчёта контрольных сумм:

# zfs set checksum=off tank/home/media

Для файловых систем, содержащих хорошо сжимаемые данные (например, для моего домашнего каталога, где лежат одни dot-файлы), можно включить компрессию:

# zfs set compression=on tank/home/alv

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

При желании для некоторых файловых систем (например, того же домашнего каталога) можно отключить такие свойства, как exec, setuid, devices – легко догадаться, что результат будет аналогичен указанию опций монтирования noexec, nosuid, nodev для традиционных файловых файловых систем. И, разумеется, для файловых систем, изменение которых нежелательно, можно придать свойство readonly.

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

О перемонтировании

После создания файловых систем и задания всех необходимых их свойств наступает психологический момент для перемонтирования их по месту «постоянной прописки» – то есть в каталог /home. Что потребует некоторых подготовительных действий.

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

# chown -R alv:users /tank/home/*

Теперь нужно скопировать конфиги из каталога /home/alv в /tank/home/alv:

# cp -Rp /home/alv/.* /tank/home/alv/

не забыв про опцию -p для сохранения атрибутов.

Все предыдущие операции можно было выполнять, получив права администратора с помощью команды su (или, при желании, sudo). Причём где угодно – в текстовом виртуальном терминале или в терминальном окне Иксового сеанса (например, в konsole KDE). Теперь же потребуется переавторизоваться в «голой» консоли.

Монтирование файловых систем ZFS в каталог с любым содержимым невозможно, так что требуется очистить каталог /home от следов прежней жизнедеятельности пользователя таким образом:

# rm -Rf /home/alv

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

# ps aux | grep alv

обращая внимание на идентификаторы процессов (PID). А затем последовательно мочим их в сортире:

# kill -9 ####

Выполнив все указанные действия, определяем для набора данных tank/home свойство mountpoint, что и осуществит перемонтирование:

# zfs set mountpoint=/home tank/home

Теперь остаётся только с помощью команды ls убедиться, что в /home появились новые подкаталоги с нужными атрибутами:

drwxr-xr-x 26 alv users 48 Sep 23 14:27 alv/ drwxr-xr-x 18 alv users 18 Sep 22 02:28 proj/ ...

А команда

# mount | grep /home

покажет нам новые точки монтирования файловых систем:

tank/home on /home type zfs (rw,noatime,noxattr) tank/home/alv on /home/alv type zfs (rw,noatime,noxattr) tank/home/proj on /home/proj type zfs (rw,noatime,noxattr) ...

Как я уже говорил выше, при использовании пакетов из репозитория mUNIX9 на этом дело с подготовкой файловых систем ZFS к практической работе можно считать законченным: при перезагрузке машины все они будут благополучно смонтированы в автоматическом режиме. Пакеты же из ghaskins потребуют ещё одного деяния – создания в каталогах /etc/init.d/rc3.d и /etc/init.d/rc5.d символических ссылок на файл /etc/init.d/zfs.

Вместо заключения

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

Оглавление

Вступление 1

Колонки 1

2006 1

Новый инсталлятор Debian 1

Процессор Cell и его роль в Linux-революции 2

Open Source: разработчики и спонсоры 2

Kubuntu в роли пасынка? 3

Xubuntu: в благородном семействе прибыло 3

Desktop’изация BSD 4

Семь шагов Linux-дистрибуции 4

LinuxWorld 2006 5

На злобу дня, или Oracle vs Red Hat 5

Будущее Open Source: коммерциализация или сайентификация? 6

2007 6

Скорость загрузки системы: путь на пользовательский десктоп? 6

Debian или Kebian? 6

Linux на Cell: уже реальность? 7

Дети капитана Патрика 8

CRUX – крестоносец идеи 8

Обновление Debian-семейства 9

Мир изменился… 9

Не спрашивай, что ты сделал для Linux’а… 10

SCO’тский вопрос 10

ZFS: конец файловым проблемам? 11

Mandriva на Руси: второе нашествие Бонапарта? 11

Linux и творческая интеллигенция 12

2008 12

Поэзия – Linux’у 12

Nexenta, или еще раз о жирафе Анюте 13

Семинары, семинары… 13

Сделайте мне … хорошо 13

Как вас теперь называть? 14

Ханс Рейзер: точка в деле? 14

Безальтернативность: всегда ли это плохо? 15

Какой Linux учить? 15

LinuxFormat: юбилей в троичном счислении 16

Xfce: назад в будущее? 16

FreeBSD на десктопе 17

Пердем – персональный демон 17

2009 18

Серенада солнечной долины… 18

Файловая система btrfs: Linux-ответ ZFS? 18

Тётя Ася или дядя Джаббер? 19

Нет OEM’ным ОС? 19

Debian GNU/kFreeBSD: знает ли мсье толк в извращениях? 20

Мир без солнца 20

Будут ли машины большими? 21

NILFS выходит из тени 21

Btrfs – ждём стабилизации? 21

Куда развиваться свободному софту? 22

Феномен Juick’и 22

Русская Fedora: первый год жизни 23

GNOME Shell: всё для блага человека 23

2010 24

Дистрибутив Linux: кто он сегодня? 24

Пингвины пишут своими шрифтами 24

Обновления системы: нужны ли они народу? 25

Конец «камнестроения»? 25

Неттопия на практике 25

Незнаменитый офис 26

Fedora в новой сфере? 26

Нативная ZFS для Linux и будущее btrfs 27

Памяти советской геологии 27

KDE 3: реанимация или гальванизация? 28

Судьба OpenSolaris: бессмертна ли мафия? 28

Линуксоид как высшая ступень эволюции Homo sapiens 29

RFRemix 14: сбытие мечт? 29

2011 29

Как читать Linuxformat 29

Парадокс линуксописательства 30

Linux от Oracle 30

ОС Barrelfish: рыбозасолочный цех 31

Linux и OCR – братья на век 31

Куда катится мир? 32

Волхвы-то кричали с того и с сего 32

Linux в «верхнем» образовании 33

О LUG’ах и горе Верблюд 33

Снова Open Source в науке 34

Дети мага Мандрейка 34

Как завладеть миром? 35

2012 35

Куда казаку податься? 35

PCLinuxOS в отечественной редакции 36

Очень грустная колонка… 36

Гибридное видео, или мичуринцы из NVIDIA 36

Блеск openSUSE 37

openSUSE: и на на солнце бывают пятна 37

Во славу Гомера 38

Нативная ZFS – Linux’у! 39

Бич свободных лицензий 39

openSUSE 12.2: детектив вокруг релиза 40

OpenSUSE: первый шаг к релизу 12.3 40

Юстируем шрифты 40

2013 41

О причинах systemd’изации 41

Возвращаясь к PCLinuxOS 41

Немножко о DragonFly… 42

Файловая система для SSD 42

Роман-предупреждение 43

Монотеизм или дуализм? А может – язычество 43

Песнь о потомках Sid’а 44

Куда идёт Kubuntu? 44

Mir или не Mir, вот в чём вопрос 45

Заработать на FOSS: маечки или ехать? 45

Дорога к Mir’у 46

Слово о Cinnamon’е 46

Статьи 47

Ubuntu и Kubuntu: гуманистический Linux 47

Об Ubuntu и Kubuntu 47

Настройка доступа к репозиториям пакетов 48

Основы пакетного менеджмента 49

Команда dpkg сотоварищи 49

Инструментарий apt 50

Kubuntu по русски 51

Борьба за мультимедиа 52

Linux-пресса на Руси: Вопросы истории 53

Идеальный журнал 56

Second Open Source Forum Russia 57

Марк Шаттлворт в Петербурге 58

Выступление 59

Вопросы и ответы 61

Интервью 63

Снова aptitude: режим командной строки 64

Zenwalk Linux: не его ли учить? 68

Применим фильтры 68

Почему Zenwalk? 70

Zenwalk: знакомимся ближе 72

И на прощание 74

Управление rpm-пакетами: нынче не то, что давеча 74

Незнаменитый yum 74

PackageKit – кит пакетного менеджмента 78

openSUSE LiveCD: нетривиальная установка 82

Вступление 82

Live-среда: запуск 83

Подготовка Live-режима 84

Настройка окружения администратора 84

Преамбула к установке 84

Установка 87

Итоги установки 87

Заключение 88

ZFS on Linux: практика применения 89

Обзор возможностей 89

Аппаратные потребности 90

Терминология 91

Модели именования устройств 91

Включение поддержки ZFS 93

Создаём простой пул 96

«Избыточные» пулы 97

Пул кэшируемый 98

О некоторых опциях команды zpool 98

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

Файловые системы: устанавливаем свойства 100

О перемонтировании 101

Вместо заключения 102

Оглавление книги


Генерация: 1.831. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз