diff options
Diffstat (limited to 'ru-ru/zfs-ru.html.markdown')
| -rw-r--r-- | ru-ru/zfs-ru.html.markdown | 406 | 
1 files changed, 406 insertions, 0 deletions
diff --git a/ru-ru/zfs-ru.html.markdown b/ru-ru/zfs-ru.html.markdown new file mode 100644 index 00000000..46a3fbb5 --- /dev/null +++ b/ru-ru/zfs-ru.html.markdown @@ -0,0 +1,406 @@ +--- +category: tool +tool: zfs +contributors: +    - ["sarlalian", "http://github.com/sarlalian"] +    - ["A1EF", "https://github.com/A1EF"] +filename: LearnZfs-ru.txt +translators: +    - ["A1EF", "https://github.com/A1EF"] +lang: ru-ru +--- + + +[ZFS](http://open-zfs.org/wiki/Main_Page) +представляет собой переосмысление системы хранения данных, комбинирующее в едином инструменте +традиционные файловые системы и системы управления томами. ZFS обладает некоторой специфичной +терминологией, которая отличает её от более традиционных систем хранения данных, однако имеет +отличный набор возможностей, акцентированных на удобстве использования системными администраторами. + + +## Концепции ZFS + +### Виртуальные устройства + +Виртуальное устройство (VDEV) подобно устройству RAID, представляемого RAID-контроллером. +Есть несколько типов виртуальных устройств (VDEV), которые предлагают различные преимущества, +включая отказоустойчивость и скорость доступа. В основном виртуальные устройства (VDEV) +предоставляют лучшую отказоустойчивость и безопасность, нежели RAID-контроллеры. Не рекомендуется +использовать установку RAID с ZFS, поскольку ZFS рассчитывает непосредственно управлять дисками. + +Типы виртуальных устройств (VDEV) + +* mirror (поддерживается n-кратное зеркалирование) +* raidz +	* raidz1 (1-диск четности, аналог RAID 5) +	* raidz2 (2-диска четности, аналог RAID 6) +	* raidz3 (3-диска четности, нет имеет аналогичного RAID-массива) +* disk +* file (не рекомендовано для промышленного применения из-за добавления нежелательного промежуточного слоя иной файловой системы) + +Ваши данные распределяются среди всех виртуальных устройств (VDEV), представленных в пуле хранения, +так что увеличив число виртуальных устройств (VDEV), вы увеличите количество IOPS. + +### Пулы хранения + +ZFS использует пулы хранения как абстракцию над нижним уровнем провайдера хранения (VDEV), позволяя вам отделить видимые пользователю +файловые системы от физического их размещения. + +### ZFS датасеты + +ZFS датасеты подобны традиционным файловым системам, но имеют гораздо больше возможностей, обеспечивающих обилие преимуществ ZFS. +Датасеты поддерживают [Copy on Write](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8), снапшоты, квоты, сжатие и дедубликацию. + + +### Ограничения + +Один каталог может содержать до 2^48 файлов, каждый до 16 эксабайт. Один пул хранения может содержать до 256 зеттабайт (2^78) данных +и может быть распределён по 2^64 устройствам. А один хост может иметь 2^64 пула хранения. Лимиты огромны. + + +## Команды + +### Пулы хранения + +Действия: + +* Просмотр +* Статус +* Удаление +* Получение/установка свойств + +Просмотр пулов + +```bash +# Создание пула типа raidz +$ zpool create zroot raidz1 gpt/zfs0 gpt/zfs1 gpt/zfs2 + +# Просмотр пулов +$ zpool list +NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT +zroot   141G   106G  35.2G         -    43%    75%  1.00x  ONLINE  - + +# Просмотр детализованной информации о конкретном пуле +$ zpool list -v zroot +NAME                                     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP HEALTH  ALTROOT +zroot                                    141G   106G  35.2G         -    43%    75%  1.00x ONLINE  - +  gptid/c92a5ccf-a5bb-11e4-a77d-001b2172c655   141G   106G  35.2G         -    43%    75% +``` + +Статус пулов + +```bash +# Получение информации о статусе пулов +$ zpool status +  pool: zroot + state: ONLINE +  scan: scrub repaired 0 in 2h51m with 0 errors on Thu Oct  1 07:08:31 2015 +config: + +        NAME                                          STATE     READ WRITE CKSUM +        zroot                                         ONLINE       0     0     0 +          gptid/c92a5ccf-a5bb-11e4-a77d-001b2172c655  ONLINE       0     0     0 + +errors: No known data errors + +# Скрабинг пула для исправления любых ошибок +$ zpool scrub zroot +$ zpool status -v zroot +  pool: zroot + state: ONLINE +  scan: scrub in progress since Thu Oct 15 16:59:14 2015 +        39.1M scanned out of 106G at 1.45M/s, 20h47m to go +        0 repaired, 0.04% done +config: + +        NAME                                          STATE     READ WRITE CKSUM +        zroot                                         ONLINE       0     0     0 +          gptid/c92a5ccf-a5bb-11e4-a77d-001b2172c655  ONLINE       0     0     0 + +errors: No known data errors +``` + +Свойства пулов + +```bash + +# Получение свойств пула, свойства могут быть заданы пользователем или системой. +$ zpool get all zroot +NAME   PROPERTY                       VALUE                          SOURCE +zroot  size                           141G                           - +zroot  capacity                       75%                            - +zroot  altroot                        -                              default +zroot  health                         ONLINE                         - +... + +# Установка значения свойства пула +$ zpool set comment="Storage of mah stuff" zroot +$ zpool get comment +NAME   PROPERTY  VALUE                 SOURCE +tank   comment   -                     default +zroot  comment   Storage of mah stuff  local +``` + +Удаление пула + +```bash +$ zpool destroy test +``` + + +### Датасеты + +Действия: + +* Создание +* Просмотр +* Переименование +* Удаление +* Получение/установка свойств + +Создание датасетов + +```bash +# Создание датасета +$ zfs create zroot/root/data +$ mount | grep data +zroot/root/data on /data (zfs, local, nfsv4acls) + +# Создание дочернего датасета +$ zfs create zroot/root/data/stuff +$ mount | grep data +zroot/root/data on /data (zfs, local, nfsv4acls) +zroot/root/data/stuff on /data/stuff (zfs, local, nfsv4acls) + + +# Создание тома +$ zfs create -V zroot/win_vm +$ zfs list zroot/win_vm +NAME                 USED  AVAIL  REFER  MOUNTPOINT +zroot/win_vm         4.13G  17.9G    64K  - +``` + +Просмотр датасетов + +```bash +# Просмотр всех датасетов +$ zfs list +NAME                                                                       USED  AVAIL  REFER  MOUNTPOINT +zroot                                                                      106G  30.8G   144K  none +zroot/ROOT                                                                18.5G  30.8G   144K  none +zroot/ROOT/10.1                                                              8K  30.8G  9.63G  / +zroot/ROOT/default                                                        18.5G  30.8G  11.2G  / +zroot/backup                                                              5.23G  30.8G   144K  none +zroot/home                                                                 288K  30.8G   144K  none +... + +# Просмотр конкретного датасета +$ zfs list zroot/home +NAME         USED  AVAIL  REFER  MOUNTPOINT +zroot/home   288K  30.8G   144K  none + +# Просмотр снапшотов +$ zfs list -t snapshot +zroot@daily-2015-10-15                                                                  0      -   144K  - +zroot/ROOT@daily-2015-10-15                                                             0      -   144K  - +zroot/ROOT/default@daily-2015-10-15                                                     0      -  24.2G  - +zroot/tmp@daily-2015-10-15                                                           124K      -   708M  - +zroot/usr@daily-2015-10-15                                                              0      -   144K  - +zroot/home@daily-2015-10-15                                                             0      -  11.9G  - +zroot/var@daily-2015-10-15                                                           704K      -  1.42G  - +zroot/var/log@daily-2015-10-15                                                       192K      -   828K  - +zroot/var/tmp@daily-2015-10-15                                                          0      -   152K  - +``` + +Переименование датасетов + +```bash +$ zfs rename zroot/root/home zroot/root/old_home +$ zfs rename zroot/root/new_home zroot/root/home +``` + +Удаление датасета + +```bash +# Датасеты не могут быть удалены, если у них имеются какие-то снапшоты +$ zfs destroy zroot/root/home +``` + +Получение / установка свойств датасета + +```bash +# Получение всех свойств +$ zfs get all zroot/usr/home +NAME            PROPERTY              VALUE                  SOURCE +zroot/home      type                  filesystem             - +zroot/home      creation              Mon Oct 20 14:44 2014  - +zroot/home      used                  11.9G                  - +zroot/home      available             94.1G                  - +zroot/home      referenced            11.9G                  - +zroot/home      mounted               yes                    - +... + +# Получения свойства для датасета +$ zfs get compression zroot/usr/home +NAME            PROPERTY     VALUE     SOURCE +zroot/home      compression  off       default + +# Установка значения свойства на датасете +$ zfs set compression=lz4 zroot/lamb + +# Получение значений выбранных свойств всех датасетов +$ zfs list -o name,quota,reservation +NAME                                                               QUOTA  RESERV +zroot                                                               none    none +zroot/ROOT                                                          none    none +zroot/ROOT/default                                                  none    none +zroot/tmp                                                           none    none +zroot/usr                                                           none    none +zroot/home                                                          none    none +zroot/var                                                           none    none +... +``` + + +### Снапшоты + +ZFS снапшоты -- одна из очень важных особенностей zfs + +* Место, которое они занимают, равно разнице данных между файловой системой и её снапшотом +* Время создания занимает считанные секунды +* Восстановление настолько быстро, насколько позволяет вам запись данных +* Они очень просты в автоматизации + +Действия: + +* Создание +* Удаление +* Переименование +* Получение доступа к снапшотам +* Отправка / Получение +* Клонирование + + +Создание снапшотов + +```bash +# Создание снапшота единственного датасета +zfs snapshot zroot/home/sarlalian@now + +# Создание снапшота для родительского и дочерних датасетов +$ zfs snapshot -r zroot/home@now +$ zfs list -t snapshot +NAME                       USED  AVAIL  REFER  MOUNTPOINT +zroot/home@now                 0      -    26K  - +zroot/home/sarlalian@now       0      -   259M  - +zroot/home/alice@now           0      -   156M  - +zroot/home/bob@now             0      -   156M  - +... +``` + +Удаление снапшотов + +```bash +# Как удалить снапшот +$ zfs destroy zroot/home/sarlalian@now + +# Удаление снапшота в родительском и дочерних датасетах +$ zfs destroy -r zroot/home/sarlalian@now + +``` + +Переименование снапшотов + +```bash +# Переименование снапшота +$ zfs rename zroot/home/sarlalian@now zroot/home/sarlalian@today +$ zfs rename zroot/home/sarlalian@now today + +$ zfs rename -r zroot/home@now @yesterday +``` + +Получение доступа к спапшотам + +```bash +# CD в каталог снапшота +$ cd /home/.zfs/snapshot/ +``` + +Отправка и получение + +```bash +# Сохранение снапшота в файл +$ zfs send zroot/home/sarlalian@now | gzip > backup_file.gz + +# Отправка снапшота в другой датасет +$ zfs send zroot/home/sarlalian@now | zfs recv backups/home/sarlalian + +# Отправка снапшота на удаленный хост +$ zfs send zroot/home/sarlalian@now | ssh root@backup_server 'zfs recv zroot/home/sarlalian' + +# Отправка полного датасета со снапшотами на новый хост +$ zfs send -v -R zroot/home@now | ssh root@backup_server 'zfs recv zroot/home' +``` + +Клонирование снапшотов + +```bash +# Клонирование снапшота +$ zfs clone zroot/home/sarlalian@now zroot/home/sarlalian_new + +# Повышение клона, чтобы он больше не зависел от снапшота +$ zfs promote zroot/home/sarlalian_new +``` + +### Собираем всё вместе + +Нижеследующий скрипт использует FreeBSD, jails и ZFS для автоматизации +подготовки чистой копии стейджинговой базы mysql с живой реплики слейв-ноды. + +```bash +#!/bin/sh + +echo "==== Остановка стейджингового сервера баз данных ====" +jail -r staging + +echo "==== Очистка существующих стейджингового сервера и снапшота ====" +zfs destroy -r zroot/jails/staging +zfs destroy zroot/jails/slave@staging + +echo "==== Фиксация базы на слейве ====" +echo "FLUSH TABLES WITH READ LOCK;" | /usr/local/bin/mysql -u root -pmyrootpassword -h slave + +echo "==== Сохранение снапшота файлов базы слейва как zroot/jails/slave@staging ====" +zfs snapshot zroot/jails/slave@staging + +echo "==== Запуск слейв-ноды сервера баз данных ====" +jail -c slave + +echo "==== Клонирование снапшота слейва на стейджинговый сервер ====" +zfs clone zroot/jails/slave@staging zroot/jails/staging + +echo "==== Установка конфига стейджингово mysql ====" +mv /jails/staging/usr/local/etc/my.cnf /jails/staging/usr/local/etc/my.cnf.slave +cp /jails/staging/usr/local/etc/my.cnf.staging /jails/staging/usr/local/etc/my.cnf + +echo "==== Настройка стейджингового файла rc.conf ====" +mv /jails/staging/etc/rc.conf.local /jails/staging/etc/rc.conf.slave +mv /jails/staging/etc/rc.conf.staging /jails/staging/etc/rc.conf.local + +echo "==== Запуск стейджингово сервера баз данных ====" +jail -c staging + +echo "==== Отключение синхронизации стейджинговой базы с мастером ====" +echo "STOP SLAVE;" | /usr/local/bin/mysql -u root -pmyrootpassword -h staging +echo "RESET SLAVE;" | /usr/local/bin/mysql -u root -pmyrootpassword -h staging +``` + + +### Почитать дополнительно + +* [BSDNow's Crash Course on ZFS](http://www.bsdnow.tv/tutorials/zfs) +* [FreeBSD Handbook on ZFS](https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/zfs.html) +* [BSDNow's Crash Course on ZFS](http://www.bsdnow.tv/tutorials/zfs) +* [Oracle's Tuning Guide](http://www.oracle.com/technetwork/articles/servers-storage-admin/sto-recommended-zfs-settings-1951715.html) +* [OpenZFS Tuning Guide](http://open-zfs.org/wiki/Performance_tuning) +* [FreeBSD ZFS Tuning Guide](https://wiki.freebsd.org/ZFSTuningGuide)  | 
