вторник, 30 октября 2012 г.

Kerberos автоматическое обновление билетика

Наработки и интересные статейки ... каша в общем:


Почем не отрабатывает команда "kinit --renew"

Источник: http://forum.lissyara.su/viewtopic.php?f=53&t=36884#p328801


Непрочитанное сообщение sudo » 2012-06-16 7:45:37
_skeletor писал(а):
sudo писал(а):
КОД: ВЫДЕЛИТЬ ВСЁ
*    */1       *       *       *       root    /usr/bin/kinit --renew > /dev/null 2>&1  

Не подойдёт, так как kinit требует введения пароля, что в использовании Cron невозможно.


У меня китайская FreeBSD, в ней все возможно.

Билет просрочен как видим еще в мае...
КОД: ВЫДЕЛИТЬ ВСЁ
[8:04 root@srv12]# klist
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: ALEX@DOMAIN.LOCAL

  Issued           Expires        Principal
May 11 09:49:51  >>>Expired<<<  krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL


Вводим тупо. Не дает обновиться...

Оно и понятно почему - потому, что хоть иногда надо читать маны.

-R, --renew
Try to renew ticket. The ticket must have the `renewable' flag
set, and must not be expired.



КОД: ВЫДЕЛИТЬ ВСЁ
[8:12 root@srv12]# kinit --renew
kinit: krb5_get_kdc_cred: KDC can't fulfill requested option


Возьмем новый билет и ставим флаг

КОД: ВЫДЕЛИТЬ ВСЁ
[8:10 root@srv12]# kinit -p ALEX
ALEX@DOMAIN.LOCAL's Password: 
[8:10 root@srv12]# klist
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: ALEX@DOMAIN.LOCAL

  Issued           Expires          Principal
Jun 16 08:10:41  Jun 16 18:10:41  krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL
[8:12 root@srv12]# kinit --renewable
ALEX@DOMAIN.LOCAL's Password:


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

КОД: ВЫДЕЛИТЬ ВСЁ
[8:13 root@srv12]# kinit --renew
[8:13 root@srv12]# klist
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: ALEX@DOMAIN.LOCAL

  Issued           Expires          Principal
Jun 16 08:13:23  Jun 16 18:13:23  krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL
[8:21 root@srv12]# kinit --renew
[8:21 root@srv12]# klist
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: ALEX@DOMAIN.LOCAL

  Issued           Expires          Principal
Jun 16 08:21:11  Jun 16 18:21:11  krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL



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

Вы бы лучше другую мою ошибку заметили, что написав команду под рутом crontab -e в конфигурации cron'a я указал root, что возможно только при правке системного crontab :smile:




Авторизация FreeBSD heimdal в AD используя ключи. (Согласен с автором ... 3 вариант самый оптимальный, но FreeNAS после ребута не хотел принимать старый билетик и приходилось опять же ручками получать новый)


Непрочитанное сообщение infrasty » 2009-05-19 11:17:26
Статья написана в стиле "пометка что-бы не забыть", многие моменты подразумеваются известными и акцент делается на "подводные камни". В интернете по этому вопросу увы ничего не нашел, так же бьються над аналогичными проблемами ребята из Juniper Networks (не подсоединяет к домену) и IBM ( не получает список пользователей).


Для того, что бы службы на FreeBSD могли получать TGS (Ticket Granting Service - тикет на доступ к службе)
от Active Directory Key Distribution Center необходимо что бы в системе FreeBSD был TGT (Ticket Granting Ticket - тикет на получение тикетов).

В стандартном варианте настройке родного Kerberos (Heimdal 0.x_чего_то_там) на FreeBSD (вплоть до версии 7.1.) используется файл

/etc/krb5.conf [man krb5.conf]

в этом файле указывается REALM (область, за которую отвечает KDC) и серверы, с которых можно спрашивать TGT и TGS.
Первоначальный TGT получается обычно с использованием команды:
КОД: ВЫДЕЛИТЬ ВСЁ
#kinit DomainAdministrator
Enter DomainAdministrator's password: ***********
kinit: NOTICE: ticket renewable lifetime is 1 week


и в файле-кеше ключей (обычно /tmp/krb5cc_0, т.к. все делается из под рута) появляется TGT, используя который
другие службы (pam_krb5, ldap, samba) могут обращаться к службам AD.

Для автоматизации получения ключа используются разные методы. Все они используют cron, для периодического получения/обновления ключа.

1.) Самый простой это

КОД: ВЫДЕЛИТЬ ВСЁ
echo MyPassword | kinit DomainAdministrator


Метод прост, но "светит пароль" администратора, что не является хорошим тоном.

2.) Второй способ описан в статье Microsoft "Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability"
Заключается метод в следующем: создается пользовательский аккаунт, через который будет авторизоваться сервер.
С использованием команды из пакета Windows Resource Kit или Windows Support Tools

КОД: ВЫДЕЛИТЬ ВСЁ
C:>Ktpass.exe -princ HOST/my_bsd_hostname@NT-DNS-REALM-NAME -mapuser user_account_for_bsd -pass account_password_for_bsd -out unixmachine.keytab


создается файл unixmachine.keytab в который пишутся ключи, которые могут быть использованы для авторизации без пароля,
используя команду на FreeBSD

КОД: ВЫДЕЛИТЬ ВСЁ
kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME


Файл unixmachine.keytab требует переноса на FreeBSD и манипуляции для впихивания его в /etc/krb5.keytab - системный файл для хранения ключей
по-умолчанию. Подробности в статье [http://technet.microsoft.com/en-us/library/bb742433.aspx,
Путь TechNet->TechNet Library->Windows->Windows Server->Windows Server 2000->How To... ->Step-by-Step Guide to Kerberos 5]

3.) Наиболее элегантный.

Для получения ключей используется Samba 3.xx, которая чаще всего используется в связке с Active Directory.
Метод также подразумевает получение ключей в /etc/krb5.keytab и авторизацию через
КОД: ВЫДЕЛИТЬ ВСЁ
kinit -k


для получения ключей наобходимо использовать

КОД: ВЫДЕЛИТЬ ВСЁ
net -U DomainAdministrator net ads keytab ADD HOST


эта команда получает ключи в файл (по умолчанию) /etc/krb5.keytab
КОД: ВЫДЕЛИТЬ ВСЁ
Vno  Type              Principal
  5  des-cbc-crc       HOST/my_bsd_hostname@NT-DNS-REALM-NAME
  5  des-cbc-md5       HOST/my_bsd_hostname@NT-DNS-REALM-NAME
  5  arcfour-hmac-md5  HOST/my_bsd_hostname@NT-DNS-REALM-NAME

Требования: Реализация Kerberos на FreeBSD heimdal не использует (пока что) tcp для Kerberos запросов, поэтому пользователь
DomainAdministrator должен быть в одной единственной группе (Domain Admins) и по возможности в самом верхнем OU.
Иначе будут ошибки

КОД: ВЫДЕЛИТЬ ВСЁ
response too big for UDP, use TCP instead


Получив ключи, следует произвести некоторые магические действия с Active Directory.
В моем случае был Microsoft Windows Server 2008 Enterprise SP1, по традиции при его выпуске была допущена ошика
в реализации kerberos из-за чего при использовании

КОД: ВЫДЕЛИТЬ ВСЁ
kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME


Microsoft Windows Server 2008 всех версиий возвращает KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN из-за неправильной
интерпретации косой черты ("/") в имени принципала.
Лечится это частным патчем от Microsoft [KB951191], который Microsoft почему то высылает только по запросу
на электронный адрес, да еще в придачу защифрованным паролем. (актуально на 15.05.2009)

Далее для авторизации через kinit к сожалению не используется аттрибут serivcePrincipalName объекта
типа Computer, который создается при подключении Samba к домену и чьи ключи Samba помещает в /etc/krb5.keytab.
Для того, что бы этот аккаунт использовался для авторизации необходимо сделать два вещи

а.) установить аттрибут userPrincipalName в HOST/my_bsd_hostname@NT-DNS-REALM-NAME (по умолчанию он пуст для объекта Computer)
б.) установить отметку "Без предварительной проверки Kerberos". Это легче сказать чем сделать, т.к. диалоговое окно для таких
манипуляций доступно только для объектов типа User. Отметка это лишь бит в целом числе, поэтому...
Я использовал ADSI Edit (входит в поставку Windows Server 2008) для правки аттрибута userAccountControl объекта типа Computer, представляющего
FreeBSD в домене:

КОД: ВЫДЕЛИТЬ ВСЁ
 userAccountControl = 0x411000 (4263936 decimal) [ WORKSTATION_TRUST_ACCOUNT | DONT EXPIRE PASSWD | DONT REQUIRE PREAUTH ]


После установки патча, манипуляций с объектов Computer account, представляющего FreeBSD и прописав в cron

КОД: ВЫДЕЛИТЬ ВСЁ
0       *       *       *       *       /usr/bin/kinit --renew
*       2       *       *       *       /usr/bin/kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME


получаем рабочее решение по актуальному постоянному присутствию в Kerberos Realm-e
КОД: ВЫДЕЛИТЬ ВСЁ
# klist -vf
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: HOST/my_bsd_hostname@NT-DNS-REALM-NAME
    Cache version: 4

Server: krbtgt/NT-DNS-REALM-NAME@NT-DNS-REALM-NAME
Ticket etype: arcfour-hmac-md5, kvno 2
Auth time:  May 19 11:10:22 2009
End time:   May 19 21:10:22 2009
Renew till: May 26 11:10:22 2009
Ticket flags: forwardable, renewable, initial





Мои наработки: 

В вебке нужно запустить и залогиниться в AD (В "Управлении службами" в вебадминке настроить службу "Active Directory" и запустить ее) иначе в файлик /etc/kb5.conf не прописывается параметры "kdc = out;" и " admin_server = out;"  ==> ЭТА ОШИБКА ИСПРАВЛЕНА В FreeNAS 8.3.0 <==

Получаем билетики прям с АД-шки
# net -U storage-adm ads keytab ADD HOST

Авторизуемся с помощью этих билетиков
# kinit -k HOST/storage@DOMAIN

Забираем оба файлика /etc/krb5.conf и /etc/krb5.keytab и кладем куданить в другое место (где они не перезатрутся)


Автоматизация ... самая банальная ... создадим скрипт:

#!/bin/bash
cp -fr /mnt/zpool_data/data_domain/krb5.* /etc/
cp -fr /mnt/zpool_data/data_domain/krb5cc_0 /tmp/krb5cc_0
chown root:wheel /etc/krb5.*
chown root:wheel /tmp/krb5cc_0
chmod 600 /tmp/krb5cc_0
chmod 644 /etc/krb5.conf
chmod 600 /etc/krb5.keytab

kinit --renewable -k HOST/storage@DOMAIN

cp -fr /etc/krb5.* /mnt/zpool_data/data_domain/
cp -fr /tmp/krb5cc_0 /mnt/zpool_data/data_domain/


Моя строчка в CRONTAB (это все лучше запихнуть в отдельный скрипт и кинуть хотяпы в папку с ограниченным доступом ... т. к. здесь пароль в открытом виде получается):

cp -fr /mnt/zpool_data/data_domain/krb5.conf /etc/ ; chmod 644 /etc/krb5.conf ; echo YOUR_PASSWORD > /tmp/storage-adm.pwd ; kinit --password-file=/tmp/storage-adm.pwd storage-adm@DOMAIN ; rm -fr /tmp/storage-adm.pwd


Полезные команды:

# kdestroy - удалить полученные билетики (просмотреть их можно командой "klist")

ktutil - просмотр редактирование *.keytab файликов (с помощью них можно организовать получение билетиков без пароля).
Основные ее полезные применения: 
# ktutil list - просмотр основного krb5.keytab (с помощью доп параметра можно просмотреть keytab находящийся в любом месте в системе)
С помощью "ktutil copy" можно производить слияние нескольких ketab-ов к примеру в основной krb5.keytab:
ktutil copy mykeytab-1 krb5.keytab
ktutil copy mykeytab-2 krb5.keytab
ktutil copy mykeytab-3 krb5.keytab





среда, 10 октября 2012 г.

Подключаем к DOS, Win 98 и т. д. шары с Win 2003 и Win 2008 с использование доменных учетных записей расположенных на контроллере домена под управление Win 2008 R2 (уровень леса и уровень домена: Win 2008 R2)

Технические характеристики:

Два контроллера домена - Windows 2008 R2 (DC и SDC с основными службами AD, DNS, DHCP)
Уровень леса и уровень домена: Win 2008 R2
Рядовые сервера - Windows 2008 R2 и Windows 2003 R2
Файловые системы на серверах - NTFS
Доменный пользователь - pos
Доменный пароль на пользователя - pos
OS на клиентских машинках - MS-DOS 6.22, Windows 98 SE
Название расшаренных папок - TEST

ЗАДАЧА:

На рядовых серверах и на контроллерах домена размещены расшаренные папки.
Требуется подключить этип расшаренные папки на клиентских машинах.
Анонимный доступ не приемлем.

РЕШЕНИЕ:

1. Настраиваем сервера:

1.1 Изменяем политику "Default Domain Controllers Policy"

(Конфигурация компьютера - Политики - Конфигурация Windows - Параметры безопасности - Локальные политики - Параметры безопасности)
Сетевая безопасность: не хранить хэш-значения LAN Manager при следующей смене пароля Отключено
Сетевая безопасность: уровень проверки подлинности LAN Manager Отправлять LM и NTLM - использовать сеансовую безопасность NTLMv2 при согласовании 
1.2 Обновляем политики на контроллерах домена или ребутаем
Пуск - Выполнить - "gpupdate /force"
 1.3 Сбросил пароль на пользователя "pos" и пароль на него "pos"

2. Настраиваем клиенты:

2.1 Для входа в систему на клиентской машинке логин и пароль вводим доменный.

2.2 Обязательно убираем галку из "Клиент для сети Microsoft" галку "Входить в домен Windows NT" и очищаем поле домена, если там что-то прописано. Т. к. DOS начиная с Win 2003 (может и раньше) принципиально не поддерживает логон старичков в домен, но прекрасно маунтит папки.
В Win 98 по умолчанию это все сделано. (Пуск - Настройка - Панель управления - Сеть - Клиент для сети Microsoft - Свойства)
В DOS делается все также в настройках сети (Обычно через C:\NET\setup.exe ... )

2.3 Рабочую группу желательно прописать по названию вашего домена, к примеру, если FQDN вашего домена "domain.local." - пишем просто "DOMAIN". Но дальнейшие опыты показывают, что имя рабочей группы вообще не важно. (На это стоит обратить внимание при тестах ... т.к. чудесным образом после того как я в поле домена, при чключенной галке логиниваться в домен прописал имя "domain.local" у меня начали маунтиться шары).

3. Пробуем подключить шару на клиенте:

net use x: \\192.168.0.66\test

среда, 3 октября 2012 г.

DHCP-сервер не привязан к IPv6-адресу.


ОШИБКА (при проверке роли DHCP-сервера):
Проблема:
DHCP-сервер не привязан к IPv6-адресу.

Воздействие:
Без привязки к IPv6-адресу сервер не может предоставлять IPv6-адреса в аренду DHCP-клиентам.

Разрешение:
С помощью оснастки DHCP консоли управления (MMC) добавьте привязки к одному или нескольким IPv6-адресам.

РЕШЕНИЕ:
Зайти в "Диспетчер сервера" - "Роли" -"DHCP-сервер" - "<имя_сервера>" - "IPv6" - "Параметры сервера" - Удалить все прописанные параметры - Проверяем роль ...

четверг, 27 сентября 2012 г.

DNS: DNS-зона _msdcs.nash-domen.local интегрирована в Active Directory и должна быть доступна.



ОШИБКА (при вроверке роли DNS-сервера):
Название:
DNS: DNS-зона _msdcs.nash-domen.local интегрирована в Active Directory и должна быть доступна.

Серьезность:
Ошибка

Дата:
27.09.2012 15:39:18

Категория:
Настройка

Проблема:
Не удалось найти DNS-зону _msdcs.nash-domen.local, интегрированную в Active Directory.

Воздействие:
DNS-запросы зоны _msdcs.nash-domen.local, интегрированной в Active Directory, могут завершаться ошибками.

Разрешение:
Восстановите DNS-зону _msdcs.nash-domen.local, интегрированную в Active Directory.

Дополнительные сведения об этой рекомендации и подробные процедуры: http://go.microsoft.com/fwlink/?LinkId=189238



РЕШЕНИЕ:
Создаем в зоне прямого просмотра требуемую зону _msdcs.nash-domen.local. Область репликации указываем "Для всех DNS-серверов, работающих на контроллерах домена в этом ЛЕСУ:".
И перезапускаем службу DNS.

среда, 26 сентября 2012 г.

Настройка NTP сервера в домене Microsoft


Автор: Игорь Тепляков

Описание
Синхронизация времени – это важный и, зачастую, критичный аспект работы всех компьютерных систем в сети. Корректное функционирование службы времени Windowsявляется одним из факторов для нормального функционирования Active Directory. Так же правильное время на компьютерах играет важную роль для пользователей и работы различных программ.
По умолчанию члены домена синхронизируют время с контроллером домена (DC), на котором они авторизовались. Все DC запрашивают актуальное время на DC с ролью FSMO«Эмулятор PDC». Эмулятор PDC, в свою очередь, синхронизируется с внешним источником времени. Внешним источником как правило выступает один или несколько NTP-серверов.
Если ваш эмулятор PDC располагается в виртуальной среде, обязательно отключите синхронизацию времени между хостовой и виртуальной машинами (по умолчанию включена). В противном случае, время виртуальной машины будет принудительно синхронизироваться с временем хостовой машины.
Связь с источником осуществляется по протоколу NTP : 123 порт UDP - для корректной работы входящие и исходящие подключения по этому порту должны быть разрешены.
Инструмент
Настройку я рекомендую выполнить используя утилиту командой строки w32tm(существуют и другие способы настройки службы времени). Основные параметры утилиты, которые используются для управления временем:
  • w32tm /query — позволяет опросить текущие настройки клиента и сервера NTP
  • w32tm /config — используется для настройки службы времени
  • w32tm /resync — используется для инициализации синхронизации времени
  • w32tm /dumpreg — используется для отображения текущих параметров реестра связанных с службой времени
  • w32tm /debug — используется для включения журнала отладки службы времени
Настройка
Настройка синхронизации времени в домене на контроллере домена под управлениемWindows Server 2008 R2 с ролью FSMO «Эмулятор PDC»:
w32tm /query /configuration — смотрим текущие параметры службы времени
w32tm /config /syncfromflags:manual — выбираем источник (заданный нами список) для синхронизации времени
  • MANUAL — синхронизация с узлами из заданного вручную списка
  • DOMHIER — синхронизация с контроллером домена в доменной структуре
  • NO — не синхронизировать
  • ALL — синхронизация как с узлами, заданными вручную, так и с узлами домена
w32tm /config /manualpeerlist:"0.ru.pool.ntp.org 1.ru.pool.ntp.org"- устанавливаем заданный вручную список узлов для синхронизации. Узлы представляют собой DNS-имена или IP-адреса, разделённые пробелами. При указании нескольких узлов, все значения узлов заключаются в кавычки.
w32tm /config /reliable:yes — задаем параметр, что данная машина является надёжным источником времени и может обслуживать клиентов
w32tm /config /update — информируем службу времени, что были внесены изменения (можно перезапустить службу)
w32tm /query /configuration — проверяем внесенные изменения в параметры службы
w32tm /resync — выполняем синхронизацию (можно поиграться, менять время и проверять, будет ли выполнена синхронизация)
net stop w32time & net start w32time — по личным убеждениям я выполняю перезапуск службы w32time
Для синхронизации я использовал серверы времени проекта NTP POOL PROJECT. Можно использовать другие удобные вам - список узлов для синхронизации времени наhttp://ntp.org.
Основной сервер времени в домене настроен, другие серверы и клиентов рекомендую настроить используя групповые политики.

Центр распространения ключей (KDC) не может найти подходящего сертификата для использования

ОШИБКА:

Регистрировать имя: система
Источник: Microsoft-Windows-Kerberos-Key-Distribution-Center
Дата: 13/10/2008 1: 56: 30 PM
КОД события: 29
Категории задач: нет
Уровень: предупреждение
Ключевые слова: классический
Пользователь: N/A
Компьютера: имя

Описание:
Центр распространения ключей (KDC) не может найти подходящего сертификата для использования не удалось проверить входа смарт-карты или сертификата KDC. Смарт-карты входа работать правильно, если проблема не устранена. Чтобы исправить это проблемы, либо проверить существующие KDC сертификат с помощью программы certutil.exe или подать для нового сертификата KDC.

РЕШЕНИЕ:
Добавить роль "Службы сертификации Active Directory" с настройками по-умолчанию и, соответственно, при этом создать сертификат.


Дополнительно:
Оригинал решения проблемы (я рассмотрел только вариант с отсутствием самой роли, там есть и другие варианты) - http://support.microsoft.com/kb/967623

Удаление сертификата контроллера домена, который уже не действует - http://technet.microsoft.com/en-us/library/cc734096(WS.10).aspx

Службе WinRM не удалось создать следующие имена участников-служб

ОШИБКА:

Службе WinRM не удалось создать следующие имена участников-служб: WSMAN/dc0.domain.local, WSMAN/dc0.

Дополнительные данные
Была получена ошибка "8344": %%8344.

Действия пользователя
Имена участников-служб можно создать под учетной записью администратора с помощью служебной программы setspn.exe.

РЕШЕНИЕ:


  1. открыть ADSIEDIT.msc
  2. подключился к контроллеру по умолчанию
  3. открыть объект DC=DOMAIN, DC=local
  4. войти в OU=Domain Controllers
  5. в свойствах для каждого контролдлера сделать следующее: на вкладке безопаснось и дополнительные настройки добавить группу NETWORK SERVICE и дать ей права "Удостоверенная запись на узел с именем участника службы".


Редактирование настроек DCOM в Windows 2008 R2

Для редактирования настроек DCOM для конкретного компонента в Windows 2008 R2 заходим сначала в реестр в ветку HKEY_CLASSES_ROOT\AppID\ и ищем там требуемый нам AppID. Выставляем в "разрешениях" владельцем группу "Администраторы" и соответственно группе "Администраторы" даем "Полный доступ".

Например:
Довольно популярная ошибка "Код события 10016" связанная с "NAP Agent Service", решением которой является изменение разрешений в оснастке "Службы компонентов" - группе "система" нужно выставить разрешение на "Локальный запуск".

Соответственно для данной манипуляции нам предварительно надо зайти в реестре в ветку "HKEY_CLASSES_ROOT\AppID\{B292921D-AF50-400c-9B75-0C57A7F29BA1}" и выполнить действия описанныев начале статьи.

четверг, 23 августа 2012 г.

Шпаргалка по ZFS


Автор:Colin Seymour
Перевод:Евгений Ратников
Перевод:Сгибнев Михаил(некоторые уточнения)
 Очень полезная таблица, жаль, что не попала мне раньше.

$ man zpool
$ man zfs

Справка по структуре команд и их параметрам


$ su
Password:
# cd /
# mkfile 100m disk1 disk2 disk3 disk5
# mkfile 50m disk4
# ls -l disk*
-rw------T 1 root root 104857600 Sep 11 12:15 disk1
-rw------T 1 root root 104857600 Sep 11 12:15 disk2
-rw------T 1 root root 104857600 Sep 11 12:15 disk3
-rw------T 1 root root 52428800 Sep 11 12:15 disk4
-rw------T 1 root root 104857600 Sep 11 12:15 disk5

Создать несколько «виртуальных устройств» (vdevs как описано в документации к zpool). Они также могут быть реальными разделами диска, если таковые доступны.


# zpool create myzfs /disk1 /disk2
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
myzfs 191M 94K 191M 0% ONLINE -

Создать хранилище (пул устройств) и проверить его размер и использование.


# zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0

errors: No known data errors

Более детальная информация о хранилище.


# zpool destroy myzfs
# zpool list
no pools available

Удалить ZFS пул


# zpool create myzfs mirror /disk1 /disk4
invalid vdev specification
use '-f' to override the following errors:
mirror contains devices of different sizes

При попытке создания пула, vdevs которого имеют разичный размер, возникнет ошибка.
Если использовать флаг ‘-f’, то пул создастся, но размер будет соответствовать меньшему устройству.


# zpool create myzfs mirror /disk1 /disk2 /disk3
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
myzfs 95.5M 112K 95.4M 0% ONLINE -
# zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
/disk3 ONLINE 0 0 0

errors: No known data errors

Создать «зеркалируемое» хранилище. В данном случае хранилище зеркалируется 3 раза.


# zpool detach myzfs /disk3
# zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0

errors: No known data errors

Исключить устройство из пула.


# zpool attach myzfs /disk1 /disk3
# zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:31:49 2007
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
/disk3 ONLINE 0 0 0

errors: No known data errors

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


# zpool remove myzfs /disk3
cannot remove /disk3: only inactive hot spares can be removed
# zpool detach myzfs /disk3

Попытка удалить устройство из пула.
В данном случае устройство используется в составе зеркала, поэтому надо применить команду «zpool detach».


# zpool add myzfs spare /disk3
# zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
spares
/disk3 AVAIL

errors: No known data errors

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


# zpool remove myzfs /disk3
# zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0

errors: No known data errors

Удаление диска горячей замены из пула.


# zpool offline myzfs /disk1
# zpool status -v
pool: myzfs
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning
in a degraded state.
action: Online the device using 'zpool online' or replace the device
with 'zpool replace'.
scrub: resilver completed with 0 errors on Tue Sep 11 13:39:25 2007
config:

NAME STATE READ WRITE CKSUM
myzfs DEGRADED 0 0 0
mirror DEGRADED 0 0 0
/disk1 OFFLINE 0 0 0
/disk2 ONLINE 0 0 0

errors: No known data errors

Запретить использование выбранного устройства (состояние offline). Пока устройство не будет возвращено к использованию (состояние online) на него не будет производиться запись и с него не будет производиться чтение. Чтобы временно отключить выбранное устройство используйте ключ -t. Перезагрузка вернет устройство в состояние online.


# zpool online myzfs /disk1
# zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:47:14 2007
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0

errors: No known data errors

Разрешить использование выбранного устройства (состояние online).


# zpool replace myzfs /disk1 /disk3
# zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:25:48 2007
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk3 ONLINE 0 0 0
/disk2 ONLINE 0 0 0

errors: No known data errors

Заменить один диск на другой в пуле устройств, например в случае неисправности /disk1.


# zpool scrub myzfs

«Чистка» хранилища. Проверяет все соответствия контрольных сумм. На зеркалируемых или RAID пулах ZFS автоматически исправит повреждения в данных.
ВНИМАНИЕ: «чистка» интенсивно использует операции ввода-вывода.


# zpool export myzfs
# zpool list
no pools available

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


# zpool import -d / myzfs
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
myzfs 95.5M 114K 95.4M 0% ONLINE -

Импорт экспортированного хранилища.
Если ключ -d не задан, команда ищет /dev/dsk.
Так как в данном примере мы используем файлы, необходимо указать директорию с файлами используемыми хранилищем.


# zpool upgrade
This system is currently running ZFS pool version 8.

All pools are formatted using this version.
# zpool upgrade -v
This system is currently running ZFS pool version 8.
The following versions are supported:
VER DESCRIPTION
--- --------------------------------------------------------
1 Initial ZFS version
2 Ditto blocks (replicated metadata)
3 Hot spares and double parity RAID-Z
4 zpool history
5 Compression using the gzip algorithm
6 pool properties
7 Separate intent log devices
8 Delegated administration
For more information on a particular version, including supported
releases, see:
http://www.opensolaris.org/os/community/zfs/version/N

Where 'N' is the version number.

Показать версию используемого пула. Флаг -v показывает возможности, поддерживаемые данным пулом. Используйте флаг -a, чтобы обновить все доступные пулы до новейшей из них версии. Обновленные пулы больше не будут доступны из систем, на которых работают более старые версии.


# zpool iostat 5
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
myzfs 112K 95.4M 0 4 26 11.4K
myzfs 112K 95.4M 0 0 0 0
myzfs 112K 95.4M 0 0 0 0

Получить статистику по операциям ввода/вывода


# zfs create myzfs/colin
# df -h
Filesystem kbytes used avail capacity Mounted on
...
myzfs/colin 64M 18K 63M 1% /myzfs/colin

Создать файловую систему и проверить ее стандартной командой df -h. Файловые системы автоматически монтируются в /zfs (по умолчанию). См. раздел Mountpoints в руководстве к zfs.


# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 139K 63.4M 19K /myzfs
myzfs/colin 18K 63.4M 18K /myzfs/colin

Получить список файловых систем zfs


# zpool add myzfs /disk1
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses mirror and new vdev is file

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


# zpool add myzfs mirror /disk1 /disk5
# zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk3 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk5 ONLINE 0 0 0

errors: No known data errors

Добавление зеркалируемого набора устройств (vdevs).


# zfs create myzfs/colin2
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 172K 159M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin2 18K 159M 18K /myzfs/colin2

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


# zfs set reservation=20m myzfs/colin
# zfs list -o reservation
RESERV
none
20M
none

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


# zfs set quota=20m myzfs/colin2
# zfs list -o quota myzfs/colin myzfs/colin2
QUOTA
none
20M

Установить и показать квоты.


# zfs set compression=on myzfs/colin2
# zfs list -o compression
COMPRESS
off
off
on

Включить и проверить сжатие.


# zfs set sharenfs=on myzfs/colin2
# zfs get sharenfs myzfs/colin2
NAME PROPERTY VALUE SOURCE
myzfs/colin2 sharenfs on local

Сделать общий ресурс через NFS. При этом, для того, чтобы ресурс был доступен после перезагрузки, не требуется вносить изменения /etc/dfs/dfstab.


# zfs set sharesmb=on myzfs/colin2
# zfs get sharesmb myzfs/colin2
NAME PROPERTY VALUE SOURCE
myzfs/colin2 sharesmb on local

Сделать общий ресурс по протоколу CIFS/SMB. Таким образом мы предоставим доступ к нашей файловой системе ZFS пользователям Windows.


# zfs snapshot myzfs/colin@test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.2M 139M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin2 18K 20.0M 18K /myzfs/colin2

Создать snapshot под названием test.


# zfs rollback myzfs/colin@test

Откатится к ранее созданному snapshot test.


# zfs clone myzfs/colin@test myzfs/colin3
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.2M 139M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin2 18K 20.0M 18K /myzfs/colin2
myzfs/colin3 0 139M 18K /myzfs/colin3

Напрямую к snapshot’у обращаться нельзя. Необходимо клонировать файловую систему (версии test). Клон может располагаться в любом месте иерархии ZFS и будет сделан того же типа, что и оригинал.


# zfs destroy myzfs/colin2
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.1M 139M 22K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin3 0 139M 18K /myzfs/colin3

Уничтожить выбранную файловую систему.


# zfs destroy myzfs/colin
cannot destroy 'myzfs/colin': filesystem has children
use '-r' to destroy the following datasets:
myzfs/colin@test

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


# zfs promote myzfs/colin3
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.1M 139M 21K /myzfs
myzfs/colin 0 159M 18K /myzfs/colin
myzfs/colin3 18K 139M 18K /myzfs/colin3
myzfs/colin3@test 0 - 18K -
# zfs destroy myzfs/colin
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 147K 159M 21K /myzfs
myzfs/colin3 18K 159M 18K /myzfs/colin3
myzfs/colin3@test 0 - 18K -

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


# zfs rename myzfs/colin3 myzfs/bob
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 153K 159M 21K /myzfs
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@test 0 - 18K -
# zfs rename myzfs/bob@test myzfs/bob@newtest
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 146K 159M 20K /myzfs
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@newtest 0 - 18K -

Переименование файловой системы и отдельное переименование snapshot.


# zfs get all
NAME PROPERTY VALUE SOURCE
myzfs type filesystem -
myzfs creation Tue Sep 11 14:21 2007 -
myzfs used 146K -
myzfs available 159M -
myzfs referenced 20K -
[...]

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


# zpool destroy myzfs
cannot destroy 'myzfs': pool is not empty
use '-f' to force destruction anyway

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


# zfs unmount myzfs/bob
# df -h
myzfs 159M 20K 159M 1% /myzfs

Отмонтировать файловую систему в ZFS.


# zfs mount myzfs/bob
# df -h
myzfs 159M 20K 159M 1% /myzfs
myzfs/bob 159M 18K 159M 1% /myzfs/bob

Монтировать в ZFS файловую систему. Это происходит автоматически при загрузке.


# zfs send myzfs/bob@newtest | ssh localhost zfs receive myzfs/backup
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 172K 159M 20K /myzfs
myzfs/backup 18K 159M 18K /myzfs/backup
myzfs/backup@newtest 0 - 18K -
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@newtest 0 - 18K -

Создается snapshot, который передается на вход команды zfs reveive. В данном случае, в качестве примера, использовано zfs reveive на localhost, но можно делать резервные копии на удаленном хосте или в локальном файле.


# zpool history
History for 'myzfs':
2007-09-11.15:35:50 zpool create myzfs mirror /disk1 /disk2 /disk3
2007-09-11.15:36:00 zpool detach myzfs /disk3
2007-09-11.15:36:10 zpool attach myzfs /disk1 /disk3
2007-09-11.15:36:53 zpool detach myzfs /disk3
2007-09-11.15:36:59 zpool add myzfs spare /disk3
2007-09-11.15:37:09 zpool remove myzfs /disk3
2007-09-11.15:37:18 zpool offline myzfs /disk1
2007-09-11.15:37:27 zpool online myzfs /disk1
2007-09-11.15:37:37 zpool replace myzfs /disk1 /disk3
2007-09-11.15:37:47 zpool scrub myzfs
2007-09-11.15:37:57 zpool export myzfs
2007-09-11.15:38:05 zpool import -d / myzfs
2007-09-11.15:38:52 zfs create myzfs/colin
2007-09-11.15:39:27 zpool add myzfs mirror /disk1 /disk5
2007-09-11.15:39:38 zfs create myzfs/colin2
2007-09-11.15:39:50 zfs set reservation=20m myzfs/colin
2007-09-11.15:40:18 zfs set quota=20m myzfs/colin2
2007-09-11.15:40:35 zfs set compression=on myzfs/colin2
2007-09-11.15:40:48 zfs snapshot myzfs/colin@test
2007-09-11.15:40:59 zfs rollback myzfs/colin@test
2007-09-11.15:41:11 zfs clone myzfs/colin@test myzfs/colin3
2007-09-11.15:41:25 zfs destroy myzfs/colin2
2007-09-11.15:42:12 zfs promote myzfs/colin3
2007-09-11.15:42:26 zfs rename myzfs/colin3 myzfs/bob
2007-09-11.15:42:57 zfs destroy myzfs/colin
2007-09-11.15:43:23 zfs rename myzfs/bob@test myzfs/bob@newtest
2007-09-11.15:44:30 zfs receive myzfs/backup

Показать историю команд для всех хранилищ. Можно посмотреть историю только для одного хранилища указав его имя в командной строке. Храниться история только для существующих хранилищ. При удалении хранилища его история удаляется.


# zpool destroy -f myzfs
# zpool status -v
no pools available

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