Все, что я читаю, заставляет меня думать, что моментальный снимок lvm - это прямая копия логического тома, который был моментальным снимком (ed), но как это может быть, если для создания моментального снимка 90-гигабайтного логического тома требуется 10 секунд? Если у меня есть образ диска KVM qcow2 на / var, а / var - 90 ГБ в / dev / volgroup1 / lv_var. Я делаю lvcreate -L 90G -n var_snapped -s / dev / volgroup1 / lv_var, означает ли это, что я могу удалить образ qcow2 на var, а затем просто смонтировать логический том var_snapped и скопировать его, и я буду хорошо? Я не понимаю, как копия 1: 1 может получиться так быстро.
Чтобы ответить на этот вопрос, нам нужно установить, как работает LVM. В этом суть;
Группа томов состоит из нескольких физических томов или pvs
. Они снова разделены на экстенты. Каждый экстент занимает фиксированный объем пространства на физическом томе, который указывается при создании группы томов (или используется значение по умолчанию).
Когда вы создаете логический том, вы указываете, какого размера он должен быть. Это выделяет количество экстентов в группе томов, необходимое для доступа к указанному объему дискового пространства.
Теперь вы можете начать использовать этот том для чего-нибудь. Когда вы создаете снимок тома, вы можете указать, что размер снимка меньше размера тома, который вы «копируете». Это работает, потому что том моментального снимка ссылается на все экстенты первого тома и использует только недавно выделенные экстенты для хранения различий между ними. Вы можете определить, какая часть снимка используется lvs
-команда.
Таким образом, создание моментального снимка занимает очень мало времени, потому что LVM создает ссылки только на экстенты первого тома - и вообще не копирует никаких данных.
Как побочный эффект этого, если разница больше, чем выделенное количество экстентов - снимок недействителен - и вы увидите много сообщений об ошибках в dmesg (которые безвредны для первого тома).
Надеюсь, это поможет.
Цель снимка - действовать как копия, но без копирования всего. Только измененные данные после создание снимка копируется. Первоначально считывание снимка выполняется путем считывания источника. Записи в моментальный снимок сохраняются в пространстве для моментального снимка, и последующие чтения этих данных берутся оттуда, а не из источника. Записи в источник приводят к тому, что перезаписываемые данные копируются в моментальный снимок, и при последующих чтениях этих данных с устройства моментального снимка будет использоваться копия в хранилище моментальных снимков.
Итак, да, если вы создадите снимок, а затем удалите файл из источника, он все равно будет в снимке (или наоборот).
В LVM2 по умолчанию снимки доступны для чтения и записи. Моментальные снимки для чтения и записи работают так же, как и снимки, доступные только для чтения, с дополнительной функцией, заключающейся в том, что при записи данных в снимок этот блок помечается в таблице исключений как используемый и никогда не копируется с исходного тома. Это открывает множество новых возможностей, которые были невозможны с моментальными снимками LVM1 только для чтения. Один из примеров - сделать снимок тома, смонтировать снимок и попробовать экспериментальную программу, которая изменяет файлы на этом томе. Если вам не нравится то, что он сделал, вы можете размонтировать моментальный снимок, удалить его и смонтировать на его месте исходную файловую систему. Это также полезно для создания томов для использования с Xen. Вы можете создать образ диска, затем сделать его снимок и изменить снимок для конкретного экземпляра domU. Затем вы можете создать еще один снимок исходного тома и изменить его для другого экземпляра domU. Поскольку единственное хранилище, используемое снимком, - это блоки, которые были изменены в источнике или снимке, большая часть тома используется domU.
Руководство LVM - замечательная вещь: