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

Создание томов, управление томами, мгновенные резервные копии и другие возможности LVM2

Управление томами не является новинкой в мире Unix-подобных систем (UNIX®, AIX и так далее). Управление логическими томами (Logical Volume Management — LVM) существует в Linux®, начиная с версий ядра 2.4v1 и 2.6.9v2. В этой статье раскрываются наиболее полезные особенности LVM2 — относительно нового набора пользовательских средств, предоставляющего возможности управления логическими томами — и предлагаются несколько способов упрощения системных задач администрирования.(Основываясь на отзывах читателей, автор обновил листинги 10, 14, 15 и 16. - Ред.)

Клаус Генрих Киви, инженер-программист, IBM

Окончив в 2004 году университет г. Кампинас (Бразилия) с дипломом инженера-программиста, Клаус Генрих Киви (Klaus Heinrich Kiwi) занимался разработкой систем и внедрением сетевого управления в средах UNIX. Он работает в IBM с 2006 года и в настоящее время занимает должность инженера по ПО в группе безопасности центра Linux Technology Center.



29.02.2008

Управление логическими томами (LVM) — это способ абстрагировать физическое управление томами в системе в высокоуровневую и, как правило, в более простую парадигму. В рамках LVM все физические диски и разделы вне зависимости от их размера и разбиения могут абстрагироваться и рассматриваться как единое хранилище данных. Например, как в схеме отображения томов физического уровня на логический, показанной на рисунке 1, пользователь мог бы создать файловую систему размером, скажем, 150 ГБ, в то время как наибольший диск имеет объем всего 80 ГБ?

Рисунок 1. Отображение томов физического уровня на логический
Отображение томов физического уровня на логический

Собирая разделы и целые диски в виртуальный диск, LVM может суммировать небольшие объемы дисковой памяти в больший объединенный диск. Этот виртуальный диск в терминах LVM называется логической группой (volume group).

Возможность иметь файловую систему, которая превышает размер наибольшего диска, не является единственной “волшебной” особенностью этой высокоуровневой парадигмы управления ресурсами хранения данных. LVM также позволяет:

  • Добавлять диски/разделы в дисковую группу и расширять существующие файловые системы «на лету»
  • Заменить два жестких диска размером 80 ГБ одним диском на 160 ГБ без необходимости выключения компьютера для переноса системы или ручного перемещения данных между дисками
  • Уменьшить размеры файловых систем и удалить диски из дисковой группы, когда их емкость больше не требуется
  • Создавать внутренне согласованные резервные копии на основе мгновенных копий файловой системы (подробнее об этом будет сказано дальше)

LVM2— это новый набор пользовательских инструментов, который предоставляет возможности управления логическими томами в Linux. Он полностью обратно совместим с исходным инструментарием LVM. В этой статье вы познакомитесь с наиболее полезными свойствами LVM2, а также другими возможностями, применимыми для упрощения задач по системному администрированию. (Если вы ищете более простой справочник по LVM, попробуйте LVM HowTo, ссылка на который имеется ниже в разделе Ресурсы).

Посмотрим на организацию LVM.

Организация LVM

LVM состоит из трех элементов:

  • Тома (Volume): физические и логические тома и группы томов
  • Диапазоны (Extent): физические и логические диапазоны
  • Модуль отображения устройств (Device-mapper): модуль ядра Linux

Тома

В Linux LVM используются физические тома (physical volume – PV), группы томов (volume groups – VG) и логические тома (logical volume – LV). Физические тома являются физическими дисками или разделами физических дисков (как в /dev/hda или /dev/hdb1). Группы томов объединяют физические тома. Группа томов может быть логически разделена на логические тома.

На рисунке 2 показана конфигурация с тремя дисками.

Рисунок 2. Отображение физической структуры томов в логическую
Отображение физической структуры томов в логическую

Все 4 раздела физического диска 0 (/dev/hda[1-4]), а также все разделы физического диска 1 (/dev/hdb) и физического диска 2 (/dev/hdd) добавлены как физические тома в группу томов VG0.

В группе томов производится “волшебное” отображение из n в m (т.е. n физических томов представляются как m логических). Так, после назначения физических томов группе вы можете создать логический том любого размера (вплоть до суммарного объема группы томов). В примере на рисунке 2 была создана группа томов LV0 и оставлено свободное место для других логических томов (или для последующего роста LV0).

Логические тома являются LVM-эквивалентом физических дисковых разделов—для всех практических целей они являются физическими дисковыми разделами.

Итак, после создания логического тома вы можете использовать его с любой файловой системой, которую вы предпочитаете, и смонтировать его в некоторую точку монтирования для дальнейшего использования. На рисунке 3 показан форматированный логический том LV0, который примонтирован к /var.

Рисунок 3. Соответствие физических томов файловой системе
Соответствие физических томов файловой системе

Диапазоны

Чтобы можно было отобразить n физических томов в m логических, физические тома и группы томов должны состоять из базовых блоков одинакового размера; они называются физическими диапазонами (physical extents — PE) и логическими диапазонами (logical extents — LE). Даже если n физических томов отображается в m логических, PE и LE всегда находятся в соотношении 1 к 1.

В LVM2 нет ограничения на максимальное количество диапазонов в физических и логических томах. По умолчанию размер диапазона составляет 4 МБ, и для большинства конфигураций его нет необходимости изменять, поскольку производительность ввода/вывода не меняется при меньшем или большем размере диапазона. Однако средства LVM могут хуже работать при большом числе диапазонов, а использование диапазонов больших размеров позволяет сохранить количество диапазонов небольшим. С другой стороны, необходимо помнить, что диапазоны различных размеров нельзя объединить в одной группе томов, а изменение размера диапазона является единственной небезопасной операцией с LVM: такая операция может повредить данные. Наилучшее решение — работать всегда с размером диапазона, выбранным в начале установки.

Различные размеры диапазонов означают различную степень детализации размера логических групп. Например, если вы выбрали размер диапазона, равный 4 ГБ, то вы можете уменьшить или увеличить логический том только на величину, кратную 4 ГБ.

На рисунке 4 показана схема, похожая на использованную в предыдущем примере, с отмеченными PE и LE (свободное место в VG0 также состоит из свободных LE, даже если они не показаны).

Рисунок 4. Соответствие физических и логических диапазонов
Соответствие физических и логических диапазонов

Обратите внимание на политику выделения диапазонов в примере на рисунке 4. LVM2 не всегда распределяет PE непрерывно; более подробную информацию можно получить из страниц man Linux, посвященных lvm (см. ссылку ниже в разделе Ресурсы). Системный администратор может устанавливать различные правила выделения диапазонов, но обычно в этом нет необходимости, так как политика по умолчанию (называемая «нормальной политикой выделения») использует вполне разумные правила, такие как «не устанавливать параллельные слои на один физический том».

Если вы решите создать второй логический том (LV1), окончательное распределение PE может выглядеть так, как показано на Рисунке 5.

Рисунок 5. Соответствие физических и логических диапазонов
Соответствие физических и логических диапазонов

Модуль отображения устройств

Модуль отображения устройств (также известный как dm_mod) является модулем ядра Linux (он может быть встроен в ядро), начиная с версии ядра 2.6.9. Его работа (как следует из названия) состоит в отображении устройств — это требование LVM2.

В большинстве основных дистрибутивов модуль отображения устройств установлен по умолчанию и обычно запускается автоматически во время загрузки или когда установлены или включены пакеты LVM2/EVMS (EVMS – это альтернативный инструмент управления томами, дополнительную информацию о нем можно найти в разделе Ресурсы). Если этот модуль не запущен, выполните modprobe для dm_mod и прочитайте в документации к вашему дистрибутиву, как включить его во время загрузки: modprobe dm_mod.

При создании групп томов и логических томов вы можете дать им осмысленные имена (в отличие от предыдущих примеров, где в учебных целях использовались имена VG0, LV0 и LV1). Работа модуля отображения устройств заключается в корректном отображении этих имен на физические устройства. Если рассматривать предыдущие примеры, модуль отображения устройств создаст следующие узлы устройств в каталоге /dev файловой системы:

  • /dev/mapper/VG0-LV0
    • /dev/VG0/LV0 — это ссылка на вышеуказанное устройство
  • /dev/mapper/VG0-LV1
    • /dev/VG0/LV1 — это ссылка на вышеуказанное устройство

(Обратите внимание на стандартный формат имени: /dev/{vg_name}/{lv_name} -> /dev/mapper/{vg_name}{lv_name}).

В отличие от физических дисков, для группы томов нет возможности прямого доступа (это означает, что нет файла типа /dev/mapper/VG0 и нельзя использовать команду dd if=/dev/VG0 of=dev/VG1). С этим обычно приходится сталкиваться, используя команды lvm(8).

Типичные задачи

К числу типичных задач, которые вам придется выполнять с помощью LVM2,относятся проверка системы (установлен ли LVM2?) , а также создание томов, изменение их размера и управление томами.


Готова ли ваша система к установке LVM2?

Проверьте, установлен ли в вашем дистрибутиве пакет LVM2. Если нет, установите его (всегда отдавайте предпочтение оригинальным пакетам).

Модуль отображения устройств должен быть загружен при запуске системы. Проверьте, загружен ли он на текущий момент, используя команду lsmod | grep dm_mod. Если нет, вам, вероятно, потребуется установить и настроить дополнительные пакеты (в сопроводительной документации должно быть указано, как включить LVM2).

Если вы просто тестируете (или, может быть, восстанавливаете) систему, используйте для начала работы с LVM2 следующие простые команды:

Листинг 1. Простейшие команды запуска LVM2
#загружает модуль отображения устройств
modprobe dm_mod

#находит все физические тома на ваших физических дисках
pvscan

#активирует все группы томов
vgchange -ay

Если вы собираетесь разместить вашу корневую файловую систему внутри логического тома LVM, будьте предельно осторожны с начальным образом загрузки. Конечно, дистрибутивы обычно заботятся об этом—при установке пакета LVM2 они обычно создают заново, либо обновляют образ initrd с соответствующими модулями ядра и скриптами активации. Но вам, возможно, потребуется просмотреть документацию к дистрибутиву, чтобы убедиться, что он поддерживает корневые файловые системы в LVM2.

Заметим, что начальный образ загрузки обычно активирует LVM только тогда, когда обнаруживает, что корневая файловая система находится в группе томов. Обычно это делается просмотром параметра ядра root=. Различные дистрибутивы используют различные способы определения того, находится или нет корневая файловая система в группе томов. За подробной информацией по этому вопросу обратитесь к документации дистрибутива. Если вы не уверены, то проверьте настройки initrd или initramdisk.


Создание новых томов

Используя свой любимый инструмент разметки (fdisk, parted, gparted), создайте новый раздел для использования LVM. Хотя это и поддерживается LVM, применение LVM на всем диске целиком не рекомендуется: другие операционные системы могут посчитать этот диск неинициализированным и стереть его! Лучше создать раздел, занимающий весь диск.

Большинство таких инструментов разметки обычно по умолчанию создают новые разделы с идентификатором раздела 0x83 (Linux). Вы можете использовать установки по умолчанию, но лучше изменить их на 0x8e (Linux LVM).

После создания раздела вы должны увидеть один (или более) разделов Linux LVM в таблице разделов:

root@klausk:/tmp/a# fdisk -l

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        1623    13036716    7  HPFS/NTFS
/dev/hda2            1624        2103     3855600   8e  Linux LVM
/dev/hda3            2104        2740     5116702+  83  Linux
/dev/hda4            3000        9729    54058725    5  Extended
/dev/hda5            9569        9729     1293232+  82  Linux swap / Solaris
/dev/hda6            3000        4274    10241374+  83  Linux
/dev/hda7            4275        5549    10241406   83  Linux
/dev/hda8            5550        6824    10241406   83  Linux
/dev/hda9            6825        8099    10241406   83  Linux
/dev/hda10           8100        9568    11799711   8e  Linux LVM

Partition table entries are not in disk order
root@klausk:/tmp/a#

Теперь инициализируем каждый раздел с помощью pvcreate:

Листинг 2. Инициализация разделов
root@klausk:/tmp/a# pvcreate /dev/hda2 /dev/hda10
  Physical volume "/dev/hda2" successfully created
  Physical volume "/dev/hda10" successfully created
root@klausk:/tmp/a#

Физические тома и группы томов создаются за один шаг: vgcreate:

Листинг 3. Создание физических томов и групп томов
root@klausk:~# vgcreate test-volume /dev/hda2 /dev/hda10
  Volume group "test-volume" successfully created
root@klausk:~#

Команда листинга 3 создает логический том с именем test-volume, используя в качестве исходных физических томов /dev/hda2 и /dev/hda10.

После создания группы томов test-volume ведите команду vgdisplay для просмотра общей информации о вновь созданной группе томов:

Листинг 4. Просмотр общей информации о новой группе томов
root@klausk:/dev# vgdisplay -v test-volume
    Using volume group(s) on command line
    Finding volume group "test-volume"
  --- Volume group ---
  VG Name               test-volume
  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               14.93 GB
  PE Size               4.00 MB
  Total PE              3821
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3821 / 14.93 GB
  VG UUID               lk8oco-ndQA-yIMZ-ZWhu-LtYX-T2D7-7sGKaV
   
  --- Physical volumes ---
  PV Name               /dev/hda2     
  PV UUID               8LTWlw-p1OJ-dF6w-ZfMI-PCuo-8CiU-CT4Oc6
  PV Status             allocatable
  Total PE / Free PE    941 / 941
   
  PV Name               /dev/hda10     
  PV UUID               vC9Lwb-wvgU-UZnF-0YcE-KMBb-rCmU-x1G3hw
  PV Status             allocatable
  Total PE / Free PE    2880 / 2880
   
root@klausk:/dev#

В листинге 4 показано, что этой группе томов назначены два физических тома суммарным размером 14,93 ГБ (т.е. 3821 физических диапазона размером 4 МБ каждый)—не забудьте удостовериться, что все они свободны для использования!

Теперь, когда группа томов готова к использованию, используйте ее как виртуальный диск для создания/удаления/изменения размера разделов (логических томов)—отметим, что группа томов является абстрактным объектом, который виден только средствами LVM. Создадим новый логический том, используя lvcreate:

Листинг 5. Создание новых логических томов (разделов)
root@klausk:/# lvcreate -L 5G -n data test-volume
  Logical volume "data" created
root@klausk:/#

В листинге 5 создается логический том размером 5 ГБ с именем data. После создания тома data вы можете проверить наличие узла этого устройства:

Листинг 6. Проверка узла устройства логического тома
root@klausk:/# ls -l /dev/mapper/test--volume-data 
brw-rw---- 1 root disk 253, 4 2006-11-28 17:48 /dev/mapper/test--volume-data
root@klausk:/# ls -l /dev/test-volume/data 
lrwxrwxrwx 1 root root 29 2006-11-28 17:48 /dev/test-volume/data -> 
/dev/mapper/test--volume-data
root@klausk:/#

Вы также можете просмотреть свойства логического тома с помощью команды lvdisplay:

Листинг 7. Просмотр свойств логического тома
root@klausk:~# lvdisplay /dev/test-volume/data 
  --- Logical volume ---
  LV Name                /dev/test-volume/data
  VG Name                test-volume
  LV UUID                FZK4le-RzHx-VfLz-tLjK-0xXH-mOML-lfucOH
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                5.00 GB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:4
   
root@klausk:~#

Как вы, вероятно, заметили, имя/путь логического тома для всех практических целей задаются в формате /dev/{VG_name}/{LV_name}, например, /dev/test-volume/data. Не используйте файл /dev/mapper/{VG_name}-{LV_name} в других целях, помимо создания ссылки /dev/{VG_name}/{LV_name}. Большинство команд LVM ожидают в качестве цели операции чего-либо в формате /dev/{vg-name}/{lv-name}.

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

Листинг 8. Монтирование логического тома
root@klausk:~# mkfs.reiserfs /dev/test-volume/data 
root@klausk:~# mkdir /data
root@klausk:~# mount -t reiserfs /dev/test-volume/data /data/
root@klausk:~# df -h /data
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/test--volume-data
                      5.0G   33M  5.0G   1% /data
root@klausk:~#

Вам также может потребоваться изменить файл fstab(5) для автоматического монтирования файловой системы во время загрузки:

Листинг 9. Автоматическое монтирование логического тома
#mount Logical Volume 'data' under /data
/dev/test-volume/data   /data   reiserfs        defaults        0 2

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


Расширение томов

Это простая тема. Если у вас достаточно свободного места в группе томов, для расширения тома достаточно ввести команду lvextend, том даже не требуется предварительно размонтировать. Затем нужно расширить файловую систему внутри логического тома (запомните, это две разные вещи). Некоторые файловые системы также можно расширять «на лету» (даже смонтированные!).

Если у вас недостаточно места в группе томов, то потребуется сначала добавить дополнительные физические диски. Для этого:

  • Используйте свободный раздел для создания физического диска. Рекомендуется изменить тип раздела на 0x8e (Linux LVM) для облегчения идентификации LVM разделов/дисков. Инициализируйте физический диск c помощью pvcreate: pvcreate /dev/hda3.
  • Затем командой vgextend добавьте физический диск к существующей группе томов: vgextend test-volume /dev/hda2.

Вы также можете создавать или добавлять несколько физических дисков одновременно следующим образом:

pvcreate /dev/hda2 /dev/hda3 /dev/hda5
vgextend test-volume /dev/hda2 /dev/hda3 /dev/hda5

Когда вы добавили физические разделы и имеете достаточно места для увеличения логического тома, с помощью lvextend расширьте логический том (тома): lvextend -L 8G /dev/test-volume/data. Эта команда расширяет логический том /dev/test-volume/data до 8 ГБ.

У lvextend есть несколько полезных параметров:

  • Вы можете использовать -L +5G для увеличения логического тома на 5 ГБ (относительная величина).
  • Вы можете указать, где вы хотите разместить новое расширение (в терминах физического тома); просто добавьте к команде имя физического тома, который вы хотите использовать.
  • Вы также можете указать абсолютный/относительный размер расширения в терминах физических диапазонов.

Для получения более подробной информации взгляните на lvextend(8).

После расширения логического тома не забудьте также расширить файловую систему (чтобы дополнительное пространство можно было использовать). Это может быть сделано «на лету» (со смонтированной файловой системой), если позволяет файловая система.

В листинге 10 демонстрируется изменение размера reiserfs(v3) с использованием resize_reiserfs (это можно делать на смонтированной файловой системе): resize_reiserfs /dev/test-volume/data.


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

Для управления томами вы должны уметь уменьшать логические тома и удалять физические.

Уменьшение логических томов
Вы можете уменьшить логический том так же, как и расширяли, используя команду lvreduce. С точки зрения LVM эту операцию с томом всегда можно проделать «на лету». Одна оговорка: большинство файловых систем не поддерживают сокращение раздела «на лету». В листинге 10 показан пример:

Листинг 10. Уменьшение логического тома
#unmount LV
umount /path/to/mounted-volume
#shrink filesystem to 4G
resize_reiserfs -s 4G /dev/test-volume/data
#reduce LV
lvreduce -L 4G /dev/test-volume/data

Будьте внимательны с размерами: файловая система не должна быть длиннее логического тома!

Удаление физических томов
Представьте себе следующую ситуацию: вы имеете группу томов с двумя дисками по 80 ГБ и хотите заменить их дисками размером в 160 ГБ. С помощью LVM можно удалить физический том из группы томов так же, как вы его добавляли (т.е. «на лету»!). Однако обратите внимание на то, что вы не можете удалить физический том, использующийся в логическом. Для таких ситуаций есть отличная утилита под названием pvmove, которая освобождает физические тома, чтобы их можно было легко заменить. В среде с поддержкой горячей замены можно вообще поменять все диски без остановки системы!

Единственное требование pvmove— наличие в группе томов последовательных свободных диапазонов, эквивалентных по количеству перемещаемым диапазонам физического тома. Нет простого способа напрямую определить наибольший свободный набор смежных физических диапазонов, но с помощью команды pvdisplay -m можно вывести карту распределения физического тома:

Листинг 11. Отображение карты распределения физического тома
#отображает карту распределения PV
pvdisplay -m
  --- Physical volume ---
  PV Name               /dev/hda6
  VG Name               test-volume
  PV Size               4.91 GB / not usable 1.34 MB
  Allocatable           yes (but full)
  PE Size (KByte)       4096
  Total PE              1200
  Free PE               0
  Allocated PE          1200
  PV UUID               BA99ay-tOcn-Atmd-LTCZ-2KQr-b4Z0-CJ0FjO

  --- Physical Segments ---
  Physical extent 0 to 2367:
    Logical volume      /dev/test-volume/data
    Logical extents     5692 to 8059
  Physical extent 2368 to 2499:
    Logical volume      /dev/test-volume/data
    Logical extents     5560 to 5691

  --- Physical volume ---
  PV Name               /dev/hda7
  VG Name               test-volume
  PV Size               9.77 GB / not usable 1.37 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              2500
  Free PE               1220
  Allocated PE          1280
  PV UUID               Es9jwb-IjiL-jtd5-TgBx-XSxK-Xshj-Wxnjni

  --- Physical Segments ---
  Physical extent 0 to 1279:
    Logical volume      /dev/test-volume/LV0
    Logical extents     0 to 1279
  Physical extent 1280 to 2499:
    FREE

Из листинга 11 можно заметить, что есть 2499-1280 = 1219 свободных смежных диапазонов, это означает, что мы можем переместить до 1219 диапазонов из другого физического тома на /dev/hda7.

Если вы хотите освободить физический том для его замещения, было бы неплохо отключить его распределение, чтобы быть уверенным в том, что он останется свободным, пока вы не удалите его из группы томов. Выполните следующую команду до перемещения данных:

Листинг 12. Отключение распределения физического тома перед его освобождением
#Отключение распределения /dev/hda6
pvchange -xn /dev/hda6

После освобождения убедитесь, что длина физического тома /dev/hda6 составляет 1200 диапазонов и среди них нет свободных. Чтобы переместить данные с этого тома, выполните следующую команду:

Листинг 13. Перемещение данных с освобождаемого физического тома
#Перемещаем выделенные ранее диапазоны с /dev/hda6
pvmove -i 10 /dev/hda6

Параметр -i 10 в листинге 13 указывает pvmove докладывать статус операции каждые 10 секунд. В зависимости от размера перемещаемых данных эта операция может занять несколько минут (или часов). Если указать параметр -b, все действия также можно выполнить в фоновом режиме. В этом случае статус перемещения будет сообщаться в системный журнал.

Если вам просто не хватает свободных смежных диапазонов для использования команды pvmove, помните, что вы всегда можете добавить один или несколько дисков/разделов в физический том, тем самым добавив смежные диапазоны, доступные для использования в pvmove.

Другие полезные операции LVM
За более подробной информацией об этих и других полезных операциях LVM обратитесь к страницам man:

  • pvresize расширяет физические тома, если лежащие в их основе разделы были расширены; сокращает физический том, если карта распределения позволяет сделать это.
  • pvremove уничтожает физический том (стирает его метаданные). Используйте только после удаления физического тома из группы томов с помощью vgreduce.
  • vgreduce удаляет нераспределенные физические тома из группы томов, сокращая группу томов.
  • vgmerge объединяет две различные группы томов в одну. Конечная группа томов может в это время использоваться!
  • vgsplit разбивает группу томов.
  • vgchange изменяет параметры и права доступа к группе томов.
  • lvchange изменяет параметры и права доступа к логическому тому.
  • lvconvert производит конвертацию между линейным томом и зеркалом или мгновенным снимком, и наоборот.

Резервное копирование с помощью мгновенных копий

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

В Linux LVM реализована функция Snapshots, которая делает именно то, о чем говорит ее название: создает мгновенный снимок логического тома в конкретный момент времени. С помощью вы получаете две копии одного и того же логического тома — одну можно использовать для целей резервного копирования, в то время как другая продолжает функционировать.

Два больших преимущества Snapshots:

  1. Снимок создается мгновенно; нет необходимости останавливать систему.
  2. Хотя создаются две копии, место, занимаемое ими, не увеличивается в два раза. Снимок будет использовать лишь пространство, необходимое для покрытия разницы между двумя логическими томами.

Это достигается за счет ведения списка исключений, который обновляется каждый раз, когда что-то изменяется между логическими томами (формально этот метод известен как Copy-on-Write (копирование во время записи) - CoW (игра слов - «корова»)).

Создание нового снимка

Для создания нового снимка логического тома используется та же команда lvcreate с указанием параметра -s и исходного логического тома. Параметр -L size в этом случае определяет размер таблицы исключений, которая показывает, какая разница будет допустимой для снимка до потери согласованности.

Листинг 14. Делаем первый снимок
		    #создаем логический том-снимок с именем 'snap' из исходного логического тома 'test'
lvcreate -s -L 2G -n snap /dev/test-volume/test

С помощью lvdisplay можно получить специальную информацию, например, о размере CoW и использовании CoW:

Листинг 15. Насколько велико и как используется ваше «стадо коров»?
lvdisplay /dev/vg00/snap

  --- Logical volume ---
  LV Name                /dev/test-volume/snap
  VG Name                vg00
  LV UUID                QHVJYh-PR3s-A4SG-s4Aa-MyWN-Ra7a-HL47KL
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/test-volume/test
  LV Status              available
  # open                 0
  LV Size                4.00 GB
  Current LE             1024
  COW-table size         2.00 GB
  COW-table LE           512
  Allocated to snapshot  54.16%
  Snapshot chunk size    8.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:5

Заметим, что в листинге 15 имеется CoW размером 2 ГБ, 54.16% которого уже используется.

Для всех действий снимок представляет собой копию оригинального логического тома. Он может быть смонтирован, если в нем имеется файловая система:

#монтирование тома со снимком
mount -o ro /dev/test-volume/snap /mnt/snap

Флаг ro в этом фрагменте кода служит для того, чтобы смонтировать снимок в режиме только для чтения. Режим «только для чтения» можно также задать на уровне LVM, добавив -p r в команду lvcreate.

После того как файловая система смонтирована, вы можете продолжить работу с резервной копией с использованием tar, rsyncи любых других утилит. Если логический том не содержит файловой системы или если необходима копия неформатированных данных, можно также применить dd непосредственно на узле устройства.

После завершения процесса, когда снимок больше не нужен, просто размонтируйте и удалите его, используя lvremove:

#удаление снимка
lvremove /dev/test-volume/snap

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

SQL> flush tables read lock
{создаем снимок}
SQL> release read lock
{начинаем процесс копирования из логического тома снимка}

Пример скрипта резервного копирования

Скрипт в листинге 16 взят непосредственно из моего ноутбука, на котором я ежедневно делаю резервное копирование на удаленный сервер с помощью rsync. Этот пример не предназначен для корпоративного использования - в этом случае гораздо лучше подойдет инкрементное резервное копирование с историей. Хотя принципы останутся прежними.

Листинг 16. Простой пример скрипта для создания резервной копии
#!/bin/sh

# требуется модуль dm-snapshot
modprobe dm-snapshot
if [ -e /dev/test-volume/home-snap ]
then
  # удаляем предыдущие версии, если они есть
  umount -f /mnt/home-snap && true
  lvremove -f /dev/test-volume/home-snap
fi
# создаем снимок CoW размером 1 ГБ
# этого должно быть достаточно для внесения изменений в процессе копирования
lvcreate -vs -p r -n home-snap -L 1G /dev/test-volume/home
mkdir -p /mnt/home-snap
# монтируем только что созданный снимок в режиме "для чтения"
mount -o ro /dev/test-volume/home-snap /mnt/home-snap
# магическая команда rsync
rsync -avhzPCi --delete -e "ssh -i /home/klausk/.ssh/id_rsa" \
      --filter '- .Trash/' --filter '- *~' \
      --filter '- .local/share/Trash/' \
      --filter '- *.mp3' --filter '- *Cache*' --filter '- *cache*' \
      /mnt/home-snap/klausk backuphost.domain.net:backupdir/
# размонтирование и удаление логиеского тома снимка
umount /mnt/home-snap
lvremove -f /dev/test-volume/home-snap

В особых случаях, когда время цикла трудно оценить или процесс копирования занимает много времени, скрипт может запросить снимок использования CoW с помощью lvdisplay и расширить логический том в случае необходимости. В крайних случаях можно выбрать для снимка тот же размер, что и у исходного логического тома - изменения не могут быть больше, чем весь том!


Другие приемы системного администрирования с использованием LVM2

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

Snapshots и виртуализация

В LVM2 снимки не ограничиваются режимом «только для чтения». Это означает, что как только снимок сделан, вы можете смонтировать его и затем читать и записывать на него данные как на обычное блочное устройство.

Поскольку популярные системы виртуализации, такие как Xen, VMWare, Qemu и KVM, могут использовать блочные устройства в качестве образа гостевой ОС, можно создавать полные копии этих образов и использовать их, например, как небольшие виртуальные машины с дополнительным преимуществом быстрого развертывания (создание снимка обычно занимает не более нескольких секунд) и экономии пространства (гостевые ОС могут совместно использовать большую часть данных с исходной ОС).

Общая схема для этого включает следующие шаги:

  1. 1.Создание логического тома для исходного образа.
  2. 1.Установка гостевой виртуальной машины с использованием логического тома в качестве образа диска.
  3. 1.Приостановка или заморозка виртуальной машины. Образ памяти может быть обычным файлом, где находятся все другие снимки.
  4. Создание снимка исходного логического тома с правами чтения и записи.
  5. Создание новой виртуальной машины с использованием тома снимка как образа диска. Изменение настроек сети/консоли при необходимости.
  6. Подключение созданной машины и изменение параметров сети/имени сервера.

По окончании этих процедур вы можете предоставить пользователю доступ к информации на новой созданной виртуальной машине. Если потребуется еще одна виртуальная машина, повторите шаги 4-6 (это означает, что не нужно переустанавливать машину!). Кроме того, вы можете автоматизировать эти действия с помощью скрипта.

По окончании использования вы можете, если хотите, остановить виртуальную машину и удалить снимок.

Повышение отказоустойчивости

Последние достижения LVM2 предоставляют дополнительные возможности по отказоустойчивости, позволяя логическому тому иметь два или более зеркал, размещенных на различных физических томах (или иных устройствах). Команда dmeventd может вывести из работы физический том без ущерба сервису в случае обнаружения ошибки ввода-вывода в устройстве. Более подробная информация содержится в страницах man по lvcreate(8), lvconvert(8) и lvchange(8).

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

Прозрачное шифрование устройства

Можно прозрачно шифровать блочное устройство или логический том с помощью dm_crypt. За дополнительной информацией обратитесь к документации dm_crypt и к man-странице cryptsetup(8).

Ресурсы

Научиться

Получить продукты и технологии

  • Используйте в своем следующем проекте для Linux ознакомительное ПО IBM, которое можно скачать напрямую с developerWorks.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, AIX и UNIX
ArticleID=292369
ArticleTitle=Управление логическими томами
publish-date=02292008