Общее описание действий
- Уменьшаем физический том LVM чтобы освободить место для нового раздела boot:
- Для того, чтобы увеличить размер физического дискового раздела, на диске должно иметься свободное место, не занятое другими физическими дисковыми разделами;
- Если свободного места на диске нет - то нужно либо удалить, либо уменьшить другие физические дисковые разделы;
- Для того, чтобы уменьшить размер физического дискового раздела в нём должно быть свободное место, не занятое файловыми системами, а в случае дисков LVM - не занятое логическими томами.
При этом свободное место не должно быть фрагментировано, и должно находиться в конце дискового разделе, поэтому при использовании LVM может понадобиться дефрагментировать физический том LVM; - Если свободного места в физическом дисковом разеделе нет - то нужно уменьшить размещённую там файловую систему (уменьшить или удалить логические тома LVM);
- Для того чтобы уменьшить размер файловой системы (логического тома LVM) в ней (в нём) должно быть свободное место.
- Если в файловой системе свободного места нет (ненормальная ситуация) либо свободного места недостаточно, нужно удалить или заархивировать файлы, находящиеся в этой файловой системе.
Если места нет в логическом томе LVM - нужно уменьшить находящуюся в нём файловую систему.
- Создаём и настраиваем новый дисковый раздел boot.
Далее в качестве базовой расматривается умеренно-неудобная ситуация, возникающая при эксплуатации компьютера со стандартно установленной ОС:
- Свободного места на диске нет;
- Есть дисковый раздел подкачки (swap). В современных системах наличие выделенного дискового раздела для области подкачки является не более чем традицией, так как для подкачки можно в любой момент использовать файлы (см. Область подкачки (swap): особенности применения и обеспечения безопасности). Таким образом, раздел swap можно безболезненно удалить, однако в рассматриваемой конфигурации задача усложняется тем, что этот раздел находится на LVM-разделе;
- Предполачается, что на находящейся в эксплуатации машине свободного места в файловых системах мало, и уменьшать их размер нерационально. Возможность оптимизации процесса за счёт уменьшения файловых систем и, соотвественно, логических томов дисковых разделов рассмотрена отдельно.
Исходная конфигурация
Для написания статьи использовался компьютер со следующими параметрами:
- Размер единственного жесткого диска 32ГБ;
- При установке ОС:
- Выбрано имя машины lvs (используется в именовании LVM-устройств);
- Была выбрана установка с использованием LVM;
- Была принята стандартная конфигурация разметки диска:
- каталог /boot размещен в отдельном дисковом разделе /dev/sda1 с файловой системой etc2 и размером 243МБ;
- всё оставшееся место на диске занято расширенным (extended) дисковым разделом sda2, содержащим:
- дисковый раздел sda5, он же физический том LVM, занимающий всё место в расширенном дисковом разделе и содержащем все логические тома LVM, занимающие всё место в этом томе:
- каталог /root размещен в отдельном логическом томе LVM (том root);
- каталог /home размещен отдельный логическим томе LVM (том home);
- область подкачки (swap), которая тоже размещена в отдельном логическом томе LVM (том swap_1);
- дисковый раздел sda5, он же физический том LVM, занимающий всё место в расширенном дисковом разделе и содержащем все логические тома LVM, занимающие всё место в этом томе:
В итоге получена следующая конфигурация:
Физические дисковые разделы
Command | ||
---|---|---|
| ||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 32G 0 disk ├─sda1 8:1 243M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 31,3G 0 part |
где:
- sda1 - дисковый раздел с каталогом /boot, размер 243МБ
- sda2 - расширенный дисковый раздел;
- sda5 - дисковый раздел LVM, имеющий размер 31.3ГБ, на котором находятся логические тома LVM root, home, swap_1, содержащие, соответственно, каталоги /root, /home и область подкачки (в данном случае командой lsblk логические тома LVM не отображаются, но могут отображаться в зависимости от версии ОС).
Физические тома LVS
Имеется один физический том LVS, он же физический дисковый раздел:
Command | ||
---|---|---|
| ||
|
Группы томов LVS
Имеется одна группа томов LVS:
Command | ||
---|---|---|
| ||
VG #PV #LV #SN Attr VSize VFree lvs-vg 1 3 0 wz--n- 31,76g 0 |
Логические тома LVS
Имеется три логических тома LVS:
Command | ||
---|---|---|
| ||
|
При этом более информативная команда просмотра информации о физических томах:
Command | ||
---|---|---|
| ||
Wiping internal VG cache Wiping cache of LVM-capable devices PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/sda5 lvs-vg lvm2 a-- 31,76g 0 0 2836 root 0 linear /dev/sda5:0-2835 /dev/sda5 lvs-vg lvm2 a-- 31,76g 0 2836 1023 swap_1 0 linear /dev/sda5:2836-3858 /dev/sda5 lvs-vg lvm2 a-- 31,76g 0 3859 4271 home 0 linear /dev/sda5:3859-8129 |
Показывает, что:
Предупреждение |
---|
Логический том swap_1 расположен между томами root и home, то есть удалив этот том - уменьшить физический раздел не получится, так как свободное место будет находиться между существующими томами. |
Сценарий действий
Информация |
---|
Если компьютер уже не загружается, все дальнейшие действия могут быть выполнены после загрузки с live-USB (см. статью Создание загрузочных носителей USB flash drive а также статью Создание собственных Live-CD/Live-USB в Astra Linux). Если компьютер работоспособен, некоторые предварительные действия лучше выполнить из обычной сессии. |
Предварительные действия
Предупреждение |
---|
Перед выполнением дальнейших действий сделать и проверить резервную копию данных. |
Проверить и отключить область подкачки:
Command Title sudo swapon NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 4G 0B -2
Command sudo swapoff /dev/dm-1
Или просто отключить все области подкачки:
Command sudo swapoff -a
Удалить раздел подкачки из таблицы монтирования (можно просто закомментировать соответствующую строчку в файле /etc/fstab):
Блок кода #/dev/mapper/lvs--vg-swap_1 none swap sw 0 0
Удалить логический том swap_1:
Command Title sudo lvremove /dev/`hostname`-vg/swap_1 Do you really want to remove active logical volume lvs-vg/swap_1? [y/n]: y
Logical volume "swap_1" successfully removed
Опционально, особенно если в дальнейшем не планируется использовать раздел подкачки, для того, чтобы при перезагрузках не выдавались задерживающие перезагрузку диагностические собщения о ненайденном разделе подкачки, в файле /etc/initramfs-tools/conf.d/resume закомментировать строчку:
Блок кода #RESUME=/dev/mapper/lvs--vg-swap_1
после чего выполнить команды:
Command sudo update-initramfs -t -u -k `uname -r`
sudo update-grubЕсли раздел подкачки будет восстановлен - то раскомментировать эту строчку и повторно выполнить указанные команды.
Если всё сделано правильно, то команда pvs покажет наличие свободного места в "середине" физического тома:
Command | ||
---|---|---|
| ||
Wiping internal VG cache Wiping cache of LVM-capable devices PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 0 2836 root 0 linear /dev/sda5:0-2835 /dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 2836 1023 0 free /dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 3859 4271 home 0 linear /dev/sda5:3859-8129 |
При этом видно, что свободное место имеет рамер 1023 блока, а логический том home имеет размер 4271 блоков, то есть размер логического тома home больше, чем размер доступного свободного места.
Дефрагментация дискового LVM-раздела
Если ваш дисковый раздел не фрагментирован, этот шаг можно пропустить, и перейти к следующему.
Если ваши файловые системы не сильно заполнены, то дефрагментацию можно существенно ускорить уменьшив логические тома (см. далее "Оптимизация").
Информация | ||||||
---|---|---|---|---|---|---|
В некоторых случаях дефрагментация может быть выполнена без использования live-USB и без перезагрузки машины. В частности, в рассматриваемом примере дефрагментация выполняется за счет перемещения логического тома /home, и для выполнения дефрагментации можно:
Таким приёмом можно воспользоваться, чтобы сохранить функционирование сетевых сервисов, обеспечив непрерывность их работы. Однако этот приём неприменим к перемещению тома root и, если требуется переместить том root, использование live-USB обязательно. |
Если размер свободного места больше, чем размер переносимого LVM-раздела, то устранить фрагментацию можно одной командой вида (подробнее см. в разеле "Оптимизация"):
Command |
---|
sudo pvmove --alloc anywhere /dev/sda5:XXXX+YYY /dev/sda5:ZZZZ+YYY |
где ХХХХ+YYY - диапазон блоков переносимого тома (см. вывод команды sudo pvs -v --segmens выше), а ZZZZ+YYY - дапазон блоков, куда будет перемещён том.
В рассматриваемом случае размер свободного места меньше размера переносимого LVM-раздела, и команда pvmove сообщит об этом:
Command | ||
---|---|---|
| ||
Insufficient free space: 4271 extents needed, but only 1023 available Unable to allocate mirror extents for lvs-vg/pvmove0. Failed to convert pvmove LV to mirrored |
В таком случае перенос дискового раздела можно выполнить по частям, указывая какие диапазоны блоков куда переносить. В рассматриваемом примере размер свободного места 1023 блока, и удобно переносить по тысяче блоков:
Command |
---|
sudo pvmove --alloc anywhere /dev/sda5:3859+1000 /dev/sda5:2836+1000 |
В итоге:
Информация | ||
---|---|---|
| ||
Wiping internal VG cache Wiping cache of LVM-capable devices PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 0 2836 root 0 linear /dev/sda5:0-2835 /dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 2836 1001 home 0 linear /dev/sda5:2836-3836 /dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 3837 1023 0 free /dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 4860 3270 home 1001 linear /dev/sda5:4860-8129 |
Далее:
Command |
---|
sudo pvmove --alloc anywhere /dev/sda5:4860+1000 /dev/sda5:3837+1000 sudo pvmove --alloc anywhere /dev/sda5:5861+1000 /dev/sda5:4838+1000 sudo pvmove --alloc anywhere /dev/sda5:6862+1000 /dev/sda5:5839+1000 sudo pvmove --alloc anywhere /dev/sda5:7863- /dev/sda5:6840- |
И в итоге раздел дефрагментирован, свободное пространство переместилось в конец раздела:
Command | ||
---|---|---|
| ||
sudo pvs -v --segments /dev/sda5 |
Предупреждение |
---|
Размер использованного в примере раздела около 32ГБ, что в десятки раз меньше реальных дисковых разделов. То есть, в реальной системе такая пошаговая дефрагментация потребует в десятки раз больше шагов и соответствующее количество времени. |
Уменьшение размера физического дискового раздела (физического тома)
При наличии правильно выделенного свободного места физический дисковый раздел (в том числе - являющийся физическим томом LVM) можно уменьшить используя входящий в состов live-USB графический инструмент gparted ("Пуск" - "Системные" - "Редактор разделов Gparted").
При работе из командной строки можно использовать команду pvresize:
Command |
---|
sudo pvresize -v --setphysicalvolumesize 32778240K /dev/sda5 |
однако при этом вычислять новый размер тома придётся самостоятельно.
Уменьшение размера расширенного дискового раздела и создание нового раздела boot
После уменьшения физического доскового раздела следует уменьшить расширенный дисковый раздел. Для этого необходимо загрузиться с live-USB, после чего использовать графический инструмент gparted. Перед изменением размера нужно отключить работу lvm с томом, находящемся на этом разделе, для чего нажать правой кнопкой мыши на изображение физического тома и выбрать пункт "Выключить". После этого в меню, открывающемся по нажатию правой кнопки мыши станет доступен пункт "Изменить размер или переместить", воспользовавшись которым нужно уменьшить размер раздела. Удобно сразу же создать на освободившемся месте новый раздел boot:
Новый раздел следует разметить под файловую систему ext2, обязательно установить на него флаг boot, и желательно присвоить ему мнемоническую метку (boot в данном случае).
Настройка нового раздела boot
Дальнейшие действия не требуют загрузки с live-USB, и могут быть выполнены в обычном режиме работы, при этом после выполнения этих действий компьютер может оставатьмя в работе:
Проверить состав дисковых разделов:
Command Title lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 243M 0 part /boot
├─sda2 8:2 0 1K 0 part
├─sda3 8:3 512M 0 part
└─sda5 8:5 0 31,3G 0 partК списку разделов добавился раздел sda3 с размером 512MБ
Примонтировать новый раздел в любое удобное место:
Command sudo mount /dev/sda3 /mnt Скопировать в новый раздел boot содержимое старого раздела boot:
Command sudo cp -r /boot /mnt - Изменить таблицу монтрования, чтобы вместо старого раздела boot монтировался новый, для чего:
Вывести идентификаторы разделов:
Command Title sudo blkid /dev/sda1: UUID="86418b1a-525a-4614-a600-749403a542b2" TYPE="ext2" PARTUUID="9326d1ae-01"
/dev/sda3: LABEL="boot" UUID="7fb61205-3f42-44ff-8886-a394991bfac0" TYPE="ext2" PARTUUID="9326d1ae-03"
/dev/sda5: UUID="Xqsuis-3sj7-VEHQ-uUXX-RzJu-lozK-OkbqN9" TYPE="LVM2_member" PARTUUID="9326d1ae-05"
/dev/mapper/lvs--vg-root: UUID="589855d1-25f5-4151-bfa4-8d1d1861a954" TYPE="ext4"
/dev/mapper/lvs--vg-home: UUID="88356e6b-7920-4357-a21e-733435f1aa72" TYPE="ext4"
В файле /etc/fstab заменить старую инструкцию монтирования раздела boot:
Блок кода UUID=86418b1a-525a-4614-a600-749403a542b2 /boot ext2 defaults 0 2
на новую, вставив новый идентификатор, полученный командой blkid:
Блок кода UUID=7fb61205-3f42-44ff-8886-a394991bfac0 /boot ext2 defaults 0 2
или, что проще и понятнее, использовав метку диска:
Блок кода LABEL=boot /boot ext2 defaults 0 2
Отмонтировать старый раздел boot и примонтировать новый:
Command sudo umount /boot
sudo mount /bootЕесли в дальнейшем не планируется использовать раздел подкачки, для того, чтобы при перезагрузках не выдавались задерживающие перезагрузку диагностические собщения о ненайденном разделе подкачки, в файле /etc/initramfs-tools/conf.d/resume закомментировать строчку:
#RESUME=/dev/mapper/lvs--vg-swap_1
Если раздел подкачки будет восстановлен - то раскомментировать эту строчку.
После этого выполнить команды:Command sudo update-initramfs -t -u -k `uname -r`
sudo update-grub
После выполнения этих действий компьютер может оставаться в эксплуатации, при необходимости немедленной проверки работоспособности после перезагрузки компьютер следует перезагрузить.
Удаление старого раздела boot
При необходимости удалить старый раздел boot после его удаления следует выполнить команду для восстановления загрузчика:
Command |
---|
sudo grub-install /dev/sda |
Оптимизация процесса
Уменьшение размера логического тома
Проверить наличие свободного места в файловых системах, и оценить до каких размеров можно их сокращать:
Command Title df -h Файловая система Размер Использовано Дост Использовано% Cмонтировано в
udev 2,0G 0 2,0G 0% /dev
tmpfs 395M 8,0M 387M 3% /run
/dev/mapper/lvs--vg-root 11G 3,9G 6,4G 38% /
tmpfs 2,0G 4,0K 2,0G 1% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 2,0G 0 2,0G 0% /sys/fs/cgroup
/dev/sda1 236M 126M 98M 57% /boot
/dev/mapper/lvs--vg-home 17G 57M 16G 1% /home
tmpfs 395M 0 395M 0% /run/user/999
tmpfs 395M 8,0K 395M 1% /run/user/1000
Из вывода команды видно, что в разделе /home, имеющем размер 17ГБ, данными занято всего 57МБ (что, конечно, нехарактерно для находящихся в реальной эксплуатации компьютеров).
- Загрузиться с live-USB или отмонтировать раздел /home описанным выше способом.
- Проверить целостность файловой системы:
Command sudo e2fsck -ff /dev/mapper/lvs--vg-home Сократить размер файловой системы до 2GB:
Command sudo resize2fs /dev/mapper/lvs--vg-home 2G Сократить размер логического тома до 2GB:
Command Title sudo lvreduce -L 2G /dev/mapper/lvs--vg-home WARNING: Reducing active logical volume to 2,00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvs-vg/home? [y/n]: y
Size of logical volume lvs-vg/home changed from 16,68 GiB (4271 extents) to 2,00 GiB (512 extents).
Logical volume lvs-vg/home successfully resized.
- Опционально можно повторно проверить целостность файловой системы.
В итоге:
Command | ||
---|---|---|
| ||
Wiping internal VG cache Wiping cache of LVM-capable devices PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/sda5 lvs-vg lvm2 a-- 31,76g 18,68g 0 2836 root 0 linear /dev/sda5:0-2835 /dev/sda5 lvs-vg lvm2 a-- 31,76g 18,68g 2836 1023 0 free /dev/sda5 lvs-vg lvm2 a-- 31,76g 18,68g 3859 512 home 0 linear /dev/sda5:3859-4370 /dev/sda5 lvs-vg lvm2 a-- 31,76g 18,68g 4371 3759 0 free |
Видим, что логический том home стал меньше, чем свободное место перед ним, и может быть перемещён для дефрагметации одной командой и за разумное время:
Command |
---|
sudo pvmove --alloc anywhere /dev/sda5:3859+512 /dev/sda5:2836+512 |
Результат:
Command | ||
---|---|---|
| ||
Wiping internal VG cache Wiping cache of LVM-capable devices PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/sda5 lvs-vg lvm2 a-- 31,76g 18,68g 0 2836 root 0 linear /dev/sda5:0-2835 /dev/sda5 lvs-vg lvm2 a-- 31,76g 18,68g 2836 512 home 0 linear /dev/sda5:2836-3347 /dev/sda5 lvs-vg lvm2 a-- 31,76g 18,68g 3348 4782 0 free |
И, в итоге, можно уменьшить размер физического тома как описано выше.
После уменьшения размера физического тома:
Установить нужный размер логического тома home (для примера - том swap восстанавливать не предполагается, и home занимает всё свободное место):
Command sudo lvextend -l +4654 /dev/mapper/lvs--vg-home По желанию - восстановить том swap, например:
Command sudo lvcreate -n swap_1 -L 4G lvs-vg
Итог:
Command | ||
---|---|---|
| ||
Wiping internal VG cache Wiping cache of LVM-capable devices PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/sda5 lvs-vg lvm2 a-- 31,26g 0 0 2836 root 0 linear /dev/sda5:0-2835 /dev/sda5 lvs-vg lvm2 a-- 31,26g 0 2836 5166 home 0 linear /dev/sda5:2836-8001 |
Если действия выполнялись без использования live-USB - теперь можно примонтировать /home:
Command |
---|
sudo mount /home |
И перезапустить графическую сессию, чтобы вернуть привычное домашнее окружение.