Коротко — безопаснее и проще всего (если у вас стандартная установка Proxmox на LVM) не «уменьшать PV» и не резать PV/VG, а добавить новый NVMe в тот же VG и перенести (pvmove) все extents на него, затем удалить старый PV и установить загрузчик на NVMe. Это не требует shrink-операций файловых систем и гораздо надёжнее. Однако перед началом — полная резервная копия обязательна (vzdump всех ВМ, копия /etc/pve и конфигов).
Ниже — пошаговая инструкция + варианты/предупреждения. Прочитайте и, если хотите, пришлите выводы команд (lsblk, pvs, vgs, lvs, mount | grep /boot) — подскажу точные команды для вашей системы.
1) Резервная копия (обязательна)
- Сделайте vzdump всех ВМ: vzdump <vmid> --mode suspend/stop/full и сохраните на внешний диск/сеть.
- Скопируйте /etc/pve, /etc/network/interfaces, /etc/hosts, /root и т.п.
- Убедитесь, что у вас рабочая резервная копия и её можно восстановить.
2) Посмотреть текущую схему дисков и LVM
- lsblk -f
- pvs -o+pv_used
- vgs
- lvs
- fdisk -l (или parted -l)
- mount | grep /boot
Это покажет: где PV (обычно /dev/sda2), где /boot, EFI/BIOS и т.д.
3) Убедиться, что занятого места в VG меньше размера нового NVMe
- vgs покажет VSize и VFree; используемое (VG used) должно быть <500 ГБ.
Если занято больше, сначала уменьшите/перенесите данные/удалите ненужные LVs/снэпшоты.
4) Подготовить NVMe и добавить в VG
- Разметьте NVMe: можно сделать GPT и одну партицию для LVM (типа 8e), либо использовать весь диск как PV. Рекомендую создать партицию:
parted /dev/nvme0n1 mklabel gpt
parted -a optimal /dev/nvme0n1 mkpart primary 1MiB 100%
(если UEFI нужен — нужно создать также EFI-партицию ~512M FAT32)
- pvcreate /dev/nvme0n1p1
- vgextend <VG_NAME> /dev/nvme0n1p1
(подставьте имя VG, оно обычно pve)
5) Перенести данные с старого PV на NVMe
- pvmove /dev/sda2 /dev/nvme0n1p1
или pvmove /dev/sda2 (если в VG есть только 2 PV и новый — единственный другой)
pvmove осторожно переносит extents; процесс может занять время в зависимости от объёма.
6) Убрать старый PV из VG и очистить
- vgreduce <VG_NAME> /dev/sda2
- pvremove /dev/sda2
Теперь LVM-тома физически находятся на NVMe.
7) Сделать загрузочный NVMe (важно)
Вариант A — если /boot находится на отдельной партиции на старом диске:
- Создайте на NVMe партицию для /boot (например ~512M ext4), mkfs.ext4, смонтируйте, rsync -a /boot/ /mnt/newboot/
- Обновите /etc/fstab (UUID новой /boot) — получите UUID через blkid
- Установите загрузчик:
- BIOS (legacy): grub-install /dev/nvme0n1; update-grub
- UEFI: создайте EFI-партицию FAT32 (~512M), смонтируйте в /mnt/newboot/boot/efi, установите grub-efi (grub-install --target=x86_64-efi --efi-directory=/mnt/newboot/boot/efi --bootloader-id=proxmox) и update-grub.
Вариант B — если /boot уже в LVM (маловероятно, обычно /boot — отдельная партиция): нужно установить grub, обновить initramfs. В любом случае после установки загрузчика проверьте, что BIOS/UEFI может загрузиться с NVMe (может потребоваться изменить порядок загрузки).
8) Тест загрузки
- Перезагрузите сервер и выберите в BIOS/UEFI загрузку с NVMe.
- Войдите и проверьте, что все LVs, контейнеры и VMs в порядке.
- Убедитесь, что /boot и / (root) загружены с NVMe (lsblk, mount).
9) Очистка старого диска
- После успешной загрузки и проверки можно удалить разделы на старом диске и использовать его для других нужд.
Особые случаи и замечания
- Если у вас ZFS (установлен Proxmox на ZFS), алгоритм другой: нужно zpool replace /dev/sda /dev/nvme... и дождаться resilver, затем, возможно, zpool remove (зависит от конфигурации). Приведите вывод zpool status, дам советы отдельно.
- Если диск зашифрован (LUKS), сначала расшифруйте/удалите шифрование или подготовьте NVMe с LUKS, а затем pvcreate в развернутом контейнере.
- Если в /boot/efi находятся записи загрузчика — скопируйте их и установите grub-efi как описано.
- Shrink файловой системы и LVM делать только в крайнем случае и очень осторожно: сначала уменьшать FS (например resize2fs), затем lvreduce, затем уменьшать PV/partitions — это рискованно и требует полного бэкапа.
Примеры команд (замените имена устройств и VG pve, /dev/sda2 и т.д. на ваши):
- pvcreate /dev/nvme0n1p1
- vgextend pve /dev/nvme0n1p1
- pvmove /dev/sda2 /dev/nvme0n1p1
- vgreduce pve /dev/sda2
- pvremove /dev/sda2
Если хотите — пришлите вывод:
- lsblk -f
- pvs -o+pv_used
- vgs
- mount | grep /boot
и я укажу конкретные команды для вашей конфигурации и какой этап выполнить первым (особенно по части установки grub/EFI).