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из группы томовvgvgreduce vg /dev/sdb -
vgrename: переименовать группу томовvg02вmy_volume_groupvgrename 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 2UUID файловой системы можно узнать так:
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