Базовая шпаргалка по работе с пулами (RAID1 и RAIDZ)
Инвентаризация дисков
1.1. Посмотреть, какие диски есть в системе
lsblk -o NAME,SIZE,MODEL,SERIAL,TYPE |
1.2. Посмотреть SMART по конкретному диску
smartctl -a /dev/sda |
Перед использованием диска под ZFS имеет смысл убедиться, что:
Reallocated_Sector_Ct = 0
Current_Pending_Sector = 0
Offline_Uncorrectable = 0
Переменные для дисков
Можно не писать каждый раз /dev/sdX вручную, а завести переменные:
DISK1=/dev/sda
DISK2=/dev/sdb
PART1=${DISK1}1
PART2=${DISK2}1 |
| ВНИМАНИЕ: перед выполнением команд обязательно проверить, что DISK1/DISK2 указывают на НУЖНЫЕ диски, на которых можно стереть всё. |
Сценарий: сейчас есть один диск (например, Toshiba P300), делаем из него пул hddpool. Позже добавим второй такой же диск и превратим пул в зеркало.
3.1. Очистка диска
wipefs -a "$DISK1" sgdisk --zap-all "$DISK1" |
3.2. Создание ZFS-раздела
sgdisk -n1:0:0 -t1:BF01 "$DISK1" sgdisk -p "$DISK1" |
3.3. Создание ZFS-пула из одного диска
zpool create -f hddpool "$PART1" \ -o ashift=12 \ -O compression=lz4 \ -O atime=off \ -O xattr=sa \ -O acltype=posixacl |
Пояснения к параметрам:
ashift=12 — оптимальный размер блока под современные диски (4K-секторы).
compression=lz4 — лёгкая компрессия, почти не нагружает CPU, часто экономит место.
atime=off — не обновлять время последнего доступа при чтении (меньше лишних записей).
xattr=sa — хранить extended attributes в инодах (меньше мелкого мусора).
acltype=posixacl — поддержка POSIX ACL.
3.4. Проверка пула
zpool status hddpool zfs list |
Делается через веб-интерфейс:
Datacenter → Storage → Add → ZFS.
Поля:
ID: hddpool (или своё имя)
ZFS Pool: hddpool
Content: Disk image, Container, при необходимости ISO, Snippets.
Нажать Add.
После этого пул можно использовать как storage для дисков ВМ/контейнеров.
Когда появляется второй диск (DISK2):
5.1. Очистка второго диска
wipefs -a "$DISK2" sgdisk --zap-all "$DISK2" |
5.2. Создание ZFS-раздела на втором диске
sgdisk -n1:0:0 -t1:BF01 "$DISK2" sgdisk -p "$DISK2" |
5.3. Превращение пула в зеркало
zpool attach hddpool "$PART1" "$PART2" |
5.4. Проверка статуса и ожидание resilver
zpool status hddpool |
Пока идёт ресилвер, будет видно процесс. После завершения конфиг должен быть примерно таким: |
Теперь hddpool — полноценное ZFS-зеркало (аналог RAID1).
6.1. Проверить статус пула
zpool status zpool status hddpool |
6.2. Список файловых систем/датасетов
zfs list zfs list -r hddpool |
6.3. Запуск scrub (проверка целостности)
zpool scrub hddpool |
6.4. Просмотр состояния scrub
zpool status hddpool |
6.5. Детач диска из зеркала (если нужно убрать старый диск)
zpool detach hddpool /dev/sdb1 |
6.6. Замена диска (replace)
Если старый диск начал сыпаться и ты вставил новый:
zpool replace hddpool /dev/sdb1 /dev/sdc1 |
В ZFS классические уровни:
raidz1 ≈ RAID5 (одна «паритетная» копия).
raidz2 ≈ RAID6 (две «паритетные» копии).
raidz3 — тройной паритет.
Важно: классический ZFS НЕ умеет просто “докидывать по одному диску в существующий raidz”.
|
7.1. Пример создания пула RAIDZ1 (аналог RAID5)
3 диска, один паритет:
DISK1=/dev/sdb
DISK2=/dev/sdc
DISK3=/dev/sdd
sgdisk --zap-all "$DISK1" "$DISK2" "$DISK3"
sgdisk -n1:0:0 -t1:BF01 "$DISK1"
sgdisk -n1:0:0 -t1:BF01 "$DISK2"
sgdisk -n1:0:0 -t1:BF01 "$DISK3"
zpool create -f datapool \
raidz1 ${DISK1}1 ${DISK2}1 ${DISK3}1 \
-o ashift=12 \
-O compression=lz4 \
-O atime=off \
-O xattr=sa \
-O acltype=posixacl |
7.2. Пример создания пула RAIDZ2 (аналог RAID6)
4 диска, два паритета:
DISK1=/dev/sdb
DISK2=/dev/sdc
DISK3=/dev/sdd
DISK4=/dev/sde
sgdisk --zap-all "$DISK1" "$DISK2" "$DISK3" "$DISK4"
sgdisk -n1:0:0 -t1:BF01 "$DISK1"
sgdisk -n1:0:0 -t1:BF01 "$DISK2"
sgdisk -n1:0:0 -t1:BF01 "$DISK3"
sgdisk -n1:0:0 -t1:BF01 "$DISK4"
zpool create -f datapool \
raidz2 ${DISK1}1 ${DISK2}1 ${DISK3}1 ${DISK4}1 \
-o ashift=12 \
-O compression=lz4 \
-O atime=off \
-O xattr=sa \
-O acltype=posixacl |