Добавление второго виртуального диска к 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
Если нужно перенести каталог приложения:
- Остановите сервис.
- Скопируйте данные.
- Проверьте владельца и права.
- Измените путь приложения или mount.
- Запустите сервис.
- Проверьте данные.
Пример копирования:
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
Перед отключением:
- Остановите сервис.
- Размонтируйте диск.
- Удалите или закомментируйте строку в
/etc/fstab. - Выключите 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, если данные нужны для восстановления.
Безопасный порядок добавления
- Проверить storage.
- Создать backup VM.
- Добавить диск.
- Проверить его внутри Linux.
- Подтвердить имя устройства.
- Создать GPT и раздел.
- Создать файловую систему.
- Настроить точку монтирования.
- Добавить UUID в
/etc/fstab. - Проверить
mount -a. - Перезагрузить VM.
- Проверить данные и 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 и безопасное удаление.
Перед форматированием всегда необходимо дважды проверить имя устройства, чтобы не уничтожить системный диск.