Статья на официальном вики-ресурсе документации: https://help.ubuntu.ru/wiki/lvm
Итак LVM + loop диски
Этот топик только для того чтоб каждый мог дома попробовать поиграть с LVM (не озабачиваясь дополнительными накопителями).
Мы создадим виртуальные диски и будем на них закручивать LVM.
Стоит почитать
вот это (до или после...)
Файлик ну очень маленький. Не хочется качать или читать, моя выжимка:
Дисковое пространство для LVM представлено физическими томами (Physical Volume, PV). Это могут быть винчестеры, разделы или любые другие блочные устройства. Физические тома дробятся на блоки (Physical Extent, PE) заранее заданного размера. Все полученные блоки образуют группу томов (Volume Group, VG). Из имеющихся в группе томов блоков можно собрать новое виртуальное устройство — логический том (Logical Volume, LV). В простейшем случае каждый блок логического тома (Logical Extent, LE) располагается на некотором блоке физического тома.
Physical Volume, PV - физический том
Physical Extent, PE - диапазоны (обычно несколько мегабайт) физического диска, подобные кластерам
Volume Group, VG - группа томов
Logical Volume, LV - логический том, который можно уже форматировать...
Базовые команды
Создание - pvcreate
Работа с LVM начинается с создания физических томов с помощью команды pvcreate. В нашем примере необходимо вызвать эту команду дважды:
pvcreate /dev/sda
Вывести список всех доступных физических томов - pvs
Создать группу томов - vgcreate
vgcreate -s 32M vg /dev/sda /dev/sdb
Опция -s задаёт размер физического блока. По умолчанию он равен 4 MiB, но нет смысла дробить дисковое пространство так мелко.
Создать логические тома - 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
Активация группы томов - vgchange
После перезагрузки системы или выполнения команды vgchange -an, ваши группы томов и логические тома находятся в неактивном состоянии. Для их активации необходимо выполнить команду
vgchange -a y vg
Удалить логический том - lvremove
lvremove vg/first
Удалить можно только неиспользующийся том. Если том содержит файловую систему, то сначала её нужно отмонтировать.
Добавить новый винчестер в группу томов - vgextend
pvcreate /dev/sdc
vgextend vg /dev/sdc
Убрать из группы томов винчестер - pvremove
pvmove /dev/sda
vgreduce vg /dev/sda
pvremove /dev/sda
Команда pvmove переносит все используемые физические блоки с указанного физического тома на другие физические тома, имеющие достаточное количество свободных блоков.
Изменить размер логического тома - 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
Зеркалирование данных
Для повышения надёжности можно использовать зеркалирование данных. При этом каждому логическому блоку соответствует не один физический блок, а два или более на разных физических томах.
Создать логический том с одним зеркалом можно с помощью команды
lvcreate -n data -m 1 -l 10 vg
При этом должно быть достаточное количество физических блоков на трёх физических томах: 10 для самого логического тома, 10 для зеркала и 1 для журнала.
С помощью команды lvconvert можно добавлять или удалять зеркала и журнал, связанные с уже имеющимся логическим томом.
Восстановление после сбоя
Если один из физических томов недоступен, то инициализировать группу томов с помощью команды vgchange невозможно. В этом случае можно поступить так:
vgreduce --removemissing vg
vgchange -a y vg
Первая команда удалит из группы томов вышедший из строя физический том и каждый логический том, хотя бы один блок которого целиком располагался на удалённом физическом томе.
При наличии достаточного количества свободных физических блоков и томов конфигурацию зеркалированного логического тома можно сразу же вернуть в прежнее состояние с помощью команды lvconvert.
Установка Linux на LVM
Большинство современных дистрибутивов Linux дают возможность на этапе установки настроить LVM. Но обычно существует ряд серьёзных ограничений:
• физические тома можно создавать только на разделах винчестеров, а не на целом винчестере;
• можно создавать только простые (linear) логические тома;
• нельзя размещать каталог /boot внутри LVM.
Теперь, после общей теории, приступим к непосредственным полевым испытаниям.
В двух словах. Мы создадим виртуальные накопители и будем над ними издеваться. В примере я создаю 4 диска по 1г, но можно создать большего или меньшего размера как вам хочется.
Все команды выполняются от рута. Если вам не хочется каждый раз добавлять sudo (как мне), то тупо создайте пароль к root.
Для этого в терминале выполняем sudo passwd, вводим свой пароль и два раза новый для root, а потом переходим в root командой su -
Обратите внимание на "-" в конце, его присутствие желательно...
Итак, погнали:
#Создаем сами файлы, имитирующие устройства
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
#Создаем физические тома (Physical Volume, PV)
#Внимание! обратите на названия loop устройств (они могут отличаться от приведенных здесь)
pvcreate /dev/loop0
pvcreate /dev/loop1
pvcreate /dev/loop2
pvcreate /dev/loop3
#Теперь можно посмотреть, что там у нас получилось
pvs
#У меня вывелось что-то типа
# PV VG Fmt Attr PSize PFree
# /dev/loop0 lvm2 -- 1,00G 1,00G
# /dev/loop1 lvm2 -- 1,00G 1,00G
# /dev/loop2 lvm2 -- 1,00G 1,00G
# /dev/loop3 lvm2 -- 1,00G 1,00G
#Создадим группу томов
vgcreate -s 32M vg /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3
#Опция -s задаёт размер физического блока. По умолчанию он равен 4 MiB, но нет смысла дробить дисковое пространство так мелко.
#vg - это соответственно ее имя
#Создаем логический том
#даже парочку
lvcreate -n first -L 200M vg
lvcreate -n second -L 400M vg
#Эти команды создадут устройства /dev/vg/first и /dev/vg/second размером 200M и 400M соответственно.
#Список всех логических томов можно увидеть с помощью команды lvs.
lvs
# LV VG Attr LSize Origin Snap% Move Log Copy% Convert
# first vg -wi-a- 224,00M
# second vg -wi-a- 416,00M
#Теперь эти устройства можно использовать как диски.
#Форматировать и тд....
mkfs.ext3 /dev/vg/first
mkfs.ext3 /dev/vg/second
mkdir /mnt/first
mkdir /mnt/second
mount /dev/vg/first /mnt/first -t ext3
mount /dev/vg/second /mnt/second -t ext3
df -h
#Файловая система Разм Исп Дост Исп% смонтирована на
#.....
#/dev/mapper/vg-first 217M 6,1M 200M 3% /mnt/first
#/dev/mapper/vg-second 403M 11M 372M 3% /mnt/second
#на этом этапе можно залить на них какую-нить инфу
#чтоб потом проверить ее сохранность...
#Изменяем размер наших дисков
#Отмонтируем
umount /dev/vg/first
umount /dev/vg/second
#Посмотрим на инфу дисков
fsck -n /dev/vg/first
fsck -n /dev/vg/second
#Превращаем их в ext2, удалив журнал
tune2fs -O ^has_journal /dev/vg/first
tune2fs -O ^has_journal /dev/vg/second
#Делаем принудительную проверку
e2fsck -f /dev/vg/first
e2fsck -f /dev/vg/second
#Попробуем уменьшить каждый диск
resize2fs /dev/vg/first 150M
resize2fs /dev/vg/second 150M
#А теперь и каждый логический том
#Соответственно, при увеличении надо делать наоборот
#(увеличить логический том, а потом файловую систему)
lvresize -L 150M vg/first
lvresize -L 150M vg/second
#Не забываем создать журнальчик
#А то наша система так и останется ext2
tune2fs -j /dev/vg/first
tune2fs -j /dev/vg/second
#Монтируем и проверяем
mount /dev/vg/first /mnt/first -t ext3
mount /dev/vg/second /mnt/second -t ext3
df -h
#Файловая система Разм Исп Дост Исп% смонтирована на
#...
#/dev/mapper/vg-first 146M 37M 102M 27% /mnt/first
#/dev/mapper/vg-second 146M 93M 46M 68% /mnt/second
#Выводим диски из под LVM
#Посмотрели, подумали, у нас используется только 300 метров
#А задействованы 4 loop диска по гигу. Можно-же все перенести в один!
#Отмонтируем
umount /dev/vg/first
umount /dev/vg/second
#Посмотрим, что у нас есть
pvs
# PV VG Fmt Attr PSize PFree
# /dev/loop0 vg lvm2 a- 992,00M 832,00M
# /dev/loop1 vg lvm2 a- 992,00M 832,00M
# /dev/loop2 vg lvm2 a- 992,00M 992,00M
# /dev/loop3 vg lvm2 a- 992,00M 992,00M
#Уберем все, акромя /dev/loop0
#Команда pvmove переносит все используемые физические блоки с указанного
#физического тома на другие физические тома, имеющие достаточное
#количество свободных блоков.
#vgreduce - вычеркивает наш диск из группы томов
pvmove /dev/loop1
vgreduce vg /dev/loop1
pvmove /dev/loop2
vgreduce vg /dev/loop2
pvmove /dev/loop3
vgreduce vg /dev/loop3
#Посмотрим, что у нас есть
pvs
# PV VG Fmt Attr PSize PFree
# /dev/loop0 vg lvm2 a- 992,00M 672,00M
# /dev/loop1 lvm2 -- 1,00G 1,00G
# /dev/loop2 lvm2 -- 1,00G 1,00G
# /dev/loop3 lvm2 -- 1,00G 1,00G
#Oтключаем лишние /dev/loop1
losetup -d /dev/loop1
losetup -d /dev/loop2
losetup -d /dev/loop3
#Удаляем сами файлы (диски)
cd /mnt/sdc1/lvm
rm d02
rm d03
rm d04
#Теперь создадим маленький файл (диск) в 500 метров
#И перетащим наши данные туда
dd if=/dev/zero of=./d02 count=1 bs=500M
losetup -f --show ./d02
pvcreate /dev/loop1
pvs
#Добавляем диск в группу
vgextend vg /dev/loop1
#Переносим данные с loop0 на loop1 и выводим
pvmove /dev/loop0
vgreduce vg /dev/loop0
#примонтируем диски и проверим, на месте-ли наша инфа
mount /dev/vg/first /mnt/first -t ext3
mount /dev/vg/second /mnt/second -t ext3
Вот вроде как так...
Поигрались, а потом потрем это все дело и себе пометим: я умею работать с LVM.
Пару ссылок:
Index LVMКомандыДокументацияПример на loop устройствахсоздание зеркалированного lvm на базе нескольких loop-дисков