Proxmox и ZFS — значительное потребление памяти

При использовании ProxmoxVE с ZFS, при работе виртуальных машин, память на хосте постепенно расходуется до полного исчерпания, результатом чего может стать выключение виртуальных машин:

kernel: [1123659.062155] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/qemu.slice/104.scope,task=kvm,pid=1045923,uid=0
kernel: [1123659.062203] Out of memory: Killed process 1045923 (kvm) total-vm:10639204kB, anon-rss:8332420kB, file-rss:2320kB, shmem-rss:4kB, UID:0 pgtables:17172kB oom_score_adj:0
kernel: [1123660.010306] oom_reaper: reaped process 1045923 (kvm), now anon-rss:0kB, file-rss:68kB, shmem-rss:4kB
systemd1: 104.scope: A process of this unit has been killed by the OOM killer.

Следует понимать, что ZFS требовательна к памяти сервера и по умолчанию использует 50% установленной памяти для ARC (Adaptive Replacement Cache). Текущие минимальные и максимальные пределы можно посмотреть командой:

cat /proc/spl/kstat/zfs/arcstats

где c_min и c_max являются таковыми.

Изменить используемые в настоящее время лимиты можно, установив значения в байтах в файлах /sys/module/zfs/parameters/zfs_arc_min и /sys/module/zfs/parameters/zfs_arc_max соответственно, например командой:

echo «$[10 * 1024*1024*1024]» >/sys/module/zfs/parameters/zfs_arc_max

где 10 — максимальный предел выделяемой памяти в ГБ.

Чтобы изменить максимальный предел ARC навсегда, необходимо добавить в файл /etc/modprobe.d/zfs.conf опцию:

options zfs zfs_arc_max=8589934592

где 8589934592 — устанавливаемый предел в 8 ГБ ОЗУ.

Если корневая файловая система также на ZFS, то после изменения лимитов, необходимо обновить образ initramfs:

update-initramfs -u

После чего требуется перезагрузить сервер.

Proxmox: no device with valid iso found

При попытке установки ProxmoxVE с USB-флэшки, отображается ошибка: no device with valid iso found, please check your intallation medium.
Проблему решает запись флэшки программой Rufus в режиме DD-образа.

Proxmox — расширение хранилища

При развёртывании в виртуальной машине Proxmox VE (на чистую машину), в процессе использования, место хранилища под KVM закончилось. Потребовалось увеличить выделенное место жесткого диска для виртуальной машины с Proxmox. После увеличения выделенного места, путём изменения настроек виртуальной машины, встаёт необходимость произвести расширение файловой системы, используемой Proxmox. При попытке выполнить задачу, у пользователей могут возникать следующие ошибки:

  • The util fdisk doesn’t support GPT. Use GNU Parted
  • resize2fs: Device or resource busy while trying to open /dev/sda3
  • Insufficient free space: 1 extents needed, but only 0 available with 32.83g available.


Порядок выполнения действий:

  1. Остановим виртуальные машины: qm shutdown all
  2. Размонтируем логический том хранилища KVM: umount /var/lib/vz
  3. Запустим редактор разделов для жесткого диска sda: parted /dev/sda
  4. Командой resizepart 3 увеличим размер раздела lvm.
  5. Увеличим размер физического диска LVM: pvresize /dev/sda3.
  6. Увеличим размер логического диска LVM: lvextend /dev/pve/data -l +100%FREE
  7. Увеличим размер файловой системы логического диска: resize2fs /dev/pve/data
  8. Проверим и исправим файловую систему: fsck -f /dev/mapper/pve-data
  9. Монтируем том хранилища: mount /var/lib/vz
  10. Перезагрузим систему: reboot

При нестандартных настройках разделов диска:

  • Список дисков и их разделов выводится командой fdisk -l.
  • Номера разделов в программе parted выводятся командой print. Нас интересует номер раздела lvm.
  • Список физических дисков LVM выводится командой pvdisplay.
  • Список логических дисков LVM выводится командой lvdisplay.
  • Список файловых систем выводится командой df -h.