02 октября, 2013

Клонирование дисков в LVM

Решив поиграться со свежей версией линукс контейнеров LXC я обнаружил великолепную утилиту lxc-clone, которой так не хватало раньше. Поставил базовую систему, наплодил клонов, начал разворачивать стенд и со всего маху наступил на грабли, заботливо разложенные разработчиками.

Для создания клона контейнера они предлагают два варианта, один не работающий из-за ошибки в коде и второй с задействованием механизма LVM Snapshots. Достоинства второго метода очевидны:

  • он работает
  • он работает мгновенно
  • он работает хорошо для большинства случаев
но есть и недостатки:
  • размер снимка не может превышать размер оригинального раздела
  • снимок нельзя сконвертировать в обычный раздел(нет, действительно нельзя - я в исходниках посмотрел, а не в интернете почитал)
Можно было, конечно попытаться починить код для клонирования файловых систем, но там столько возможных мест для добавления ошибок, которые не выстрелят у меня на стенде, но жестоко ударят по другим...  Надежное решение должно лежать на уровне LVM и после курения манов я его нашел:

lvconvert -m 1  /dev/system/ubuntu1 --alloc anywhere
lvconvert --splitmirrors 1 --name ubuntu2 /dev/system/ubuntu1

Первой командой мы превращаем раздел в зеркалируемый, --alloc anywhere обязателен, если наш Volume Group создан на одном физическом разделе и без него мы будем получать невнятную ошибку "Insufficient suitable allocatable extents for logical volume : xxx more required". Второй командой мы разделяем зеркалируемый раздел на два независимых, давая название новому разделу.

Ну и сам патч: http://pastebin.com/34ATXfU5

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