Работа с 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.