Удаление lvm. Изменение размера дисков LVM

Собственно, хочется просто и доступно рассказать про такую замечательную вещь как Logical Volume Management или Управление Логическими Томами.
Поскольку уже давно пользуюсь LVM-ом, расскажу что он значит именно для меня, не подглядывая в мануалы и не выдёргивая цитаты из wiki, своими словами, чтобы было понятно именно тем кто ничего о нем не знает. Постараюсь сразу не рассказывать о всяческих «продвинутых» функциях типа страйпов, снапшотов и т.п.

LVM - это дополнительный слой абстракции от железа, позволяющий собрать кучи разнородных дисков в один, и затем снова разбить этот один именно так как нам хочется.

Есть 3 уровня абстракции:
1. PV (Physical Volume) - физические тома (это могут быть разделы или целые «неразбитые» диски)
2. VG (Volume Group) - группа томов (объединяем физические тома (PV) в группу, создаём единый диск, который будем дальше разбивать так, как нам хочется)
3. LV (Logical Volume) - логические разделы, собственно раздел нашего нового «единого диска» ака Группы Томов, который мы потом форматируем и используем как обычный раздел, обычного жёсткого диска.
это пожалуй вся теория. :) теперь практика:
для работы нужны пакеты lvm2 и возможность работать с привелегиями root поэтому:
$ sudo bash
# apt-get install lvm2

Допустим у нас в компе есть жёсткий диск на 40Гб и нам удалось наскрести немного денег и наконец-то купить себе ТЕРАБАЙТНИК! :))) Система уже стоит и работает, и первый диск разбит одним разделом (/dev/sda1 как /), второй - самый большой, который мы только подключили - вообще не разбит /dev/sdb…
Предлагаю немножко разгрузить корневой диск, а заодно ускорить (новый диск работает быстрее старого) и «обезопасить» систему с помощью lvm.
Можно делать на втором диске разделы и добавлять их в группы томов (если нам нужно несколько групп томов),
а можно вообще не делать на диске разделы и всё устройство сделать физическим разделом (PV)

Root@ws:~# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created

Создаём группу томов с говорящим названием, например по имени машины «ws», чтобы когда мы перетащим данный диск на другую машину небыло конфликтов с именами групп томов:

Root@ws:~# vgcreate ws /dev/sdb

Желательно внести с корневого раздела такие папки как /usr /var /tmp /home, чтобы не дефрагментировать лишний раз корневой раздел и ни в коем случае его не переполнить, поэтому создаём разделы:

Root@ws:~# lvcreate -n usr -L10G ws # здесь мы создаём раздел с именем «usr», размером 10Gb
Logical volume «usr» created
по аналогии делаем то же для /var, /tmp, /home:
root@ws:~# lvcreate -n var -L10G ws
root@ws:~# lvcreate -n tmp -L2G ws
root@ws:~# lvcreate -n home -L500G ws
у нас ещё осталось немного свободного места в группе томов (например для будущего раздела под бэкап)
посмотреть сколько именно можно командой:
root@ws:~# vgdisplay
информацию по созданным логическим томам
root@ws:~# lvdisplay
информацию по физическим томам
root@ws:~# pvdisplay

Разделы что мы создали появятся в папке /dev/[имя_vg]/, точнее там будут ссылки на файлы,
lrwxrwxrwx 1 root root 22 2009-08-10 18:35 swap -> /dev/mapper/ws-swap
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 tmp -> /dev/mapper/ws-tmp
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 usr -> /dev/mapper/ws-usr
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 var -> /dev/mapper/ws-var
и т.д…

Дальше lvm уже почти кончается… форматируем наши разделы в любимые файловые системы:
root@ws:~# mkfs.ext2 -L tmp /dev/ws/tmp
root@ws:~# mkfs.ext4 -L usr /dev/ws/usr
root@ws:~# mkfs.ext4 -L var /dev/ws/var
root@ws:~# mkfs.ext4 -L home /dev/ws/home

Кстати, не плохо было бы сделать раздел подкачки:
root@ws:~# lvcreate -n swap -L2G ws
root@ws:~# mkswap -L swap /dev/ws/swap
root@ws:~# swapon /dev/ws/swap

Создаём папку и подключая по очереди новообразовавшиеся тома, копируем в них нужное содержимое:
root@ws:~# mkdir /mnt/target
root@ws:~# mount /dev/ws/home /mnt/target
копируем туда всё из папки /home своим любимым файловым менеджером (с сохранением прав доступа), например так;):
root@ws:~# cp -a /home/* /mnt/target/
root@ws:~# umount /mnt/target/
кстати, для папки temp необходимо только поправить права, копировать туда что-либо необязательно:
root@ws:~# mount /dev/ws/tmp /mnt/target && chmod -R a+rwx /mnt/target && umount /mnt/target/
добавляем нужные строчки в /etc/fstab, например такие:
/dev/mapper/ws-home /home ext4 relatime 0 2
/dev/mapper/ws-tmp /tmp ext2 noatime 0 2
/dev/mapper/ws-swap none swap sw 0 0
и перезагружаемся… (продвинутые господа могут обойтись без перезагрузки;))

На вкусное, хочу предложить более продвинутую штуку:
допустим у нас есть система с разделом на LVM, а жёсткий диск начал сбоить, тогда мы можем без перезагрузки переместить всю систему на другой жёсткий диск/раздел:

# On-line добавление/удаление жёстких дисков с помощью LVM (пример)

Root@ws:~# pvcreate /dev/sda1 # наш эмулятор сбойного диска
Physical volume "/dev/sda1" successfully created

Root@ws:~# pvcreate /dev/sdb1 # наш эмулятор спасательного диска
Physical volume "/dev/sdb1" successfully created

Root@ws:~# vgcreate vg0 /dev/sda1 # создаю группу томов vg0
Volume group «vg0» successfully created

Root@ws:~# lvcreate -n test -L10G vg0 #создаю раздел для «важной» инфы
Logical volume «test» created

Root@ws:~# mkfs.ext2 /dev/vg0/test # создаю файловую систему на разделе
root@ws:~# mount /dev/mapper/vg0-test /mnt/tmp/ #монтирую раздел
… # заполняю его информацией, открываю на нем несколько файлов и т.п.

Root@ws:~# vgextend vg0 /dev/sdb1 # расширяю нашу групу томов на «спасательный» диск
Volume group «vg0» successfully extended

Root@work:~# pvmove /dev/sda1 /dev/sdb1 #передвигаю содержимое с «умирающего» диска на «спасательный»
/dev/sda1: Moved: 0.9%
/dev/sda1: Moved: 1.8%

/dev/sda1: Moved: 99.7%
/dev/sda1: Moved: 100.0%

Root@work:~# vgreduce vg0 /dev/sda1 # убираю «умирающий» диск из группы томов.
Removed "/dev/sda1" from volume group «vg0»

Итого:
Я создал логический раздел, отформатировал его, примонтировал и заполнил нужными данными, затем переместил его с одного устройства на другое, при этом раздел остался примонтирован и данные всё время оставались доступны!
Подобным образом мне удавалось без перезагрузки перенести всю систему с умирающего диска на рэид-массив. :)

P.S. Прошу простить за опечатки, меня постоянно отвлекали =))

P.P.S. Ах, да!!! Самое главное и самый большой минус LVM - он не читается grub"ом
поэтому раздел /boot должен находиться вне LVM на отдельном разделе жёсткого диска,
иначе система не загрузится.

Менеджер логических томов (Logical Volume Manager) - менеджер логических томов операционных систем GNU/Linux и OS /2. Она позволяет создавать поверх физических разделов (или даже неразбитых винчестеров) логические тома, которые в самой системе будут видны как обычные блочные устройства с данными (т.е. как обычные разделы). Основные преимущества LVM в том, что во-первых одну группу логических томов можно создавать поверх любого количества физических разделов, а во-вторых размер логических томов можно легко менять прямо во время работы. Кроме того, LVM поддерживает механизм снапшотов, копирование разделов «на лету» и зеркалирование, подобное RAID -1.

Создание и удаление LVM

Для LVM существует три группы утилит, предназначенных для работы с физическими томами (pv*), логическими группами (lg*) и логическими томами (lv*). Так, команда pvcreate создает физические тома, команда pvscan - сообщает об наличествующих, а команда pvdisplay выводит о них полную информацию. А тройки команд vgcreate, vgscan, vgdisplay и lvcreate, lvscan, lvdisplay проделывают то же для групп томов и логических томов, соответственно.

Удаление LVM (или отдельных его частей, например, логических томов или групп томов) происходит в обратной последовательности их создания:

    отмонтируем разделы (umount)

    lvdisplay. удалить логические тома (lvremove)

    vgdisplay. удалить группы томов (vgremove) # vgremove vz

    pvdisplay. удалить ненужные физические тома (pvremove) # pvremove /dev/sda3

Создание LVM

    Создать физический том (physical volume) на разделе sda3: # pvcreate /dev/sda3 # pvdisplay

    На физическом томе создаём группу томов, с именем vz: # vgcreate -s 32M vz /dev/sda3

    Команда vgcreate запускается с именем группы в качестве первого аргумента и имени файла устройства раздела - как аргумента второго. Имя группы - произвольно, в путях к файлам устройств физических томов при использовании devfs должна применяться полная нотация (как это вывела команда pvscan). По умолчанию тома нарезаются на физические блоки extent"ы размером 4 Мбайт. При желании иметь другой размер блока - это можно явно задать опцией -s ##m. Рекомендуется использовать extent"ы в 32 Мбайт, в этом случае максимальный размер любого из будущих логических томов ограничивается величиной 2 терабайта, если же остановиться на умолчальном extent"е, предел тома составил бы 256 Гбайт.

    Создание логического тома или томов (аналог нарезания на разделы физического жесткого диска). Создадим два раздела tmp размером 10Гб и раздел rest, который займет все оставшееся пространство группы томов vz: # lvcreate -l 10G -n tmp vz # lvcreate -l 100%FREE -n rest vz

    Отформатируем получившиеся логические тома: # mkfs.ext4 /dev/vz/tmp # mkfs.ext4 /dev/vz/rest

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

Посмотрим информацию о нашей группе томов:

Vgdisplay vg1

Групп можно создать несколько, каждая со своим набором томов. Но обычно это не требуется.

Теперь в группе томов можно создать логические тома 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 в группу томов, создадим физический том:

Pvcreate /dev/sdc

И добавим его в нашу группу:

Vgextend vg1 /dev/sdc

Теперь можно создать ещё один логический диск (lvcreate) или увеличить размер существующего (lvresize).

Удаление физических томов

Чтобы убрать из работающей группы томов винчестер sda сначала перенесём все данные с него на другие диски:

Pvmove /dev/sda

Затем удалим его из группы томов:

Vgreduce vg1 /dev/sda

И, наконец, удалим физический том:

Pvremove /dev/sda

Вообще-то, последняя команда просто убирает отметку о том, что диск является членом lvm, и особой пользы не приносит. После удаления из LVM для дальнейшего использования диск придётся переразбивать/переформатировать.

Изменение размеров

LVM позволяет легко изменять размер логических томов. Для этого нужно сначала изменить сам логический том:

Lvresize -L 40G vg1/lv2

а затем файловую систему на нём:

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

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

Sudo vgchange -a y

Эта команда должна сообщить о том, что все ваши логические тома активированы. Теперь можно работать с ними обычным образом.

Менеджер логических томов (LVM англ . Logical Volume Manager ) - предоставляет собой дополнительный уровень абстракции между физическими/логическими дисками (привычными разделами, с которыми работает fdisk и аналогичные программы) и файловой системой. Это достигается путём разбивки изначальных разделов на небольшие блоки (экстенты , обычно 4-32 МБайт ) и объединения их в единый виртуальный том, точнее группу томов (volume group ), которая далее разбивается на логические тома (logical volume ). Для файловой системы логический том представлен как обычное блочное устройство, хотя отдельные экстенты тома могут находиться на разных физических устройствах (и даже сам экстент может быть распределён подобно RAID). LVM увеличивает гибкость файловой системы, однако, являясь просто промежуточным слоем, не отменяет ограничения и использование других слоёв. То есть, по-прежнему нужно создавать и изменять разделы, форматировать их.

Создание.

# pvcreate /dev/sdb1 /dev/sdb2 //создание физического тома (physical volume) # vgcreate volgroup00 /dev/sdb1 //создание группы томов (volume group) # vgextend volgroup00 /dev/sdb2 //добавление нового раздела в группу томов # pvdisplay /dev/sdb2 //отображение атрибутов физического тома # lvcreate -L20G -ntest01 volgroup00 //создание логического тома с именем test размером 20Гб

Размер тома можно создавать по количеству экстентов, их число в группе томов определяется через vgdsplay :

# lvcreate -l 10000 volgroup00 -n test02

Теперь когда логический том создан над ним можно выполнять теже действия как и с обычным разделом, т.е. его можно форматировать, монтировать, переносить информацию и проч.

# mkreiserfs /dev/volgroup00/test01 //форматирование логического тома под ReiserFS # mount /dev/volgroup00/test01 /mnt/lvmtest //монтирование логического тома # cp -a /etc/ /mnt/lvmtest //копирование

Сопровождение LVM.

Увеличение размера логического тома

После увеличения логического тома, необходимо увеличить размер файловой системы. Для каждой ФС свой метод. Причем в каждом случае есть свои нюансы:
Перед изменением размера ФС Ext2 необходимо отмонтировать раздел (размер Ext3/Ext4 изменяется на лету).
Ext4 увеличивается только средством resize2fs . В fsadm свои методы.
Увеличивать размер файловых систем Reiserfs можно как в смонтированном , так и в размонтированном состоянии.
Размер файловой системы XFS можно увеличить только в смонтированном состоянии. Кроме того, утилите в качестве параметра нужно передать точку монтирования, а не имя устройства.

# lvextend - L+ 4G / dev/ volgroup00/ test01 //увеличение логического тома на 4Гб # resize2fs / dev/ volgroup00/ ext //расширение Ext2/Ext3/Ext4 или второй вариант через fsadm (в некоторых источниках пишут про e2fsadm, у себя ее не нашел). # fsadm - l resize / dev/ volgroup00/ ext 2G //увеличение логического тома Ext2/Ext3, с расширением ФС. На сенятбрь 2009 Ext4 пока не поддерживается # resize_reiserfs - f / dev/ volgroup00/ reiser //расширение ReiserFS # xfs_growfs / mnt/ lvm/ xfs //расширение XFS # btrfsctl - r + 2g / mnt/ lvm/ btrfs/ //расширение Btrfs или # btrfsctl - r + 2g - A / dev/ volgroup00/ btrfs //расширение Btrfs

# lvextend -L+4G /dev/volgroup00/test01 //увеличение логического тома на 4Гб # resize2fs /dev/volgroup00/ext //расширение Ext2/Ext3/Ext4 или второй вариант через fsadm (в некоторых источниках пишут про e2fsadm, у себя ее не нашел). # fsadm -l resize /dev/volgroup00/ext 2G //увеличение логического тома Ext2/Ext3, с расширением ФС. На сенятбрь 2009 Ext4 пока не поддерживается # resize_reiserfs -f /dev/volgroup00/reiser //расширение ReiserFS # xfs_growfs /mnt/lvm/xfs //расширение XFS # btrfsctl -r +2g /mnt/lvm/btrfs/ //расширение Btrfs или # btrfsctl -r +2g -A /dev/volgroup00/btrfs //расширение Btrfs

Уменьшение размера логического тома

Логические тома также могут быть уменьшены в размере. В первую очередь необходимо уменьшить размер файловой системы, и только после этого уменьшать размер логического тома. В обратной последовательности можно потерять данные. Также есть некоторые нюансы:
Перед изменением размера файловую систему необходимо отмонтировать.
При изменении размера Ext2/Ext3 resize2fs ’у указывается ее новый размер.
Уменьшить XFS и JFS невозможно.
Уменьшить Btrfs можно на лету, но лучше не рисковать.

# resize2fs /dev/volgroup00/ext2 500m //указание нового размера для ФС Ext2/Ext3 # fsadm -l resize /dev/volgroup00/ext3 200M //указание нового размера для ФС Ext2/Ext3 # resize_reiserfs -s-1G /dev/volgroup00/reiserfs //уменьшение ФС Reiserfs # btrfsctl -r -2g -A /dev/volgroup00/btrfs //уменьшение ФС Btrfs # lvreduce -L-1G /dev/volgroup00/test01 //уменьшение логического тома

Переименование логического тома

# vgchange -a n /dev/volgroup02 //отключение логических томов в группе-жертве # vgmerge volgroup01 volgroup02 //поглощение группы volgroup02 группой volgroup01

Разделение группы томов

# vgsplit volgroup01 volgroup02 /dev/sdb1 //выделение новой группы томов volgroup02 которая разместится на физическом томе /dev/sdb1

Изменение размера физического тома. Есть несколько нюансов:
Увеличение размера физического тома LVM, производится после увеличения раздела программами типа cfdisk/fdisk
Уменьшение тома следует проводить после уменьшения файловых систем и логических томов, иначе возможна порча данных

# [b]pvresize /dev/sda1 //увеличение физического тома # [b]pvresize –setphysicalvolumesize 40G /dev/sda1 //уменьшение физического тома

Создание снимков (Snapshots)

Снимок это доступная только для чтения копия другого тома. При создании снимков необходимо убедиться что запущен dmeventd . При создании снимков с XFS ее предвариетльно надо заморозить – xfs_freeze .

# lvcreate -L600M -s -n var-backups /dev/volgroup00/var //создание тома var-backup, как копии тома var # mount /dev/volgroup00/var-backup /mnt/backup //последующее монтирование снимка

Создание зеркала (Mirrors)

Зеркала используются для повышения отказоустойчивости и повышения уровня сохранности информации. Для создания зеркала необходимо 3 физических тома, 2 для зеркала и 1 для журнала. Рекомендуется использовать физические тома размещенные на разных носителях. Использование физических томов с одного носителя сводит на ноль целесообразность использования зеркала, т.к. в случае аппаратного сбоя зеркало оказывается бесполезным. При создании зеркал необходимо убедиться что запущен dmeventd

# pvcreate /dev/sda5 /dev/sdb1 /dev/sdc1 //создаем физический том # vgcreate mirror00 /dev/sda5 /dev/sdb1 /dev/sdc1 //создаем группу mirror00 # lvcreate -L 5G -n volume00 -m 1 mirror00 //создаем зеркальный том volume00

просмотр информации о логических томах, процент Copy должен достигнуть 100%

# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert volume00 mirror00 mwi- a- 5.00G volume00_mlog 6.17

# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert volume00 mirror00 mwi-a- 5.00G volume00_mlog 6.17

проверка использования устройств в созданном зеркале

# lvs - a - o + devices LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices volume00 mirror00 mwi- a- 5.00G volume00_mlog 100.00 volume00_mimage_0(0 ) , volume00_mimage_1(0 ) [ volume00_mimage_0] mirror00 iwi- ao 5.00G / dev/ sda5(0 ) [ volume00_mimage_1] mirror00 iwi- ao 5.00G / dev/ sdb1(0 ) [ volume00_mlog] mirror00 lwi- ao 4.00M

# lvs -a -o +devices LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices volume00 mirror00 mwi-a- 5.00G volume00_mlog 100.00 volume00_mimage_0(0),volume00_mimage_1(0) mirror00 iwi-ao 5.00G /dev/sda5(0) mirror00 iwi-ao 5.00G /dev/sdb1(0) mirror00 lwi-ao 4.00M

# vgextend volgroup01 /dev/sdc1 /dev/sdd1 //добавление новых физических томов в группу # lvconvert -m 1 /dev/volgroup01/volume-new //преобразование обычного тома в зеркальный

Удаление томов и групп

Логические тома перед удалением должны быть отмонтированы.

# vgreduce volgroup00 /dev/sdb1 //удаление физического тома из группы # lvremove /dev/volgroup00/test01 //удаление логического тома # vgremove volgroup00 //удаление группы томов # pvremove /dev/sdc1 //удаление физического тома

mob_info