4.4. Администрирование логических томов

В данной секции будут рассмотрены команды администрирования логических томов.

4.4.1. Создание логических томов

Команда lvcreate позволяет создать логический том. Вы можете создать линейные и зеркальные тома, а также тома с чередованием.
Если имя тома не указано, по умолчанию будет использоваться обозначение lvol#, где # — внутренний номер логического тома.
Далее приведены примеры создания логических томов трех перечисленных типов.

4.4.1.1. Создание линейных томов

При создании линейного тома из физических томов группы выделяются свободные экстенты. Обычно логические тома используют все доступное пространство. Изменения в логических томах ведут к освобождению или переорганизации пространства физических томов.
Следующая команда создаст логический том размером 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 команды lvcreate позволяет задать размер логического тома в экстентах. Также можно указать процент группы томов, используемый для создания логического тома. Далее приведенная команда создаст логический том 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 Раздел 4.3.6, «Удаление физических томов из группы».
Чтобы создать логический том на основе определенных физических томов, необходимо их указать в командной строке 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 Раздел 4.3.1, «Создание групп томов».

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

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 Раздел 2.3.2, «Логические тома с чередованием».
При создании логического тома с чередованием число сегментов задается с помощью опции -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

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

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

Примечание

Начиная с версии RHEL 5.3, зеркальные логические тома поддерживаются на уровне кластера.

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

С помощью команды 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 Раздел 6.3, «Восстановление после сбоя зеркала LVM».
Следующая команда преобразует линейный логический том vg00/lvol1 в зеркальный.
lvconvert -m1 vg00/lvol1
Команда преобразования зеркального логического тома vg00/lvol1 в линейный с удалением зеркального компонента будет выглядеть так:
lvconvert -m0 vg00/lvol1