Добавление второго виртуального диска к VM в Proxmox VE

Пошаговое добавление второго виртуального диска к виртуальной машине в Proxmox VE и подготовка его внутри Linux-гостя.

Отдельный виртуальный диск удобно использовать для данных приложения, логов, резервных копий, базы данных или пользовательских файлов. Это упрощает обслуживание и позволяет отделить системный раздел от рабочих данных.

В этой инструкции рассматривается только добавление второго виртуального диска к Linux-виртуальной машине и его базовая подготовка внутри гостевой ОС.

Подходит для: Proxmox VE 8 и 9
Гостевая система: Ubuntu Server и Debian
Уровень сложности: средний
Время выполнения: около 15–20 минут
Требуемый доступ: права управления VM и root-доступ внутри гостевой ОС

Что будет рассмотрено

После выполнения инструкции можно будет:

  • добавить новый виртуальный диск;
  • выбрать storage и тип шины;
  • проверить диск внутри Linux;
  • создать GPT-разметку;
  • создать файловую систему ext4;
  • смонтировать диск;
  • настроить автоматическое монтирование через /etc/fstab;
  • проверить корректность после перезагрузки.

Когда нужен отдельный диск

Второй диск полезен для:

  • каталога /data;
  • логов приложения;
  • базы данных;
  • резервных копий;
  • медиаданных;
  • временных файлов;
  • данных Docker;
  • пользовательских загрузок.

Отдельный диск проще:

  • переносить между storage;
  • увеличивать;
  • резервировать отдельно;
  • подключать к другой VM;
  • исключать из backup при необходимости.

Проверка текущей конфигурации VM

На узле Proxmox VE:

qm config VM_ID

Пример:

qm config 100

Покажите только диски:

qm config VM_ID |
grep -E '^(scsi|virtio|sata|ide)[0-9]+:'

Пример:

scsi0: local-lvm:vm-100-disk-0,size=32G

Это означает, что системный диск подключён как scsi0.

Проверка свободного места на storage

pvesm status

Для LVM-thin:

lvs -a -o+data_percent,metadata_percent

Для ZFS:

zpool list
zfs list

Для файлового storage:

df -h

Целевое хранилище должно иметь достаточно свободного места.

Создание резервной копии

Перед изменением конфигурации VM рекомендуется создать backup:

vzdump VM_ID   --storage BACKUP_STORAGE   --mode snapshot   --compress zstd

Дождитесь:

TASK OK

Добавление диска через веб-интерфейс

Выберите виртуальную машину.

Откройте:

VM → Hardware

Нажмите:

Add → Hard Disk

Выбор шины

Для Linux рекомендуется:

SCSI

В качестве контроллера обычно используется:

VirtIO SCSI single

Проверьте:

VM → Hardware → SCSI Controller

Выбор storage

В поле:

Storage

выберите нужное хранилище.

Пример:

local-lvm

Размер диска

Пример:

100 GiB

Выделяйте размер с учётом роста данных.

Discard

При поддержке storage можно включить:

Discard

Это позволяет передавать TRIM-команды от гостя к storage.

SSD emulation

Если underlying-хранилище работает на SSD, можно включить:

SSD emulation

Backup

Параметр:

Backup

определяет, будет ли диск включён в резервную копию VM.

Для рабочих данных обычно оставляют:

Enabled

Для временного кэш-диска можно отключить, но только если данные действительно не нужны для восстановления.

Добавление через CLI

Базовая команда:

qm set VM_ID   --scsi1 STORAGE_ID:SIZE

Пример:

qm set 100   --scsi1 local-lvm:100

Размер указывается в GiB.

Проверьте:

qm config 100 |
grep '^scsi'

Добавление с дополнительными параметрами

Пример:

qm set 100   --scsi1 local-lvm:100,discard=on,ssd=1

Проверьте итоговую строку:

qm config 100 |
grep '^scsi1'

Нужно ли выключать VM

Linux обычно обнаруживает новый виртуальный диск без перезагрузки.

Если диск не появился, можно:

  • выполнить rescan;
  • перезагрузить VM;
  • добавить диск в остановленную VM.

Для production-системы изменение лучше выполнять в согласованное окно.

Проверка нового диска внутри Linux

Войдите в VM.

Покажите диски:

lsblk

Подробно:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

Новый диск может появиться как:

/dev/sdb

или:

/dev/vdb

Имя зависит от типа виртуального контроллера.

Проверка журнала ядра

sudo journalctl -k -n 100 --no-pager

Найдите новый диск:

sudo journalctl -k --no-pager |
grep -iE 'sdb|vdb|scsi'

Повторное сканирование SCSI

Если диск не появился:

for host in /sys/class/scsi_host/host*; do
  echo "- - -" |
  sudo tee "$host/scan" >/dev/null
done

Повторно:

lsblk

Проверка, что выбран правильный диск

Покажите serial и model:

lsblk -o NAME,SIZE,MODEL,SERIAL

Убедитесь, что новый диск:

  • имеет ожидаемый размер;
  • не содержит файловой системы;
  • не смонтирован;
  • не является системным.

Создание GPT-разметки

В примерах новый диск:

/dev/sdb

Создайте GPT:

sudo parted /dev/sdb   --script   mklabel gpt

Создайте раздел на весь диск:

sudo parted /dev/sdb   --script   mkpart primary ext4 0% 100%

Проверьте:

sudo parted /dev/sdb print

Новый раздел:

/dev/sdb1

Проверка через lsblk

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

Ожидаемая схема:

sdb
└─sdb1

Создание ext4

sudo mkfs.ext4   -L data   /dev/sdb1

Параметр:

-L data

задаёт метку файловой системы.

Осторожно: mkfs уничтожает существующие данные на выбранном разделе.

Проверка файловой системы

sudo blkid /dev/sdb1

Пример:

/dev/sdb1: LABEL="data" UUID="..." TYPE="ext4"

Создание точки монтирования

sudo mkdir -p /data

Проверьте:

ls -ld /data

Временное монтирование

sudo mount /dev/sdb1 /data

Проверьте:

findmnt /data
df -hT /data

Проверка записи

sudo touch /data/write-test

Проверьте:

ls -l /data/write-test

Удалите:

sudo rm -f /data/write-test

Получение UUID

sudo blkid /dev/sdb1

Скопируйте значение:

UUID=...

Использование UUID надёжнее, чем /dev/sdb1, потому что имя устройства может измениться.

Настройка /etc/fstab

Создайте резервную копию:

sudo cp /etc/fstab   /etc/fstab.backup-$(date +%F-%H%M%S)

Откройте:

sudo nano /etc/fstab

Добавьте:

UUID=DISK_UUID /data ext4 defaults,nofail 0 2

Замените:

DISK_UUID

на фактический UUID.

Параметр nofail

nofail

позволяет системе продолжить загрузку, если диск временно недоступен.

Для критичного data-диска необходимость nofail следует оценивать отдельно.

Проверка fstab

Размонтируйте:

sudo umount /data

Проверьте конфигурацию:

sudo mount -a

Если ошибок нет:

findmnt /data
df -hT /data

Проверка systemd mount unit

systemctl status data.mount --no-pager

Название unit формируется из точки монтирования.

Для /data:

data.mount

Проверка после перезагрузки

sudo reboot

После входа:

findmnt /data
df -hT /data

Проверьте запись:

sudo touch /data/after-reboot-test
sudo rm -f /data/after-reboot-test

Настройка владельца каталога

Если диск предназначен для приложения:

sudo chown -R APP_USER:APP_GROUP /data

Пример:

sudo chown -R www-data:www-data /data

Проверьте:

ls -ld /data

Не назначайте 777 без необходимости.

Использование XFS

Вместо ext4 можно создать XFS:

sudo mkfs.xfs   -L data   /dev/sdb1

Строка в /etc/fstab:

UUID=DISK_UUID /data xfs defaults,nofail 0 2

Для установки утилит:

sudo apt update
sudo apt install -y xfsprogs

Использование LVM

Если диск должен участвовать в LVM:

sudo pvcreate /dev/sdb
sudo vgcreate data-vg /dev/sdb
sudo lvcreate -n data-lv -l 100%FREE data-vg

Создайте файловую систему:

sudo mkfs.ext4 /dev/data-vg/data-lv

LVM удобен, если планируется:

  • несколько logical volume;
  • гибкое расширение;
  • отдельные файловые системы;
  • snapshot внутри гостя.

Для одного простого data-раздела обычного GPT + ext4 обычно достаточно.

Перенос существующих данных в /data

Если нужно перенести каталог приложения:

  1. Остановите сервис.
  2. Скопируйте данные.
  3. Проверьте владельца и права.
  4. Измените путь приложения или mount.
  5. Запустите сервис.
  6. Проверьте данные.

Пример копирования:

sudo rsync -aHAX   /old/path/   /data/

Перенос данных требует отдельного плана для конкретного приложения.

Проверка TRIM

Для ext4 или XFS:

sudo fstrim -v /data

Проверьте systemd timer:

systemctl status fstrim.timer --no-pager

Включите при необходимости:

sudo systemctl enable --now fstrim.timer

TRIM работает только если вся цепочка storage поддерживает discard.

Отключение диска от VM

Перед отключением:

  1. Остановите сервис.
  2. Размонтируйте диск.
  3. Удалите или закомментируйте строку в /etc/fstab.
  4. Выключите VM.

Внутри гостя:

sudo umount /data

На узле:

qm shutdown VM_ID

Отсоединение через веб-интерфейс

Откройте:

VM → Hardware

Выберите:

scsi1

Нажмите:

Detach

Диск появится как:

Unused Disk

Это не удаляет данные.

Удаление диска

После проверки:

VM → Hardware → Unused Disk → Remove

Важно: удаление unused-диска может удалить volume со всеми данными.

Перед удалением обязательна резервная копия.

Исключение диска из backup

Через веб-интерфейс:

VM → Hardware → scsi1 → Edit

Отключите:

Backup

Через CLI итоговая строка может содержать:

backup=0

Проверьте:

qm config VM_ID |
grep '^scsi1'

Используйте это только для временных данных.

Типичные проблемы

Новый диск не появился внутри VM

Выполните SCSI rescan:

for host in /sys/class/scsi_host/host*; do
  echo "- - -" |
  sudo tee "$host/scan" >/dev/null
done

Либо перезагрузите VM.

mkfs сообщает, что устройство занято

Проверьте:

lsblk
findmnt

Убедитесь, что выбранный раздел не смонтирован и не используется LVM.

После reboot /data не смонтирован

Проверьте:

sudo mount -a

Проверьте журнал:

journalctl -b |
grep -i data.mount

Проверьте UUID:

sudo blkid

Система загрузилась в emergency mode

Обычно причина — ошибка в /etc/fstab.

Используйте резервную консоль.

Исправьте строку и выполните:

sudo mount -a

Параметр nofail снижает риск блокировки загрузки.

Нет прав на запись

Проверьте:

ls -ld /data

Исправьте владельца:

sudo chown -R APP_USER:APP_GROUP /data

Backup VM стал слишком большим

Новый диск включён в backup.

Проверьте:

qm config VM_ID |
grep '^scsi1'

Не отключайте backup, если данные нужны для восстановления.

Безопасный порядок добавления

  1. Проверить storage.
  2. Создать backup VM.
  3. Добавить диск.
  4. Проверить его внутри Linux.
  5. Подтвердить имя устройства.
  6. Создать GPT и раздел.
  7. Создать файловую систему.
  8. Настроить точку монтирования.
  9. Добавить UUID в /etc/fstab.
  10. Проверить mount -a.
  11. Перезагрузить VM.
  12. Проверить данные и backup-политику.

Быстрый набор команд

На узле Proxmox:

qm set VM_ID   --scsi1 STORAGE_ID:100,discard=on

В гостевой системе:

sudo parted /dev/sdb --script mklabel gpt
sudo parted /dev/sdb --script mkpart primary ext4 0% 100%
sudo mkfs.ext4 -L data /dev/sdb1
sudo mkdir -p /data
sudo mount /dev/sdb1 /data
sudo blkid /dev/sdb1

Проверка:

findmnt /data
df -hT /data

Итог

После выполнения инструкции:

  • к VM добавлен второй виртуальный диск;
  • выбраны storage и SCSI;
  • диск обнаружен внутри Linux;
  • создан GPT-раздел;
  • создана файловая система;
  • настроено монтирование по UUID;
  • проверена загрузка после reboot;
  • рассмотрены backup, detach и безопасное удаление.

Перед форматированием всегда необходимо дважды проверить имя устройства, чтобы не уничтожить системный диск.

← Предыдущая статья Настройка автозапуска VM и LXC в Proxmox VE Следующая статья → Настройка QEMU Guest Agent в Proxmox VE