Статья 5 из 10, в которой речь пойдёт об LXC: виды хранилищ, используемые пути, клонирование и снимки.
Хранилища.
LXC поддерживает различные хранилища (storage backends - backingstore). По умолчанию используется none, обозначая место контейнера как /var/lib/lxc/имя-контейнера/rootfs/. Но можно переопределить хранилище в утилитах lxc-create или lxc-clone с помощью ключа -B.
Хранилище на базе каталога (none и dir).
Это хранилище используется по умолчанию и контейнер будет находиться в /var/lib/lxc/имя-контейнера/rootfs/. Опция --dir при использовании -B dir позволит указать свой каталог для создания там контейнера.
btrfs.
С этим backingstore LXC создаст новый подтом (subvolume) для контейнера, что позволит легко делать снимки (snapshots) средствами btrfs.
lvm.
LV может быть установлен --lvname (по умолчанию имя контейнера).
VG может быть установлен --vgname (по умолчанию lxc).
Файловая система может быть установлена --fstype (по умолчанию ext4).
Размер может быть установлен --fssize (по умолчанию 1 Гб).
Для использования LVM thinpools --thinpool.
overlayfs.
Используется в основном при клонировании контейнера, создавая копию другого контейнера и сохраняя изменения от оригинала в виде overlay.
Создавая контейнер через lxc-create, мы получим обычный контейнер, но изменения после первоначального образа будут сохраняться в delta0 каталоге.
zfs.
Подобно btrfs, использование zfs позволит применять возможности, но уже ZFS: подтом (subvolume) для контейнера, быстрое создание снимков и клонов, более эффективное использование места на диске за счёт дедупликации.
Стандартные пути.
LXC обычно использует:
- /var/lib/lxc/ - дефолтное место для контейнеров.
- /var/lib/lxcsnap/ - дефолтное место снимков.
- /var/cache/lxc/ - дефолтное место для кэша шаблонов.
- $HOME/.local/share/lxc/ - дефолтное место для непривилегированных контейнеров.
- $HOME/.local/share/lxcsnap/ - дефолтное место для непривилегированных снимков.
- $HOME/.cache/lxc/ - дефолтное место для непривилегированного кэша шаблонов.
Дефолтный путь, называемый lxcpath, может быть переопределён в командной строке ключом -P или навсегда через
lxcpath = /новый/путь
в /etc/lxc/lxc.conf или $HOME/.config/lxc/lxc.conf для непривилегированных контейнеров.
Если вы переопределяете lxcpath, то каталог снимков snap добавляется к lxcpath и магическим образом за ним следует. Кэш шаблонов, к сожалению, жёстко вшит и не просто его сменить. Дефолтная конфигурация для всех контейнеров находится в /etc/lxc/default.conf и нет эквивалента для непривилегированных контейнеров. Шаблоны операционных систем хранятся в /usr/share/lxc/templates/
Клонирование контейнеров.
Каждое хранилище по своему облегчает возможности клонирования контейнера.
Создадим копию p1 под именем p4, где -o (--orig) и -n (--new)
sudo lxc-clone -o p1 -n p4
Мы создали простую копию контейнера методом полного копирования файлов, что на некоторых файловых системах может занять приличное время. Допустим, мы не собираемся сильно изменять копию p1, тогда можно использовать клонирование так:
sudo lxc-clone -o p1 -n p1-test -B overlayfs -s
Мы получим клон p1 по имени p1-test, который будет использовать rootfs p1 и малейшие изменения будут сохраняться в каталоге delta0 у p1-test. Ключ -s (--snapshot) позволит использовать возможности создания снимков btrfs, zfs, LVM вместо полного копирования.
Создание снимков.
Рассмотренное выше клонирование является хорошим и удобным инструментом и отлично подходит в среде разработки программистов, когда контейнеры клонируются и уничтожаются за ненадобностью. Но в производстве гораздо полезнее снимки для создания резервных копий или для страхования перед опасными изменениями.
В LXC есть утилита lxc-snapshot, которая позволяет создавать, выводить список, восстанавливать и удалять снимки контейнеров. Тут нужно сделать замечание о том, что только в версии LXC 1.0 стало возможно использовать так же хранилища на основе каталога (none и dir). До версии 1.0 снимок получался пустой.
Представим для примера, что у нас есть контейнер p1-lvm и мы хотим поставить apache2 и нужно подстраховаться. Делаем файл с комментарием и командуем
echo "before installing apache2" > snap-comment
sudo lxc-snapshot -n p1-lvm -c snap-comment
Можно подвериться и посмотреть - создался ли снимок? sudo lxc-snapshot -n p1-lvm -L -C
Теперь можно смело ставить Апач в контейнере. Если, гипотетически, что-то пошло не так, то можно откатиться назад: sudo lxc-snapshot -n p1-lvm -r snap0
или восстановить снимок как отдельный контейнер: sudo lxc-snapshot -n p1-lvm -r snap0 p1-lvm-snap0
.
Новый контейнер p1-lvm-snap0 содержит рабочую копию p1-lvm как это было до изменений.
Предыдущая статья LXC 1.0: Более углублённое использование контейнера.
Следующая статья LXC 1.0: Безопасность.
Дополнительные материалы:
Серия статей LXC 1.0. от Стефана Грабера.
Btrfs в Ubuntu.
ZFS в Ubuntu.
Резервное копирование разделов с CloneZilla.
Немає коментарів:
Дописати коментар