Общее описание действий
- Уменьшаем физический том 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:
В итоге получена следующая конфигурация:
Физические дисковые разделы
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:
PV VG Fmt Attr PSize PFree
/dev/sda5 lvs-vg lvm2 a-- 31,76g 0
Имеется одна группа томов LVS:
VG #PV #LV #SN Attr VSize VFree
lvs-vg 1 3 0 wz--n- 31,76g 0
Имеется три логических тома LVS:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home lvs-vg -wi-ao---- 16,68g
root lvs-vg -wi-ao---- 11,08g
swap_1 lvs-vg -wi-ao---- 4,00g
При этом более информативная команда просмотра информации о физических томах:
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
Сценарий действий
Если компьютер уже не загружается, все дальнейшие действия могут быть выполнены после загрузки с live-USB (см. статью Создание загрузочных носителей USB flash drive а также статью Создание собственных Live-CD/Live-USB в Astra Linux). Если компьютер работоспособен, то большинство действий можно выполнить из обычной сессии, не останавливая работу компьютера.
Предварительные действия
Перед выполнением дальнейших действий сделать и проверить резервную копию данных.
Проверить и отключить область подкачки:
sudo swaponNAME TYPE SIZE USED PRIO
/dev/dm-1 partition 4G 0B -2
Или просто отключить все области подкачки:sudo swapoff /dev/dm-1
sudo swapoff -aУдалить раздел подкачки из таблицы монтирования (можно просто закомментировать соответствующую строчку в файле /etc/fstab):
#/dev/mapper/lvs--vg-swap_1 none swap sw 0 0
Удалить логический том swap_1:
sudo lvremove /dev/`hostname`-vg/swap_1Do 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
после чего выполнить команды:
sudo update-initramfs -t -u -k `uname -r`Если раздел подкачки будет восстановлен - то раскомментировать эту строчку и повторно выполнить указанные команды.
sudo update-grub
Если всё сделано правильно, то команда pvs покажет наличие свободного места в "середине" физического тома:
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
Дефрагментация физического тома LVM
Если ваш физический том LVM не фрагментирован, этот шаг можно пропустить, и перейти к следующему.
Если ваши файловые системы не сильно заполнены, то дефрагментацию можно существенно ускорить уменьшив логические тома (см. далее "Оптимизация").
В некоторых случаях дефрагментация может быть выполнена без использования live-USB и без перезагрузки машины. В частности, в рассматриваемом примере дефрагментация выполняется за счет перемещения логического тома /home, и для выполнения дефрагментации можно:
- Закрыть все пользовательские графические сессии;
- Войти в консольную сессию (Ctrl+Alt+F1);
Освободить домашний каталог, перейдя в коневой каталог:
cd /Отмонтировать каталог /home:
sudo umount /homeДалее работать в консольной сессии или вернуться в графическую сесиию (Ctrl+Alt+F7) (при этом будет выдано передупреждение, что работа выполняется во временном домашнем каталоге);
- Выполнить все действия по дефрагментации;
По завершении работ снова примонтировать каталог:
sudo mount /home
Таким приёмом можно воспользоваться, чтобы сохранить функционирование сетевых сервисов, обеспечив непрерывность их работы. Однако таким способом невозможно переместить том root и, если требуется переместить том root, использование live-USB обязательно.
Если размер свободного места больше, чем размер переносимого логического тома LVM, то устранить фрагментацию можно одной командой:
В рассматриваемом случае размер свободного места меньше размера переносимого LVM-раздела, и команда pvmove сообщит об этом:
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
В итоге:
sudo pvs -v --segments /dev/sda5
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
Далее:
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-
sudo pvs -v --segments /dev/sda5
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 4271 home 0 linear /dev/sda5:2836-7106
/dev/sda5 lvs-vg lvm2 a-- 31,76g 4,00g 7107 1023 0 free
Уменьшение размера физического дискового раздела (физического тома)
При наличии правильно выделенного свободного места физический дисковый раздел (в том числе - являющийся физическим томом LVM) можно уменьшить используя входящий в состов live-USB графический инструмент gparted ("Пуск" - "Системные" - "Редактор разделов Gparted").
При работе из командной строки можно использовать команду pvresize:
Уменьшение размера расширенного дискового раздела и создание нового раздела boot
После уменьшения физического доскового раздела следует уменьшить расширенный дисковый раздел. Для этого необходимо:
- Загрузиться с live-USB;
- Использовать графический инструмент gparted.
Некоторые live-USB (а том чиcле live-USB Astra Linux) при загрузке автоматически активируют LVM, поэтому перед изменением размера расширенного раздела может понадобиться отключить работу LVM, для чего нажать правой кнопкой мыши на изображение физического тома и выбрать пункт "Выключить".
В меню, открывающемся по нажатию правой кнопки мыши имеется пункт "Изменить размер или переместить", воспользовавшись которым нужно уменьшить размер раздела.
Удобно сразу же создать на освободившемся месте новый раздел boot:
Новый раздел следует разметить под файловую систему ext2, обязательно установить на него флаг boot, и желательно присвоить ему мнемоническую метку (boot в данном случае).
При работе в командной строке для изменения размера раздела следует:
Выполнить команду parted:
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
(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
Опционально, проверить список раздедов:
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
Дальнейшие действия не требуют загрузки с live-USB, и могут быть выполнены в обычном режиме работы, при этом после выполнения этих действий компьютер может оставаться в работе:
Проверить состав дисковых разделов:
lsblkК списку разделов добавился раздел sda3, имеющий размер 512MБ
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Примонтировать новый раздел в любое удобное место:
sudo mount /dev/sda3 /mntСкопировать в новый раздел boot содержимое старого раздела boot:
sudo cp -R /boot/* /mnt- Изменить таблицу монтирования, чтобы вместо старого раздела boot монтировался новый, для чего:
Вывести идентификаторы разделов:
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 и примонтировать новый:
sudo umount /boot
sudo mount /bootЕесли в дальнейшем не планируется использовать раздел подкачки, для того, чтобы при перезагрузках не выдавались задерживающие перезагрузку диагностические собщения о ненайденном разделе подкачки, в файле /etc/initramfs-tools/conf.d/resume закомментировать строчку:
#RESUME=/dev/mapper/lvs--vg-swap_1Если раздел подкачки будет использоваться - то строчка должна быть раскомментирована.Выполнить команды:
sudo update-initramfs -t -u -k `uname -r`
sudo update-grub
После выполнения этих действий компьютер может оставаться в эксплуатации, при необходимости немедленной проверки работоспособности после перезагрузки компьютер следует перезагрузить.
Удаление старого раздела boot
При необходимости удалить старый раздел boot после его удаления следует выполнить команду для восстановления загрузчика:
Оптимизация процесса
Уменьшение размера логического тома
Проверить наличие свободного места в файловых системах, и оценить до каких размеров можно их сокращать:
df -hИз вывода команды видно, что в разделе /home, имеющем размер 17ГБ, данными занято всего 57МБ (что, конечно, нехарактерно для находящихся в реальной эксплуатации компьютеров).Файловая система Размер Использовано Дост Использовано% 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
- Загрузиться с live-USB или отмонтировать раздел /home описанным выше способом.
- Проверить целостность файловой системы:sudo e2fsck -ff /dev/mapper/lvs--vg-home
Сократить размер файловой системы до 2GB:
sudo resize2fs /dev/mapper/lvs--vg-home 2GСократить размер логического тома до 2GB:
sudo lvreduce -L 2G /dev/mapper/lvs--vg-homeWARNING: 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.
- Опционально можно повторно проверить целостность файловой системы.
В итоге:
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
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 занимает всё свободное место):
sudo lvextend -l +4654 /dev/mapper/lvs--vg-homeПо желанию - восстановить том swap, например:
sudo lvcreate -n swap_1 -L 4G lvs-vg
Итог:
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