LVM — старая и добрая технология, представляющая дополнительный слой абстракции между физическими дисками или разделами на них, и томами, отформатированными в вашу любимую файловую систему. Так как статей на тему настройки LVM в инете валом, я ограничусь парой интересных фич, ради которых, собственно, LVM и стоит затевать.
Перво-наперво
У нас должно быть свободное место в Volume Group. Нет смысла без особой необходимости забивать все свободное место логическими томами, когда их свободное место будет использовано не до конца. Если у нас один хард на 500 гиг, мы делаем группу на весь этот объем, а дальше, например, делаем один том в 1G под swap, другой — в 9G под /, и, например, третий — на 50G под /home. У нас остается 440G свободного места, которое мы в любой момент можем докинуть в любой раздел, а также использовать под снапшоты. Соу…
Как добавить места на Logical Volume
Увеличение можно проделывать на смонтированной файловой системе.
Допустим, у нас есть LVM-том с линуксовым корнем /dev/mypc/root, содержащий на себе линуксовый корень. Докинуть 100 мегабайт можно командой:
- lvextend -L +100m /dev/mypc/root
- resize2fs /dev/mypc/root
Первая команда увеличит том, вторая — распространит на него файловую систему.
Как сделать и откатить снапшот
Допустим, у нас все еще есть LVM-том /dev/mypc/root, содержащий на себе линуксовый корень. Если нам нужно, например, накатить новые дрова для видюхи и мы боимся все сломать, делаем снапшот:
- lvcreate -L2G -s -n rootsnapshot /dev/mypc/root
Эта команда сделает снапшот /dev/mypc/rootsnapshot, который будет содержать состояние на момент создания снапшота. При этом есть ограничение в 2 гига на изменения в нашем корне, если превысим — снапшот перестанет быть валидным и его можно будет только удалить:
- lvremove /dev/mypc/rootsnapshot
Так как хотелось бы снапшот уметь откатить в случае если у нас все поломается, то вариант с переполнением зарезервированного места — не вариант для нас.
Автоматическое увеличение размера снапшота LVM
Тут все просто, но не так просто, как часто пишут в интернетах. Нужно:
- Изменить файлик /etc/lvm/lvm.conf:
snapshot_autoextend_threshold = 80
snapshot_autoextend_percent = 20
monitoring = 1Эти опции включают мониторинг, а так же увеличивают размер снапшота на 20% (от текущего размера) каждый раз, когда он оказывается занят изменениями на 80%. - Установить dmeventd, который может не стоять, но который нужен чтобы все работало!
Теперь, когда наш снапшот умеет расти в размере и ему почти ничего не страшно, можно поиздеваться над корнем и откатить все изменения командой:
- lvconvert --merge /dev/mypc/rootsnapshot
Вообще эта команда должна производиться при отмонтированном разделе, но так как в нашем случае это корень, то отмонтировать его не получится, и lvconvert скажет, что сделает все в лучшем виде при следующей активации тома — то есть при перезагрузке.
Как смигрировать на другой физический диск
Очень вкусная возможность лайв-миграции позволяет перетащить свои разделы с одного диска на второй, не отрываясь от работы.
Допустим у нас есть диск /dev/sda. На его разделе /dev/sda1 у нас покоится Volume Group «mypc» с нашими логическими томами:
- root — с корнем линукса (/),
- home — с домашними каталогами (/home),
- swap — с разделом подкачки.
И нам нужно все это добро перенести на новый хард — /dev/sdb, который гол как сокол и ничего ж там нет.
Готовим новый диск
- # Создаем раздел на новом диске:
- parted -a opt /dev/sdb mkpart primary 0% 100%
- # Создаем физический том LVM:
- pvcreate /dev/sdb1
- # Расширяем Volume Group на новый физический том:
- vgextend mypc /dev/sdb1
Сдвигаем наши три логических тома со старого физического тома на новый:
- pvmove -n /dev/mypc/root /dev/sda1 /dev/sdb1
- pvmove -n /dev/mypc/home /dev/sda1 /dev/sdb1
- pvmove -n /dev/mypc/swap /dev/sda1 /dev/sdb1
Избавляемся от старого харда
- # Удаляем физический том LVM из группы "mypc":
- vgreduce mypc /dev/sda1
- # Удаляем физический том LVM:
- pvremove /dev/sda1
Устанавливаем загрузчик на новый диск и обновляем его конфиг:
- grub-install /dev/sdb
- update-grub
После перезагрузки останется вытащить старый диск и при необходимости выставить в биосе загрузку с нового.
Как сделать клон логического тома
Два хороших источника по этим операциям: www.voleg.info (archive.org) и redhat.com (archive.org)
Сначала делаем зеркальный рейд из тома, который хотим склонировать
- lvconvert --type mirror --alloc anywhere -m1 /dev/mypc/root
- # или, если хотим указать конкретный физически том для расположения клона
- lvconvert --type mirror -m1 /dev/mypc/root /dev/sdb1
Далее, когда зеркало собрано, его можно разобрать, отделив одну из копий как том с новым именем.
- # отрезаем от зеркала том с именем rootcopy, состоящий из 1 копии, лежащей на PV /dev/sda1
- lvconvert --splitmirrors 1 --name rootcopy /dev/mypc/root /dev/sda1
- # более общий случай: если у нас зеркало составлено из более чем двух копий:
- # отрезаем от зеркала том с именем rootcopy, который сам будет являться зеркалом из томов, лежащих на PV /dev/sda1 и /dev/sdс1
- lvconvert --splitmirrors 2 --name rootcopy /dev/mypc/root /dev/sd[ac]1