Наши новости могут транслироваться, используя rss.
FAQ
FAQ #76
Файловая система ZFS
Взято отсюда и чуть добавлено. Нвписано про солярис, но фря тоже умеет использовать этот тип фс, а мне он достался в VPS.
Заметил, что на Хабре много статей про ZFS. И вот, решил написать краткое руководство, как же этой ZFS пользоваться. В качестве ОС буду рассматривать Solaris, т.к. ZFS изначально разрабатывалась для Соляры да и познакомился с ZFS я именно там. Понимаю, что мало у кого стоит Open Solaris на десктопе, а администраторы Solaris и так должны это знать. Но может кому и пригодится.
Для начала, что же такое ZFS и в чем ее преимущества перед существующими файловыми системами. Приведу лишь краткий список плюсов ZFS.
ZFS является 128 битной файловой системой. Максимальный размер пула — 16 экзабайт (18млн Терабайт) Максимальное количество файлов в одном пуле — 20х1012 . ZFS является self-healing системой. ZFS использует 256-битный контрольные суммы для проверки данных. Позволяет добавлять пулы или же наращивать емкость пула без остановки системы или же приложений Очень гибкая организация 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 -
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:
Заметьте, что снимок (snapshot) захватит реальную файловую систему, а не домашний каталог или файл. Символ @ отделяет имя файловой системы или имя тома от имени снимка. Когда возникнет необходимость восстановить пользовательские домашние каталоги, выполните следующую команду:
# zfs rollback storage/home@08-30-08
Чтобы получить список имеющихся в наличии снимков, выполните команду ls в каталоге .zfs/snapshot. Например, чтобы увидеть сделанный ранее снимок, выполните следующую команду:
Пошаговое руководство по работе со снапшотами, клонами и репликами ZFS — самыми мощными её функциями.
Содержание Снапшоты ZFS: обзор
Снапшот — моментальная копия файловой системы или тома, не требующая дополнительного места в пуле ZFS. Дисковое пространство требуется только для записи изменённых блоков: записываются только различия между текущим набором данных и предыдущей его версией.
Типичный пример использования снапшота — быстрое получение резервной копии файловой системы перед выполнением рискованных действий вроде установки нового софта или обновления системы. Создание и удаление снапшотов
Снимки томов напрямую недоступны, но их можно клонировать, бэкапить и восстанавливать. Для создания и удаления снапшотов используются команды zfs snapshot и zfs destroy
Создаём пул с именем datapool:
# zpool create datapool mirror /dev/sdb /dev/sdc # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT datapool 1.98G 65K 1.98G - 0% 0% 1.00x ONLINE -
Имея пул с именем datapool, надо создать файловую систему ZFS для моделирования функций снапшота:
# zfs create datapool/docs -o mountpoint=/docs # zfs list -r datapool NAME USED AVAIL REFER MOUNTPOINT datapool 93.5K 1.92G 19K /datapool datapool/docs 19K 1.92G 19K /docs
Для создания снапшота используется команда zfs snapshot с указанием имени пула и имени снапшота. Имя снапшота должно выглядеть так:
filesystem@snapname
или
volume@snapname
То есть:
# zfs snapshot datapool/docs@version1 # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT datapool/docs@version1 0 - 19.5K -
Теперь снапшот datapool/docs создан.
Для удаления снапшота используется команда zfs destroy:
# zfs destroy datapool/docs@version1 # zfs list -t snapshot no datasets available
Откат снапшота
Для моделирования процесса нужно создать тестовый файл в каталоге /docs:
И теперь можно вернуть файловую систему в то состояние, в котором она была в момент создания предыдущей копии:
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT datapool/docs@version1 9.50K - 19.5K - # zfs rollback datapool/docs@version1 # cat /docs/data.txt version 1
Из вывода последней команды можно видеть, что содержимое файла data.txt стало прежним (то есть соответствует версии 1).
Для переименования снапшота можно использовать команду zfs rename:
# zfs rename datapool/docs@version1 datapool/docs@version2 # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT datapool/docs@version2 9.50K - 19.5K -
Примечание: набор данных нельзя удалить, если существуют его снапшоты. Но это можно сделать, используя опцию -r. То есть так не получится:
# zfs destroy datapool/docs cannot destroy 'datapool/docs': filesystem has children use '-r' to destroy the following datasets: datapool/docs@version2
А получится так:
# zfs destroy -r datapool/docs # zfs list -t snapshot no datasets available
Клоны ZFS: обзор
Клон — это том или файловая система, доступные для записи, содержимое которых совпадает с набором данных, из которых они были созданы. Создание и удаление клонов
Клон можно создать только из снапшота, и снапшот нельзя удалить, пока не удалён его клон. Для создания клона используется команда zfs clone.
Создание файловой системы:
# zfs create datapool/docs -o mountpoint=/docs # zfs list -r datapool NAME USED AVAIL REFER MOUNTPOINT datapool 93.5K 1.92G 19K /datapool datapool/docs 19K 1.92G 19K /docs
# zfs snapshot datapool/docs@today # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT datapool/docs@today 0 - 19K -
Создание клона снапшота datapool/docs@today:
# zfs clone datapool/docs@today datapool/pict # zfs list NAME USED AVAIL REFER MOUNTPOINT datapool 166K 1.92G 19K /datapool datapool/docs 19K 1.92G 19K /docs datapool/pict 1K 1.92G 19K /datapool/pict
Процесс клонирования закончен, снапшот datapool/docs@today был клонирован в datapool/pict. Проверка показывает, что содержимое их одинаково:
# ls /datapool/pict folder1 folder2 folder3 folder4 folder5
После клонирования снапшота его нельзя удалить, пока не удалён клон:
# zfs destroy datapool/docs@today cannot destroy 'datapool/docs@today': snapshot has dependent clones use '-R' to destroy the following datasets: datapool/pict
Удаление клона:
# zfs destroy datapool/pict
Теперь, наконец, можно удалить снапшот:
# zfs destroy datapool/docs@today # zfs list -t snapshot no datasets available
Реплики ZFS: обзор
Репликация ZFS основана на снапшотах, которые можно создавать в любое время и в любом количестве. Постоянно создавая, перемещая и восстанавливая снапшоты, можно обеспечить синхронизацию между одной или несколькими машинами. ZFS предоставляет встроенную функцию сериализации, которая может отправлять потоковое представление данных на стандартный вывод. Конфигурирование реплик
В этом разделе я хочу показать вам, как реплицировать набор данных из datapool в backuppool. Но можно не только хранить данные одного пула в другом локальном пуле, но и отправлять по сети в другую систему. Для репликации данных используются команды zfs send и zfs receive.
Создание нового пула с именем backuppool:
# zpool create backuppool mirror sde sdf # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT backuppool 1.98G 50K 1.98G - 0% 0% 1.00x ONLINE - datapool 1.98G 568K 1.98G - 0% 0% 1.00x ONLINE -
Снапшоты, ктоны и реплиуи — самые мощные функции ZFS. Снапшоты используются для периодического создания копий файловых систем, клоны — для создания дублирующих наборов данных, реплики — для переноса набора данных из одного пула данных в другой на той же машине, или для переноса между машинами.