Уменьшение размера 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 |
После выполнения всех операций в новой группе томов мы можем создать необходимое количество логических томов.