Логика
На физическом устройстве создаётся физический том (Physical Volume).
Физические тома объединяются в группы логических томов (Logical Volume Group).
Группы логических томов разбивается на логические тома (Logical Volume).
В логическом томе создаётся файловая система и им назначаются точки монтирования.
Перевод с непонятного на русский: из физических томов собирается виртуальный жесткий диск (группа томов), который разбивается на разделы (логические тома), в которых создаются файловые системы. Для использования файловых систем, логические тома стандартным образом подключаются к файловой системе (об подключении файловых систем будет рассказано в статье о программе mount).
Подготовка разделов
К тестовой машине подключены три scsi жёстких диска.
Посмотреть список дисков и разделов можно при помощи программ fdisk или sfdisk.
# sfdisk -l
Disk /dev/sda: 1044 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 * 0+ 130- 131- 1048576 83 Linux
/dev/sda2 130+ 1044- 914- 7339008 8e Linux LVM
/dev/sda3 0 - 0 0 0 Empty
/dev/sda4 0 - 0 0 0 Empty
Disk /dev/mapper/centos-root: 808 cylinders, 255 heads, 63 sectors/track
Disk /dev/mapper/centos-swap: 104 cylinders, 255 heads, 63 sectors/track
Disk /dev/sdb: 261 cylinders, 255 heads, 63 sectors/track
Disk /dev/sdc: 261 cylinders, 255 heads, 63 sectors/track
Disk /dev/sdd: 261 cylinders, 255 heads, 63 sectors/track
Как видно и приведённого выше вывода программы sfdisk, к система подключены 4 жёстких диска: sda, sdb, sdc и sdd. На первом диске установлена система. Последние три диска подключены, но не разбиты на разделы.
Создание физического тома
Сначала необходимо инициализировать физический том. Его можно создавать для диска целиком или в разделе на диске.
Для инициализации физического тома на жестком диске используем программу pvcreate.
# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
В случае раздела, сначала необходимо поменять тип раздела на 8e (Linux LVM) и далее инициализировать при помощи программы pvcreate.
# sfdisk /dev/sdc
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdc: 261 cylinders, 255 heads, 63 sectors/track
sfdisk: /dev/sdc: unrecognized partition table type
Old situation:
sfdisk: No partitions found
Input in the following format; absent fields get a default value.
; <c,h,s> <c,h,s>
Usually you only need to specify and (and perhaps ).
/dev/sdc1 :0
/dev/sdc1 0+ 260 261- 2096482 83 Linux
/dev/sdc2 :
/dev/sdc2 0 - 0 0 0 Empty
/dev/sdc3 :
/dev/sdc3 0 - 0 0 0 Empty
/dev/sdc4 :
/dev/sdc4 0 - 0 0 0 Empty
New situation:
Units: cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sdc1 0+ 260 261- 2096482 83 Linux
/dev/sdc2 0 - 0 0 0 Empty
/dev/sdc3 0 - 0 0 0 Empty
/dev/sdc4 0 - 0 0 0 Empty
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Do you want to write this to disk? [ynq] y
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
Мы создали один раздел, использующий все дисковое пространство. По умолчанию ему присваивает id 83 (Linux).
Для создания физического тома необходимо изменить его на 8e (Linux LVM).
# sfdisk --change-id /dev/sdc 1 8e
Done
# sfdisk -l /dev/sdc
Disk /dev/sdc: 261 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sdc1 0+ 260 261- 2096482 8e Linux LVM
/dev/sdc2 0 - 0 0 0 Empty
/dev/sdc3 0 - 0 0 0 Empty
/dev/sdc4 0 - 0 0 0 Empty
Создадим физический том:
# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
Если при инициализации тома на диске выдается сообщение об ошибке, скорее всего у диска уже инициализирована таблица разделов. Удалите таблицу разделов и произведите инициализацию по новой.
Например, если попытаться инициализировать физический том на диске sdc, мы получим следующее сообщение:
# pvcreate /dev/sdc
Device /dev/sdc excluded by a filter.
Посмотрим подробнее, в чем проблема:
# pvcreate /dev/sdc -vvv
…
/dev/sdc: size is 4194304 sectors
Closed /dev/sdc
/dev/sdc: Skipping: Partition table signature found
…
Сотрем таблицу разделов:
# dd if=/dev/zero of=/dev/sdc bs=1k count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 0.000687572 s, 1.5 MB/s
Перечитаем таблицу разделов:
# blockdev --rereadpt /dev/sdc
# sfdisk -l /dev/sdc
Disk /dev/sdc: 261 cylinders, 255 heads, 63 sectors/track
Инициализируем Physical Volume на диске.
# pvcreate /dev/sdc
WARNING: Device for PV oCmhnY-cndS-Fj6d-NPJJ-evBF-C09N-Tg1ACj not found or rejected by a filter.
WARNING: Device for PV oCmhnY-cndS-Fj6d-NPJJ-evBF-C09N-Tg1ACj not found or rejected by a filter.
Physical volume "/dev/sdc" successfully created.
Не смотря на то, что физический том был создан, в дальнейшем, при любых действиях с lvm будет вылезать этот WARNING. Он появился потому, что мы не удалили физический том из раздела /dev/sdc1. И информация о нём сохранилась в кеше.По хорошему, сначала надо было выполнить pvremove /dev/sdc1 и только потом очищать таблицу разделов.
Для удаления предупреждения выполните следующую команду:
# pvscan --cache
Она заставляет пересоздать кеш у демона lvmetad.
# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
Посмотреть существующие физические тома можно при помощи команд:
# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <7.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1791
Free PE 0
Allocated PE 1791
PV UUID PfpeCj-FuHJ-Di32-7CDZ-a6L0-BWFe-2HYoB8
"/dev/sdd" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID Z7FmBB-QPcL-JhxY-j5wQ-8hU2-mGBR-tbe6kE
"/dev/sdb" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID LJsUOk-jAZh-Pftx-XekM-1KXE-3q2t-wcvIm9
"/dev/sdc" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID jKdt7U-dJHJ-h61Q-iO2H-K7Go-7r8S-pTv7si
или
# pvscan
PV /dev/sda2 VG centos lvm2 [<7.00 GiB / 0 free]
PV /dev/sdd lvm2 [2.00 GiB]
PV /dev/sdb lvm2 [2.00 GiB]
PV /dev/sdc lvm2 [2.00 GiB]
Total: 4 [<13.00 GiB] / in use: 1 [<7.00 GiB] / in no VG: 3 [6.00 GiB]
Создание группы томов
Для создания группы томов используется программа vgcreate.
# vgcreate vg3disk /dev/sdb /dev/sdc /dev/sdd
Volume group "vg3disk" successfully created
Была создана группа томов с именем vg3disk, включающая в себя физические тома: /dev/sdb, /dev/sdc и /dev/sdd.
В принципе, можно было не создавать физические тома при помощи pvcreate. Если они не были инициализированы, программа vgcreate сама инициализирует их.
Посмотрим какие группы томов есть в системе:
# vgscan
Reading volume groups from cache.
Found volume group "vg3disk" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
или
# vgdisplay
--- Volume group ---
VG Name vg3disk
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size >5.99 GiB
PE Size 4.00 MiB
Total PE 1533
Alloc PE / Size 0 / 0
Free PE / Size 1533 / <5.99 GiB
VG UUID 7LX5lD-fDMd-iWwG-5Aoy-tMHl-si6F-MbVlyX
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <7.00 GiB
PE Size 4.00 MiB
Total PE 1791
Alloc PE / Size 1791 / <7.00 GiB
Free PE / Size 0 / 0
VG UUID fK2ddL-7P6Q-fpq4-5Vsj-TZCU-lzB1-tZrEIU
Для дальнейшего использования группы томов её необходимо активировать.
# vgchange -a y vg3disk
0 logical volume(s) in volume group "vg3disk" now active
Удаление групп томов
Для удаления группы томов её сначала делают неактивной.
# vgchange -a n vg3disk
0 logical volume(s) in volume group "vg3disk" now active
Затем удаляют:
# vgremove vg3disk
Volume group "vg3disk" successfully removed
Добавление/удаление физических томов в/из группу томов
# pvdisplay /dev/sdd
--- Physical volume ---
PV Name /dev/sdd
VG Name vg3disk
PV Size 2.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 511
Free PE 511
Allocated PE 0
PV UUID Z7FmBB-QPcL-JhxY-j5wQ-8hU2-mGBR-tbe6kE
Как видно из вывода программы pvdisplay, /dev/sdd входит в группу vg3disk. Удалим физический том /dev/sdd из логической группы vg3disk.
# vgreduce vg3disk /dev/sdd
Removed "/dev/sdd" from volume group "vg3disk"
# pvdisplay /dev/sdd
"/dev/sdd" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID Z7FmBB-QPcL-JhxY-j5wQ-8hU2-mGBR-tbe6kE
# vgdisplay vg3disk
--- Volume group ---
VG Name vg3disk
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 3.99 GiB
PE Size 4.00 MiB
Total PE 1022
Alloc PE / Size 0 / 0
Free PE / Size 1022 / 3.99 GiB
VG UUID ep3QcO-Pc0x-NFVm-Te7q-2UC3-8dhj-LVbCzT
Для того что бы добавить /dev/sdd в vg3disk следует выполнить:
# vgextend vg3disk /dev/sdd
Volume group "vg3disk" successfully extended
# vgdisplay vg3disk
--- Volume group ---
VG Name vg3disk
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size <5.99 GiB
PE Size 4.00 MiB
Total PE 1533
Alloc PE / Size 0 / 0
Free PE / Size 1533 / <5.99 GiB
VG UUID ep3QcO-Pc0x-NFVm-Te7q-2UC3-8dhj-LVbCzT
# pvdisplay /dev/sdd
--- Physical volume ---
PV Name /dev/sdd
VG Name vg3disk
PV Size 2.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 511
Free PE 511
Allocated PE 0
PV UUID Z7FmBB-QPcL-JhxY-j5wQ-8hU2-mGBR-tbe6kE
Логический том
После инициализации и активации группу томов можно разбить на логические тома.
Прежде, чем продолжим, введём несколько дополнительных понятий.
Physical extent (PE) – физический том состоит из некоторого количестве PE. Размер PE задаётся при создании физического тома и по умолчанию равен 4 MiB.
# pvdisplay /dev/sdd
--- Physical volume ---
PV Name /dev/sdd
VG Name vg3disk
PV Size 2.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 511
Free PE 511
Allocated PE 0
PV UUID Z7FmBB-QPcL-JhxY-j5wQ-8hU2-mGBR-tbe6kE
Logical extent (LE) - логический том состоит из некоторого количества LE.
PE обычно равен размеру LE.
В нашем примере в группу томов vg3disk входят три физических тома с общим количеством PE: 511+511+511=1533.
При создании логического тома мы можем отображать LE на PE в любом из трёх физических томов. Существует два алгоритма отображение LE на PE:
- Линейное – LE последовательно отображаются на PE сначала sdb, потом sdc и sdd.
- Striped – расслоённое. Данные равномерно распределяются между физическими томами. LE[1] -> sdbPE[1], LE[2] -> sdcPE[1], LE[3] -> sddPE[1], LE[4] -> sdbPE[2] и т.д.
У Striped алгоритма существует серьезное ограничение – логический том не может быть расширен на вновь добавляемые физические тома. Иными словами, после заполнения физических томов, определенных при создании, нет возможности для увеличения размера логического тома.
Создание логического тома
Логический том создаётся программой lvcreate.
При создании мы можем указать размер тома:
- -L – размер в байтах, мегабайтах и т.п. определяется цифрой и символом: из набора KMGTPE единицы в системе СИ с основанием 10 или из набора kmgtpe единицы в системе IEC с основанием 2.
- -l – размер в LE.
# lvcreate -L1G -n lv1g01 vg3disk
Logical volume "lv1g01" created.
# lvscan
ACTIVE '/dev/vg3disk/lv1g01'[1.00 GiB] inherit
ACTIVE '/dev/centos/swap'[820.00 MiB] inherit
ACTIVE '/dev/centos/root'[<6.20 GiB] inherit
# lvdisplay
--- Logical volume ---
LV Path /dev/vg3disk/lv1g01
LV Name lv1g01
VG Name vg3disk
LV UUID 5GzBrO-zvqP-dgJ4-21YG-Wkj2-gKK7-CkL9cC
LV Write Access read/write
LV Creation host, time openfire.host.ru, 2019-05-14 12:12:06 +0300
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
…
Segments показывает на сколько физических томов располагается логический том.
В CentOS 7, после создания логического тома он доступен как блочное устройство через device mapper.
# ls -l /dev/mapper/vg3disk-lv1g01
lrwxrwxrwx 1 root root 7 May 14 12:12 /dev/mapper/vg3disk-lv1g01 -> ../dm-2
Удаление логического тома
Перед удалением логического тома, убедитесь, что файловая система находящаяся в нём не подключена.
# mount | grep vg3disk-lv1g01
# lvremove /dev/mapper/vg3disk-lv1g01
Do you really want to remove active logical volume vg3disk/lv1g01? [y/n]: y
Logical volume "lv1g01" successfully removed
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 7G 0 part
├─centos-root 253:0 0 6.2G 0 lvm /
└─centos-swap 253:1 0 820M 0 lvm [SWAP]
sdb 8:16 0 2G 0 disk
sdc 8:32 0 2G 0 disk
sdd 8:48 0 2G 0 disk
sr0 11:0 1 1024M 0 rom
Изменение размера логического тома
Размер логического тома увеличивается при помощи программы lvextend.
Новый размер можно указать как в абсолютных единицах:
-L4G
так и в относительных:
-L+3G
Следующая команда увеличивает размер логического тома на 3 гигабайта.
# lvextend -L+3G /dev/vg3disk/lv1g01
Size of logical volume vg3disk/lv1g01 changed from 1.00 GiB (256 extents) to 4.00 GiB (1024 extents).
Logical volume vg3disk/lv1g01 successfully resized.
Обратите внимание на то, что физический размер дисков, не превышает 2 гигабайта. А размер логического тома составляет 4 гигабайта.
Уменьшить размер можно при помощи программы lvreduce.
# lvreduce -L-1G /dev/vg3disk/lv1g01
WARNING: Reducing active logical volume to 3.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg3disk/lv1g01? [y/n]: y
Size of logical volume vg3disk/lv1g01 changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents).
Logical volume vg3disk/lv1g01 successfully resized.
Программа не случайно выводит предупреждение о возможной потере данных. Если в томе была файловая система, после уменьшения размера данные могут потеряться.
# lvdisplay
--- Logical volume ---
LV Path /dev/vg3disk/lv1g01
LV Name lv1g01
VG Name vg3disk
LV UUID CRV5OA-lVI7-hjTs-xRiI-Fel8-kTLf-R2feTl
LV Write Access read/write
LV Creation host, time openfire.host.ru, 2019-05-14 12:34:15 +0300
LV Status available
# open 0
LV Size 3.00 GiB
Current LE 768
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
