Как установить и настроить ZFS в Linux с помощью Debian Jessie 8.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 надежна, масштабируема и проста в администрировании.