Linux Volume Manager (LVM)

Posted on 08/12/2010 by   |   Filed under templates, internet    Comments 11

Linux Volume Manager (LVM) - это очень мощная система управления томами с данными для Linux. Она позволяет создавать поверх физических разделов (или даже неразбитых винчестеров) логические тома, которые в самой системе будут видны как обычные блочные устройства с данными (т.е. как обычные разделы). Основные преимущества LVM в том, что во-первых одну группу логических томов можно создавать поверх любого количества физических разделов, а во-вторых размер логических томов можно легко менять прямо во время работы. Кроме того, LVM поддерживает механизм снапшотов, копирование разделов «на лету» и зеркалирование, подобное RAID-1.

Если планируются большие работы с LVM, то можно запустить специальную «оболочку» командой

sudo lvm

Команда help покажет список команд.

Создание

Большинство команд требуют прав суперпользователя.

Создание простых томовБ

Как уже отмечалось, LVM строится на основе разделов жёсткого диска и/или целых жёстких дисков. На каждом из дисков/разделов должен быть создан физический том (physical volume). К примеру, мы используем для LVM диск sda и раздел sdb2:

pvcreate /dev/sda
pvcreate /dev/sdb2

На этих физических томах создаём группу томов, которая будет называться, скажем, vg1:

vgcreate -s 32M vg1 /dev/sda /dev/sdb2

Посмотрим информацию о нашей группе томов:

vgdisplay vg1

Групп можно создать несколько, каждая со своим набором томов. Но обычно это не требуется.

Теперь в группе томов можно создать логические тома lv1 и lv2 размером 20 Гбайт и 30 Гбайт соответствено:

lvcreate -n lv1 -L 20G vg1
lvcreate -n lv2 -L 30G vg1

Теперь у нас есть блочные устройства /dev/vg1/lv1 и /dev/vg1/lv2.

При создании линейного тома из физических томов группы выделяются свободные экстенты. Обычно логические тома используют все доступное пространство. Изменения в логических томах ведут к освобождению или переорганизации пространства физических томов.

Следующая команда создаст логический том размером 10 Гб и в группе vg1.

lvcreate -L 10G vg1

Приведенная далее команда создаст линейный логический том testlv размером 1500 Мбайт в группе томов testvg. При этом будет создано блочное устройство /dev/testvg/testlv.

lvcreate -L1500 -n testlv testvg

Следующая команда создаст логический том gfslv размером 50 Гбайт, используя свободные экстенты в логической группе vg0.

lvcreate -L 50G -n gfslv vg0

Опция -l команды mylv, использующий 60% общего объема группы томов testvol.

lvcreate -l 60%VG -n mylv testvg

С помощью опции -l можно также указать процент свободного пространства группы, которое будет занято логическим томом. Например, команда, создающая логический том yourlv, который займет все свободное пространство группы testvol будет выглядеть так:

lvcreate -l 100%FREE -n yourlv testvg

You can use -l argument of the lvcreate command to create a logical volume that uses the entire volume group. Another way to create a logical volume that uses the entire volume group is to use the vgdisplay command to find the "Total PE" size and to use those results as input to the the lvcreate command.

Пример команд создания логического тома mylv, который займет весь объем группы testvg:

vgdisplay testvg | grep "Total PE"
Total PE              10230
lvcreate -l 10230 testvg -n mylv

The underlying physical volumes used to create a logical volume can be important if the physical volume needs to be removed, so you may need to consider this possibility when you create the logical volume. For information on removing a physical volume from a volume group, see Удаление физических томов из группы.

Чтобы создать логический том на основе определенных физических томов, необходимо их указать в командной строке lvcreate. Так, следующая команда создаст логический том testlv на основе физического тома /dev/sdg1 в группе testvg.

lvcreate -L 1500 -ntestlv testvg /dev/sdg1

Можно указать, какие экстенты физического тома будут использованы для образования логического тома. В следующем примере будет создан линейный логический том, в состав которого войдут экстенты физического тома /dev/sda1 с 0 по 25 и /dev/sdb1 c 50 по 125. Оба физических тома входят в состав группы testvg.

lvcreate -l 100 -n testlv testvg /dev/sda1:0-25 /dev/sdb1:50-125

Следующий пример демонстрирует создание линейного логического тома на основе экстентов с 0 по 25 физического тома /dev/sda1 и затем продолжит, начиная с экстента 100.

lvcreate -l 100 -n testlv testvg /dev/sda1:0-25:100-

The default policy for how the extents of a logical volume are allocated is inherit, which applies the same policy as for the volume group. These policies can be changed using the lvchange command. For information on allocation policies, see Создание групп томов.

Создание томов с чередованием

For large sequential reads and writes, creating a striped logical volume can improve the efficiency of the data I/O. For general information about striped volumes, see Логические тома с чередованием.

При создании логического тома с чередованием число сегментов задается с помощью опции -i команды lvcreate, что определяет число физических томов, используемых при чередовании. Это значение не может превышать число физических томов в группе (за исключением использования опции --alloc anywhere).

Если размеры физических устройств, на основе которых создан логический том, различаются, то максимальный объем тома с чередованием будет определяться размером наименьшего устройства. Например, если для организации чередования используются два физических тома, то максимальный размер логического тома будет равен удвоенному размеру наименьшего устройства. Если же используются три тома, максимальный размер будет равен утроенному размеру наименьшего устройства.

Следующая команда создаст логический том с чередованием на основе двух физических томов в составе группы vg0, при этом размер сегмента будет равен 64 Кб. Самому логическому тому будет присвоено имя gfslv, его размер будет равен 50 Гб.

lvcreate -L 50G -i2 -I64 -n gfslv vg0

Так же как и в случае с линейными томами, можно специально указать определенные экстенты физического тома, которые будут заняты сегментами. В приведенном далее примере будет создан том с чередованием (с именем stripelv) на основе двух физических томов, размер которого будет составлять 100 экстентов. Новый том будет входить в состав группы testvg и занимать секторы 0-50 тома /dev/sda1 и 50-100 тома /dev/sdb1.

lvcreate -l 100 -i2 -nstripelv testvg /dev/sda1:0-50 /dev/sdb1:50-100
Using default stripesize 64.00 KB
Logical volume "stripelv" created

Создание зеркальных томов

При создании зеркального логического тома необходимо указать число копий, для чего служит опция -m команды lvcreate. Так, если указать -m1, будет создано одно зеркало, что, в сущности, создаст две копии данных в файловой системе — линейный логический том и его копию. Аналогичным образом, если указать -m2, будут созданы два зеркала (всего три копии).

Ниже приведен пример создания зеркального логического тома размером 50 Гб с одним зеркалом. Ему будет присвоено имя mirrorlv, пространство для его создания будет выделено из группы vg0.

lvcreate -L 50G -m1 -n gfslv vg0

Зеркало LVM разбивает копируемое устройство на регионы, размер которых по умолчанию равен 512 Кб. Чтобы задать другой размер (в мегабайтах), используйте опцию -R. LVM поддерживает краткий журнал синхронизации регионов с зеркалами. По умолчанию журнал хранится на диске, поэтому он не теряется при перезагрузке. Если же вы хотите, чтобы журнал находился в памяти, используйте опцию --corelog, что отменяет необходимость в устройстве журналирования, но в то же время требует, чтобы зеркало полностью синхронизировалось при каждой перезагрузке.

Приведенная ниже команда создаст логический том ondiskmirvol с одним зеркалом в группе bigvg. Размер тома равен 12 Мбайт, а журнал зеркала хранится в памяти.

lvcreate -L 12MB -m1 --corelog -n ondiskmirvol bigvg
Logical volume "ondiskmirvol" created

Журнал зеркала будет создан на отдельном устройстве. Возможно создание журнала на том же устройстве, что и секция зеркала, — для этого служит ключ --alloc anywhere команды vgcreate. Это может отрицательно сказаться на производительности, но позволит создать зеркало, даже если в основу положено всего лишь два устройства.

Ниже приведен пример создания зеркального логического тома mirrorlv размером 50 Мбайт с одним зеркалом на основе группы томов vg0. При этом журнал зеркала расположен на том же устройстве, что и составляющая зеркала. В этом примере группа томов vg0 состоит из двух устройств.

lvcreate -L 500M -m1 -n mirrorlv -alloc anywhere vg0

В момент создания зеркала выполняется синхронизация регионов зеркала. Если компоненты зеркала достаточно велики, процесс синхронизации может занять некоторое время. Если вы создаете новое зеркало, синхронизация которого необязательна, укажите опцию nosync.

Можно задать, на каких устройствах будут сохраняться журналы и какие экстенты устройств будут использоваться зеркалом. Чтобы ограничить журналирование определенным диском, укажите ТОЛЬКО один экстент на том диске, где должен располагаться журнал. LVM игнорирует порядок, в котором перечислены устройства. Если в списке присутствуют физические устройства, то только они и будут использоваться для выделения пространства; уже занятые физические будут проигнорированы.

Далее приведен пример команды создания зеркального логического тома mirrorlv размером 500 Мбайт с одним зеркалом. Том будет создан в составе группы vg0. Одна часть зеркала будет располагаться на устройстве /dev/sda1, вторая — на /dev/sdb1, а журнал будет храниться на /dev/sdc1.

lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1

Следующая команда создаст логический том mirrorlv размером 500 Мбайт с одним зеркалом. Том будет создан в составе группы vg0. Одна часть зеркала будет занимать экстенты с 0 по 499 устройства /dev/sda1, вторая — экстенты с 0 по 499 устройства /dev/sdb1, а журнал будет храниться на /dev/sdc1, начиная с нулевого экстента. Размер экстента равен 1 Мбайт. Если заданные физические экстенты уже заняты, они будут просто проигнорированы.

lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1:0-499 /dev/sdb1:0-499 /dev/sdc1:0

Создание файловой системы

Осталось создать на них файловую систему. Тут различий с обычными разделами нет:

mkfs.ext4 /dev/vg1/lv1
mkfs.reiserfs /dev/vg1/lv2

Удаление LVM (или отдельных его частей, например, логических томов или групп томов) происходит в обратном порядке - сначала нужно отмонтировать разделы, затем удалить логические тома (lvremove), после этого можно удалить группы томов (vgremove) и ненужные физические тома (pvremove).

Добавление физических томов

Чтобы добавить новый винчестер sdc в группу томов, создадим физический том:

pvcreate /dev/sdc

И добавим его в нашу группу:

vgextend vg1 /dev/sdc

Теперь можно создать ещё один логический диск (lvcreate) или увеличить размер существующего (lvresize).

Удаление физических томов

Чтобы убрать из работающей группы томов винчестер sda сначала перенесём все данные с него на другие диски:

pvmove /dev/sda

Затем удалим его из группы томов:

vgreduce vg /dev/sda

И, наконец, удалим физический том:

pvremove /dev/sda

Вообще-то, последняя команда просто убирает отметку о том, что диск является членом lvm, и особой пользы не приносит. После удаления из LVM для дальнейшего использования диск придётся переразбивать/переформатировать.

Изменение конфигурации зеркальных томов

С помощью команды lvconvert можно преобразовать тип логического тома из зеркального в линейный или из линейного в зеркальный. Эту команду также можно использовать для изменения параметров зеркала существующих логических томов (например, corelog).

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

If you lose a leg of a mirror, LVM converts the volume to a linear volume so that you still have access to the volume, without the mirror redundancy. After you replace the leg, you can use the lvconvert command to restore the mirror. This procedure is provided in Восстановление после сбоя зеркала LVM.

Следующая команда преобразует линейный логический том vg00/lvol1 в зеркальный.

lvconvert -m1 vg00/lvol1

Команда преобразования зеркального логического тома vg00/lvol1 в линейный с удалением зеркального компонента будет выглядеть так:

lvconvert -m0 vg00/lvol1

Изменение размеров

LVM позволяет легко изменять размер логических томов. Для этого нужно сначала изменить сам логический том:

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

Рассмотрим пример, когда у нас в системе имеется один жесткий диск, который разбит на два раздела: sda1 и sda2

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

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:

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
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, timetest, 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 setto            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, timetest, 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 setto      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, timetest, 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 setto      256
  Block device           253:3

Логический том /dev/vg_testvas/LogVol03, который соответствует /space является самым большим, находится в конце раздела и в нем много свободного места. Поэтому удобнее всего уменьшать его размер.

Для начала размонтируем раздел:

umount /space

Для безопасности проверим целостность файловой системы:

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: 631498839168files (0.6% non-contiguous), 2439381/35353600blocks

Перед уменьшением размера логического тома необходимо соответственно уменьшить размер файловой системы. Произвести это можно двумя способами: с помощью команды resize2fs или используя опцию «-r» команды lvresize, в последнем случае размер файловой системы будет автоматически уменьшен одновременно с логическим томом:

lvresize -r -L -40G /dev/vg_testvas/LogVol03
fsckfrom util-linux-ng 2.17.2
/dev/mapper/vg_testvas-LogVol03: clean, 63148/11460608files, 2603851/45839360blocks
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/vg_testvas-LogVol03to 35353600 (4k) blocks.
The filesystem on /dev/mapper/vg_testvas-LogVol03is now 35353600 blocks long.
  Reducing logical volume LogVol03 to 134.86 GiB
  Logical volume LogVol03 successfully resized

Результат выполнения операции мы можем проверить с помощью команд pvdisplay —maps, lvdisplay или таким способом:

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

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

pvmove alloc anywhere /dev/sda2

Теперь можно уменьшить размер физического тома и соответственно группы томов до желаемого размера:

pvresize -v setphysicalvolumesize 238.86G /dev/sda2
Using physical volume(s) on commandline
    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:

fdisk -cu /dev/sda

Создаем физический том в группу томов vg_new:

pvcreate /dev/sda3
vgcreate vg_new /dev/sda3

После выполнения всех операций в новой группе томов мы можем создать необходимое количество логических томов.

lvresize -L 40G vg1/lv2

а затем файловую систему на нём:

resize2fs /dev/vg1/lv2
resize_reiserfs /dev/vg1/lv2

 

Изменение размеров физического тома - задача весьма сложная и обычно не применяется. Целесообразнее и безопаснее удалить физический том, изменить размер раздела и создать том заново.

 

Снапшоты

Одна из важнейших особенностей LVM - это поддержка механизма снапшотов. Снапшоты позволяют сделать мгновенный снимок логического тома и использовать его в дальнейшем для работы с данными.

Примеры использования

LVM активно используется, когда необходим механизм снапшотов. Например, этот механизм крайне важен при бекапе постоянно меняющихся файлов. LVM позволяет заморозить некоторое состояние ФС и скопировать с неё все нужные данные, при этом на оригинальной ФС останавливать запись не нужно.

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

LVM с LiveCD

Если у вас возникла необходимость работать с LVM с LiveCD Ubuntu, то вам придётся выполнить несколько дополнительных действий, поскольку по умолчанию утилит для работы с LVM нет.

Сначала вам нужно установить эти утилиты:

sudo apt-get install lvm2

Далее посмотрите командами

sudo vgscan
sudo vgdisplay YOUR_VGNAME

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

sudo vgchange -a y

Эта команда должна сообщить о том, что все ваши логические тома активированы. Теперь можно работать с ними обычным образом.

Подключение в автомате (добавка в fstab):

/dev/mapper/data-users    /var/data/users ext4    defaults,nosuid,noexec,acl       0       2

Источник: http://help.ubuntu.ru/wiki/lvm

Очень хороший сайт

И вот еще

Image Gallery

Services Overview

Curabitur sed urna id nunc pulvinar semper. Nunc sit amet tortor sit amet lacus sagittis posuere cursus vitae nunc.Etiam venenatis, turpis at eleifend porta, nisl nulla bibendum justo.

Contact Us

Nullam quam lorem, tristique non vestibulum nec, consectetur in risus. Aliquam a quam vel leo gravida gravida eu porttitor dui.

Address: 1458 TemplateAccess, USA
Telephone: +123-1234-5678
FAX: +458-4578
Others: +301 - 0125 - 01258
E-mail: mail@yoursitename.com