HDD: Расширить диск с LVM

Лабораторные работы
Данная стратья доступна в следующих редакциях:
fdisk growpart

Условия лабораторной работы

Любые операции с файловой системой опасны! Делайте резервные копии виртуальной машиной перед выполнением работ.

Создайте виртуальную машину с любой операционной системой, при разметке диска укажите использование LVM. Средствами виртуализации увеличьте жёсткий диск для виртуальной машины. В данной работе считается, что используется схема разметки MBR (Master Boot Record).

О данном методе

В данном примере мы будем пересоздавать раздел с помощью утилиты fdisk и расширять LVM. Это самый опасный метод, т.к. в случае опечаток можно потерять все данные на диске.

Данный метод имеет свои преимущества: он лучше с точки зрения производительности, проще управлять одним PV, имеет меньше точек отказа, а так же не использует дополнительный primary слот в MBR (их всего 4). Утилита fdisk входит в состав практически любого дистрибутива Linux, что позволяет провести работы даже в закрытом ЦОД без возможности установить пакеты.

Однако если есть возможность, используйте узконаправленную утилиту growpart, она не позволит вам удалить данные, а только расширить диск, имея все те же преимущества, кроме вхождения в состав дистрибутива.

Выполнение работ

В данном примере будет использоваться виртуальная машина на ОС Debian 13, но порядок действий не должен отличаться на любом Linux дистрибутиве. Изначально диск будет использоваться в 20 Гб, расширен до 40 Гб. Разметка: "Использовать весь диск и настроить LVM".

Подключимся к виртуальной машине и посмотрим состояние дисков до проведения работ:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
udev                            1,9G            0  1,9G            0% /dev
tmpfs                           389M         764K  388M            1% /run
/dev/mapper/debian13--vg-root    18G         959M   16G            6% /
tmpfs                           1,9G            0  1,9G            0% /dev/shm
tmpfs                           5,0M            0  5,0M            0% /run/lock
tmpfs                           1,0M            0  1,0M            0% /run/credentials/systemd-journald.service
tmpfs                           1,9G            0  1,9G            0% /tmp
/dev/sda1                       933M          62M  807M            8% /boot
tmpfs                           1,0M            0  1,0M            0% /run/credentials/getty@tty1.service
tmpfs                           389M         8,0K  389M            1% /run/user/0
tmpfs                           389M         8,0K  389M            1% /run/user/1000

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   20G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 19,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

Увеличим HDD средствами виртуализации и снова посмотрим вывод команд:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
udev                            1,9G            0  1,9G            0% /dev
tmpfs                           389M         744K  388M            1% /run
/dev/mapper/debian13--vg-root    18G         959M   16G            6% /
tmpfs                           1,9G            0  1,9G            0% /dev/shm
tmpfs                           5,0M            0  5,0M            0% /run/lock
tmpfs                           1,0M            0  1,0M            0% /run/credentials/systemd-journald.service
tmpfs                           1,9G            0  1,9G            0% /tmp
/dev/sda1                       933M          62M  807M            8% /boot
tmpfs                           1,0M            0  1,0M            0% /run/credentials/getty@tty1.service
tmpfs                           389M         8,0K  389M            1% /run/user/1000

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 19,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

Как видим, команда df -h не поменяла вывод, точке монтирования / по-прежнему доступно только 18 Гб. А вот lsblk показывает нам, что диск sda увеличился с 20 Гб до 40 Гб, но логический раздел sda5 остался 19.1 Гб.

Для начала узнаем наименования PV, VG и LV:

~# pvs
  PV         VG          Fmt  Attr PSize  PFree
  /dev/sda5  debian13-vg lvm2 a--  19,05g    0
~# vgs
  VG          #PV #LV #SN Attr   VSize  VFree
  debian13-vg   1   2   0 wz--n- 19,05g    0
~# lvs
  LV     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   debian13-vg -wi-ao---- <18,02g
  swap_1 debian13-vg -wi-ao----   1,03g

Отключим работу swap:

swapoff -a

Изменим разметку диска /dev/sda с помощью fdisk:

~# fdisk /dev/sda

Welcome to fdisk (util-linux 2.41).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.


Command (m for help): d
Partition number (1,2,5, default 5): 5

Partition 5 has been deleted.

Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2): 2
First sector (1980416-83886079, default 1980416):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1980416-83886079, default 83886079):

Created a new partition 2 of type 'Extended' and of size 39,1 GiB.

Command (m for help): n
All space for primary partitions is in use.
Adding logical partition 5
First sector (1982464-83886079, default 1982464):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1982464-83886079, default 83886079):

Created a new partition 5 of type 'Linux' and of size 39,1 GiB.
Partition #5 contains a LVM2_member signature.

Do you want to remove the signature? [Y]es/[N]o: Y

Command (m for help): t
Partition number (1,2,5, default 5): 5
Hex code or alias (type L to list all): 8e

Changed type of partition 'Linux' to 'Linux LVM'.

Command (m for help): p
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9c8b829a

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048  1980415  1978368  966M 83 Linux
/dev/sda2       1980416 83886079 81905664 39,1G  5 Extended
/dev/sda5       1982464 83886079 81903616 39,1G 8e Linux LVM

Command (m for help): w
The partition table has been altered.
Syncing disks.

Проверим через lsblk:

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 39,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

Теперь раздел sda5 увеличен до 39.1 Гб, всё верно. Расширим логический том и файловую систему, смонтированную в корень:

~# pvresize /dev/sda5
  Physical volume "/dev/sda5" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
~# lvextend -l +100%FREE /dev/debian13-vg/root
  Size of logical volume debian13-vg/root changed from <18,02 GiB (4613 extents) to <38,02 GiB (9733 extents).
  Logical volume debian13-vg/root successfully resized.
~# resize2fs /dev/debian13-vg/root
resize2fs 1.47.2 (1-Jan-2025)
Filesystem at /dev/debian13-vg/root is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 5
The filesystem on /dev/debian13-vg/root is now 9966592 (4k) blocks long.

Проверим, что всё получилось:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
udev                            1,9G            0  1,9G            0% /dev
tmpfs                           389M         744K  388M            1% /run
/dev/mapper/debian13--vg-root    38G         958M   35G            3% /
tmpfs                           1,9G            0  1,9G            0% /dev/shm
tmpfs                           5,0M            0  5,0M            0% /run/lock
tmpfs                           1,0M            0  1,0M            0% /run/credentials/systemd-journald.service
tmpfs                           1,9G            0  1,9G            0% /tmp
/dev/sda1                       933M          62M  807M            8% /boot
tmpfs                           1,0M            0  1,0M            0% /run/credentials/getty@tty1.service
tmpfs                           389M         8,0K  389M            1% /run/user/1000

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 39,1G  0 part
  ├─debian13--vg-root   254:0    0   38G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

После окончания работ не забываем включить swap:

swapon -a

LVM (Logical Volume Manager) — это технология управления дисковым пространством в Linux, которая позволяет гибко объединять несколько физических дисков или их разделов в единые логические тома, изменять их размер "на лету", создавать снимки (снапшоты) и управлять хранилищем более эффективно, чем при классической разметке. Это обеспечивает абстракцию от физического железа, давая возможность динамически расширять разделы без переформатирования.

Основные компоненты LVM:

  • Физические тома (PV, Physical Volume): Это отдельные диски или их разделы, которые выделяются для LVM.
  • Группы томов (VG, Volume Group): Объединение одного или нескольких PV в единый пул дискового пространства.
  • Логические тома (LV, Logical Volume): Это "виртуальные" разделы, создаваемые из пространства группы томов (VG), которые видны системе как обычные диски.

Другими словами, LVM позволяет нам не привязываться к размерам физического диска, а размечать разделы так, как нам удобно. Мы можем сделать раздел как меньше диска, так и разместить его на нескольких дисках. Кроме того, в ряде случаев, LVM позволяет безопасно уменьшить размер диска или даже перенести на другой диск.


Подробное объяснение работ

Команда df -h показывает нам распределение места по точкам монтирования. Здесь в рамках этой лабораторной работы нас интересует следующая строка:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/debian13--vg-root    18G         959M   16G            6% /

Мы видим, что корень файловой системы имеет размер 18 Гб, из них 16 Гб свободно. Точка монтирования создана на логическом томе LVM по пути: /dev/mapper/debian13--vg-root.

В команде lsblk нас интересуют четыре строки:

NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   20G  0 disk
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 19,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /

Первая строка говорит, что жёсткий диск имеет объём 20 Гб. Следующая строка показывает нам раздел sda2 имеет размер 1К - это явный признак, что он имеет тип Extended и sda5 находится внутри него. Проверить это можно, посмотрев сектора в fdisk -l (частичный вывод):

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda2       1980416 83886079 81905664 39,1G  5 Extended
/dev/sda5       1982464 83886079 81903616 39,1G 8e Linux LVM

Как видим, sda5 начинается с 1982464 и заканчивается 83886079, что полностью входит в sda2 (с 1980416 до 83886079).

Следующие строки показываем нам, что раздел sda5 имеет объём 19.1 Гб, а внутри него наша корневая файловая система в LVM размером 18 Гб. Остальное место ушло на swap, boot и т.д., они нас сейчас не интересуют. Именно корневую файловую систему мы и будем расширять.

Мы разобрались с выводом lsblk и df -h до проведения работ. После расширения диска в виртуализации вывод df -h не поменялся, т.к. файловая система ничего не знает про новое место. А вот вывод lsblk поменялся, но только в одной строке:

NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk

Debian увидела, что HDD теперь имеет размер 40 Гб. Если этого не произошло - проще всего перечитать размер дисков перезагрузкой виртуальной машины.

Теперь нам нужно расширить LVM на появившееся место. Есть два основных варианта как это сделать:

  • Создать новый раздел
  • Расширить текущий раздел

В этом варианте лабораторной работы мы будем использовать второй вариант. Для этого воспользуемся утилитой fdisk, запустив редактирование разделов на диске /dev/sda. Утилита напоминает нам, что мы занимаемся весьма опасным занятием:

This disk is currently in use - repartitioning is probably a bad idea. It's recommended to umount all file systems, and swapoff all swap partitions on this disk.

Несмотря на предупреждение, в данном случае операция безопасна, потому что мы не изменяем начальные секторы существующих разделов, а только расширяем конец. Однако рекомендуется отключить swap перед началом, потому что swap находится в той же группе томов, физический том которой — /dev/sda5. Изменение таблицы разделов при активном использовании PV может привести к повреждению данных.

swapoff -a

Поскольку стандартный установщик Debian создаёт LVM внутри расширенного раздела (extended partition), прямое расширение sda5 невозможно без изменения структуры разделов. Поэтому мы удаляем и заново создаём разделы sda2 (extended) и sda5 (logical), сохраняя начальный сектор, чтобы не повредить данные.

Первой командой d мы удаляем раздел sda5, указывая номер партиции 5:

Command (m for help): d
Partition number (1,2,5, default 5): 5

Partition 5 has been deleted.

Дальше так же удаляем sda2, указывая номер партиции 2:

Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Теперь, когда партиции удалены, мы можем создать их заново, но большего размера.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): e
Partition number (2-4, default 2): 2
First sector (1980416-83886079, default 1980416):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1980416-83886079, default 83886079):

Created a new partition 2 of type 'Extended' and of size 39,1 GiB.

Команда n создаёт новую партицию. Нас интересует тип extended, чтобы поместить в него LVM - отвечаем e. Номер партиции - 2, по номеру раздела sda2. Размеры в данном случае нам система нам предложит сама, указываем минимальный и максимальный сектора.

Стартовый блок должен совпадать с тем, что был до удаления партиции - в противном случае вы потеряете данные! Если не уверены в номерах стартовых блоков - отмените операцию и посмотрите стартовые блоки через fdisk -l

Следом так же создаём раздел sda5:

All space for primary partitions is in use.
Adding logical partition 5
First sector (1982464-83886079, default 1982464):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1982464-83886079, default 83886079):

Командой n создаём партицию. В данном случае Debian 13 автоматически проставляет тип и номер раздела, а так же предлагает нам правильный сектора. Но если это не произошло, то вы получите такой вывод:

Command (m for help): n
Partition type
   p   primary (1 primary, 1 extended, 2 free)
   l    logical (numbered from 5)
Select (default p): l
Partition number (5, default 5): 5
First sector (1982464-83886079, default 1982464):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1982464-83886079, default 83886079):

Создаём логический раздел командой l, указываем номер партиции 5, согласно номеру раздела sda5.

В нашем случае Debian 13 проверила тип раздела sda5 и сообщает нам о необходимости удалить подпись LVM:

Partition #5 contains a LVM2_member signature.

Do you want to remove the signature? [Y]es/[N]o: Y

Отвечаем y и создаём заново:

Command (m for help): t
Partition number (1,2,5, default 5): 5
Hex code or alias (type L to list all): 8e

Код 8e означает что этот раздел будет LVM. Далее командой p можем посмотреть что же мы наделали. Здесь нас интересует:

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda2       1980416 83886079 81905664 39,1G  5 Extended
/dev/sda5       1982464 83886079 81903616 39,1G 8e Linux LVM

Оба раздела были расширены до 39.1 Гб, как мы и хотели - добавилось по 20 Гб. Осталось малое - сообщить LVM и ext4, что они изменили размер. Для этого используются команды:

~# pvresize /dev/sda5

Мы сообщили PV что он изменил размер. Имя PV можно посмотреть командой pvs:

~# pvs
  PV         VG          Fmt  Attr PSize  PFree
  /dev/sda5  debian13-vg lvm2 a--  19,05g    0

Следом сообщаем логическому тому, что он тоже изменил размер и выдаём ему 100% диска:

~# lvextend -l +100%FREE /dev/debian13-vg/root
  Size of logical volume debian13-vg/root changed from <18,02 GiB (4613 extents) to <38,02 GiB (9733 extents).
  Logical volume debian13-vg/root successfully resized.

Здесь нам нужно указать имя LV, формируется он из /dev, далее указывается VG и название LV. Посмотреть их имена можно командами:

~# vgs
  VG          #PV #LV #SN Attr   VSize  VFree
  debian13-vg   1   2   0 wz--n- 19,05g    0
~# lvs
  LV     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   debian13-vg -wi-ao---- <18,02g
  swap_1 debian13-vg -wi-ao----   1,03g

Последнее действие, которое нам необходимо - сообщить ext4, что она увеличена в размерах:

resize2fs /dev/debian13-vg/root

Команда resize2fs работает только с файловыми системами ext2/ext3/ext4. Если у вас XFS (проверьте командой df -T /), используйте:

xfs_growfs /

На этом увеличение диска закончено. Осталось только вернуть swap в работу:

swapon -a

Условия лабораторной работы

Любые операции с файловой системой опасны! Делайте резервные копии виртуальной машиной перед выполнением работ.

Создайте виртуальную машину с любой операционной системой, при разметке диска укажите использование LVM. Средствами виртуализации увеличьте жёсткий диск для виртуальной машины. В данной работе считается, что используется схема разметки MBR (Master Boot Record).

О данном методе

В данном примере мы будем изменять разметку диска с помощью утилиты growpart и расширять LVM. Это достаточно безопасный метод, т.к. утилита growpart специально создана для этой операции, но наиболее безопасным методом будет добавление нового раздела.

Метод увеличения раздела имеет свои преимущества: он лучше с точки зрения производительности, проще управлять одним PV, имеет меньше точек отказа, а так же не использует дополнительный primary слот в MBR (их всего 4).

Утилита growpart не входит в большинство дистрибутивов Linux и должна быть установлена отдельно. В случае в Debian 13 она входит в пакет cloud-guest-utils:

apt install cloud-guest-utils -y

Выполнение работ

В данном примере будет использоваться виртуальная машина на ОС Debian 13, но порядок действий не должен отличаться на любом Linux дистрибутиве. Изначально диск будет использоваться в 20 Гб, расширен до 40 Гб. Разметка: "Использовать весь диск и настроить LVM".

Подключимся к виртуальной машине и посмотрим состояние дисков до проведения работ:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
udev                            1,9G            0  1,9G            0% /dev
tmpfs                           389M         764K  388M            1% /run
/dev/mapper/debian13--vg-root    18G         959M   16G            6% /
tmpfs                           1,9G            0  1,9G            0% /dev/shm
tmpfs                           5,0M            0  5,0M            0% /run/lock
tmpfs                           1,0M            0  1,0M            0% /run/credentials/systemd-journald.service
tmpfs                           1,9G            0  1,9G            0% /tmp
/dev/sda1                       933M          62M  807M            8% /boot
tmpfs                           1,0M            0  1,0M            0% /run/credentials/getty@tty1.service
tmpfs                           389M         8,0K  389M            1% /run/user/0
tmpfs                           389M         8,0K  389M            1% /run/user/1000

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   20G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 19,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

Увеличим HDD средствами виртуализации и снова посмотрим вывод команд:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
udev                            1,9G            0  1,9G            0% /dev
tmpfs                           389M         744K  388M            1% /run
/dev/mapper/debian13--vg-root    18G         959M   16G            6% /
tmpfs                           1,9G            0  1,9G            0% /dev/shm
tmpfs                           5,0M            0  5,0M            0% /run/lock
tmpfs                           1,0M            0  1,0M            0% /run/credentials/systemd-journald.service
tmpfs                           1,9G            0  1,9G            0% /tmp
/dev/sda1                       933M          62M  807M            8% /boot
tmpfs                           1,0M            0  1,0M            0% /run/credentials/getty@tty1.service
tmpfs                           389M         8,0K  389M            1% /run/user/1000

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 19,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

Как видим, команда df -h не поменяла вывод, точке монтирования / по-прежнему доступно только 18 Гб. А вот lsblk показывает нам, что диск sda увеличился с 20 Гб до 40 Гб, но логический раздел sda5 остался 19.1 Гб.

Для начала узнаем наименования PV, VG и LV:

~# pvs
  PV         VG          Fmt  Attr PSize  PFree
  /dev/sda5  debian13-vg lvm2 a--  19,05g    0
~# vgs
  VG          #PV #LV #SN Attr   VSize  VFree
  debian13-vg   1   2   0 wz--n- 19,05g    0
~# lvs
  LV     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   debian13-vg -wi-ao---- <18,02g
  swap_1 debian13-vg -wi-ao----   1,03g

Отключим работу swap:

swapoff -a

Изменим разметку диска с помощью growpart. Обратите внимание, сначала необходимо расширить sda2, а лишь затем sda5:

growpart /dev/sda 2
growpart /dev/sda 5

Проверим через lsblk:

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 39,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

Теперь раздел sda5 увеличен до 39.1 Гб, всё верно. Расширим логический том и файловую систему, смонтированную в корень:

~# pvresize /dev/sda5
  Physical volume "/dev/sda5" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
~# lvextend -l +100%FREE /dev/debian13-vg/root
  Size of logical volume debian13-vg/root changed from <18,02 GiB (4613 extents) to <38,02 GiB (9733 extents).
  Logical volume debian13-vg/root successfully resized.
~# resize2fs /dev/debian13-vg/root
resize2fs 1.47.2 (1-Jan-2025)
Filesystem at /dev/debian13-vg/root is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 5
The filesystem on /dev/debian13-vg/root is now 9966592 (4k) blocks long.

Проверим, что всё получилось:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
udev                            1,9G            0  1,9G            0% /dev
tmpfs                           389M         744K  388M            1% /run
/dev/mapper/debian13--vg-root    38G         958M   35G            3% /
tmpfs                           1,9G            0  1,9G            0% /dev/shm
tmpfs                           5,0M            0  5,0M            0% /run/lock
tmpfs                           1,0M            0  1,0M            0% /run/credentials/systemd-journald.service
tmpfs                           1,9G            0  1,9G            0% /tmp
/dev/sda1                       933M          62M  807M            8% /boot
tmpfs                           1,0M            0  1,0M            0% /run/credentials/getty@tty1.service
tmpfs                           389M         8,0K  389M            1% /run/user/1000

~# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk
├─sda1                    8:1    0  966M  0 part /boot
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 39,1G  0 part
  ├─debian13--vg-root   254:0    0   38G  0 lvm  /
  └─debian13--vg-swap_1 254:1    0    1G  0 lvm  [SWAP]
sr0                      11:0    1  784M  0 rom

После окончания работ не забываем включить swap:

swapon -a

LVM (Logical Volume Manager) — это технология управления дисковым пространством в Linux, которая позволяет гибко объединять несколько физических дисков или их разделов в единые логические тома, изменять их размер "на лету", создавать снимки (снапшоты) и управлять хранилищем более эффективно, чем при классической разметке. Это обеспечивает абстракцию от физического железа, давая возможность динамически расширять разделы без переформатирования.

Основные компоненты LVM:

  • Физические тома (PV, Physical Volume): Это отдельные диски или их разделы, которые выделяются для LVM.
  • Группы томов (VG, Volume Group): Объединение одного или нескольких PV в единый пул дискового пространства.
  • Логические тома (LV, Logical Volume): Это "виртуальные" разделы, создаваемые из пространства группы томов (VG), которые видны системе как обычные диски.

Другими словами, LVM позволяет нам не привязываться к размерам физического диска, а размечать разделы так, как нам удобно. Мы можем сделать раздел как меньше диска, так и разместить его на нескольких дисках. Кроме того, в ряде случаев, LVM позволяет безопасно уменьшить размер диска или даже перенести на другой диск.


Подробное объяснение работ

Команда df -h показывает нам распределение места по точкам монтирования. Здесь в рамках этой лабораторной работы нас интересует следующая строка:

~# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/debian13--vg-root    18G         959M   16G            6% /

Мы видим, что корень файловой системы имеет размер 18 Гб, из них 16 Гб свободно. Точка монтирования создана на логическом томе LVM по пути: /dev/mapper/debian13--vg-root.

В команде lsblk нас интересуют четыре строки:

NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   20G  0 disk
├─sda2                    8:2    0    1K  0 part
└─sda5                    8:5    0 19,1G  0 part
  ├─debian13--vg-root   254:0    0   18G  0 lvm  /

Первая строка говорит, что жёсткий диск имеет объём 20 Гб. Следующая строка показывает нам раздел sda2 имеет размер 1К - это явный признак, что он имеет тип Extended и sda5 находится внутри него. Проверить это можно, посмотрев сектора в fdisk -l (частичный вывод):

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda2       1980416 83886079 81905664 39,1G  5 Extended
/dev/sda5       1982464 83886079 81903616 39,1G 8e Linux LVM

Как видим, sda5 начинается с 1982464 и заканчивается 83886079, что полностью входит в sda2 (с 1980416 до 83886079).

Следующие строки показываем нам, что раздел sda5 имеет объём 19.1 Гб, а внутри него наша корневая файловая система в LVM размером 18 Гб. Остальное место ушло на swap, boot и т.д., они нас сейчас не интересуют. Именно корневую файловую систему мы и будем расширять.

Мы разобрались с выводом lsblk и df -h до проведения работ. После расширения диска в виртуализации вывод df -h не поменялся, т.к. файловая система ничего не знает про новое место. А вот вывод lsblk поменялся, но только в одной строке:

NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   40G  0 disk

Debian увидела, что HDD теперь имеет размер 40 Гб. Если этого не произошло - проще всего перечитать размер дисков перезагрузкой виртуальной машины.

Теперь нам нужно расширить LVM на появившееся место. Есть два основных варианта как это сделать:

  • Создать новый раздел
  • Расширить текущий раздел

В этом варианте лабораторной работы мы будем использовать второй вариант. Для этого воспользуемся утилитой growpart.

Для любых работ с диском, на котором хранится SWAP, рекомендуется его отключать.

swapoff -a

Поскольку стандартный установщик Debian создаёт LVM внутри расширенного раздела (extended partition), прямое расширение sda5 невозможно. Сначала расширим раздел sda2 (extended), а затем уже sda5 (logical). growpart выполнит все необходимые операции за нас, сохраняя начальные сектора и критичные для файловой системы вещи.

growpart /dev/sda 2
growpart /dev/sda 5

Как видите, использование growpart максимально просто. Оба раздела были расширены до 39.1 Гб, как мы и хотели - добавилось по 20 Гб. Расширенный раздел (extended) технически является «контейнером» и не хранит данные напрямую — поэтому lsblk показывает его размер как 1K. Осталось малое - сообщить LVM и ext4, что они изменили размер. Для этого используются команды:

~# pvresize /dev/sda5

Мы сообщили PV что он изменил размер. Имя PV можно посмотреть командой pvs:

~# pvs
  PV         VG          Fmt  Attr PSize  PFree
  /dev/sda5  debian13-vg lvm2 a--  19,05g    0

Следом сообщаем логическому тому, что он тоже изменил размер и выдаём ему 100% диска:

~# lvextend -l +100%FREE /dev/debian13-vg/root
  Size of logical volume debian13-vg/root changed from <18,02 GiB (4613 extents) to <38,02 GiB (9733 extents).
  Logical volume debian13-vg/root successfully resized.

Здесь нам нужно указать имя LV, формируется он из /dev, далее указывается VG и название LV. Посмотреть их имена можно командами:

~# vgs
  VG          #PV #LV #SN Attr   VSize  VFree
  debian13-vg   1   2   0 wz--n- 19,05g    0
~# lvs
  LV     VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   debian13-vg -wi-ao---- <18,02g
  swap_1 debian13-vg -wi-ao----   1,03g

Последнее действие, которое нам необходимо - сообщить ext4, что она увеличена в размерах:

resize2fs /dev/debian13-vg/root

Команда resize2fs работает только с файловыми системами ext2/ext3/ext4. Если у вас XFS (проверьте командой df -T /), используйте:

xfs_growfs /

На этом увеличение диска закончено. Осталось только вернуть swap в работу:

swapon -a