Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Предупреждение

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

Сделав резервную копию данных следует оценить трудозатраты, необходимые для выполнения описанных ниже действий и время, для этого необходимое,  и подумать не проще ли применить альтернативный вариант: переразметить диск и восстановить систему из сделанной резервной копии.

Если есть сомнения в надёжности электропитания лучше сразу перейти к восстановлению из резервных копий, так как отключение электропитания в процессе изменения дисковых разделов с высокой вероятностью приведёт к потере содержащихся там данных (см. также Средства восстановления повреждённых и удалённых данных).

Альтернативы может не быть если действия должны быть выполнены на сервере, не допускающем прерывания обслуживания , однако применимость настоящей статьи в такой ситуации зависит от конкретной конфигурации сервера, и общего рецепта тут нет.



Информация
titleДанная статья применима к:
  • ОС ОН Орел 2.12
  • ОС СН Смоленск 1.6


Общее описание действий

  1. Уменьшаем физический том LVM чтобы освободить место для нового раздела boot:
    1. Для того, чтобы увеличить размер физического дискового раздела, на диске должно иметься свободное место, не занятое другими физическими дисковыми разделами;
    2. Если свободного места на диске нет - то нужно либо удалить, либо уменьшить другие физические дисковые разделы;
    3. Для того, чтобы уменьшить размер физического дискового раздела в нём должно быть свободное место, не занятое файловыми системами, а в случае дисков LVM - не занятое логическими томами.
      При этом свободное место не должно быть фрагментировано, и должно находиться в конце дискового разделе, поэтому при использовании LVM может понадобиться дефрагментировать физический том LVM;
    4. Если свободного места в физическом дисковом разеделе нет - то нужно уменьшить размещённую там файловую систему (уменьшить или удалить логические тома LVM);
    5. Для того чтобы уменьшить размер файловой системы (логического тома LVM) в ней (в нём) должно быть свободное место.
    6. Если в файловой системе свободного места нет (ненормальная ситуация) либо свободного места недостаточно, нужно удалить или заархивировать файлы, находящиеся в этой файловой системе.
      Если места нет в логическом томе LVM - нужно уменьшить находящуюся в нём файловую систему.
  2. Создаём и настраиваем новый дисковый раздел 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);

В итоге получена следующая конфигурация:

Физические дисковые разделы

Command
Titlelsblk
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
Titlesudo pvs

 PV         VG     Fmt  Attr PSize  PFree
 /dev/sda5  lvs-vg lvm2 a--  31,76g    0

Группы томов LVS

Имеется одна группа томов LVS:

Command
Titlesudo vgs
 VG     #PV #LV #SN Attr   VSize  VFree
 lvs-vg   1   3   0 wz--n- 31,76g    0

Логические тома LVS

Имеется три логических тома LVS:

Command
Titlesudo 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 

При этом более информативная команда просмотра информации о физических томах:

Command
Title 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    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). Если компьютер работоспособен, некоторые предварительные действия лучше выполнить из обычной сессии.

Предварительные действия

Предупреждение

Перед выполнением дальнейших действий сделать и проверить резервную копию данных.

  1. Проверить и отключить область подкачки:

    Command
    Titlesudo swapon

    NAME      TYPE      SIZE USED PRIO
    /dev/dm-1 partition   4G   0B   -2


    Command
    sudo swapoff /dev/dm-1

    Или просто отключить все области подкачки:

    Command

    sudo swapoff -a


  2. Удалить раздел подкачки из таблицы монтирования (можно просто закомментировать соответствующую строчку в файле /etc/fstab):

    Блок кода
    #/dev/mapper/lvs--vg-swap_1 none swap sw 0 0


  3. Удалить логический том swap_1:

    Command
    Titlesudo 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


  4. Опционально, особенно если в дальнейшем не планируется использовать раздел подкачки, для того, чтобы при перезагрузках не выдавались задерживающие перезагрузку диагностические собщения о ненайденном разделе подкачки, в файле  /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
Titlesudo 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  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, и для выполнения дефрагментации можно:

  1. Закрыть все пользовательские графические сессии;
  2. Войти в консольную сессию (Ctrl+Alt+F1);
  3. Освободить домашний каталог, перейдя в коневой каталог:

    Command
    cd /


  4. Отмонтировать каталог /home:

    Command
    sudo umount /home


  5. Далее работать в консольной сессии или вернуться в графическую сесиию (Ctrl+Alt+F7) (при этом будет выдано передупреждение, что работа выполняется во временном домашнем каталоге);

  6. Выполнить 
  7. По завершению работ снова примонтировать каталог:

    Command
    sudo mount /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
Titlesudo pvmove --alloc anywhere /dev/sda5:3859-8129
  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


В итоге:

Информация
title 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

Далее:

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
Titlesudo pvs -v --segments /dev/sda5                            
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                                        


Предупреждение
Размер использованного в примере раздела около 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, и могут быть выполнены в обычном режиме работы, при этом после выполнения этих действий компьютер может оставатьмя в работе:

  1.  Проверить состав дисковых разделов:

    Command
    Titlelsblk
    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Б

  2. Примонтировать новый раздел в любое удобное место:

    Command
    sudo mount /dev/sda3 /mnt


  3. Скопировать в новый раздел boot содержимое старого раздела boot:

    Command
    sudo cp -r /boot /mnt


  4. Изменить таблицу монтрования, чтобы вместо старого раздела boot монтировался новый, для чего:
    1. Вывести идентификаторы разделов:

      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"


    2. В файле /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


    3. Отмонтировать старый раздел boot и примонтировать новый:

      Command
      sudo umount /boot
      sudo mount /boot


    4. Еесли в дальнейшем не планируется использовать раздел подкачки, для того, чтобы при перезагрузках не выдавались задерживающие перезагрузку диагностические собщения о ненайденном разделе подкачки, в файле  /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

Оптимизация процесса

Уменьшение размера логического тома

  1. Проверить наличие свободного места в файловых системах, и оценить до каких размеров можно их сокращать:

    Command
    Titledf -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МБ (что, конечно, нехарактерно для находящихся в реальной эксплуатации компьютеров).

  2. Загрузиться с live-USB или отмонтировать раздел /home описанным выше способом.

  3. Проверить целостность файловой системы:


    Command
    sudo e2fsck -ff /dev/mapper/lvs--vg-home


  4. Сократить размер файловой системы до 2GB:

    Command
    sudo resize2fs /dev/mapper/lvs--vg-home 2G


  5. Сократить размер логического тома до 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.


  6. Опционально можно повторно проверить целостность файловой системы.

В итоге:

Command
Titlesudo 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 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
Title 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 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                      

И, в итоге, можно уменьшить размер физического тома как описано выше.
После уменьшения размера физического тома:

  1. Установить нужный размер логического тома home (для примера - том swap восстанавливать не предполагается, и home занимает всё свободное место):

    Command
    sudo lvextend -l +4654 /dev/mapper/lvs--vg-home


  2. По желанию - восстановить том swap, например:

    Command
    sudo lvcreate -n swap_1 -L 4G lvs-vg


Итог:

Command
Titlesudo 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,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

И перезапустить графическую сессию, чтобы вернуть привычное домашнее окружение.