вторник, 2 июня 2015 г.

lvm: сделать клон logical volume

Как сделать клон lv раздела, в том числе перенести его в другой vg

Получим все разделы, чтобы проверить размеры, метки, пути..
# lvdisplay



Для начала, нужен снапшот раздела, чтобы состояние было хотя бы относительно консистентным (на этот момент лучше остановить всё, что активно пишет на диск, в том числе всякие БД, после создания снапшота можно будет снова запустить)
# lvcreate --snapshot --name <имя снапшота, можно старое -snapshot> --size <размер> /dev/volume-group/logical-volume

Размер надо выбрать так, чтобы все изменения успели скопироваться на новый раздел и ещё остался запас места.

Теперь надо создать новый раздел, куда будет перемещаться информация, лучше всего того же размера - увеличить/уменьшить можно будет после окончания копирования, а если копировать через dd - совпадение размеров будет важно!
Пред-подготовка -- проверяем размер PE и сколько экстентов занимал старый раздел.
После lvdisplay мы получили 2 нужные нам строки (смотрим интересующий нас раздел):
  LV Size                1,00 GiB
  Current LE             256
То есть раздел был размером 1 Гб и занимал 256 экстентов. Если мы клонируем раздел в пределах одного VG, переходим к следующему шагу, иначе надо проверить ещё один параметр - размер экстента
#vgdisplay
  PE Size               4,00 MiB
Проверяем на соответствие в обоих VG, если не совпадают - пересчитываем количество экстентов, при необходимости округляем в бОльшую сторону.

# lvcreate --name <logical-volume-name> --size <размер> the-new-volume-group-name
Хинт:
размер можно задать через -l <extents> - тот, что проверяли выше. Буква - англ. L маленькая (строчная). Через L (большая) можно задавать размеры в (кило|мега|гига)байтах и процентах, читаем ман. Он же --size


Теперь несколько методов: dump-restore, cpio, rsync, dd. Почему не просто cp -a? теряются хардлинки и sparse файлы перестают быть таковыми.
dd
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume

Поскольку размеры совпадают (или есть запас), можно сделать простой клон, метод самый простой, но если много свободного места - вероятно и самый медленный. Особенно актуально, если надо клонировать по сети. Хотя наиболее оптимален для разделов типа /boot

Остальные методы требуют монтирования, для чего нужна файловая система. Создадим, например ext4
# mkfs.ext4 /dev/new-volume-group/new-logical-volume

Теперь надо примонтировать снапшот и новый раздел, сделаем 2 каталога
# mkdir -p /mnt/{old,new}
# mount -o ro /dev/volume-group/snapshot-name /mnt/old
# mount /dev/new-volume-group/new-logical-volume /mnt/new

rsync
Не проверялось, но для не-системных разделов должно работать хорошо, главное не забыть обработку sparse файлов.
# rsync -avzS /mnt/old/ /mnt/new/

cpio
# cd /mnt/old
find . -mount -print | cpio -pdm /mnt/new

dump
dump -0uan -f – /boot | restore -r -f -

Не забываем в конце отмонтировать всё и удалить снапшот
# umount /mnt/new
# unount /mnt/old
#lvremove /dev/volume-group/snapshot-name

Теперь можно и изменить размеры нового раздела, lvextend + resize2fs или просто lvextend с опцией --resizefs

Вариант 2 через mirror+split

lvconvert -m 1 –alloc /dev/VG/LV
lvconvert –splitmirrors 1 –name CLONE /dev/VG/LV
Не проверялось, не сработает по сети и вероятнее всего между 2 разными VG, но внутри 1 группы должно быть лучшим вариантом.

Вариант 3 - для разных vg

vgmerge, pvmove, vgsplit


Линки

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

Отправить комментарий