Zfs: различия между версиями
Vovan (обсуждение | вклад) (→Управление RAID массивами (zfs)) |
Vovan (обсуждение | вклад) (→Выбросить раздел из пулла) |
||
Строка 165: | Строка 165: | ||
zpool detach zfspool sda2 | zpool detach zfspool sda2 | ||
+ | Если это пулл STRIPE то можно выбросить из него разлел, однако нужно иметь в виду что занятого места в пуле должно быть столько, сколько останется после отсоединения раздела от него. Т.е. пулл уменьшится. | ||
+ | |||
+ | Чтобы убрать раздел sda2 из страйпового пулла zfspool команда | ||
+ | |||
+ | zpool remove zfspool sda2 | ||
=Управление RAID массивами (mdadm)= | =Управление RAID массивами (mdadm)= |
Версия 12:11, 19 ноября 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 массивами (zfs)
Создать аналог 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
Проверить состояние пулла
Проверяем пулл с именем zfspool
zpool status zfspool
В ответ придёт что-то типа этого:
pool: zfspool state: ONLINE config: NAME STATE READ WRITE CKSUM zfspool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sda2 ONLINE 0 0 0 sdb2 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 sdc2 ONLINE 0 0 0 sdd2 ONLINE 0 0 0
Выбросить раздел из пулла
Например, нужно выбросить раздел sda2.
Тогда сначала делаем этот раздел OFFLINE
zpool offline zfspool sda2
Затем вынимаем из пулла
zpool detach zfspool sda2
Если это пулл STRIPE то можно выбросить из него разлел, однако нужно иметь в виду что занятого места в пуле должно быть столько, сколько останется после отсоединения раздела от него. Т.е. пулл уменьшится.
Чтобы убрать раздел sda2 из страйпового пулла zfspool команда
zpool remove zfspool sda2
Управление RAID массивами (mdadm)
Удалить диск из действующего RAID1
Пусть есть RAID1
cat /proc/mdstat Personalities : [raid1] md127 : active raid1 sda1[0] sdb1[1] sdd1[3] sdc1[2] 41942976 blocks [4/4] [UUUU]
Задача - удалить из него диски sda1 и sdb1
Для этого сначала помечаем диски сбойными
mdadm --fail /dev/md127 sda1 mdadm --fail /dev/md127 sdb1
Затем удаляем их из массива
mdadm --remove /dev/md127 sda1 mdadm --remove /dev/md127 sdb1
Проверяем результат
cat /proc/mdstat Personalities : [raid1] md127 : active raid1 sdd1[3] sdc1[2] 41942976 blocks [4/2] [__UU]
Как видимо, информация о двух отсутствующих дисках не исчезла. Если на место этих дисков не планируется добавление замены, то можно указать другое кличество дисков для зеркала.
Для этого выполнить команду
mdadm --grow /dev/md127 --raid-devices=2
Проверяем результат
cat /proc/mdstat Personalities : [raid1] md127 : active raid1 sdd1[1] sdc1[0] 41942976 blocks [2/2] [UU]