Перейти к основному содержимому

Блочные тома

Блочный том — это диск, который живёт отдельно от виртуальной машины. Его можно создать заранее, прикрепить к одной машине, отсоединить и отдать другой, а при удалении машины он остаётся с вашими данными.

Это не то же самое, что диск самой ВМ. Диск машины (vda) создаётся вместе с ней, входит в её тариф и удаляется вместе с ней. Том — самостоятельный ресурс аккаунта со своим счётом и своим жизненным циклом.

Когда это нужно​

  • База данных, которая должна пережить пересоздание машины.
  • Данные, которые нужно перенести на машину другой конфигурации: отсоединили — прикрепили, копировать ничего не надо.
  • Хранилище, которое растёт независимо от машины.
  • Постоянные тома (PersistentVolume) в managed Kubernetes.

Где доступны​

Тому нужно общее хранилище региона, поэтому он существует не везде. В панели при создании видны только те регионы, которые их отдают; сейчас это kzn-1 (Казань, ИТ-парк).

Том и машина обязаны быть в одном регионе — диск лежит на хранилище своего кластера, и машина другого региона его не откроет. Панель предлагает к прикреплению только подходящие тома.

Что с ним можно делать​

ДействиеТребует остановки ВМПримечание
Создать—Размер от 1 ГиБ
ПрикрепитьнетПоявляется в госте как /dev/vdb, /dev/vdc, …
УвеличитьнетФайловая система растёт на работающей машине
Отсоединитьнет, но см. нижеСначала размонтируйте том в гостевой ОС
Удалить—Только у отсоединённого тома

Уменьшить том нельзя: обрезать диск под живой файловой системой — это потеря данных, а не операция.

Прикрепление и первое использование​

После прикрепления том виден в гостевой ОС как новое блочное устройство. У него есть стабильный серийный номер, поэтому надёжнее адресоваться по нему, а не по имени /dev/vdX — порядок устройств может измениться после перезагрузки:

lsblk # найти новое устройство
ls -l /dev/disk/by-id/ | grep virtio # то же по серийному номеру

sudo mkfs.ext4 /dev/disk/by-id/virtio-<серийный-номер>
sudo mkdir -p /mnt/data
sudo mount /dev/disk/by-id/virtio-<серийный-номер> /mnt/data

Чтобы том монтировался после перезагрузки, добавьте его в /etc/fstab — тоже по by-id, а не по /dev/vdX.

После увеличения тома в панели файловую систему внутри гостя нужно догнать:

sudo resize2fs /dev/disk/by-id/virtio-<серийный-номер> # ext4
sudo xfs_growfs /mnt/data # xfs

Отсоединение: важное предупреждение​

Отсоединение не спрашивает гостевую ОС. У virtio-дисков нет договора об извлечении: устройство исчезает молча, и файловая система остаётся указывать в никуда — с риском потерять несохранённые данные.

Поэтому порядок такой:

sudo umount /mnt/data

и только потом отсоединяйте том в панели. На работающей машине панель дополнительно переспросит.

Оплата​

Том оплачивается по выделенному объёму, а не по занятому: место на хранилище занято с момента создания до удаления независимо от того, сколько данных вы записали. Прикреплён том или нет — значения не имеет, свободный том держит те же гигабайты.

Удалили том — оплата прекращается.

Ограничения​

  • Один том — одна машина. Одновременное подключение к нескольким машинам не поддерживается: два пишущих в один диск разрушают файловую систему.
  • Снимков и резервных копий у томов нет. Диски виртуальных машин бэкапятся штатно, тома — нет. Если на томе данные, которые нельзя потерять, резервное копирование пока на вашей стороне.
  • Регион менять нельзя — том привязан к хранилищу своего кластера.
  • На аккаунт действуют лимиты по числу томов и суммарному объёму; текущие значения видны при создании.

Тома в Kubernetes​

В managed Kubernetes тома создаёт и удаляет сам кластер через PersistentVolumeClaim — см. Managed Kubernetes. Такие тома видны в панели, помечены принадлежностью к кластеру и доступны только для чтения: удалять и менять их нужно через PersistentVolumeClaim, иначе кластер не узнает, что диска больше нет.