Zfs: различия между версиями
Vovan (обсуждение | вклад) (→Решение) |
Vovan (обсуждение | вклад) (→Дополнительные команды при вводе в кластер pve ноды) |
||
Строка 109: | Строка 109: | ||
ssh root@PVE_A "zfs send -i zfspool2/vm-401-disk-0@ok1" | pv --size 125413212048 | zfs receive -o compress=zle -A zfspool2/vm-402-disk-0 | ssh root@PVE_A "zfs send -i zfspool2/vm-401-disk-0@ok1" | pv --size 125413212048 | zfs receive -o compress=zle -A zfspool2/vm-402-disk-0 | ||
− | = | + | =Управление RAID массивами= |
− | + | ==Создать аналог RAID 1+0== | |
− | + | Собираем пулл zfs (аналог RAID 1+0) с именем zfspool из дисков /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2 | |
− | + | Первый шаг - создаём зеркало из первых двух | |
− | |||
− | |||
− | |||
− | / | + | zpool create -f -o ashift=12 zfspool mirror /dev/sda2 /dev/sdb2 |
− | + | Второй шаг - в уже созданный пулл добавляем ещё одно зеркало | |
− | / | + | zpool add zfspool mirror /dev/sdc2 /dev/sdd2 |
− | + | Получаем как бы пулл из двух зеркал. Пул в этом случае является страйпом (RAID0) из двух зеркал (RAID1) | |
− | + | Далее тюним для PVE. Отключаем сжатие и синхронизацию (экспериментально подобрано при эксплуатации PVE). | |
− | + | zfs set compression=off zfspool | |
− | + | zfs set sync=disabled zfspool | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Версия 21:01, 18 ноября 2023
Содержание
Полезные команды
Затюнить основные моменты на PVE
Отключить сжатие
zfs set compression=off rpool/data
Отключить sync
zfs set sync=disabled rpool/data
Просмотр параметров volume (внимание! - отсутствие слэша в начале - это важно)
zfs get all rpool/data/vm-100-disk-1
Аналогично - просмотр параметров пула (внимание! - слэш в начале - это важно)
zfs get all /rpool/data/
Создать volume с нужным размером блока (например, с размером блока равным размеру блока в ext4 гостевой машины по умолчанию)
zfs create -o volblocksize=4K -V 100g rpool/data/vm-100-disk-1
Проверить за собой
zfs get all rpool/data/vm-100-disk-1 | grep volblocksize
Создание дисков средствами вебинтерфейса проксмокс происходит с volblocksize=8K. Это не всегда удобно. Поэтому после создания виртмашины можно пересоздать так:
Удаляем диск
zfs destroy rpool/data/vm-100-disk-1
И создаём заново (как уже выше приводилась команда) - выключенная виртмашина ничего не заметит :-)
zfs create -o volblocksize=4K -V 100g rpool/data/vm-100-disk-1
Копирование данных через снапшоты
Просмотр списка
zfs list
Копирование
ssh root@192.168.10.123 "zfs send rpool/data/vm-106-disk-0@backup-01" | pv --size 469457889480 | zfs receive -o compress=zle storage-zfs/backup/vm-106-disk-0--DO-NOT-DELETE
создать снапшот
zfs snapshot storage-zfs/vm-206-disk-0@backup
список снапшотов
zfs list -t snapshot
посмотреть размер снапшота
zfs send -nvP storage-zfs/vm-206-disk-0@backup
должно быть на выходе что-то тпа того:
full storage-zfs/vm-206-disk-0@backup 654563209344 size 654563209344
установить размер для диска (обычно после копирования из снапшота)
set volsize=999G rpool/data/vm-206-disk-0
Работа с томами
Изменить размер (помни о файловой системе внутри!)
zfs set volsize=1000G rpool/data/vm-201-disk-1
Эксперимент
Задача
Быстро передавать состояние диска виртмашины между двумя узлами PVE.
Пусть по легенде у нас будет две виртуальных машины:
A -- виртмашина, на которой работает пользователь. Она расположена на узле PVE_A
B -- виртмашина, на которую нужно оперативно получать состояние диска машины A (изначально у нее диск или отсутствует или пустой). Она расположена на узле PVE_B
Между узлами PVE_A и PVE_B гигабитная сеть и доступ по ssh по ключам (условно можно считать что эти оба узла являются узлами одного кластера, но не обязательно. Т.е. могут быть и отдельными PVE-узлами, вне кластера).
Полностью передавать диски по сети -- ёмкая по времени задача. Чтобы минимизировать временнЫе затраты, в общем виде набор действий будет следующим:
Решение
1. Создаём снапшот на A. Пусть будет снапшот с названием
ok
2. Перемещаем снапшот в новый (пока ещё не существующий на первом этапе) диск машины B Для этого на машине PVE_B выполняем команду, вид которой в общем виде следующий:
ssh root@PVE_A "zfs send -R zfspool2/vm-401-disk-0@dfl" | pv --size 125413212048 | zfs receive -o compress=zle zfspool2/vm-402-disk-0 -F
3. Создаём второй снапшот на A. Пусть будет снпашот с названием
ok1
команда
zfs snapshot zfspool2/vm-401-disk-0@ok1
4. Перемещаем снапшот в снапшот созданного в п.2 диска на машине B
ssh root@PVE_A "zfs send -i zfspool2/vm-401-disk-0@ok1" | pv --size 125413212048 | zfs receive -o compress=zle -A zfspool2/vm-402-disk-0
Управление RAID массивами
Создать аналог RAID 1+0
Собираем пулл zfs (аналог RAID 1+0) с именем zfspool из дисков /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
Первый шаг - создаём зеркало из первых двух
zpool create -f -o ashift=12 zfspool mirror /dev/sda2 /dev/sdb2
Второй шаг - в уже созданный пулл добавляем ещё одно зеркало
zpool add zfspool mirror /dev/sdc2 /dev/sdd2
Получаем как бы пулл из двух зеркал. Пул в этом случае является страйпом (RAID0) из двух зеркал (RAID1)
Далее тюним для PVE. Отключаем сжатие и синхронизацию (экспериментально подобрано при эксплуатации PVE).
zfs set compression=off zfspool zfs set sync=disabled zfspool