понедельник, 27 апреля 2009 г.

Обзор команд работы с логическими томами в Linux


Ниже приводится краткая сводка команд по манипулированию логическими томами (Logical Volume) в Linux. Сразу неприятное предупреждение - при использовании логического тома в качестве корневого раздела, раздел /boot должен находиться на отдельном - не логическом (/dev/[hs]d?, /dev/md?) томе. Размер этого тома должен быть небольшим - даже для нескольких ядер вполне достаточно 32 Мб (инсталлятор CentOS зачем-то просит 75 Мб).
В дальнейших примерах предполагается ваяние группы логических томов - имя группы myvg - с именами root и swap. Имена используемых физических томов /dev/sda5, /dev/hdb1 и /dev/md0
Для использования в логических томах физические разделы должны быть проинициализированы:
# pvcreate /dev/sda5 /dev/hdb1 /dev/md0
посмотреть существующие физические тома можно командой:
# pvdisplay
Создадим группу (пока из двух физических томов):
# vgcreate myvg /dev/sda5 /dev/md0
Для использования группу нужно активизировать:
# vgchange -a y myvg
посмотреть существующие группы томов можно командой:
# vgdisplay
Добавить новый физический том можно командой:
# vgextend myvg /dev/hdb1
Удалить неиспользуемый том из группы можно командой:
# vgreduce myvg /dev/hdb1
Если в группе все тома используются, убрать данные с логического тома позволяет команда:
# pvmove /dev/hdb1
Предполаетася, что в группе томов достаточно свободного места для этой операции. Если места недостаточно, то команда должна иметь еще один аргумент - имя тома, куда мы переносим данные.
Если группа томов больше не должна жить, ее можно удалить:
# vgchange -a n myvg
# vgremove myvg
Теперь переходим к самому интересному - созданию разделов.
Создаем зеркалируемый том root размером 1 Gb и незеркалируемый том swap размером 512 Mb:
# lvcreate -n root -m 1 -L 1G myvg
# lvcreate -n swap -L 512M myvg
Создание файловой системы и монтирование осуществляется такими же командами, как для обычного раздела. Имена файлов логического тома: /dev/mapper/myvg-root или /dev/myvg/root
Просмотреть существующие логические тома можно командой:
# lvdisplay
Далее том можно изменять в размере. Вверх:
# lvextend -L +1G myvg/root
(аргумент -L может быть абсолютной величиной - или приращением)
Ежели надо увеличить на весь размер группы томов, тогда так:
# lvextend -l 100%VG myvg/root
И вниз:
# lvreduce -L 1.5G myvg/root
(во втором случае критичных данных на томе рекомендуется не иметь).
Чтобы получить реальную пользу от изменения размера томов нужно уметь менять размер файловых систем. Это делается командами:

Для ext3:

Вверх:
# umount /dev/myvg/root
# lvextend -L +1G myvg/root
# resize2fs /dev/myvg/root
# mount /dev/myvg/root

Вниз:
# umount /dev/myvg/root
# resize2fs /dev/myvg/root 2097152
# lvreduce -L -1G myvg/root
# mount /dev/myvg/root
последняя цифра второй команды - новый размер файловой системы в блоках

Для reiserfs:

Вверх:
# umount /dev/myvg/root
# lvextend -L +1G myvg/root
# resize_reiserfs /dev/myvg/root
# mount /dev/myvg/root

Вниз:
# umount /dev/myvg/root
# resize_reiserfs -s -1G /dev/myvg/root
# lvreduce -L -1G myvg/root
# mount /dev/myvg/root

Для xfs (только вверх):
# xfs_groufs /mnt
(да, прямо на примонтированной fs)

Для jfs:
# mount -o remount,resize /mnt
(тоже на примонтированной)

Если в группе томов есть свободное место, можно создать снимок тома:
# lvcreate -s -L 0.5G -n root_snap myvg/root
(размер может быть не равен размеру тома - очевидно, он должен быть равен объему данных на нем).
Со снимком можно делать все тоже самое, что с томом - только создавать на нем файловую систему едва ли надо...
Если хочется преобразовать обычный том в зеркалируемый, то это можно сделать, имея свободное место, равное размеру тома, на двух носителях (для размещения самого тома - и его копии). Сперва создаем физические тома, добавляем их в группу, а потом:
# lvconvert -m 1 vg1/root
В качестве дополнительных аргументов можно указать имена физических томов, на которых будет размещаться зеркало (если тут есть варианты).
Операция эта достаточно медленная. Зато потом можно высвободить исходный физический том (для тех, кто уже забыл - pvmove + vgreduce).
Ну, и совсем надоевший логический том можно и удалить:
# lvremove vg1/root_snap

Если что-то важное упустил, то можно почитать LVM HOWTO

P.S. т.к. тут упоминались устройства /dev/md?, для памяти приложу чуть-чуть о Software RAID в Linux.
Напр. создать RAID 5 уровня из 3 дисков и одного диска горячей замены:
# mdadm -C /dev/md0 -n 3 -x 1 -l 5 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Отключить один горячий диск - и подключить новый:
# mdadm /dev/md0 -r /dev/sde1 -a /dev/sdf1
Посмотреть статус RAID:
# mdadm -Q --detail /dev/md0
Здесь нужно добавить еще одно неприятное предупреждение - загрузка с Software RAID - вещь весьма проблематичная (напр. инсталятор CentOS соглашался только на загрузку с RAID1 - что в принципе объяснимо, т.к. в этом случае диски содержат копии друг друга - т.е. можно загрузиться с любого из них). Это лишний повод для выделения /boot в отдельный (не RAID) раздел.
Для того, чтобы Software RAID нормально завелся после загрузки, нужно создать файл /etc/mdadm.conf - в нашем примере - такого вот содержания:
DEVICE /dev/sd[bcde]1
ARRAY /dev/md0 level=5 spares=1 num-devices=3 devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

Комментариев нет: