Работа с LXC

Обновлено 21 августа 2019

Мгновенный бэкап

При использовании файловой системы Btrfs, zfs или lvm lxc-snapshot может выполняться практически мгновенно. Это очень важно, когда стоит задача исключить или минимизировать время простоя служб. В случае использования Btrfs при создании контейнера в команде lxc-create следует использовать параметр -B btrfs. В этом случае lxc создаст subvolume, в которую поместит содержимое rootfs контейнера. В дальнейшем копия контейнера будет создаваться через клонирование средствами файловой системы Btrfs.

Если же у вас контейнер уже создан и он в файловой системе Btrfs, вы можете выполнить конвертацию. Для этого произведите описанные ниже действия. Если файловая система другая, дополнительно потребуется перенести данные на другой носитель, выполнить форматирование, перенести данные назад и выполнить описанные ниже действия.

Миграция

В приведённом примере имя контейнера calculate. Измените его на ваше.

Остановите контейнер:

/etc/init.d/lxc.calculate stop

Переименуйте директорию rootfs:

cd /var/calculate/lxc/calculate

mv rootfs rootfs.old

Создайте подтом Btrfs и перенесите в него содержимое rootfs:

btrfs subvolume create rootfs

mv rootfs.old/* rootfs/

rmdir rootfs.old

Отредактируйте настройки контейнера, заменив dir на btrfs:

/var/calculate/lxc/calculate/config

...
lxc.rootfs.path = btrfs:/var/calculate/lxc/calculate/rootfs
...

Запустите контейнер:

/etc/init.d/lxc.calculate start

Проверка

Чтобы проверить, что контейнер теперь хранится на подтоме Btrfs, выполните:

btrfs subvolume list /var/calculate

ID 274 gen 258 top level 5 path lxc/calculate/rootfs

Создайте резервную копию контейнера:

time /etc/init.d/lxc.calculate stop

real    0m2.252s

time lxc-snapshot calculate

real    0m0.072s

time /etc/init.d/lxc.calculate start

real    0m1.186s

Как видите, на создание резервной копии ушло чуть более 3 секунд. После выполнения будет создан подтом с копией данных:

btrfs subvolume list /var/calculate

ID 274 gen 258 top level 5 path lxc/calculate/rootfs
ID 277 gen 32 top level 5 path lxc/calculate/snaps/snap0/rootfs

Заключение

Помимо быстрых снимков, вы будете экономить на дисковом пространстве, т.к. данные начнут занимать место на диске только по мере накопления изменений в файлах. Тем не менее, мы рекомендуем в дальнейшем выполнять бэкап снапшота (snap0) на другой дисковый носитель, а ещё лучше - на другой сервер. Сделать это можно, например, при помощи утилиты Rsnapshot.