Proxmox VE поддерживает множество типов хранилищ — от локальных дисков до распределённых кластерных систем. Правильный выбор хранилища критичен для производительности и надёжности виртуальных машин.
Сравнение типов хранилищ
| Тип | Снапшоты VM | Live Migration | Производительность | Применение |
|---|---|---|---|---|
| ZFS | Да (мгновенные) | Нет | Высокая | Одиночный узел, RAID |
| LVM-Thin | Да | Нет | Высокая | Одиночный узел |
| Directory | Нет (qcow2) | Да (с копированием) | Средняя | NFS, shared storage |
| Ceph/RBD | Да | Да (мгновенная) | Зависит от кластера | Кластер Proxmox |
| NFS | Только qcow2 | Да | Зависит от сети | Общее хранилище |
ZFS: создание и управление пулом
ZFS — рекомендуемая файловая система для Proxmox. Встроенные снапшоты, дедупликация и проверка целостности данных.
# Показать доступные диски
lsblk -d -o NAME,SIZE,TYPE | grep disk
# Создать зеркальный пул (RAID-1) из двух дисков
zpool create -f -o ashift=12 -O compression=lz4 -O atime=off tank mirror /dev/sdb /dev/sdc
# Создать RAID-Z пул из трёх дисков
zpool create -f -o ashift=12 -O compression=lz4 tank raidz /dev/sdb /dev/sdc /dev/sdd
# Статус пула
zpool status tank
# Производительность
zpool iostat -v tank 1
Добавление ZFS хранилища в Proxmox
># Через CLI
pvesm add zfspool tank-storage --pool tank --sparse 1
# Или веб-интерфейс:
# Datacenter → Storage → Add → ZFS
LVM-Thin: тонкая провизия
LVM-Thin позволяет создавать диски размером больше реального доступного пространства (тонкая провизия). Идеально для Dev/Test сред:
# Создать физический том и группу томов
pvcreate /dev/sdb
vgcreate data /dev/sdb
# Создать тонкий пул размером 100 ГБ
lvcreate -L 100G --thinpool data/vm-pool
# Добавить в Proxmox
pvesm add lvmthin local-thin --vgname data --thinpool vm-pool
Настройка Ceph в Proxmox
# На каждой ноде Proxmox
pveceph install --release squid
# Инициализировать Ceph на первой ноде
pveceph init --network 10.0.0.0/24
# Создать MON на всех нодах
pveceph createmon
# Добавить OSD (диск)
pveceph createosd /dev/sdc
# Создать пул
pveceph createpool vm-pool --size 3 --min_size 2
Оптимизация ZFS для SSD
># Отключить медленную синхронизацию для VM (не для продакшн баз данных!)
zfs set sync=disabled tank
# Включить ARC-кеш (рекомендуется 50% RAM)
echo "options zfs zfs_arc_max=4294967296" > /etc/modprobe.d/zfs.conf
# (4 ГБ = 4294967296 байт)
# Посмотреть статистику ARC
arc_summary
Ошибки хранилищ и их причины
Три ошибки, с которыми чаще всего сталкиваются при работе с ZFS, LVM-Thin и Ceph.
cannot import 'tank': no such pool available
state: DEGRADED - one or more devices could not be used because the label is missing
rados_connect failed - error -13 (Permission denied)
- cannot import 'tank': после переустановки системы или переноса дисков на другой сервер потерян кэш пулов. Импортируйте пул вручную:
zpool import tank, при необходимости с флагом-f. - DEGRADED ... label is missing: один из дисков зеркала или RAID-Z отключился или вышел из строя. Определите неисправный диск через
zpool status -v tankи замените его:zpool replace tank старый-диск новый-диск. - rados_connect failed - Permission denied: ключ аутентификации Ceph на ноде не совпадает с ключом кластера. Пересоздайте keyring для пула через
pveceph createpoolили скопируйте актуальный ключ из/etc/pve/priv/ceph.client.admin.keyring.
Когда эти хранилища не подходят
У каждого типа хранилища есть условия, при которых он не оправдывает ожиданий.
- ZFS на одиночном диске без RAID и без ECC-памяти — контрольные суммы защищают от повреждения данных на диске, но без зеркала отказ единственного диска всё равно останавливает VM, а без ECC ошибки памяти могут исказить данные до записи на диск.
- LVM-Thin в кластере без общего хранилища — тонкие пулы локальны для ноды, поэтому живая миграция VM с диском на LVM-Thin без Ceph или NFS невозможна без флага
--with-local-disksи остановки на время копирования. - Ceph на кластере из двух нод или сети 1 Гбит/с — Ceph рассчитан минимум на три ноды для кворума OSD и требует высокой пропускной способности; на меньшем масштабе задержки записи будут выше, чем у локального ZFS.
Проверка результата
# Здоровье пула и ошибки чтения/записи/контрольных сумм
zpool status -v tank
# Хранилище подключено в Proxmox и видно свободное место
pvesm status
# Тестовая запись и проверка целостности данных
dd if=/dev/urandom of=/tank/testfile bs=1M count=100
zpool scrub tank
zpool status tank
Если статус пула ONLINE, счётчики READ/WRITE/CKSUM нулевые, а scrub завершается без ошибок — хранилище исправно. Про перенос данных между нодами на уровне ZFS — в статье ZFS-репликация в Proxmox VE.
Частые вопросы
Можно ли позже перенести диск VM с LVM-Thin на ZFS без полного пересоздания виртуальной машины?
Да, перенести диск VM с одного типа хранилища на другой в Proxmox можно без пересоздания самой виртуальной машины — через перемещение диска (Move Disk) в веб-интерфейсе или команду qm, которая копирует данные на новый storage и переключает на него конфигурацию. Сама VM на время копирования может оставаться выключенной или работать, в зависимости от режима переноса.
Что произойдёт с данными на пуле ZFS, если из зеркала физически вынуть один диск во время работы?
Зеркало ZFS рассчитано именно на отказ одного диска: пул перейдёт в состояние DEGRADED, но продолжит отдавать данные со второго диска без остановки виртуальных машин. После замены неисправного диска новый нужно ввести в пул командой замены, и ZFS автоматически восстановит избыточность, пересчитав контрольные суммы на основе уцелевшей копии.
Нужно ли вручную увеличивать ARC-кеш, если сервер обслуживает не только Proxmox, но и другие службы?
Долю RAM под ARC-кеш стоит пересматривать именно при совместном использовании сервера для нескольких ролей: фиксированное значение, рассчитанное только под Proxmox, может забрать слишком много памяти у других служб. Безопаснее выставить ограничение ARC с запасом под остальные нагрузки, а не оставлять настройку по умолчанию без пересчёта под реальный профиль сервера.
Как понять, какой тип хранилища выбрать, если на сервере всего один SSD без возможности зеркала?
Для единственного SSD без возможности зеркала чаще выбирают LVM-Thin или простой ZFS-пул без избыточности — оба варианта дают высокую производительность и тонкую провизию, но не защищают от отказа самого диска. В такой ситуации регулярные внешние бэкапы важнее выбора конкретной файловой системы, поскольку единственный диск остаётся единой точкой отказа при любом варианте.