Общее описание действий
- Уменьшаем физический том LVM чтобы освободить место для нового раздела boot:
- Для того, чтобы создать новый физический раздел, на диске должно иметься свободное место, не занятое другими физическими дисковыми разделами;
- Если свободного места на диске нет - то нужно либо удалить, либо уменьшить другие физические дисковые разделы;
- Для того, чтобы уменьшить размер физического дискового раздела в нём должно быть свободное место, не занятое файловыми системами, а в случае разделов, являющихся физическими томами LVM - место, не занятое логическими томами LVM.
При этом свободное место не должно быть фрагментировано, и должно находиться в конце дискового раздела. В случае обычных дисковых разделов это не проблема, но на физическом томе LVM могут размещаться несколько логических томов, поэтому при использовании LVM может понадобиться дефрагментировать физический том LVM; - Если свободного места в физическом дисковом разделе нет - то нужно уменьшить размещённую там файловую систему (для LVM - уменьшить или удалить логические тома LVM);
- Для того чтобы уменьшить размер файловой системы (логического тома LVM) в ней (в нём) должно быть свободное место.
- Если в файловой системе свободного места нет (ненормальная ситуация) либо свободного места недостаточно (реальная ситуация для находящегося в эксплуатации компьютера), нужно удалить или заархивировать файлы, находящиеся в этой файловой системе.
Если места нет в логическом томе LVM - нужно уменьшить находящуюся в нём файловую систему.
- Создаём и настраиваем новый дисковый раздел boot.
Далее в качестве базовой расcматривается умеренно-неудобная ситуация, возникающая при эксплуатации компьютера со стандартно установленной ОС:
- Свободного места на диске нет;
- Свободного места в дисковом разделе, который нужно уменьшить, тоже нет, но зато в нём есть логический том для вытеснения страниц (область подкачки, swap). В современных системах наличие выделенного дискового раздела для области подкачки является не более чем традицией, так как для этоой цели можно в любой момент использовать файлы (см. Область подкачки (swap): особенности применения и обеспечения безопасности). Таким образом, том области полдкачки можно безболезненно удалить, однако в рассматриваемой конфигурации задача усложняется тем, что в результате удаления тома подкачки возникает фрагментация;
- Предполагается, что на находящейся в эксплуатации машине свободного места в файловых системах мало, и уменьшать их размер нерационально. Возможность оптимизации процесса за счёт уменьшения файловых систем и, соответственно, уменьшения логических томов рассмотрена отдельно.
Исходная конфигурация
Для написания статьи использовался компьютер со следующими параметрами:
- Размер единственного жесткого диска 32ГБ;
- При установке ОС:
- Выбрано имя машины lvs (используется в именовании LVM-устройств);
- Выбрана установка с использованием LVM;
- Принята стандартная конфигурация разметки диска со следующими параметрами, заданными при установке ОС:
- Каталог /boot размещен в отдельном дисковом разделе /dev/sda1 с файловой системой ext2 и размером 243МБ. С учётом того, что раздел boot не может находиться в томах LVM - наличие отдельного дискового раздела boot становится при использовании LVM обязательным;
- Всё оставшееся место на диске занято расширенным (extended) дисковым разделом sda2, содержащим:
- Дисковый раздел sda5, он же физический том LVM. Дисковый раздел sda5 занимает всё место в расширенном дисковом разделе sda2 и содержит все логические тома LVM, занимающие всё место в этом разделе sda5:
- каталог /root размещен в отдельном логическом томе LVM (том root);
- каталог /home размещен отдельный логическим томе LVM (том home);
- область подкачки (swap) размещена в отдельном логическом томе LVM (том swap_1);
- Дисковый раздел sda5, он же физический том LVM. Дисковый раздел sda5 занимает всё место в расширенном дисковом разделе sda2 и содержит все логические тома LVM, занимающие всё место в этом разделе sda5:
В итоге получена следующая конфигурация:
Физические дисковые разделы
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, он же физический дисковый раздел sda5:
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 |
Предупреждение |
---|
Размер использованного в примере раздела около 16ГБ, что в десятки раз меньше реальных дисковых разделов. То есть, в реальной системе такая пошаговая дефрагментация потребует в десятки раз больше шагов и соответствующее количество времени. |
Уменьшение размера физического дискового раздела (физического тома)
При наличии правильно выделенного свободного места физический дисковый раздел (в том числе - являющийся физическим томом LVM) можно уменьшить используя входящий в состов live-USB графический инструмент gparted ("Пуск" - "Системные" - "Редактор разделов Gparted").
При работе из командной строки можно использовать команду pvresize:
Command |
---|
sudo pvresize -v --setphysicalvolumesize 32778240K /dev/sda5 |
однако при этом вычислять новый размер тома придётся самостоятельно.
Уменьшение размера расширенного дискового раздела и создание нового раздела boot
После уменьшения физического доскового раздела следует уменьшить расширенный дисковый раздел. Для этого необходимо:
- Загрузиться с live-USB;
- Использовать графический инструмент gparted.
Некоторые live-USB (а том чиcле live-USB Astra Linux) при загрузке автоматически активируют LVM, поэтому перед изменением размера расширенного раздела может понадобиться отключить работу LVM, для чего нажать правой кнопкой мыши на изображение физического тома и выбрать пункт "Выключить".
В меню, открывающемся по нажатию правой кнопки мыши имеется пункт "Изменить размер или переместить", воспользовавшись которым нужно уменьшить размер раздела.
Удобно сразу же создать на освободившемся месте новый раздел boot:
Новый раздел следует разметить под файловую систему ext2, обязательно установить на него флаг boot, и желательно присвоить ему мнемоническую метку (boot в данном случае).
При работе в командной строке для изменения размера раздела следует:
Выполнить команду parted:
Command | ||
---|---|---|
| ||
GNU Parted 3.2 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) |
В диалоге команды определить номер изменяемого раздела с помощью команды print (раздел №2, extended):
Блок кода |
---|
(parted) print Model: ATA VBOX HARDDISK (scsi) Disk /dev/sda: 34,4GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 256MB 255MB primary ext2 boot 2 257MB 34,4GB 34,1GB extended 5 257MB 33,8GB 33,6GB logical lvm |
Изменить размер раздела командой :
Блок кода |
---|
(print) resizepart 2 33.8G |
Где:
- 2 - номер изменяемого раздела;
- 33.8G - новая граница раздела (можно принять равной границе ранее уменьшенного логического тома);
Создать новый раздел (нижняя и верхняя границы выбираются из ранее отображенных параметров):
Блок кода |
---|
(print) mkpart primary ext2 33.8G 34.4G |
Проверить номер нового раздела:
Блок кода |
---|
(parted) print Model: ATA VBOX HARDDISK (scsi) Disk /dev/sda: 34,4GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 256MB 255MB primary ext2 2 257MB 33,8GB 33,6GB extended 5 257MB 33,8GB 33,6GB logical lvm 3 33,8GB 34,4GB 537MB primary ext2 boot |
Установить на раздел созданный раздел флаг boot:
Блок кода |
---|
(print) toggle 3 boot |
Выйти из программы parted:
Блок кода |
---|
q |
Опционально, проверить список раздедов:
Command | ||
---|---|---|
| ||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 32G 0 disk ├─sda1 8:1 243M 0 part ├─sda3 8:3 512M 0 part /boot └─sda5 8:5 0 31,3G 0 part |
Опционально, установить на раздел метку "boot":
Command |
---|
sudo e2label /dev/sda5 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, старый идентификатор на новый, полученный командой 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 закомментировать строчку:
Command #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 |
После чего можно перезапустить графическую пользовательскую сессию, чтобы вернуть привычное домашнее окружение.