Блочные тома
Блочный том — это диск, который живёт отдельно от виртуальной машины. Его можно создать заранее, прикрепить к одной машине, отсоединить и отдать другой, а при удалении машины он остаётся с вашими данными.
Это не то же самое, что диск самой ВМ. Диск машины (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,
иначе кластер не узнает, что диска больше нет.