🕒 4 мин.
В этой статье я опишу, как выполнить расширение диска и файловой системы виртуальной машины Linux на Proxmox VE 8. Разберу 2 кейса: простое расширение файловой системы Ext4, и расширение LVM с разделом XFS.
Описание задачи
Допустим нам не хватает места для хранения файлов в виртуальной машине. Proxmox VE 8 и 9 легко даёт расширить диск виртуальной машины, особенно если в качестве хранилища используется ZFS. Но просто расширить диск виртуальной машины мало, нужно ещё внутри расширить файловую систему. О том как это делается читайте в этой статье.
Расширение Ext4
В первом случае у нас система установлена на 1 раздел и использует файловую систему ext4. Это самый простой случай для расширения дискового пространства.
Предварительно увеличиваем диск в web-интерфейсе Proxmox VE, я увеличил его до 500G. Затем проверяем в виртуальной машине, что диск действительно расширился:
$ lsblk | grep sdb sdb 8:16 0 500G 0 disk /share
А если диск не расширился, то нужно выполнить:
$ echo 1 > /sys/class/block/sdX/device/rescan
- Но на старых системах нет интерфейса
rescan, в этом случае придётся перезагружать виртуалку.
Затем нужно расширить саму файловую систему. С помощью команды df -h убедимся что она ещё не расширена (пока 393G):
$ df -h /dev/sdb Файловая система Размер Использовано Дост Использовано% Cмонтировано в /dev/sdb 393G 338G 36G 91% /share
Расширяем с помощью команды resize2fs, которой требуются root права:
$ sudo resize2fs /dev/sdb resize2fs 1.47.0 (5-Feb-2023) Filesystem at /dev/sdb is mounted on /share; on-line resizing required old_desc_blocks = 50, new_desc_blocks = 63 The filesystem on /dev/sdb is now 131072000 (4k) blocks long.
Проверяем:
$ df -h /dev/sdb Файловая система Размер Использовано Дост Использовано% Cмонтировано в /dev/sdb 492G 338G 130G 73% /share
- Как видите, файловая система была успешно расширена.
Расширение LVM c XFS
Это уже более сложный случай. Обычно LVM с XFS устанавливается, по умолчанию, в старых версиях Centos. В моём случае это Centos 8.
Посмотрим на структуру дисков и разделов:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 12G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 9G 0 part ├─cl-root 253:0 0 8G 0 lvm / └─cl-swap 253:1 0 1G 0 lvm [SWAP] sr0 11:0 1 1024M 0 rom
Здесь у нас на разделе sda2 настроен LVM с двумя разделами:
- cl-root — для корневой файловой системы;
- cl-swap — для раздела подкачки.
Если размер диска (в нашем примере sda) не изменился, то выполняем:
# echo 1 > /sys/class/block/sdX/device/rescan
- Или перезагружаем виртуальную машину, если нет интерфейса
rescan.
После перезагрузки размер sda увеличился до 100G:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 9G 0 part ├─cl-root 253:0 0 8G 0 lvm / └─cl-swap 253:1 0 1G 0 lvm [SWAP] sr0 11:0 1 1024M 0 rom
Но размер раздела sda2 не был увеличен. Поскольку это последний раздел на диске, его можно безопасно расширить вручную с помощью fdisk, просто удалив и создав раздел заново. Это не удалит данные, потому что LVM хранит метаданные, и мы сохраним тот же начальный сектор.
# fdisk /dev/sda
- Нажимаем
p— смотрим таблицу разделов. ЗапоминаемStartдляsda2. - Нажимаем
d— выбираем 2 (удаляемsda2). - Нажимаем
n— создаём новый раздел:- Partition type: primary
- Partition number: 2
- First sector: вводим тот же
Start, что был у старогоsda2 - Last sector: Enter (по умолчанию, до конца диска)
- Нажимаем
t— выбираем тип8e(Linux LVM)
- Нажимаем
w— записываем изменения.
Внимание! Если будет запрос о пересоздании данных раздела, откажись — так как данные мы должны оставить. У меня такой запрос появился, но точный момент я не запомнил, скорее всего при создании раздела (когда нажали n).
Проверим, что получилось:
# partprobe /dev/sda # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 99G 0 part ├─cl-root 253:0 0 8G 0 lvm / └─cl-swap 253:1 0 1G 0 lvm [SWAP] sr0 11:0 1 1024M 0 rom
- раздел
sda2увеличили, но lvm разделы всё ещё маленькие.
Расширим lvm:
# pvresize /dev/sda2 # pvs PV VG Fmt Attr PSize PFree /dev/sda2 cl lvm2 a-- <99.00g 90.00g # lvextend -l +100%FREE /dev/cl/root
Проверим:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 99G 0 part ├─cl-root 253:0 0 98G 0 lvm / └─cl-swap 253:1 0 1G 0 lvm [SWAP] sr0 11:0 1 1024M 0 rom
- Готово! Теперь cl-root = 98G.
В этом примере у меня тип файловой системы xfs. Узнать это можно с помощью команды:
# mount | grep " / " /dev/mapper/cl-root on / type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
Файловая система xfs расширяется с помощью следующей команды:
# xfs_growfs /
meta-data=/dev/mapper/cl-root isize=512 agcount=4, agsize=524032 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2096128, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2096128 to 25689088
Проверяем:
# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 892M 0 892M 0% /dev tmpfs 909M 0 909M 0% /dev/shm tmpfs 909M 8.5M 900M 1% /run tmpfs 909M 0 909M 0% /sys/fs/cgroup /dev/mapper/cl-root 98G 3.4G 95G 4% / /dev/sda1 974M 187M 720M 21% /boot tmpfs 182M 0 182M 0% /run/user/0
Вот и всё! Корневая файловая система xfs на lvm расширилась.
Если интересуетесь платформой виртуализации Proxmox VE, вам могут быть полезны другие статьи:
- Создание и управление виртуальной машиной Proxmox VE из консоли
- Proxmox VE — знакомство и установка на ZFS
- Proxmox VE — замена системного диска в зеркале ZFS
Если понравилась статья, подпишись на мой канал в VK или Telegram.