Базовая шпаргалка по работе с пулами (RAID1 и RAIDZ)


  1. Инвентаризация дисков

1.1. Посмотреть, какие диски есть в системе


lsblk -o NAME,SIZE,MODEL,SERIAL,TYPE

1.2. Посмотреть SMART по конкретному диску


smartctl -a /dev/sda

Перед использованием диска под ZFS имеет смысл убедиться, что:


  1. Переменные для дисков

Можно не писать каждый раз /dev/sdX вручную, а завести переменные:


DISK1=/dev/sda
DISK2=/dev/sdb
PART1=${DISK1}1
PART2=${DISK2}1


ВНИМАНИЕ: перед выполнением команд обязательно проверить, что DISK1/DISK2 указывают на НУЖНЫЕ диски, на которых можно стереть всё.

  1. Создание одно-дискового ZFS-пула (с прицелом на будущее зеркало)

Сценарий: сейчас есть один диск (например, 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

Пояснения к параметрам:

3.4. Проверка пула


zpool status hddpool
zfs list


  1. Добавление ZFS-пула в Proxmox в качестве хранилища

Делается через веб-интерфейс:

  1. Datacenter → Storage → Add → ZFS.

  2. Поля:

  3. Нажать Add.

После этого пул можно использовать как storage для дисков ВМ/контейнеров.


  1. Превращение одно-дискового пула в зеркало (RAID1)

Когда появляется второй диск (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



Пока идёт ресилвер, будет видно процесс. После завершения конфиг должен быть примерно таким:

pool: hddpool
 state: ONLINE
config:

    NAME        STATE     READ WRITE CKSUM
    hddpool     ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sda1    ONLINE       0     0     0
        sdb1    ONLINE       0     0     0

Теперь hddpool — полноценное ZFS-зеркало (аналог RAID1).


  1. Типовые команды обслуживания пула

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


  1. RAIDZ в ZFS (аналог RAID5/RAID6)

В ZFS классические уровни:


Важно: классический ZFS НЕ умеет просто “докидывать по одному диску в существующий raidz”.
Ширина raidz (количество дисков в vdev) задаётся при создании, и потом её обычно не меняют. Масштабирование делается:

  • либо добавлением второго vdev (ещё одного 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