Введение
LVM, или Logical Volume Management (управление логическими томами), — это технология управления устройствами хранения, предоставляющая пользователям возможность объединять и распределять физическое пространство устройств хранения для более простого и гибкого администрирования. Используя модуль отображения устройств ядра Linux (Device mapper) LVM может группировать устройства хранения и выделять из объединенного пространства необходимые логические структуры.
Основные преимущества LVM — высокий уровень абстрактности, гибкости и контроля. Логическим томам можно присваивать информативные имена, например «databases» или «root-backup». Можно динамически менять их размер при изменении требований к объему дискового пространства, переносить между физическими устройствами в рамках пула текущей системы и легко экспортировать. Кроме того, в LVM есть функции создания образов (snapshotting), «расслоения» (striping) и зеркального отображения (mirroring).
Данное руководство посвящено обзору принципов работы LVM и базовым командам, необходимым в работе.
Увеличение размера логического тома
Одно из главных преимуществ LVM — гибкость в работе с логическими томами. Можно легко менять их размер и количество, не останавливая систему.
Для увеличения размера логического тома используется команда lvresize. Флаг -L применяется для задания нового размера. При помощи символа «+» можно также указать относительный размер, тогда LVM увеличит размер логического тома на указанную величину. Для автоматического изменения размера файловой системы используйте флаг —resizefs.
Для корректного задания имени нужно сначала указать группу томов, а затем имя логического тома через слэш:
sudo lvresize -L +5G --resizefs LVMVolGroup/test
Размер логического тома test в группе LVMVolGroup и его файловой системы будут увеличены на 5 Гб
Можно не указывать опцию —resizefs и воспользоваться стандартными средствами файловой системы, например, для Ext4 следующие команды позволят добиться того же результата:
sudo lvresize -L +5G LVMVolGroup/test sudo resize2fs /dev/LVMVolGroup/test
Преимущества и недостатки LVM
Преимущества LVM:
Возможность изменения емкости
При использовании логических томов размер файловых систем не ограничивается одним диском, так как вы объединяете диски и разделы в один логический том.
Возможность изменения размера пула хранилища
С помощью простых команд можно увеличивать или уменьшать размер логических томов без необходимости переформатирования или переразбиения дисков.
Живое перемещение данных
Для создания новых, более быстрых и более устойчивых подсистем хранения вы теперь можете перемещать данные, в то время как система активна. Данные можно перемещать, даже если к дискам выполняется обращение. Например, можно на ходу освободить заменяемый диск перед его удалением.
Удобство присвоения имен устройствам
Логические тома могут объединяться в группы для облегчения их управления. Группам, в свою очередь, могут присваиваться любые имена.
Чередование дисков
Возможно создать логический том с чередованием данных на двух или нескольких дисках. Это может значительно улучшить производительность.
Зеркалирование томов
Используя логические тома, можно легко настроить зеркало для ваших данных.
Снимки томов
Используя логические тома, можно создавать снимки устройств с целью создания резервных копий или тестирования результата внесенных изменений, не рискуя действительными данными.
Недостатки
- Только Linux. Отсутствие официальной поддержки в большинстве других ОС(FreeBSD, Windows Virtual PC).
- Дополнительные шаги в более сложной настройке системы.
Работа со снапшотами
Снимки диска позволят нам откатить состояние на определенный момент. Это может послужить быстрым вариантом резервного копирования. Однако нужно понимать, что данные хранятся на одном и том же физическом носителе, а значит, данный способ не является полноценным резервным копированием.
Создание снапшотов для тома, где уже используется файловая система XFS, имеет некоторые нюансы, поэтому разберем разные примеры.
Создание для не XFS:
lvcreate -L500 -s -n sn01 /dev/vg01/lv01
* данная команда помечает, что 500 Мб дискового пространства устройства /dev/vg01/lv01 (тома lv01 группы vg01) будет использоваться для snapshot (опция -s).
Создание для XFS:
xfs_freeze -f /mnt; lvcreate -L500 -s -n sn01 /dev/vg01/lv01; xfs_freeze -u /mnt
* команда xfs_freeze замораживает операции в файловой системе XFS.
Посмотрим список логических томов:
lvs
Получим что-то на подобие:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 owi-aos— 1,00g
sn01 vg01 swi-a-s— 500,00m lv01 2,07
* поле Origin показывает, к какому оригинальному логическому тому относится LV, например, в данной ситуации наш раздел для снапшотов относится к lv01.
Также можно посмотреть изменения в томах командой:
lsblk
Мы должны увидеть что-то подобное:
sdc 8:32 0 1G 0 disk
vg01-lv01-real 253:3 0 1G 0 lvm
vg01-lv01 253:2 0 1G 0 lvm /mnt
vg01-sn01 253:5 0 1G 0 lvm
vg01-sn01-cow 253:4 0 500M 0 lvm
vg01-sn01 253:5 0 1G 0 lvm
С этого момента все изменения пишутся в vg01-sn01-cow, а vg01-lv01-real фиксируется только для чтения и мы может откатиться к данному состоянию диска в любой момент.
Содержимое снапшота можно смонтировать и посмотреть, как обычный раздел:
mkdir /tmp/snp
Монтирование не XFS:
mount /dev/vg01/sn01 /tmp/snp
Монтирование XFS:
mount -o nouuid,ro /dev/vg01/sn01 /tmp/snp
Для выполнения отката до снапшота, выполняем команду:
lvconvert —merge /dev/vg01/sn01
Добавление физических томов в группу томов
Создав физические тома, можно создать группу томов. Нужно выбрать имя группы томов, которое должно быть уникальным. Как правило, большую часть времени в системе используется только одна группа томов для гибкости распределения пространства. Для простоты назовем нашу группу LVMVolGroup. Чтобы создать группу томов и добавить в нее оба физических тома, нужно выполнить следующую команду:
sudo vgcreate LVMVolGroup /dev/sda /dev/sdb Volume group "LVMVolGroup" successfully created
Теперь если снова выполнить команду pvs, можно увидеть, что физические тома связаны с новой группой томов:
sudo pvs PV VG Fmt Attr PSize PFree /dev/sda LVMVolGroup lvm2 a-- 200.00g 200.00g /dev/sdb LVMVolGroup lvm2 a-- 100.00g 100.00g
Следующая команда позволяет получить краткую информацию о самой группе томов:
sudo vgs VG #PV #LV #SN Attr VSize VFree LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
Группа томов содержит два физических тома и ни одного логического тома, а ее объем равен суммарному объему входящих в нее устройств.
Troubleshooting
LVM commands do not work
Load proper module:
# modprobe dm_mod
The module should be automatically loaded. In case it does not, you can try:
The factual accuracy of this article or section is disputed.
/etc/mkinitcpio.conf
MODULES=(dm_mod ...)
You will need to regenerate the initramfs to commit any changes you made.
Try preceding commands with lvm like this:
# lvm pvdisplay
Logical Volumes do not show up
If you are trying to mount existing logical volumes, but they do not show up in , you can use the following commands to activate them:
# vgscan # vgchange -ay
LVM on removable media
Symptoms:
# vgscan
Reading all physical volumes. This may take a while... /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error /dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error /dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error Found volume group "backupdrive1" using metadata type lvm2 Found volume group "networkdrive" using metadata type lvm2
Cause: removing an external LVM drive without deactivating the volume group(s) first. Before you disconnect, make sure to:
# vgchange -an volume group name
Fix: assuming you already tried to activate the volume group with , and are receiving the Input/output errors:
# vgchange -an volume group name
Unplug the external drive and wait a few minutes:
# vgscan # vgchange -ay volume group name
Suspend/resume with LVM and removable media
The factual accuracy of this article or section is disputed.
Reason: Provided solution will not work in more complex setups like LUKS on LVM. (Discuss in )
In order for LVM to work properly with removable media – like an external USB drive – the volume group of the external drive needs to be deactivated before suspend. If this is not done, you may get ‘buffer I/O errors on the dm device (after resume). For this reason, it is not recommended to mix external and internal drives in the same volume group.
To automatically deactivate the volume groups with external USB drives, tag each volume group with the tag in this way:
# vgchange --addtag sleep_umount vg_external
Once the tag is set, use the following unit file for systemd to properly deactivate the volumes before suspend. On resume, they will be automatically activated by LVM.
/etc/systemd/system/ext_usb_vg_deactivate.service
Description=Deactivate external USB volume groups on suspend Before=sleep.target Type=oneshot ExecStart=-/etc/systemd/system/deactivate_sleep_vgs.sh WantedBy=sleep.target
and this script:
/etc/systemd/system/deactivate_sleep_vgs.sh
#!/bin/sh TAG=@sleep_umount vgs=$(vgs --noheadings -o vg_name $TAG) echo "Deactivating volume groups with $TAG tag: $vgs" # Unmount logical volumes belonging to all the volume groups with tag $TAG for vg in $vgs; do for lv_dev_path in $(lvs --noheadings -o lv_path -S lv_active=active,vg_name=$vg); do echo "Unmounting logical volume $lv_dev_path" umount $lv_dev_path done done # Deactivate volume groups tagged with sleep_umount for vg in $vgs; do echo "Deactivating volume group $vg" vgchange -an $vg done
Finally, enable the unit.
Resizing a contiguous logical volume fails
If trying to extend a logical volume errors with:
" Insufficient suitable contiguous allocatable extents for logical volume "
/etc/lvm/lvm.conf
thin_check_options =
See .
Известные ошибки[править]
Persistent log is not supported on segment-by-segment mirroringправить
LVM до версии 2.02.111 выдаёт ошибку при попытке удалить из группы томов сломавшийся диск, если на нём располагались части зеркального тома RAID1.
Выглядит это так:
# pvs PV VG Fmt Attr PSize PFree /dev/sdb3 DATA lvm2 a-- 7,27t 5,31t /dev/sdc3 DATA lvm2 a-- 7,27t 6,27t /dev/sdd3 DATA lvm2 a-- 7,27t 2,19t # vgreduce --removemissing DATA Couldn't find device with uuid 1kelDC-lGQY-VzCf-mZtc-Xmkd-uPbB-WFxSP3. WARNING: Partial LV SRV needs to be repaired or removed. WARNING: Partial LV SRV_rmeta_1 needs to be repaired or removed. WARNING: Partial LV SRV_rimage_1 needs to be repaired or removed. There are still partial LVs in VG DATA. To remove them unconditionally use: vgreduce --removemissing --force. # vgreduce --removemissing --force DATA Couldn't find device with uuid 1kelDC-lGQY-VzCf-mZtc-Xmkd-uPbB-WFxSP3. Persistent log is not supported on segment-by-segment mirroring
В результате с группой томов невозможно ничего сделать.
Исправление этого следующее:
- Сохраняем данные из оставшихся частей зеркальных томов. Все части зеркального тома видны в системе как /dev/ГРУППА/ТОМ_rimage_?, в выводе vgreduce —removemissing видно, какие из них утеряны. Берём оставшуеся часть зеркала и копируем командой dd в новый файл или в раздел того же размера.
- Ставим новый диск на замену неисправного. желательно, чтобы имя устройства было тем же самым.
- В таблице разделов создаём раздел с тем же номером того же размера, что и прежний. Обязательное условие — размер, расположение может отличаться, хотя лучше соблюсти и это условие.
- Форматируем раздел в физический том LVM командой pvcreate —u UUID_старого_тома —restorefile /etc/lvm/archive/дата_до_сбоя_диска.vg РАЗДЕЛ. Если получим ошибку, используем команду pvcreate —u UUID_старого_тома —norestorefile РАЗДЕЛ.
- Добавляем физический том в группу томов командой vgextend —restoremissing ГРУППА РАЗДЕЛ
- Из логических томов удаляем зеркала, расположенные на поддельном физическом томе
- Из группы томов удаляем поддельный физический том.
- Теперь с группой томов можно работать обычным образом.
Удаление LVM групп и томов
Для удаления LVM томов, используется команда lvremove:
lvremove /dev/test/test1
1 | lvremovedevtesttest1 |
Чтобы удалить группу логических томов, используйте:
# vgremove test
1 | # vgremove test |
Volume group «test» successfully removed
1 | Volume group»test»successfully removed |
Убрать метки с LVM дисков:
# pvremove /dev/vdb /dev/vdc
1 | # pvremove /dev/vdb /dev/vdc |
Labels on physical volume «/dev/vdb» successfully wiped.
Labels on physical volume «/dev/vdc» successfully wiped.
1 |
Labels on physical volume»/dev/vdb»successfully wiped. Labels on physical volume»/dev/vdc»successfully wiped. |
LVM: создание файловой системы, монтирование логического тома
Чтобы создать файловую систему на логическом томе, воспользуйтесь утилитой mkfs:
Создадим файловую систему ext4 на LVM томе:
mkfs.ext4 /dev/test/test1
1 | mkfs.ext4devtesttest1 |
Файловая система была создана без ошибок.
Теперь создадим тестовую директорию и примонтируем логический том к данной директории:
# mkdir /var/www/home
# mount /dev/test/test1 /var/www/home/
1 |
# mkdir /var/www/home # mount /dev/test/test1 /var/www/home/ |
Как видите, все прошло без ошибок и теперь директория /var/www/home существует как отдельный раздел.
Чтобы логический том монтировался при загрузке системы, нужно добавить его в fstab и назначить директорию для монтирования.
Откроем файл:
nano /etc/fstab
1 | nanoetcfstab |
И добавим в него следующую информацию:
/dev/test/test1 /var/www/home ext4 defaults 1 2
1 | devtesttest1varwwwhome ext4 defaults12 |
После чего примонтировать том можно будет через mount -a:
# mount -a
# df -h
1 |
# mount -a # df -h |
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.7M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda2 20G 1.3G 19G 7% /
/dev/vda1 488M 100M 353M 23% /boot
tmpfs 100M 0 100M 0% /run/user/0
/dev/mapper/test-test1 4.8G 20M 4.6G 1% /var/www/home
1 |
Filesystem Size Used Avail Use%Mounted on devtmpfs485M485M%dev tmpfs496M496M%devshm tmpfs496M6.7M489M2%run tmpfs496M496M%sysfscgroup devvda220G1.3G19G7% devvda1488M100M353M23%boot tmpfs100M100M%runuser devmappertest-test14.8G20M4.6G1%varwwwhome |
Чтобы проверить общую информацию по дискам, разделам и томам, введите команду lsblk:
Как видим, наш созданный том отображается, и указана директория к которой он примонтирован.
Команда
lvmdiskscan
1 | lvmdiskscan |
позволяет просканировать доступные диски, показывает их размер и принадлежность к LVM.
Загрузка с временного раздела
Подготовим временный раздел для корневого тома:
pvcreate /dev/sdb
vgcreate vg_tmp_root /dev/sdb
lvcreate -n lv_tmp_root -l +100%FREE /dev/vg_tmp_root
* данными командами мы создали группу томов vg_tmp_root и сделали из нее один логический раздел lv_tmp_root.
Создадим файловую систему XFS и смонтируем ее в каталог /mnt:
mkfs.xfs /dev/vg_tmp_root/lv_tmp_root
mount /dev/vg_tmp_root/lv_tmp_root /mnt
Смотрим расположение корневого раздела командой:
lvdisplay
…
— Logical volume —
LV Path /dev/vg/root
LV Name root
VG Name vg
…
Находим среди результатов корневой раздел — нам нужен параметр LV Path.
Сдампим содержимое текущего корневого раздела в наш временный:
xfsdump -J — /dev/vg/root | xfsrestore -J — /mnt
* где /dev/vg/root — то, что мы получили в параметре LV Path командой lvdisplay; /mnt — каталог, в который мы смонтировали наш временный раздел.
Заходим в окружение chroot нашего временного корня:
for i in /proc/ /sys/ /dev/ /run/ /boot/; do mount —bind $i /mnt/$i; done
chroot /mnt/
Запишем новый загрузчик:
grub2-mkconfig -o /boot/grub2/grub.cfg
Обновляем образы загрузки:
cd /boot ; for i in `ls initramfs-*img`; do dracut -v $i `echo $i|sed «s/initramfs-//g; s/.img//g»` —force; done
Открываем конфигурационный файл grub:
vi /boot/grub2/grub.cfg
Меняем все значения, которые задействуют старый том lvm — в моем случае, все совпадения:
…
… lv=vg/root …
…
… менялись на:
…
… lv=vg_tmp_root/lv_tmp_root …
…
* так как у меня корневой раздел был в группе vg и имел название root (команда lvdisplay), то под замену попадает vg/root. В вашем случае это будет другое значение.
Этот момент крайне важен. Неправильное редактирование приведет к невозможности загрузки.
Выходим из окружения chroot и перезагружаем компьютер:
exit
shutdown -r now
… мы должны загрузиться с временного раздела:
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-swap 253:1 0 1G 0 lvm
vg-root 253:2 0 8G 0 lvm
sdb 8:16 0 8G 0 disk
vg_tmp_root-lv_tmp_root 253:0 0 8G 0 lvm /
* как видим, теперь корневой раздел на sdb.
Что такое LVM
Суть его состоит в том, что физические диски ‘Physical Volume’ (возможно различного размера, на разных устройствах) объединяются в ‘Volume Groups’ – группы томов. Группы томов могут уже разделяться на логические тома ‘Logical Volumes’, которые в свою очередь содержат конечные файловые системы. Звучит немного запутанно, но на самом деле всё просто и очень круто. Сейчас объясню на картинке:
Допустим, имеем два жестких диска. Старенький Seagate Barracuda на 80 Гб. И более новый WD на 640 Гб. Мы можем объединить их в единую группу Volume Group 1, суммарный объем которой составит 720 Гб. Затем, эту группу мы “пилим” по своему усмотрению на логические тома. Допустим, два тома по 360 Гб каждый. А затем монтируем первый как /home, второй как /var.
Причем, в некоторых случаях мы можем изменять размер логического диска прямо “на лету”.
Увеличение томов
Увеличение размера тома может выполняться с помощью добавления еще одного диска или при увеличении имеющихся дисков (например, увеличение диска виртуальной машины). Итак, процедура выполняется в 4 этапа:
1. Расширение физического тома
Расширение физического раздела можно сделать за счет добавление нового диска или увеличение дискового пространства имеющегося (например, если диск виртуальный).
а) Если добавляем еще один диск.
Инициализируем новый диск:
pvcreate /dev/sdd
* в данном примере мы инициализировали диск sdd.
Проверяем объем физического тома:
pvdisplay
б) Если увеличиваем дисковое пространство имеющегося диска.
Увеличиваем размер физического диска командой:
pvresize /dev/sda
* где /dev/sda — диск, который был увеличен.
Проверяем объем физического тома:
pvdisplay
2. Добавление нового диска к группе томов
Независимо от способа увеличения физического тома, расширяем группу томов командой:
vgextend vg01 /dev/sdd
* данная команда расширит группу vg01 за счет добавленого или расширенного диска sdd.
Результат можно увидеть командой:
vgdisplay
3. Увеличение логического раздела
Выполняется одной командой.
а) все свободное пространство:
lvextend -l +100%FREE /dev/vg01/lv01
* данной командой мы выделяем все свободное пространство группы томов vg01 разделу lv01.
б) определенный объем:
lvextend -L+30G /dev/vg01/lv01
* данной командой мы добавляем 30 Гб от группы томов vg01 разделу lv01.
в) до нужного объема:
lvextend -L500G /dev/vg01/lv01
* данной командой мы доводим наш раздел до объема в 500 Гб.
Результат можно увидеть командой:
lvdisplay
Обратить внимание нужно на опцию LV Size:
…
LV Status available
# open 1
LV Size <2,99 GiB
Current LE 765
…
4. Увеличение размера файловой системы
Чтобы сама система увидела больший объем дискового пространства, необходимо увеличить размер файловой системы.
Посмотреть используемую файловую систему:
df -T
Для каждой файловой системы существуют свои инструменты.
ext2/ext3/ext4:
resize2fs /dev/vg01/lv01
XFS:
xfs_growfs /dev/vg01/lv01
Reiserfs:
resize_reiserfs /dev/vg01/lv01
Как использовать LVM
Итак, вот что мы имеем:
Устройство /dev/sda не трогаем, системное. Для других нужд. А вот sdb и sdc объемом 2 и 3 Гб соответственно будем объединять в одну логическую группу.
Шаг 1. Создадим разделы на устройствах
Оба раздела настраиваются аналогично
Важно, чтобы тип раздела был Linux LVM (посмотреть типы можно нажав l после t в консоли fdisk)
Шаг 2. Создаем “Физические диски” Physical Volume
Для этого служит команда pvcreate и указание девайса.
Убедимся, что всё получилось. Просмотреть физические тома можно командой:
Более подробная информация будет показана при команде
Шаг 3. Создаем группу томов (Volume Group)
Создать группу томов из физических томов можно посредством команды vgcreate и указании имени группы, а так же входящих в эту группу устройств (это, кстати, даёт возможность заводить несколько различных групп):
Просмотреть созданные группы можно командой:
Как видим, здесь фиксируется имя группы, количество физических томов, логических томов, атрибуты, виртуальный размер и объем свободного виртуального места. Почему виртуального? Я уже упоминал о том, что размер можно менять динамически “на лету”?
Как и с физическими томами, у группы томов тоже есть команда display:
Шаг 4. Создаем логический раздел (Logical Volume)
Пришло время “резать пирог”, то есть разделять группу томов на разделы по своему усмотрению. Оттяпаем 300 Мегабайт на первый логический том, а 4 с небольшим гигабайта – на второй логический том. Используем команду lvcreate с указанием размера, имени логического тома и имени группы, от которой “откусываем” кусок:
Этой командой мы выделим 300 мегабайт из группы litl_admin, и назовём этот логический том “disk_1”.
Аналогично создадим disk_2 из оставшегося места.
P.S. Для удаления ошибочно созданного объекта используем lvremove с указанием имени группы. Далее в диалоговом режиме удаляем неугодные нам разделы.
Пришла пора разметить файловые системы, чтобы мы могли использовать эти логические тома.
имена могут быть любыми, эти каталоги будут выступать точками монтирования.
Осталось внести изменения в файл /etc/fstab, чтобы эти точки монтировались автоматически.
Допишем наши строки:
устройство, точка монтирования, файловая система, опции монтирования, порядок проверки fsck
У меня это две нижние строки.
Удаление физического тома из LVM
Процедура удаления физического тома из LVM зависит от того, используется ли устройство. Если да, то нужно будет перенести его физические диапазоны в другое месторасположение. Это требует достаточного количества других физических томов в группе.
При наличии достаточного объема физических томов для переноса данных перенесите их из удаляемого тома командой pvmove:
sudo pvmove /dev/sda
В зависимости от размера томов и объема переносимых данных этот процесс может потребовать некоторого времени.
После переноса файлов можно удалить физический том из группы командой vgreduce:
sudo vgreduce LVMVolGroup /dev/sda
sudo pvremove /dev/sda
Архитектура и терминология LVM
Перед непосредственным рассмотрением команд администрирования LVM важно разобраться с базовыми принципами организации устройств хранения в LVM и некоторыми используемыми терминами.
Структуры управления пространством LVM
Работа LVM основана на надстройке нескольких уровней логической структуры над физическими устройствами хранения. Вот основные уровни структуры LVM, начиная с самых простых.Физические тома:∙ Обозначение: pv… ∙ Описание: физические блочные устройства или другие дисковые устройства (например, другие устройства, созданные при помощи модуля отображения устройств, типа RAID- массивов)
Используются LVM в качестве базовых элементов для построения более высоких уровней логической структуры. Физические тома — это обычные устройства хранения. Для управления LVM присваивает устройству заголовок.Группы томов:∙ Обозначение: vg…∙ Описание: LVM объединяет физические тома в пулы пространства, называемые группами томов. Группы томов не учитывают характеристики лежащих в их основе устройств и работают как унифицированные логические устройства с суммарным объемом пространства объедиенных физических томов.Логические тома:∙ Обозначение: lv… ∙ Описание: Группу томов можно разделить на любое количество логических томов. Логические тома функционально эквивалентны разделам на физическом диске, но предоставляют большую гибкость. Это основной компонент, с которым взаимодействуют пользователи и приложения.
Таким образом, LVM можно использовать для объединения физических томов в группы для унификации дискового пространства системы. Затем администраторы могут разделить группу томов на произвольные логические тома, которые работают как гибкие разделы.
Описание процесса
План действий такой:
- Создаем временный раздел XFS на новом томе LVM. Переносим корневой раздел на временный том и загружаемся с него.
- Уменьшаем исходный том до нужного размера, возвращаем на него данные. Загружаемся с нового раздела.
- Удаляем временный том.
В нашем примере будут такие разделы:
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-root 253:0 0 8G 0 lvm /
vg-swap 253:1 0 1G 0 lvm
sdb 8:16 0 8G 0 disk
* в данном примере корневой раздел находится на физическом диске sda и его разделе sda2.
Мы попробуем уменьшить раздел с 8 Гб до 6. Диск sdb будем использовать как временный.
Кластерный менеджер логических томов
Кластерный менеджер логических томов (CLVM, Clustered Logical Volume Manager) представляет собой набор кластерных расширений для LVM, позволяющих кластеру управлять совместным хранилищем (например, на SAN) с помощью LVM.
Рис.1. Кластерный менеджер логических томов
Возможность использования CLVM также определяется системными требованиями:
- Если доступ к хранилищу необходим лишь одному узлу, то можно использовать LVM без расширений . При этом создаваемые логические тома будут локальными.
- Если для обеспечения восстановления после отказа вы используете кластерную систему, в которой только один узел может обращаться к хранилищу в заданный момент времени, потребуются агенты (High Availability Logical Volume Management). Конфигурация и управление кластером предоставляет информацию об агентах .
- Если нескольким узлам необходимо обращаться к хранилищу, доступ к которому разделяется между активными узлами, то потребуется использовать CLVM. CLVM позволит пользователю настроить логические тома на разделяемом хранилище за счет блокирования доступа к физическому хранилищу на время настройки логического тома, используя при этом кластерные службы блокирования для управления разделяемым хранилищем.
Для работы CLVM необходимо, чтобы выполнялось программное обеспечение , включая . Демон является основным кластерным расширением LVM, выполняется на каждом компьютере в кластере и передает им обновления метаданных LVM, тем самым обеспечивая постоянство представления логических томов. Более подробную информацию по установке и администрированию можно найти в руководстве Конфигурация и управление кластером .
Зачем нужен LVM[править]
Установка системы прямо на разделы диска зачастую приводит к следующей проблеме. Нужно каким-то образом «правильно» разбить жесткий диск. Слово «правильно» стоит в кавычках, потому что «правильного» разбиения диска для всех возможных ситуаций и применений не существует. В сети есть много советов по данному поводу, но они не учитывают потребностей конкретного пользователя (в случае настольной системы) или конкретного администратора (в случае сервера). Обычно рекомендуют разделы /home, /var, /usr, какие-то еще выносить на отдельные разделы диска. Но если разбивающий ошибется в размерах этих разделов, возникает очень нехорошая ситуация — на одних разделах место подходит к концу, в то время как на остальных места еще много. Приехали! Дисковое пространство нужно переразмечать. Для этого есть много способов:
1. Тотальный backup, затем переустановка системы с переразбиением диска.
2. Переразметка с помощью parted с риском потерять данные.
3. Изначальная установка системы на LVM, который позволяет изменять размеры своих разделов прямо на работающей системе.
Создание разделов
Рассмотрим пример создания томов из дисков sdb и sdc с помощью LVM.
1. Инициализация
Помечаем диски, что они будут использоваться для LVM:
pvcreate /dev/sdb /dev/sdc
* напомним, что в качестве примера нами используются диски sdb и sdc.
Посмотреть, что диск может использоваться LMV можно командой:
pvdisplay
В нашем случае мы должны увидеть что-то на подобие:
«/dev/sdb» is a new physical volume of «1,00 GiB»
— NEW Physical volume —
PV Name /dev/sdb
VG Name
PV Size 1,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID rR8qya-eJes-7AC5-wuxv-CT7a-o30m-bnUrWa
«/dev/sdc» is a new physical volume of «1,00 GiB»
— NEW Physical volume —
PV Name /dev/sdc
VG Name
PV Size 1,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 2jIgFd-gQvH-cYkf-9K7N-M7cB-WWGE-9dzHIY
* где
- PV Name — имя диска.
- VG Name — группа томов, в которую входит данный диск (в нашем случае пусто, так как мы еще не добавили его в группу).
- PV Size — размер диска.
- Allocatable — распределение по группам. Если NO, то диск еще не задействован и его необходимо для использования включить в группу.
- PE Size — размер физического фрагмента (экстента). Пока диск не добавлен в группу, значение будет 0.
- Total PE — количество физических экстентов.
- Free PE — количество свободных физических экстентов.
- Allocated PE — распределенные экстенты.
- PV UUID — идентификатор физического раздела.
2. Создание групп томов
Инициализированные на первом этапе диски должны быть объединены в группы.
Группа может быть создана:
vgcreate vg01 /dev/sdb /dev/sdc
* где vg01 — произвольное имя создаваемой группы; /dev/sdb, /dev/sdc — наши диски.
Просмотреть информацию о созданных группах можно командой:
vgdisplay
На что мы получим, примерно, следующее:
— Volume group —
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 1,99 GiB
PE Size 4,00 MiB
Total PE 510
Alloc PE / Size 0 / 0
Free PE / Size 510 / 1,99 GiB
VG UUID b0FAUz-wlXt-Hzqz-Sxs4-oEgZ-aquZ-jLzfKz
* где:
- VG Name — имя группы.
- Format — версия подсистемы, используемая для создания группы.
- Metadata Areas — область размещения метаданных. Увеличивается на единицу с созданием каждой группы.
- VG Access — уровень доступа к группе томов.
- VG Size — суммарный объем всех дисков, которые входят в группу.
- PE Size — размер физического фрагмента (экстента).
- Total PE — количество физических экстентов.
- Alloc PE / Size — распределенное пространство: колическтво экстентов / объем.
- Free PE / Size — свободное пространство: колическтво экстентов / объем.
- VG UUID — идентификатор группы.
3. Создание логических томов
Последний этап — создание логического раздела их группы томов командой lvcreate. Ее синтаксис:
lvcreate <имя группы томов>
Примеры создания логических томов:
lvcreate -L 1G vg01
* создание тома на 1 Гб из группы vg01.
lvcreate -L50 -n lv01 vg01
* создание тома с именем lv01 на 50 Мб из группы vg01.
lvcreate -l 40%VG vg01
* при создании тома используется 40% от дискового пространства группы vg01.
lvcreate -l 100%FREE -n lv01 vg01
* использовать все свободное пространство группы vg01 при создании логического тома.
* также можно использовать %PVS — процент места от физического тома (PV); %ORIGIN — размер оригинального тома (применяется для снапшотов).
Посмотрим информацию о созданном томе:
lvdisplay
— Logical volume —
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID 4nQ2rp-7AcZ-ePEQ-AdUr-qcR7-i4rq-vDISfD
LV Write Access read/write
LV Creation host, time vln.dmosk.local, 2019-03-18 20:01:14 +0300
LV Status available
# open 0
LV Size 52,00 MiB
Current LE 13
Segments 1
Allocation inherit
Read ahead sectors auto
— currently set to 8192
Block device 253:2
* где:
- LV Path — путь к устройству логического тома.
- LV Name — имя логического тома.
- VG Name — имя группы томов.
- LV UUID — идентификатор.
- LV Write Access — уровень доступа.
- LV Creation host, time — имя компьютера и дата, когда был создан том.
- LV Size — объем дискового пространства, доступный для использования.
- Current LE — количество логических экстентов.