Logical Volume Manager (LVM)
Logical 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
Посмотрим информацию о нашей группе томов:
Групп можно создать несколько, каждая со своим набором томов. Но обычно это не требуется.
Теперь в группе томов можно создать логические тома lv1 и lv2 размером 20 Гбайт и 30 Гбайт соответствено:
lvcreate -n lv1 -L 20G vg1 lvcreate -n lv2 -L 30G vg1
Теперь у нас есть блочные устройства /dev/vg1/lv1 и /dev/vg1/lv2.
Осталось создать на них файловую систему. Тут различий с обычными разделами нет:
mkfs.ext4 /dev/vg1/lv1 mkfs.reiserfs /dev/vg1/lv2
Удаление LVM (или отдельных его частей, например, логических томов или групп томов) происходит в обратном порядке — сначала нужно отмонтировать разделы, затем удалить логические тома ( lvremove ), после этого можно удалить группы томов ( vgremove ) и ненужные физические тома ( pvremove ).
Добавление физических томов
Чтобы добавить новый винчестер sdc в группу томов, создадим физический том:
И добавим его в нашу группу:
Теперь можно создать ещё один логический диск ( lvcreate ) или увеличить размер существующего ( lvresize ).
Удаление физических томов
Чтобы убрать из работающей группы томов винчестер sda сначала перенесём все данные с него на другие диски:
Затем удалим его из группы томов:
И, наконец, удалим физический том:
Вообще-то, последняя команда просто убирает отметку о том, что диск является членом lvm, и особой пользы не приносит. После удаления из LVM для дальнейшего использования диск придётся переразбивать/переформатировать.
Изменение размеров
LVM позволяет легко изменять размер логических томов. Для этого нужно сначала изменить сам логический том:
а затем файловую систему на нём:
resize2fs /dev/vg1/lv2 resize_reiserfs /dev/vg1/lv2
Изменение размеров физического тома — задача весьма сложная и обычно не применяется. Целесообразнее и безопаснее удалить физический том, изменить размер раздела и создать том заново.
Как просто попробовать
Если LVM устанавливается не для дальнейшего использования, а «напосмотреть», то диски и разделы можно заменить файлами. Не понадобятся ни дополнительные диски, ни виртуальные машины. Мы создадим виртуальные накопители и будем с ними работать. Например, можно создать 4 диска по 1 Гбайт, но можно создать другое количество большего или меньшего размера как вам хочется. Создаем сами файлы, имитирующие устройства:
mkdir /mnt/sdc1/lvm cd /mnt/sdc1/lvm dd if=/dev/zero of=./d01 count=1 bs=1G dd if=/dev/zero of=./d02 count=1 bs=1G dd if=/dev/zero of=./d03 count=1 bs=1G dd if=/dev/zero of=./d04 count=1 bs=1G
Создаем loopback устройства из файлов:
losetup -f --show ./d01 losetup -f --show ./d02 losetup -f --show ./d03 losetup -f --show ./d04
Дальше поступаем так же, как если бы ми создавали LVM на реальных дисках. Обратите внимание на названия loop-устройств — они могут отличаться от приведённых здесь.
pvcreate /dev/loop0 pvcreate /dev/loop1 pvcreate /dev/loop2 pvcreate /dev/loop3 vgcreate -s 32M vg /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 lvcreate -n first -L 2G vg lvcreate -n second -L 400M vg .
Снапшоты
Одна из важнейших особенностей LVM — это поддержка механизма снапшотов. Снапшоты позволяют сделать мгновенный снимок логического тома и использовать его в дальнейшем для работы с данными.
Примеры использования
LVM активно используется, когда необходим механизм снапшотов. Например, этот механизм крайне важен при бекапе постоянно меняющихся файлов. LVM позволяет заморозить некоторое состояние ФС и скопировать с неё все нужные данные, при этом на оригинальной ФС останавливать запись не нужно.
Также снапшоты можно применить для организации поддержки файловым сервером с Samba механизма архивных копий, об этом в соответствующей статье:
LVM с LiveCD
Если у вас возникла необходимость работать с LVM с LiveCD Ubuntu, то вам придётся выполнить несколько дополнительных действий, поскольку по умолчанию утилит для работы с LVM нет.
Сначала вам нужно установить эти утилиты:
Далее посмотрите командами
sudo vgscan sudo vgdisplay YOUR_VGNAME
доступность ваших групп томов. Ну а дальше запустите все группы командой
Эта команда должна сообщить о том, что все ваши логические тома активированы. Теперь можно работать с ними обычным образом.
Почему вам нужен LVM в Линуксе
Если вы не знаете, что такое LVM, то вот отличная цитата:
LVM добавляет дополнительный уровень абстракции над физическими дисками, позволяя создавать на их основе логические тома, что обеспечивает бóльшую гибкость по сравнению с управлением физических дисков напрямую. Аппаратная конфигурация накопителей спрятана от программ, поэтому их можно переносить или изменять размер без необходимости остановки приложений и отключения файловых систем.
Попросту говоря, это виртуальные разделы диска, которые можно на ходу менять в размере, создавать, удалять, переносить и еще много чего с ними делать, не трогая физические разделы диска.
Помню, когда я последний раз читал про LVM, он мне сильно не понравился. Что за идиотский дополнительный слой, подумал я?
Меня раздражали две вещи. Первая — запутаннные названия. Там есть LV , VG , PV и еще куча каких-то других непонятных терминов, в которых я путался. Вторая — глупейшие и усложненные названия блочных устройств вроде /dev/mapper/vg0/lv1 . Зачем эти дополнительные сложности, если можно просто набрать /dev/sda1 и не заморачиваться?
Так бы я и остался плохого мнения об этой технологии, если бы не случай.
Недавно мне понадобилось разметить дисковое простанства на новом сервере с чистыми винтами. И я решил сделать еще одну попытку понять лвм. И совершенно случайно я нашел потрясающую документацию, которая разложила по полочам все знания.
И теперь я не понимаю, почему я раньше никогда не использовал, ведь это супер удобно.
Что же конкретно мне понравилось в ЛВМе?
Три вещи. Это возможность менять размеры дисков. Более понятные имена дисков. И возможность мигрировать данные с диска на диск без остановки системы. Давайте подробнее остановимся на каждом из этих пунктов.
Возможность менять размеры разделов диска
На работе у меня стоит компьютер, на который я сам устанавливал Xubuntu 18.04. При установке я выбрал ручное разбитие диска и совершил фатальную ошибку — создал маленький раздел для корневой системы. Всего 20 гигабайт:
dima@dima-work:~$ df -hm|grep /dev/sd /dev/sda1 18645 17473 202 99% / /dev/sda5 85880 62514 18962 77% /home
Со временем, корневой раздел заполнился файлами работающих контейнеров докера (/var/lib/docker) и теперь я страдаю. Не могу поставить обновления, например. Или мне приходится постоянно лезть и что-то удалять.
А был бы LVM, я бы легко сделал ресайз и выделил корневому разделу дополнительное место за счет свободного места на диске в любом месте.
Более понятные имена разделов
То, что изначально казалось мне излишней сложностью, теперь стало преимуществом. Весь секрет в человеческом именовании группы и самих логических разделов. Разделы можно называть понятными именами вместо sda1 и sdb2 .
Например, если группу назвать local , а логические разделы назвать в соответствии с их функцией, то можно создать такую структуру:
На скрине выше видно два физических раздела /dev/sda3 и /dev/sdb1 , объединенных в группу localc (немного опечатался). И все логические разделы лежат на первом диске. Второй можно легко заменить.
Теперь несколько советов, если вы хотите тоже использовать LVM у себя в системе.
Советы
Объединяйте все винты в одну группу, а ее уже делите на логические разделы как вам нужно.
Потому что перебросить данные с одного физического винта на другой, если они в одной группе — легко. А вот перемещение экстентов между группами — уже сложно. Вообще не представляю, зачем на одной машине держать несколько групп. Даже не могу придумать кейса, где это было бы полезно.
Не делайте большие разделы сразу, потому что расширить их легко, а сжать — сложно. Добавляйте место по мере необходимости в те разделы, где оно необходимо. Ведь часто не знаешь заранее, какая папка в системе распухнет. Имейте запас свободного места, которое можно перераспределить.
Разбивайте диск вручную, оставляйте бут-раздел.