Показаны сообщения с ярлыком LVM. Показать все сообщения
Показаны сообщения с ярлыком LVM. Показать все сообщения

28 декабря 2022 г.

31 июля 2017 г.

LVM в операционной системе Linux

В своём блоге несколько лет назад я делал памятку по системе Logical Volume Management (LVM) в операционной системе HP-UX. Четыре части статьи можно найти по тегу LVM.

К счастью, LVM в Linux очень похож на LVM в HP-UX (рис. 1).

Рис. 1. Концепция LVM в Linux.

Все понятия идентичны. На физических дисках или разделах дисков создаются физические тома (Physical Volumes). Эти тома объединяются в группы томов (Volume Groups). Один физический том может принадлежать только одной группе томов. Внутри группы томов пространство разбивается на логические тома (Logical Volumes). Соответствие между логическими и физическими томами происходит через единицу выделения пространства - Physical Extent, который равен по размеру Logical Extent. Карта распределения и соответствия LE и PE произвольная. Размер PE определяется в момент создания Volume Group и фиксирован во всё время существования группы (по-умолчанию, 4 Мб). Внутри логического тома можно создать файловую систему и смонтировать её в дереве общей файловой системы Linux.

Краткая последовательность создания:
  1. Для создания разделов можно использовать команды gdisk (GPT формат) или fdisk (MBR формат). При создании раздела указать тип LVM (код 8E или 8E00).
  2. На разделах создать физические тома (Physical Volumes) командой вида:
     # pvcreate /dev/sdaX /dev/sdbY 
  3. Создать группу томов (Volume Group) командой вида:
     # vgcreate -s размер_PE VGname /dev/sdaX /dev/sdbY 
  4. Создать необходимое количество логических томов (Logical Volumes) командами вида:
     # lvcreate -l/-L размер -n LVname VGname 
  5. Активировать группу томов командой вида:
     # vgchange -a y VGname 
    или
     # lvm vgchange -a y VGname 
  6. Создать файловые системы и смонтировать их, например командами:
     # mkfs -t xfs /dev/VGname/LVname
     # mount /dev/VGname/LVname /mount/XXX 

Если необходимо расширить файловую систему, то последовательность следующая:
  1. Расширить группу томов, создав и добавив физический том, если это необходимо:
     # pvcreate /dev/sdbZ
     # vgextend VGname /dev/sdbZ 
  2. Расширить логический том и файловую систему командами вида:
     # lvextend -L размер /dev/VGname/LVname
     # resize2fs /dev/VGname/LVname 
Можно сместить Physical Extents одного физического тома на другой (sdaX -> sdcZ). Например, для вывода его из состава группы томов. Использовать команду вида:
 # pvmove /dev/sdaX /dev/sdcZ 
Второй аргумент можно не указывать, тогда команда "разбросает" PE на то свободное место, которое есть в группе томов.

В Linux есть дополнительные команды просмотра информации по LVM:
 # pvs 
 # vgs 
 # lvs 

Они отображают информацию по всем физическим томам, группам томов и логическим томам в системе, соответственно (рис. 2).

Рис. 2. Пример вывода информации по LVM разделам в системе.

Есть возможно указать конкретные поля, которые необходимо вывести, например:
 # lvs -o lv_name,lv_size,device 
Информация по всем столбцам по команде вида:
 # lvs -o help 

Есть у LVM в Linux расширенные возможности:
  1. Создание snapshots, которые очень полезны при резервировании файловой системы с гарантией от изменений во время процесса. Смотрите справку на опцию -s команды lvcreate.
  2. Поддержка программного RAID 0/1/5/6/10.
  3. Создание кэш разделов на основе, например, SSD, для медленных и больших разделов.
  4. Поддержка кластерных конфигураций.

Есть команды vgexport/vgimport, которые позволяют переносить группы томов с одного сервера на другой или при настройке кластерной конфигурации.

В отличии от HP-UX, в Linux LVM реализуется через Device Mapper, который генерирует реальные имена устройств вида /dev/dm-X. А файлы вида /dev/VGname/LVname по сути являются символьными линками на эти файлы. Но рекомендуется работать именно с линками, так как Device Mapper не гарантирует соответствие файлов устройств /dev/dm-X самим устройствам после перезагрузки.

Не воспрещается использовать графические утилиты для конфигурации LVM. Хотя по мне, это не так изящно. В SLES это yast2 (модуль disk или Partitioner) (рис. 3), в RHEL - gnome-disk-utility.

Рис. 3. Раздел Partitioner утилиты Yast.

Дополнительно можно почитать хорошую Wiki-статью по LVM.

P.S. Поздравляю всех причастных с прошедшим днём системного администратора или просто сисадмина! :)


Автор: Шиболов Вячеслав Анатольевич


2 августа 2012 г.

Logical Volume Manager (LVM) своими руками. Часть IV


Продолжу описывать LVM с практической точки зрения.
Предыдущие части доступны тут:
- Logical Volume Manager (LVM) своими руками. Часть I
- Logical Volume Manager (LVM) своими руками. Часть II
- Logical Volume Manager (LVM) своими руками. Часть III

Еще одна типичная ситуация - это когда необходимо организовать доступ к файловым системам одной Volume Group с разных серверов. То есть физически диски находятся в дисковом массиве, который расположен, например, в SAN-сети (Storage Area Network) и несколько серверов имеют доступ к этим дискам. Такая конфигурация обязательна для организации работы отказоустойчивого кластера на базе MC/ServiceGuard.

Последовательность следующая:
  1. Создать необходимую Volume Group c Logical Volumes и файловыми системами с точками монтирования на одном сервере. Назовем его исходным (host1). 
  2. Отмонтировать файловые системы и деактивировать Volume Group на исходном сервере:
    • # umount /data 
    • # vgchange -a n /dev/vg01  
  3. Создать специальный mapping файл Volume Group на исходном сервере и скопировать его на новый сервер. Назовем его целевым (host2).
    • # vgexport -p -s -m /vg01.map /dev/vg01 - Обратить внимание на опцию -p (режим, когда при экспорте Volume Group vg01 не удаляется на исходном сервере),
    • # rcp /vg01.map host2:/vg01.map 
  4. На целевом сервере подготовить диски, презентованные с дискового массива, которые были включены в Volume Group vg01 на исходном сервере, создать директорию и контрольный файл для Volume Group vg01:
    • # ioscan -fnC disk - если не созданы файлы устройств, то создать командой: # insf -C disk , больше ничего делать с дисками не надо.
    • # mkdir /dev/vg01
    • # mknod /dev/vg01/group c 64 0x010000 - для поиска свободного младшего номера использовать команду: # ls -al /dev/*/group  
  5. Выполнить импорт на целевом сервере, используя mapping файл, полученный в 3 шаге:
    • # vgimport -s -m /vg01.map /dev/vg01 - команда сама найдет нужные диски и добавит их в новую Volume Group; для проверки корректности отработки команды можно использовать команду: # strings /etc/lvmtab 
  6. Теперь можно активировать Volume Group на целовем сервере, сохранить конфигурацию для восстановления, создать точку монтирования, монтировать файловую систему и, если необходимо, то прописать автоматическое монтирование в /etc/fstab:
    • # vgchange -a y /dev/vg01 
    • # vgcfgbackup /dev/vg01 
    • # mkdir /data 
    • # mount /dev/vg01/lvol1 /data 
    • # vi /etc/fstab 
Данным методом можно перенести Volume Groups с одного сервера на другой. В данном случае после переноса их надо удалить на исходном сервере командой:
  • # vgexport /dev/vg01 

Автор: Шиболов Вячеслав Анатольевич


2 июля 2012 г.

Logical Volume Manager (LVM) своими руками. Часть III


Это пост является продолжением цикла про LVM (первая часть, вторая часть).

Команды для сбора информации о файловых системах, структуре LVM и т.п.:
  • # bdf - список монтированных файловых систем.
  • # ll /dev/*/group - клевая команда для просмотра контрольных файлов всех Volume Groups сервера. Бывает полезна при поиске свободного minor-номера для новой Volume Group.
  • # cat /etc/fstab - список всех файловых систем, которые монтируются при старте ОС,
  • # vgdisplay -v - информация о всех Volume Groups и 
  • # vgdisplay -v vg01 - о конкретной.
  • # lvdisplay -v /dev/vg01/lvol1 - информация о Logical Volume lvol1, можно попробовать общий случай:
  • # lvdisplay -v /dev/vg01/lv* - информация о всех Logical Volume из Volume Group vg01 (если при создании были паинькой и соблюдали соглашение об именовании: lv* для Logical Volume и vg* для Volume Group).
  • # pvdisplay -v /dev/dsk/c0t1d0 - информация о Physical Volume.
Расширение Volume Group (добавление диска), Logical Volume:
  1. # pvcreate -f /dev/rdsk/c0t2d0 - подготовить диск для подключения к LVM,
  2. # vgextend vg01 /dev/dsk/c0t2d0 - добавить в существующую Volume Group vg01 новый диск.
  3. # lvextend -L 48000 /dev/vg01/lvol1 - расширить Logical Volume lvol1 до размера 48000 МБ.
  4. Расширить файловую систему на lvol1 (до этой операции, хоть диск (Logical Volume) и стал больше, но файловая система не сможет его использовать):
    - # umount /data - отмонтировать файловую систему,
    - # extendfs -F vxfs /dev/vg01/rlvol1 - расширить файловую систему на все свободное место,
    - # mount /data - монтировать расширенную файловую систему,
    - # bdf - проверить новый размер.
Уменьшение файловой системы и Logical Volume делается очень редко, так как перед этим необходимо удалить данные, сделав резервную копию, а после уменьшить файловую систему и Logical Volume командами newfs и lvreduce.

Ломать, не строить. Команды удаления Logical Volume:
  1. # umount /data - отмонтировать файловую систему,
  2. # lvremove -f /dev/vg01/lvol1 - удалить Logical Volume с опцией "force" (не смотря на наличие файловой системы и данных),
  3. # vi /etc/fstab - отредактировать список монтируемых файловых систем при старте ОС,
  4. # vgdisplay -v vg01 - проверить отсутствие Logical Volume.
Удаление физического диска из Volume Group:
  1. # pvmove /dev/dsk/c0t1d0 /dev/dsk/c0t2d0 - переместить данные с диска c0t1d0 на другой диск из Volume Group (если не указывать второй диск, то команда сама разместит на оставшиеся диски в Volume Group, конечно, при наличии места на них),
  2. # pvdisplay -v /dev/dsk/c0t1d0 - проверка того, что на диске нет данных (ни одного физического экстента - PE),
  3. # vgreduce vg01 /dev/dsk/c0t1d0 - удалить диск из Volume Group vg01,
  4. # vgdisplay -v vg01 - проверить изменения.

Удаление Volume Group:
  1. # lvremove -f /dev/vg01/lvol1 - удалить все Logical Volumes,
  2. # vgreduce vg01 /dev/dsk/c0t1d0 - удалить все диски, кроме одного,
  3. # vgremove vg01 - удалить Volume Group vg01,
  4. # rm -ir /dev/vg01 - удалить директорию vg01.
Можно удалить проще: одной командой
- # vgexport /dev/vg01 - удалит всё, ни о чем не спрашивая. :)

Активация/деактивация Volume Group:
  • # vgchange -a n vg01 - деактивирует Volume Group vg01, удаляя ее из LVM-таблицы ядра системы,
  • # vgchange -a y vg01 - активирует Volume Group vg01, делая возможным монтирование файловых систем из нее (автоматическая активация проводится при старте ОС),
  • # vgchange -a r vg01 - активация Volume Group vg01 в режиме "только для чтения".
Последовательности команд верны для файловых систем HFS, JFS. Есть дополнительная опция, которую можно приобрести у HP - Online JFS. Там есть "вкусные вещи", типа уменьшения/увеличения файловой системы без отмонтирования и т.п. Основная команда - fsadm.

Очень скучные посты получаются. :) Остался в плане еще один на эту тему.

Автор: Шиболов Вячеслав Анатольевич


19 июня 2012 г.

Logical Volume Manager (LVM) своими руками. Часть II


В первой части статьи про LVM я описал структуру и основные файлы конфигурации. Во второй части остановимся на командах создания LVM конфигурции.

Создание Volume Group vg01:
  1. Найти свободные диски. Полезные команды:
    - # ioscan -funC disk - выдает список дисков в системе,
    - # insf -C disk - создает файлы устройств для дисков (если их не было),
    - # bdf - список монтированных файловых систем (помогает определить занятые диски),
    - # swapinfo -d - отображает диски и файловые системы используемые, как swap области,
    - # strings /etc/lvmtab - список существующих Volume Group и дисков в них,
    - # vxdisk list - список дисков, занятых в VxVM (еще одна система организации/управления дисками).
  2. Проверить доступность и целостность выбранных дисков. Например, /dev/dsk/c0t1d0:
    1. # diskinfo /dev/rdsk/c0t1d0 - информация о диске,
    2. # dd if=/dev/rdsk/c0t1d0 of=/dev/null bs=1024K - чтение содержимого диска, поиск "bad-блоков".
  3. Подготовить диски, создав на них физические тома (Physical Volumes):
    # pvcreate -f /dev/rdsk/c0t1d0 , для медленных дисков можно задать timeout большего размера, добавив опцию: "-t 180".
  4. Создать директорию и контрольный файл (group special file):
    1. # mkdir /dev/vg01 
    2. # chmod 755 /dev/vg01 
    3. # mknod /dev/vg01/group c 64 0x010000 , контрольный файл всегда символьного типа - c, старший номер (major) всегда - 64, а младший (minor) кодируется 0xhh0000, где hh - уникальный шестнадцатеричный номер Volume Group.
    4. # chown -R root:sys /dev/vg01 
    5. # chmod 640 /dev/vg01/group 
  5. Создать Volume Group:
    # vgcreate /dev/vg01 /dev/dsk/c0t1d0 , если дисков несколько, то перечислить через пробел.
    Набор параметров, который можно задать при создании:
    -l 1-255 (по-умолчанию, 255) - максимальное количество Logical Volume,
    -p 1-255 (по-умолчанию, 255) - максимальное количество Physical Volume,
    -s 1-256 (по-умолчанию, 4 MB) - размер физического экстента (кусочки, которыми распределяется место),
    -e 1-65535 (по-умолчанию, 1016, что соответствует 4 GB) - максимальное количество физических экстентов на диск (физический том). Имеет очень важное значение и устанавливается в зависимости от размера физического тома по формуле: <размер физического тома>/<размер экстента>.
    В дальнейшем не изменяется, что делает невозможным добавление дисков размером больше, чем первоначальный, в Volume Group.
  6. Посмотреть параметры Volume Group можно командой:
    # vgdisplay vg01 
Теперь можно создать Logical Volume lvol1:
  1. Зарезервировать имя Logical Volume:
    # lvcreate -n lvol1 vg01 
  2. Расширить Logical Volume до необходимого размера, выбрав на каком диске в Volume Group:
    # lvextend -L 200 /dev/vg01/lvol1 /dev/dsk/c0t1d0 , ключ -L задает размер в МБ, а ключ -l задает размер в экстентах. Будьте внимательны.
  3. Можно задать дополнительные параметры:
    - # lvchange -a y|n /dev/vg01/lvol1 - разрешение|запрет на использование Logical Volume.
    - # lvchange -p r|w /dev/vg01/lvol1 - право на "только чтение"|"чтение-запись" при использовании Logical Volume.
    - # lvchange -r y|n|N /dev/vg01/lvol1 - опции для работы с "bad-блоками": перемещает "bad-блоки"|не перемещает и выдает ошибку I/O|отключает механизм для использования механизма дискового массива, например.
  4. Посмотреть параметры Logical Volume можно командой:
    # lvdisplay /dev/vg01/lvol1 
Можно создать Logical Volume одной командой lvcreate, сразу указав размер, но вышеуказанная последовательность команд позволяет указать на каком диске из Volume Group будет располагаться Logical Volume. Это добавляет гибкости при создании.

Использование Logical Volume lvol1:
  • В качестве файловой системы:
    1. # newfs -F vxfs /dev/vg01/rlvol1 
    2. # mkdir /data 
    3. # mount /dev/vg01/lvol1 /data 
    4. # vi /etc/fstab - добавить файловую систему для монтирования после перезагрузки.
  • В качестве swap области:
    1. # swapon /dev/vg01/lvol1 
    2. # vi /etc/fstab - добавить для того, чтобы использовать после перезагрузки.
Перед использованием команд читайте документацию man:
# man <команда> 


Автор: Шиболов Вячеслав Анатольевич


31 декабря 2010 г.

Logical Volume Manager (LVM) своими руками. Часть I

Logical Volume Manager (LVM) - система позволяющая управлять распределением дискового пространства с помощью логических томов. Я делаю памятку прежде всего для HP-UX. В других операционных системах могут быть свои особенности и нюансы, но основа, безусловно, одна.

Структура LVM: один или несколько дисков объединены в Volume Group, внутри которой можно создать один или несколько Logical Volume, между которыми распределить дисковое пространство входящих в Volume Group дисков. На Logical Volume создать файловые системы или swap-области и указать точки монтирования.


Диск, входящий в LVM, имеет определенную структуру и содержит служебную информацию.


Полезные директории и файлы:
  • /dev/dsk/cXtXdX и /dev/rdsk/cXtXdX - файлы устройств (block и raw) жестких дисков в системе,
  • /dev/vgXXX/group - файл устройств для Volume Group vgXXX,
  • /dev/vgXXX/lvXXX и /dev/vgXXX/rlvXXX - файлы устройств (block и raw) Logical Volumes из Volume Group vgXXX,
  • /etc/lvmtab - бинарный файл, который содержит список Volume Groups системы и список входящих в них жестких дисков (физических томов). Часть информации из файла можно просмотреть командой strings,
  • /etc/lvmconf - директория с бэкапом конфигурационных файлов Volume Group. Обновляется командами изменения Volume Group или Logical Volume или отдельно командой - vgcfgbackup,
  • /etc/fstab - список файловых систем и точек монтирования, используется для автоматического монтирования файловых систем при старте ОС,
  • /etc/mnttab - список того, что и куда смонтировано в данный момент. Информация используется командами mount/umount и df/bdf.

Продолжение следует... :)

Автор: Шиболов Вячеслав Анатольевич