Подготовка дисков для пулов хранения LINSTOR

Как очистить метаданные дисков и подготовить физическое хранилище для LINSTOR

В этом руководстве описано, как подготовить физические диски к использованию с LINSTOR, если на них остались старые метаданные, мешающие автоматическому обнаружению.

Описание проблемы

При настройке хранилища на новых или повторно используемых узлах на физических дисках могут оставаться следы предыдущих установок:

  • суперблоки RAID
  • таблицы разделов
  • сигнатуры LVM
  • метаданные файловых систем

Эти старые метаданные не позволяют LINSTOR определить диски как доступное хранилище.

Симптомы

  1. linstor physical-storage list выводит пустой список или в нём отсутствуют диски
  2. Диски отображаются с неожиданными типами файловых систем (например, linux_raid_member)
  3. В пулах хранения виден только DfltDisklessStorPool без фактического хранилища

Диагностика

Настройка псевдонима для LINSTOR

Для удобного доступа к командам LINSTOR настройте псевдоним:

alias linstor='kubectl exec -n cozy-linstor deploy/linstor-controller -- linstor'

Проверка узлов LINSTOR

Выведите список узлов и проверьте их готовность:

linstor node list

В ожидаемом выводе все узлы должны находиться в состоянии Online.

Проверка пулов хранения

Проверьте текущие пулы хранения:

linstor storage-pool list

Проверка доступного физического хранилища

Проверьте, какие физические диски видит LINSTOR:

linstor physical-storage list

Если команда выводит пустой список или в нём нет ожидаемых дисков, скорее всего, на дисках остались старые метаданные и их нужно очистить.

Проверка состояния дисков на узле

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

# Вывести список подов LINSTOR satellite
kubectl get pod -n cozy-linstor -l app.kubernetes.io/component=linstor-satellite

# Проверить состояние дисков
kubectl exec -n cozy-linstor <satellite-pod-name> -c linstor-satellite -- \
  lsblk -f

В ожидаемом выводе у чистых дисков поле FSTYPE должно быть пустым:

NAME    FSTYPE LABEL UUID MOUNTPOINT
nvme0n1
nvme1n1

Если вы видите linux_raid_member, LVM2_member или другие типы файловых систем, диски нужно очистить.

Решение: очистка метаданных дисков

Шаг 1: определите системные диски

Перед очисткой определите, на каком диске установлен Talos. Проверьте конфигурацию Talos в файле nodes/<node-name>.yaml:

# In nodes/<node-name>.yaml
machine:
  install:
    disk: /dev/sda  # This disk should NOT be wiped

Как правило, системный диск - это /dev/sda, /dev/vda или похожее устройство.

Шаг 2: найдите конфигурацию узла

Если для развёртывания кластера вы использовали Talm, конфигурации узлов хранятся в файлах nodes/*.yaml в каталоге конфигурации кластера.

Каждый файл соответствует конкретному узлу (например, nodes/node1.yaml, nodes/node2.yaml).

Шаг 3: очистите диски

Выведите список всех дисков на узле:

talm -f nodes/<node-name>.yaml get disks

Очистите все несистемные диски:

talm -f nodes/<node-name>.yaml wipe disk nvme0n1 nvme1n1 nvme2n1 ...

Шаг 4: убедитесь, что диски чистые

После очистки убедитесь, что диски стали видны LINSTOR:

linstor physical-storage list

Теперь в ожидаемом выводе должны появиться ваши диски:

+----------------------------------------------------------------+
| Device    | Size       | Rotational |
|================================================================|
| /dev/nvme0n1 | 3.49 TiB   | False      |
| /dev/nvme1n1 | 3.49 TiB   | False      |
| ...          | ...        | ...        |
+----------------------------------------------------------------+

Также можно проверить непосредственно на узле:

kubectl exec -n cozy-linstor <satellite-pod-name> -c linstor-satellite -- \
  lsblk -f

У чистых дисков поле FSTYPE должно быть пустым.

Создание пулов хранения

Когда диски очищены, создайте пул хранения LINSTOR.

Для пулов хранения ZFS из нескольких дисков:

linstor physical-storage create-device-pool zfs <node-name> \
  /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 ... \
  --pool-name data \
  --storage-pool data

Убедитесь, что пул хранения создан:

linstor storage-pool list

Ожидаемый вывод:

+-----------------------------------------------------------------------+
| StoragePool | Node  | Driver | PoolName | FreeCapacity | TotalCapacity | State |
|=======================================================================|
| data        | node1 | ZFS    | data     | 47.34 TiB    | 47.62 TiB     | Ok    |
| data        | node2 | ZFS    | data     | 47.34 TiB    | 47.62 TiB     | Ok    |
+-----------------------------------------------------------------------+

Устранение неполадок

После очистки на дисках по-прежнему видны старые метаданные

Попробуйте очистку методом ZEROES для более тщательной обработки:

talm -f nodes/<node-name>.yaml wipe disk --method ZEROES nvme0n1

Этот метод записывает на диск нули: он занимает больше времени, но гарантирует полное удаление метаданных.

Ошибка «Zpool name already used»

Если нужно пересоздать пул хранения:

  1. Удалите его из LINSTOR:

    linstor storage-pool delete <node-name> <pool-name>
    
  2. Уничтожьте пул ZFS на узле:

    kubectl exec -n cozy-linstor <satellite-pod-name> -c linstor-satellite -- \
      zpool destroy <pool-name>
    
  3. Пересоздайте пул, указав все диски в одной команде.

Отказ в доступе на рабочих узлах

Рабочие узлы могут не разрешать прямой доступ к API Talos. Используйте под satellite для проверки состояния дисков:

kubectl exec -n cozy-linstor <satellite-pod-name> -c linstor-satellite -- lsblk -f

Если требуется очистить диски на рабочих узлах, убедитесь, что конфигурация узла разрешает доступ, или обратитесь к администратору кластера.

Краткая справка

КомандаОписание
linstor sp lВывести список пулов хранения
linstor ps lВывести список доступного физического хранилища
linstor ps cdp zfs <node> <disks> --pool-name <name> --storage-pool <name>Создать пул хранения ZFS
talm -f nodes/<node>.yaml wipe disk <disks>Очистить метаданные дисков
talm -f nodes/<node>.yaml get disksВывести список дисков на узле

Связанная документация