LVM - andyceo/documentation GitHub Wiki
sda1 sda2 sdb sdc <-- PV
| | | |
| | | |
+--------+- VG00 -+-------+ <-- VG
|
+-------+-------+---------+
| | | |
root usr home var <-- LV
| | | |
ext3 reiserfs reiserfs xfs <-- Файловые системы
-
PV: Physical volume (физический том) Это могут быть винчестеры, разделы на винчестерах или любые другие блочные устройства. Обычно это раздел на диске или весь диск целиком. В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома могут входить в группы томов (VG, volume group).
- PE: Physical extent (физический экстент) Каждый физический том делится на порции данных, называющиеся физическими экстентами. Их размеры те же, что и у логических экстентов.
- VG: Volume group (группа томов) Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны группа томов состоит из физических томов, с другой -- из логических и представляет собой единую административную единицу.
-
LV: Logical volume (логический том) Раздел группы томов, эквивалентен разделу диска в не-LVM системе. Представляет собой блочное устройство и, как следствие, может содержать файловую систему.
- LE: Logical extent (логический экстент) Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов.
-
pvcreate
: создание физического тома LVMРабота с LVM начинается с создания физических томов с помощью команды
pvcreate
:sudo pvcreate /dev/sda1
-
pvs
: вывести список всех доступных физических томов -
pvremove
: убирает том из списка физичиских томов LVM:pvremove /dev/sda
-
Если физический том
/dev/sda
уже принадлежит какой-либо группе томовvg
, сначала нужно убрать винчестер/dev/sda
из группы томовvg
:pvmove /dev/sda vgreduce vg /dev/sda pvremove /dev/sda
-
-
pvmove
: переносит все используемые физические блоки с указанного физического тома на другие физические тома, имеющие достаточное количество свободных блоков. Также можно указать логический том, которому принадлежат перемещаемые блоки, и задать конкретный физический том-приемник блоков (может использоваться для последующей командыvgsplit
)# перенесет все блоки, расположенные на /dev/sda, на другие физические тома в той же группе, # самостоятельно определив тома-приемники pvmove /dev/sda # нижеследующая команда - корректный способ остановить pvmove (по умолчанию процесс остается в фоне, # а повторный запуск просто лишь показывает прогресс) # ОСТОРОЖНО! Прогресс не сохраняется! pvmove --abort # перенести все блоки с физического тома /dev/sdc1, принадлежащие логическому тому vg/lv, # на физический том /dev/sda4 sudo pvmove /dev/sdc1 -n vg/lv /dev/sda4
Существует соглашение (конвенция) о том, как называть группы томов. Вкратце, называть группы томов стоит так:
vg-`hostname -s`-name
# например, 'vg-rapira-home' для группы томов 'home' на хосте 'rapira'
Тогда, при присоединении диска с данной логической группой к другому хосту, минимизируется вероятность конфликта имен.
-
vgcreate
: создать группу томовvgcreate -s 32M vg /dev/sda /dev/sdb
Опция -s задаёт размер физического блока. По умолчанию он равен 4 MiB, но нет смысла дробить дисковое пространство так мелко.
-
vgchange
: активация группы томов. После перезагрузки системы или выполнения командыvgchange -an
, ваши группы томов и логические тома находятся в неактивном состоянии. Для их активации необходимо выполнить командуvgchange -a y vg
-
vgextend
: добавить новый винчестер/dev/sdc
в группу томовvg
(расширить группу)pvcreate /dev/sdc vgextend vg /dev/sdc
-
vgreduce
: удалить физический том (винчестер)/dev/sdb
из группы томовvg
vgreduce vg /dev/sdb
-
vgrename
: переименовать группу томовvg02
вmy_volume_group
vgrename vg02 my_volume_group # or vgrename /dev/vg02 /dev/my_volume_group
Внимание! При переименовании тома с корневой файловой системой, нужно выполнить инструкцию в разделе Переименование группы томов или логического тома, на которых расположена корневая файловая система!
-
vgsplit
: разбить группу томов на две# создать группу томов vg-destination, выделив ее из группы vg-source # вместе с логическим томом vg-source/lv # LVM сам решит, какие физические тома передать новой группе sudo vgsplit -n vg-source/lv vg-source vg-destination
-
lvcreate
: создать логические тома. Теперь можно создать логические томаlvcreate -n first -L 20G vg lvcreate -n second -L 30G vg
Эти команды создадут устройства
/dev/vg/first
и/dev/vg/second
размером 20 GiB и 30 GiB соответственно. Список всех логических томов можно увидеть с помощью командыlvs
. -
lvs
: список всех логических томов -
lvrename
: переименовывает имеющийся логический томЛюбая из нижеследующих команд переименовывает том
lvold
(находящийся в группе томовvg02
) вlvnew
:lvrename /dev/vg02/lvold /dev/vg02/lvnew
или
lvrename vg02 lvold lvnew
Внимание! При переименовании группы, содержащей том с корневой файловой системой, нужно выполнить инструкцию в разделе Переименование группы томов или логического тома, на которых расположена корневая файловая система!
-
lvremove
: удалить логический томlvremove vg/first
Удалить можно только не использующийся том. Если том содержит файловую систему, то сначала её нужно отмонтировать.
-
lvresize
: изменить размер логического томаУменьшим логический том
vg/second
, содержащий ReiserFS, до 20 GiB:resize_reiserfs -s 19G /dev/vg/second lvresize -L 20G vg/second resize_reiserfs /dev/vg/second
Теперь увеличим тот же том до 40 GiB:
lvresize -L 40G vg/second resize_reiserfs /dev/vg/second
Для файловых систем
ext4
иbtrfs
нужно сначала просто сделать изменение размера логического тома, который ее содержит:lvresize -L 40G vg/second
Теперь нужно изменить размер файловой системы, которая существует на этом логическом диске.
Для
btrfs
:sudo btrfs filesystem resize max /
max
говорит что нужно использовать все свободное на логическом диске место,/
- это путь до mount-точки этой файловой системы (см./etc/fstab
). Убедиться в том, что файловая система изменила размер, можно запустив командуbtrfs filesystem show /
.Для
ext4
:sudo fsadm resize /dev/vg/lv
где
vg
- имя логической группы,lv
- имя логического тома. Без переданного параметра размера - задаст максимальный размер. Иногда эта команда возвращает ошибкуfsadm: Cannot get readlink "/media/data"
, тогда можно попробовать другую:sudo resize2fs /dev/vg/lv
Также, можно перед изменением размера, отмонтировать файловую систему, и проверить ее на ошибки:
sudo umount /dev/vg/lv sudo fsck -f /dev/vg/lv
Создать файловую систему
ext4
без резервных блоков (по умолчанию используется 5% блоков для устранения фрагментации и резерва места для root) можно командой:sudo mkfs.ext4 -m 0 /dev/vg/lv
-
lvextend
: почти то же самое, чтоlvresize
, но предназначена в основном для расширения логического тома. Вот как можно расширить том на все доступное в группе этого тома пространство:sudo lvextend -l +100%FREE /dev/vg/lv
В данной команде идет добавление (
+
) к тому/dev/vg/lv
всех 100% свободных экстентов, таким образом диск расширяется. -
lvchange
: сделать логический том активным/неактивным# сделать том vg/lv неактивным lvchange -a n /dev/vg/lv # активировать том vg/lv lvchange -a y /dev/vg/lv
Для повышения надёжности можно использовать зеркалирование данных. При этом каждому логическому блоку соответствует не один физический блок, а два или более на разных физических томах. Создать логический том с одним зеркалом можно с помощью команды:
lvcreate -n data -m 1 -l 10 vg
При этом должно быть достаточное количество физических блоков на трёх физических томах: 10 для самого логического тома, 10 для зеркала и 1 для журнала. С помощью команды lvconvert
можно добавлять или удалять зеркала и журнал, связанные с уже имеющимся логическим томом.
Если один из физических томов недоступен, то инициализировать группу томов с помощью команды vgchange
невозможно. В этом случае можно поступить так:
vgreduce --removemissing vg
vgchange -a y vg
Первая команда удалит из группы томов вышедший из строя физический том и каждый логический том, хотя бы один блок которого целиком располагался на удалённом физическом томе.
При наличии достаточного количества свободных физических блоков и томов конфигурацию зеркалированного логического тома можно сразу же вернуть в прежнее состояние с помощью команды lvconvert
.
Большинство современных дистрибутивов Linux дают возможность на этапе установки настроить LVM. Но обычно существует ряд серьёзных ограничений:
- физические тома можно создавать только на разделах винчестеров, а не на целом винчестере;
- можно создавать только простые (linear) логические тома;
- нельзя размещать каталог /boot внутри LVM.
В этом разделе - несколько сценариев использования LVM при работе с файловыми системами на томах LVM.
При изменении имени группы томов и/или логического тома, содержащих корневую файловую систему (это та, которая монтируется в /
), особенностью является то, что том с корневой файловой системой, указывается ядру через его именной путь (например, /dev/mapper/vg--host--system/root
), а при переименовании логического тома, ядро все еще считает, что находится на диске со старым именем, поэтому sudo update-grub
работать не будет (будет ошибка, что не найден диск со старым именем). Поэтому, при переименовании группы и тома с корневой файловой системой в системах, где файл /boot/grub/grub.cfg
генерируется автоматически с помощью, например, sudo update-grub
(это Ubuntu, Debian и другие), порядок действий будет такой:
- переименовать группу и/или том (
vgrename
,lvrename
) - в файле
/boot/grub/grub.cfg
поменять путь подключения корневой файловой системы в соответствии с новым именем - перезагрузиться, и после успешной перезагрузки выполнить
sudo update-grub
и убедиться что эта команда проходит без ошибок
Создание логического тома, файловой системы на нем и подключение файловой системы на лету с помощью LVM
-
Создать группу томов (должен быть свободный физический том, PV):
sudo vgcreate vg-yourhostname-vgname /dev/sdaX
-
Создать логический том в группе
vg-yourhostname-vgname
, взяв все свободное место:sudo lvcreate -l 100%FREE -n vg-yourhostname-vgname/lvname
-
Создать ФС ext4 на получившемся томе без выделения резервных блоков (по умолчанию резервируется 5%, для резерва, уберите опцию
-m 0
или пропишите вместо нуля нужный процент):sudo mkfs.ext4 -m 0 /dev/vg-yourhostname-vgname/lvname
Создать ФС btrfs можно похожей командой:
sudo mkfs.btrfs /dev/vg-yourhostname-vgname/lvname
-
Создать папку в том месте куда хотите монтировать файловую систему:
sudo mkdir /mountpoint
-
Если нужно чтобы файловая система монтировалась при старте системы, поправьте
/etc/fstab
, обычно строчка для файловой системы выглядит так:# manually added: example directory (created at 2018-03-12 14:36) UUID=a7426a75-2266-4d03-99e1-619f9d08049a /mountpoint ext4 defaults 0 2
UUID файловой системы можно узнать так:
sudo tune2fs -l /dev/vg-yourhostname-vgname/lvname | grep -i uuid
-
Если вы прописали подключение файловой системы в
/etc/fstab
, используйтеsudo mount -a
чтобы примонтировать ее, или примонтируйте вручную.
-
Посмотрим информацию о файловой системе, для этого надо указать в качестве устройства логический диск, в данном случае
/dev/vg-newhope-data/junk
.sudo tune2fs -l /dev/vg-newhope-data/junk
-
Удалим/переместим все файлы, которые хранятся на этой файловой системе, на другую ФС.
-
Отмонтируем файловую систему (надо указать либо точку монтирования, либо устройство, в данном примере указана точка монтирования
/junk
):sudo umount /junk
-
Удалим ставшую ненужной директорию
/junk
:sudo rm -r /junk
-
Если наша файловая система монтировалась автоматически при загрузке, исправим это, поправив файл
/etc/fstab
. -
Теперь можно удалить логический том LVM, который хранил файловую систему:
sudo lvremove vg-newhope-data/junk
-
Теперь можно использовать оставшееся место по своему усмотрению.
Увеличение логического тома и файловой системы до максимального размера на лету, без отмонтирования ФС
Это всего две команды:
sudo lvextend -l +100%FREE /dev/vg_blah/lv_blah
sudo resize2fs -p /dev/vg_blah/lv_blah
Можно объединить в одну (рекомендуемый способ):
sudo lvextend -r -l +100%FREE /dev/vg_blah/lv_blah
Ничего отмонтировать не нужно, все делается на лету. Ключ -r
отвечает за то, чтобы LVM сам вызвал утилиту fsadm
для изменения размера нижележащей ФС.
Уменьшение файловой системы и содержащего ее логического тома (LV) и удаление освободившегося физического тома (PV)
Увеличение размера файловой системы можно проводить без ее отмонтирования, но при уменьшении - нужно отмонтировать:
umount /dev/vg_blah/lv_blah
Проверим файловую систему:
e2fsck -f /dev/vg_blah/lv_blah
Примечание: запуск fsck
вместо e2fsck
не поможет, resize2fs
откажется запускаться и попросит сначала запустить e2fsck
.
Уменьшим файловую систему:
resize2fs -p /dev/vg_blah/lv_blah 9G
Потом уменьшим размер логического тома до 9G
(чтобы уменьшить на 9G
, надо прописывать минус в начале, -L -9G
):
lvreduce -L 9G /dev/vg_blah/lv_blah
Внимание! Уделите особое внимание тому, чтобы том не был меньше файловой системы, иначе данные будут повреждены!
Внимание! resize2fs
считает гигабайтом степени двойки (1 Гб = 1024 Мб и т.п.), тогда как lvreduce
- степени десятки (1 Гб = 1000 Мб и т.п.)
Можно также объединить два предыдущих шага и сделать все одной командой (рекомендуемый способ):
lvreduce -r -L 9G /dev/vg_blah/lv_blah
Теперь перенесем экстенты удаляемого с удаляемого физического тома на другие физические тома группы:
pvmove /dev/sdX
После этого вы можете уменьшить и группу томов:
vgreduce vg_blah /dev/sdxy
Внимание: Решающее значение имеет одинаковый размер. Если вы уменьшите том больше чем файловую систему, вы обрежете логический том и рискуете потерять данные!
Если команда уменьшения размера файловой системы и/или уменьшения логического тома не проходят по причине того, что физический том не может записать данные (но при этом может их считать), то вместо уменьшения размера ФС и логического тома (операции, которые возможно потребуют записи на сбойный физический том), можно добавить другой работающий физический том в группу, и выполнить pvmove /dev/sdX
для сбойного, тем самым перенеся данные со сбойного тома на работающий, и затем удалить сбойный физический том из группы с помощью vgreduce
. После этого можно уменьшить размер ФС и логического тома.
- http://forum.ubuntu.ru/index.php?topic=105829.0
- http://help.ubuntu.ru/wiki/lvm
- http://xgu.ru/wiki/LVM
- LVM | ArchWiki
- http://www.funtoo.org/LVM_Fun
- http://ksarendranath.blogspot.ru/2014/11/resizing-partitions-with-lvmbtrfs-setup.html
- http://unix.stackexchange.com/questions/175473/resize-a-btrfs-partition-inside-a-logical-lvm-volume
- http://www.techrepublic.com/blog/linux-and-open-source/how-to-use-logical-volume-manager-lvm-to-grow-etx4-file-systems-online/
- http://debianforum.ru/index.php?topic=189.0
- https://listman.redhat.com/archives/linux-lvm/2011-April/msg00058.html
- https://listman.redhat.com/archives/linux-lvm/2011-April/msg00061.html
- https://tanguy.ortolo.eu/blog/article72/naming-vgs