Поиск по сайту:

Как установить и настроить ZFS в Linux с помощью Debian Jessie 8.1


На этой странице

  1. Предпосылки:

ZFS — это комбинированная файловая система и менеджер логических томов. Функции ZFS включают в себя защиту от повреждения данных, поддержку больших объемов хранилища, эффективное сжатие данных, интеграцию файловой системы и концепции управления томами, моментальные снимки и клоны с копированием при записи, непрерывную проверку целостности и автоматическое восстановление, RAID-Z и собственный ACL NFSv4.

Первоначально ZFS была реализована как программное обеспечение с открытым исходным кодом под лицензией Common Development and Distribution License (CDDL).

Говоря о файловой системе ZFS, мы можем выделить следующие ключевые понятия:

  • Целостность данных.
  • Простое администрирование хранилища с помощью всего двух команд: zfs и zpool.
  • Все можно сделать, пока файловая система подключена к сети.

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

В этом руководстве я шаг за шагом проведу вас через установку файловой системы ZFS на Debian 8.1 (Jessie). Я покажу вам, как создавать и настраивать пулы с помощью raid0 (страйп), raid1 (зеркало) и RAID-Z (рейд с контролем четности), и объясню, как настроить файловую систему с ZFS.

Согласно информации с веб-сайта www.zfsonlinux.org, ZFS поддерживается только в 64-разрядной архитектуре AMD64 и Intel (amd64). Приступим к настройке.

Предпосылки:

  • Debian 8 с 64-битным ядром.
  • привилегии root.

Шаг 1. Обновите репозиторий и обновите систему Debian Linux

Чтобы добавить репозиторий zfsonlinux в нашу систему, загрузите и установите пакет zfsonlinux, как показано ниже. Это добавит файлы /etc/apt/sources.list.d/zfsonlinux.list и /etc/apt/trusted.gpg.d/zfsonlinux.gpg на ваш компьютер. После этого вы можете установить zfs, как и любой другой пакет Debian, с помощью команды apt-get. Еще одним преимуществом использования репозитория zfsonlinux является то, что вы автоматически получаете обновления, запуская \apt-get update && apt-get upgrade\.

Войдите на сервер Debian с доступом по SSH, станьте пользователем root и выполните следующие команды.

# uname -a
Linux debian-zfs 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
# dpkg -i zfsonlinux_6_all.deb
# apt-get update

Шаг 2 — Установите zfsonlinux

Zfsonlinux имеет множество программных зависимостей, которые автоматически устанавливаются с помощью apt. Этот процесс займет некоторое время. По завершении установки перезагрузите сервер.

# apt-get install lsb-release
# apt-get install debian-zfs
# shutdown -r now

Шаг 3 — Создайте и настройте пул

После перезагрузки сервера убедитесь, что zfsonlinux установлен и работает нормально.

# dpkg -l | grep zfs
ii  debian-zfs                     7~jessie                    amd64        Native ZFS filesystem metapackage for Debian.
ii  libzfs2                        0.6.5.2-2                   amd64        Native ZFS filesystem library for Linux
ii  zfs-dkms                       0.6.5.2-2                   all          Native ZFS filesystem kernel modules for Linux
ii  zfsonlinux                     6                           all          archive.zfsonlinux.org trust package
ii  zfsutils                       0.6.5.2-2                   amd64        command-line tools to manage ZFS filesystems

Приведенный выше результат показывает, что zfs в Linux уже установлен, поэтому мы можем продолжить создание первого пула.

Я добавил к этому серверу пять дисков, каждый размером 2 ГБ. Мы можем проверить доступные диски с помощью этой команды:

# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde  /dev/sdf  /dev/sdg

Мы видим, что у нас есть /dev/sda, пока /dev/sdg, /dev/sda используется для операционной системы Debian Linux Jessie 8.1. Мы будем использовать /dev/sdb до /dev/sdg для файловой системы ZFS.

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

# zpool list
no pools available
# zpool create -f pool0 /dev/sdb
# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool0  1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -

Команда \список пулов\ показывает, что мы успешно создали один пул zfs raid0, имя пула - pool0, и размер - 2GB.

Затем создайте RAID1 (зеркало) с другими дисками.

# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool0  1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -
pool1  1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -

Мы видим, что теперь у нас есть два пула: pool0 для raid0 и pool1 для raid1.

Чтобы проверить состояние пулов, мы можем использовать следующую команду:

# zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool0       ONLINE       0     0     0
          sdb       ONLINE       0     0     0

errors: No known data errors

  pool: pool1
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool1       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0

errors: No known data errors

Мы можем проверить статус пула с помощью команды «zpool status». Мы видим разницу между pool0 и pool1, у pool0 только один диск, а у pool1 два диска и состояние дисков — зеркало (mirror-0).

Затем создайте пул с RAID-Z. RAID-Z — это схема распределения данных/четности, аналогичная RAID-5, но в ней используется динамическая ширина полосы: каждый блок имеет свою собственную полосу RAID, независимо от размера блока, что приводит к каждая запись RAID-Z является записью с полным чередованием.

Для RAID-Z требуется как минимум три жестких диска, и это своего рода компромисс между RAID 0 и RAID 1. В пуле RAID-Z: если один диск в вашем пуле выходит из строя, просто замените этот диск, и ZFS автоматически восстановит данные. на основе информации о четности с других дисков. Чтобы потерять всю информацию в вашем пуле хранения, два диска должны выйти из строя. Чтобы сделать настройку диска еще более избыточной, вы можете использовать RAID 6 (RAID-Z2 в случае ZFS), чтобы получить двойную четность.

Давайте сначала создадим пул RAID-Z с одной четностью.

# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
poolz1  5.94G   117K  5.94G         -     0%     0%  1.00x  ONLINE  -
# zpool status poolz1
  pool: poolz1
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        poolz1      ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0
            sdg     ONLINE       0     0     0

errors: No known data errors
# df -h /poolz1
Filesystem      Size  Used Avail Use% Mounted on
poolz1          3.9G     0  3.9G   0% /poolz1

Как мы видим, df -h показывает, что наш пул из 6 ГБ теперь уменьшен до 4 ГБ, 2 ГБ используются для хранения информации о четности. С помощью команды zpool status мы видим, что наш пул теперь использует RAID-Z.

Затем создайте RAID-Z2 (raid 6), для этого нам нужно удалить существующий пул, потому что больше нет доступных дисков. Удалить пул очень просто, для этого мы можем использовать команду zpool destroy.

# zpool list
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool0   1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -
pool1   1.98G    64K  1.98G         -     0%     0%  1.00x  ONLINE  -
poolz1  5.94G   117K  5.94G         -     0%     0%  1.00x  ONLINE  -
# zpool destroy pool0
# zpool destroy pool1
# zpool destroy poolz1
# zpool list
no pools available

Теперь все наши zpool удалены, поэтому мы можем создать пул RAID-Z2.

# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
poolz2  7.94G   135K  7.94G         -     0%     0%  1.00x  ONLINE  -
# df -h /poolz2
Filesystem      Size  Used Avail Use% Mounted on
poolz2          3.9G     0  3.9G   0% /poolz2
# zpool status poolz2
  pool: poolz2
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        poolz2      ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

Как мы видим, df -h показывает, что наш пул из 8 ГБ теперь уменьшен до 4 ГБ, поскольку 4 ГБ используются для хранения информации о четности дважды. С помощью команды «zpool status» мы видим, что наш пул теперь использует RAID-Z2.

Шаг 4. Смоделируйте сбой диска

На этом шаге мы смоделируем катастрофический сбой диска (т. е. один из жестких дисков в zpool перестанет работать).

Создайте файл в poolz2 и убедитесь, что мы можем получить к нему доступ.

# echo "Test Only" > /poolz2/test.txt
# cat /poolz2/test.txt
Test Only

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

Сбой имитируется путем записи случайных данных с помощью команды dd в /dev/sdb.

# dd if=/dev/urandom of=/dev/sdb bs=1024 count=20480
# zpool scrub poolz2
# zpool status
  pool: poolz2
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-9P
  scan: scrub repaired 17K in 0h0m with 0 errors on Tue Dec  8 22:37:49 2015
config:

        NAME        STATE     READ WRITE CKSUM
        poolz2      ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0    25
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

Теперь мы видим, что на одном или нескольких дисках произошла неисправимая ошибка, поэтому мы должны заменить диск. В этом случае мы заменяем диск /dev/sdb на /dev/sdf.

# zpool replace poolz2 sdb sdf
# zpool status
  pool: poolz2
 state: ONLINE
  scan: resilvered 49.5K in 0h0m with 0 errors on Tue Dec  8 22:43:35 2015
config:

        NAME        STATE     READ WRITE CKSUM
        poolz2      ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdf     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

После того, как мы заменили /dev/sdb на /dev/sdf, ошибка исчезла, и мы по-прежнему можем получить доступ к созданному ранее тестовому файлу.

# cat /poolz2/test.txt
Test Only

До этого шага мы знали, как создать и настроить zpool.

Шаг 5. Создайте и настройте файловую систему ZFS.

На следующем шаге вы узнаете, как создать и настроить файловую систему ZFS.

# zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
poolz2   105K  3.83G  26.1K  /poolz2

У нас уже есть одна файловая система ZFS, она автоматически добавляется при создании zpool. Теперь мы создадим еще одну файловую систему ZFS.

# zfs create poolz2/tank
# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
poolz2        132K  3.83G  26.1K  /poolz2
poolz2/tank  25.4K  3.83G  25.4K  /poolz2/tank
# df -h | grep poolz2
poolz2          3.9G  128K  3.9G   1% /poolz2
poolz2/tank     3.9G  128K  3.9G   1% /poolz2/tank

Очень легко да? Мы создаем новую файловую систему ZFS с именем tank и автоматически монтируем ее как /poolz2/tank.

Как создать пользовательскую точку монтирования для файловой системы ZFS? Используйте команду ниже:

# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/tank     3.9G     0  3.9G   0% /poolz2/tank
poolz2/data     3.9G     0  3.9G   0% /data

Как изменить существующую точку монтирования? Мы можем сделать это с помощью команды ниже:

# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/data     3.9G     0  3.9G   0% /data
poolz2/tank     3.9G     0  3.9G   0% /tank

Чтобы смонтировать и размонтировать файловую систему, используйте следующую команду:

# zfs unmount /data
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/tank     3.9G     0  3.9G   0% /tank
# zfs mount poolz2/data
# df -h | grep poolz2
poolz2          3.9G     0  3.9G   0% /poolz2
poolz2/tank     3.9G     0  3.9G   0% /tank
poolz2/data     3.9G     0  3.9G   0% /data

Удалить файловую систему zfs очень просто, для этого мы можем использовать команду zfs destroy.

# zfs destroy poolz2/data
# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
poolz2        152K  3.83G  26.1K  /poolz2
poolz2/tank  25.4K  3.83G  25.4K  /tank

Файловая система /data исчезла.

Заключение

Файловая система ZFS — это революционно новая файловая система, которая коренным образом меняет способ администрирования файловых систем в Unix-подобных операционных системах. ZFS предоставляет функции и преимущества, которых нет ни в одной другой файловой системе, доступной сегодня. ZFS надежна, масштабируема и проста в администрировании.