Pull to refresh

Небольшое руководство по ZFS

Заметил, что на Хабре много статей про ZFS. И вот, решил написать краткое руководство, как же этой ZFS пользоваться. В качестве ОС буду рассматривать Solaris, т.к. ZFS изначально разрабатывалась для Соляры да и познакомился с ZFS я именно там. Понимаю, что мало у кого стоит Open Solaris на десктопе, а администраторы Solaris и так должны это знать. Но может кому и пригодится.

Для начала, что же такое ZFS и в чем ее преимущества перед существующими файловыми системами.
Приведу лишь краткий список плюсов ZFS.
  1. ZFS является 128 битной файловой системой. Максимальный размер пула — 16 экзабайт (18млн Терабайт) Максимальное количество файлов в одном пуле — 20х1012 .
  2. ZFS является self-healing системой. ZFS использует 256-битный контрольные суммы для проверки данных.
  3. Позволяет добавлять пулы или же наращивать емкость пула без остановки системы или же приложений
  4. Очень гибкая организация RAID'ов.


Немного терминологии

  • checksum — Контрольная сумма. 256-разрядный хеш-код данных в блоке файловой системы.
  • clone — Клон. Файловая система, исходное содержимое которой идентично содержимому снапшота.
  • snapshot — Снимок. Образ файловой системы или тома в определенный момент времени, доступный только для чтения.
  • dataset — Набор данных. Общее название следующих объектов ZFS: клонов, файловых систем, снимков или томов. Каждый набор данных идентифицируется по уникальному имени в пространстве имен ZFS. Наборы данных определяются с помощью следующего формата: пул/путь[ @снимок]
  • pool — Пул. Логическая группа устройств, описывающая размещение и физические характеристики доступного пространства для хранения данных. Из пула берется пространство для наборов данных.
  • volume — Том. Набор данных, используемый для эмулирования физического устройства. Например, можно создать том ZFS в качестве устройства подкачки.


Собственно руковдство


В Solaris работа с ZFS идет в основном через 2 команды. Это zpool и zfs.

zpool — работа с пулами. Их создание, изменение, удаление и т.д.

zfs — работа с самой файловой системой.

Итак, из чего же можно создать пул? Да из чего угодно. От файлов под другой фс, до дисков в дисковом массиве.

Примеры создания пула MyPool

# Создание пула из файлов /zfs1/disk01 и /zfs1/disk02 созданных командой mkfile
zpool create MyPool /zfs1/disk01 /zfs1/disk02

# Создание пула используя обычный слайс
zpool create MyPool c1t0d0s0

# Создание пула c зеркалированием и использованием spare дисков.
zpool create MyPool mirror c1t0d0 c2t0d0 mirror c1t0d1 c2t0d1
zpool create MyPool mirror c1t0d0 c2t0d0 spare c3t0d0

Список ваших пулов и их статус можно посмотреть с помощью команда
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
MyPool 191M 94K 191M 0% ONLINE -


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

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


Статусы могут быть следующие
  • DEGRADED — Один или несколько устройства верхнего уровня находятся в нерабочем состоянии, т.к. были отключены. Но дальнейшее функционирование возможно.
  • FAULTED — Один или несколько устройства верхнего уровня находятся в состоянии FAULT. Дальнейшее функционирование не возможно.
  • OFFLINE — Пул был отключен командой «zpool offline».
  • ONLINE — Пул находится в состоянии ONLINE и нормально функционирует.
  • REMOVED — Устройство (Пул) было физически удалено при работающей системе.
  • UNAVAIL — Устройство (Пул) недоступно.


Изменение пула MyPool


#Добавление и удаление элементов (дисков) из пула, не использующего зеркалирование осуществляется с помощью команд:
zpool add MyPool /zfs1/disk3
zpool remove MyPool /disk3

#Добавление и удаление элементов (дисков) из пула, c зеркалированиеv осуществляется с помощью команд:
zpool attach MyPool /disk1 /disk3
zpool detach MyPool /disk1 /disk3

#Ввод элемента в состояние offline с невозможностью чтения/записи до ввода в состояние online (используя ключ -t можно ввести элемент в состояние offline только до ребута)
zpool offline MyPool /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


#И обратно online
zpool online MyPool /disk1

#Замена одного элемента пула на другой
zpool replace MyPool /disk1 /disk3

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


#Создаем файловую систему
zfs create MyPool/systemname

опцией -о мы можем выбрать точку монтирования, отличную от /MyPool/systemname

#Резервируем место под свою файловую систему
zfs set reservation=20m MyPool/systemname

#Устанавливаем квоту для вашей файловой системы, которую вы не сможете превысить
zfs set quota=20m MyPool/systemname

#Включаем компрессию.
zfs set compression=on MyPool/systemname

#Расшариваем нашу файловую систему.
zfs set sharenfs=on MyPool/systemname в NFS
zfs set sharesmb=on MyPool/systemname в SMB

#Снимаем снапшот
zfs snapshot MyPool/systemname@hostname

#Так как снапшот — это просто снимок системы в данный момент, то иногда стоит создавать клона.
zfs clone MyPool/systemname@hostnameyPool/systemname2

#Удаляем файловую систему. Если существуют файловые системы-наследники, надо использовать ключ -f
zfs destroy MyPool/systemname

Как видите, ничего сложного с ZFS на начальном этапе нет. Очень и очень гибкая штука.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.