Подготовка дисков для пулов хранения LINSTOR
В этом руководстве описано, как подготовить физические диски к использованию с LINSTOR, если на них остались старые метаданные, мешающие автоматическому обнаружению.
Описание проблемы
При настройке хранилища на новых или повторно используемых узлах на физических дисках могут оставаться следы предыдущих установок:
- суперблоки RAID
- таблицы разделов
- сигнатуры LVM
- метаданные файловых систем
Эти старые метаданные не позволяют LINSTOR определить диски как доступное хранилище.
Симптомы
linstor physical-storage listвыводит пустой список или в нём отсутствуют диски- Диски отображаются с неожиданными типами файловых систем (например,
linux_raid_member) - В пулах хранения виден только
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 ...
sda, если на нём установлен Talos).Шаг 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»
Если нужно пересоздать пул хранения:
Удалите его из LINSTOR:
linstor storage-pool delete <node-name> <pool-name>Уничтожьте пул ZFS на узле:
kubectl exec -n cozy-linstor <satellite-pod-name> -c linstor-satellite -- \ zpool destroy <pool-name>Пересоздайте пул, указав все диски в одной команде.
Отказ в доступе на рабочих узлах
Рабочие узлы могут не разрешать прямой доступ к 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 | Вывести список дисков на узле |