Уменьшение размера Volume group LVM
Менеджер логических томов (Logical Volume Manager), он же LVM — предоставляет собой дополнительный уровень абстракции между физическими/логическими дисками и файловой системой. LVM увеличивает гибкость файловой системы, позволяет изменять размеры логических томов, переносить данные между дисками «на лету», делать снимки дисков и т.д.
Для того, чтобы было понятно о чем идет речь, приведу краткий список терминов, который используется в LVM:
PV, Physical volume, физический том. Обычно это раздел на диске или весь диск. В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома входят в состав группы томов.
VG, Volume group, группа томов. Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны группа томов состоит из физических томов, с другой — из логических и представляет собой единую административную единицу.
LV, Logical volume, логический том. Раздел группы томов, эквивалентен разделу диска в не-LVM системе. Представляет собой блочное устройство и, как следствие, может содержать файловую систему.
PE, Physical extent, физический экстент. Каждый физический том делится на порции данных, называющиеся физическими экстентами.
LE, Logical extent, логический экстент. Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов. По умолчания, один логический экстент равняется одному физическому экстенту, это соотношение может быть изменено с помощью специальных опций.
Как правило, на диске рекомендуется создавать один раздел, на котором будет создан физический том. Но может возникнуть необходимость создания нескольких групп томов для административных целей.
Перед выполнением работ по уменьшению размера группы томов необходимо обязательно сделать резервное копирование всех данных, так как в результате сбоев или некорректных операций данные могут быть утеряны, повреждены или нарушена работоспособность всей системы.
Рассмотрим пример, когда у нас в системе имеется один жесткий диск, который разбит на два раздела: sda1 и sda2
| 1 2 3 4 | [root@test ~]# fdisk -cul Device Boot Start End Blocks Id System /dev/sda1 * 2048 1050623 524288 83 Linux /dev/sda2 1050624 585871963 292410670 8e Linux LVM | 
В разделе /dev/sda2 соответственно создан один физический том, группа томов vg_testvas и несколько логических томов:
/dev/vg_testvas/LogVol00 — раздел /root
/dev/vg_testvas/LogVol01 — раздел /u01
/dev/vg_testvas/LogVol03 — раздел /space
Нам необходимо создать новую группу томов. Для этого следует последовательно уменьшить размер файловой системы, логического тома, физического тома и создать новый раздел.
Текущее состояние системы мы можем увидеть с помощью команд pvdisplay, vgdisplay, lvdisplay.
Если выполнить команду pvdisplay с ключом —maps, то можно увидеть сколько физических экстентов занимает каждый логический том:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [root@test ~]# pvdisplay --maps   --- Physical volume ---   PV Name               /dev/sda2   VG Name               vg_testvas   PV Size               278.86 GiB / not usable 0   Allocatable           yes   PE Size               4.00 MiB   Total PE              71389   Free PE               1024   Allocated PE          70365   PV UUID               J4pUBP-QZ2p-66cF-N92r-CAH5-JeRF-ZwXL2u     --- Physical Segments ---   Physical extent 0 to 12799:     Logical volume      /dev/vg_testvas/LogVol01     Logical extents     0 to 12799   Physical extent 12800 to 25599:     Logical volume      /dev/vg_testvas/LogVol00     Logical extents     0 to 12799   Physical extent 25600 to 70364:     Logical volume      /dev/vg_testvas/LogVol03     Logical extents     0 to 44764   Physical extent 70365 to 71388:     FREE | 
И вывод соответственно vgdisplay и lvdisplay:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | [root@test ~]# vgdisplay   --- Volume group ---   VG Name               vg_testvas   System ID   Format                lvm2   Metadata Areas        1   Metadata Sequence No  6   VG Access             read/write   VG Status             resizable   MAX LV                0   Cur LV                3   Open LV               2   Max PV                0   Cur PV                1   Act PV                1   VG Size               278.86 GiB   PE Size               4.00 MiB   Total PE              71389   Alloc PE / Size       70365 / 274.86 GiB   Free  PE / Size       1024 / 4.00 GiB   VG UUID               stu8dy-b3Bh-asGz-l8fk-eELJ-OS2g-OU7rx2   root@test ~]# lvdisplay   --- Logical volume ---   LV Path                /dev/vg_testvas/LogVol01   LV Name                LogVol01   VG Name                vg_testvas   LV UUID                D0cCil-W121-p2MU-cJnw-ohxl-ZqzD-fEC51B   LV Write Access        read/write   LV Creation host, time test, 2013-09-22 01:03:07 +0300   LV Status              available   # open                 1   LV Size                50.00 GiB   Current LE             12800   Segments               1   Allocation             inherit   Read ahead sectors     auto   - currently set to     256   Block device           253:2     --- Logical volume ---   LV Path                /dev/vg_testvas/LogVol00   LV Name                LogVol00   VG Name                vg_testvas   LV UUID                CTv7G6-dc8m-J9OE-ucLI-alC2-jgi0-6gx7YO   LV Write Access        read/write   LV Creation host, time test, 2013-09-22 01:03:09 +0300   LV Status              available   # open                 1   LV Size                50.00 GiB   Current LE             12800   Segments               1   Allocation             inherit   Read ahead sectors     auto   - currently set to     256   Block device           253:0     --- Logical volume ---   LV Path                /dev/vg_testvas/LogVol03   LV Name                LogVol03   VG Name                vg_testvas   LV UUID                Wmfhll-LYel-4a28-N3fv-gkIm-Iibq-3RXdO4   LV Write Access        read/write   LV Creation host, time test, 2013-09-22 01:03:16 +0300   LV Status              available   # open                 0   LV Size                174.86 GiB   Current LE             34525   Segments               1   Allocation             inherit   Read ahead sectors     auto   - currently set to     256   Block device           253:3 | 
Логический том /dev/vg_testvas/LogVol03, который соответствует /space является самым большим, находится в конце раздела и в нем много свободного места. Поэтому удобнее всего уменьшать его размер.
Для начала размонтируем раздел:
| 1 | [root@test ~]# umount /space | 
Для безопасности проверим целостность файловой системы:
| 1 2 3 4 5 6 7 8 | [root@test ~]# e2fsck -f /dev/vg_testvas/LogVol03 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vg_testvas/LogVol03: 63149/8839168 files (0.6% non-contiguous), 2439381/35353600 blocks | 
Перед уменьшением размера логического тома необходимо соответственно уменьшить размер файловой системы.
Произвести это можно двумя способами: с помощью команды resize2fs или используя опцию «-r» команды lvresize, в последнем случае размер файловой системы будет автоматически уменьшен одновременно с логическим томом:
| 1 2 3 4 5 6 7 8 9 | [root@test ~]# lvresize -r -L -40G /dev/vg_testvas/LogVol03 fsck from util-linux-ng 2.17.2 /dev/mapper/vg_testvas-LogVol03: clean, 63148/11460608 files, 2603851/45839360 blocks resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/vg_testvas-LogVol03 to 35353600 (4k) blocks. The filesystem on /dev/mapper/vg_testvas-LogVol03 is now 35353600 blocks long.     Reducing logical volume LogVol03 to 134.86 GiB   Logical volume LogVol03 successfully resized | 
Результат выполнения операции мы можем проверить с помощью команд pvdisplay —maps, lvdisplay или таким способом:
| 1 2 3 4 5 6 7 | [root@test ~]# pvs -v --segments /dev/sda2     Using physical volume(s) on command line   PV         VG         Fmt  Attr PSize   PFree  Start SSize LV       Start Type   PE Ranges   /dev/sda2  vg_testvas lvm2 a--  278.86g 44.00g     0 12800 LogVol01     0 linear /dev/sda2:0-12799   /dev/sda2  vg_testvas lvm2 a--  278.86g 44.00g 12800 12800 LogVol00     0 linear /dev/sda2:12800-25599   /dev/sda2  vg_testvas lvm2 a--  278.86g 44.00g 25600 34525 LogVol03     0 linear /dev/sda2:25600-60124   /dev/sda2  vg_testvas lvm2 a--  278.86g 44.00g 60125 11264              0 free | 
В случае, если физические экстенты находятся в конце раздела, который мы собираемся уменьшать, то нужно переместить их в начало раздела. Выполнить это можно с помощью команды:
| 1 | [root@test ~]# pvmove --alloc anywhere /dev/sda2 | 
Теперь можно уменьшить размер физического тома и соответственно группы томов до желаемого размера:
| 01 02 03 04 05 06 07 08 09 10 | [root@test ~]# pvresize -v --setphysicalvolumesize 238.86G /dev/sda2 Using physical volume(s) on command line     Archiving volume group "vg_testvas" metadata (seqno 7).     /dev/sda2: Pretending size is 500925726 not 584820736 sectors.     Resizing volume "/dev/sda2" to 584820736 sectors.     Resizing physical volume /dev/sda2 from 0 to 61147 extents.     Updating physical volume "/dev/sda2"     Creating volume group backup "/etc/lvm/backup/vg_testvas" (seqno 8).   Physical volume "/dev/sda2" changed   1 physical volume(s) resized / 0 physical volume(s) not resized | 
После этого с помощью утилиты fdisk удаляем старый раздел /dev/sda2, на его месте создаем раздел sda2 согласно размеру нашего нового физического тома. Во избежания проблем рекомендуется этот раздел сделать на несколько мегабайт больше, чем наш физический том.
На физическом диске появилась неразмеченная область. Создаем новый раздел /dev/sda3 с помощью утилиты fdisk:
| 1 | [root@test~]# fdisk -cu /dev/sda | 
Создаем физический том в группу томов vg_new:
| 1 2 | [root@test ~]# pvcreate /dev/sda3 [root@test ~]# vgcreate vg_new /dev/sda3 | 
После выполнения всех операций в новой группе томов мы можем создать необходимое количество логических томов.