Логика
На физическом устройстве создаётся физический том (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