it-swarm.dev

LXC 컨테이너를 어떻게 백업 / 이동합니까?

Lxc 컨테이너 백업을하고 싶습니다. 우리는 12.04 LTS ubuntu server 그리고 나는 LXC - 1.0.0.alpha2 안에 있습니다. 우분투 서버를 14.04 LTS로 업데이트하고 싶었습니다. 그래서 내가하고 싶은 것은 LXC 컨테이너를 백업-> OS를 14.04로 업그레이드-> LXC 컨테이너를 복원하는 것입니다. 이전 버전 (0.7.5)에는 lxc-backup 및 lxc-restore가 있었지만 1.0.0.alpha2에서는 백업 및 복원 작업이 없습니다. lxc 컨테이너 백업을 어떻게 할 수 있습니까? 컨테이너 폴더 (/ var/lib/lxc/my_container /)를 pendrive에 복사하여 다른 12.04 LTS 서버에 붙여 넣는 데 3 시간 이상을 보냈지 만 오류가 발생하지 않습니다.

#Sudo lxc-start -n my_container
lxc-start: invalid sequence number 1, expected 4.
lxc-start: failed to spwan "my_container"

그러면 업그레이드 된 14.04 서버 OS에서 작동 할 것으로 어떻게 예상 할 수 있습니까?.

Lxc-container 백업이 필요하십니까?

13
niren

편집 : 2016 년 3 월 29 일

이 게시물을 우연히 발견 한 경우 내 대답은 실제로 시스템 간 LXC 컨테이너에 대해 이동에 관한 것입니다.

LXC 컨테이너 backup하려는 경우 훌륭한 옵션에 대해서는 @Stuart의 답변을 참조하십시오.

호스트 시스템간에 LXC 컨테이너 이동

이것이 시스템간에 LXC 컨테이너를 마이그레이션하는 방법입니다. 우분투 기반 12.04 컨테이너를 14.04 호스트로 성공적으로 옮겼으며 훌륭하게 작동합니다.

  • 컨테이너 종료

    # lxc-stop -n $NAME
    
  • 아카이브 컨테이너 루트 파일 및 구성

    # cd /var/lib/lxc/$NAME/
    # tar --numeric-owner -czvf container_fs.tar.gz ./*
    

    --numeric-owner 플래그는 매우 중요합니다! 그렇지 않으면 추출 된 파일 시스템에서 uid/gid가 엉망이되어 컨테이너가 부팅되지 않을 수 있습니다.tar가 아카이브를 만들면 사용자/그룹 소유권 정보를 유지합니다. 기본적으로 압축을 풀 때 tar는 tar를 실행중인 시스템에서 ID를 사용하여 아카이브 사용자/그룹 소유권 이름을 분석하려고합니다. 이는 시스템마다 UID 숫자 값이 다른 경우 새 시스템에서 사용자 소유권이 확인되도록하기위한 것입니다.

    숫자 uid/gid 소유권이 전체 파일 시스템에 대해 유지되도록하기 때문에 LXC 파일 시스템에 좋지 않습니다. 다른 값으로 해결되면 나쁜 일이 발생합니다.

  • 파일을 새 서버로 복사

    # rsync -avh container_fs.tar.gz [email protected]:/var/lib/lxc/
    
  • 발췌 추출

    # mkdir /var/lib/lxc/$NAME/
    # cd /var/lib/lxc/$NAME/
    # tar --numeric-owner -xzvf container_fs.tar.gz .
    

오버레이 지원 컨테이너를 사용하는 경우이 새 컨테이너의 기반이되는 컨테이너를 마이그레이션해야합니다. 마지막으로 건너 뛴 소켓 파일에 대한 몇 가지 경고가 표시 될 수 있습니다.

tar: /var/lib/lxc/$NAME/rootfs/dev/log: socket ignored

이 오류를 무시했으며 관리하는 컨테이너에 아무런 문제가 없었습니다. 추가 문제가있는 경우 오류 메시지를 원래 게시물에 추가하면 자세히 설명하겠습니다.

37
BobTuckerman

편집 : 2017 년 11 월

lxc 파일 시스템없이 remote 컨테이너를 btrfs 호스트에 신속하게 백업하려면 remote &를 사용하여 sshfs 호스트에서 파일 시스템을 마운트합니다. 마운트에 cd. 컨테이너를 중지하고 tar.xz 아카이브를 작성하십시오.


편집 : 2016 년 3 월

이제 lxc 파일 시스템에서 btrfs 컨테이너를 실행하여 실행중인 컨테이너의 snapshot을 더 쉽게 가져옵니다. btrfs sub snapproc run sys가 가상 파일 시스템임을 감지하고 스냅 샷에 포함하지 않습니다.


LXC 컨테이너를 백업하기 위해 Duply 를 사용합니다. 일반 머신을 백업하는 것과 달리 DO 백업의 LXC 컨테이너에서 /dev를 포함하려고합니다.

apt-get install duply
duply mybackup create

~/.duply/mybackup/exclude에서 나는 다음을 사용했다.

- /cdrom
- /dev
- /lost+found
- /media
- /mnt
- /proc
- /run
- /sys
- /tmp
- /var/backup/restore/*
- /var/backup/tmp/*
- /var/lib/lxc/*/rootfs/lost+found
- /var/lib/lxc/*/rootfs/media/*
- /var/lib/lxc/*/rootfs/mnt/*
- /var/lib/lxc/*/rootfs/proc/*
- /var/lib/lxc/*/rootfs/run/*
- /var/lib/lxc/*/rootfs/sys/*
- /var/lib/lxc/*/rootfs/tmp/*
- /var/lib/lxcfs/*

위의 내용은 전체 머신과 모든 LXC 컨테이너를 백업합니다.

컨테이너를 백업하려면 ~/.duply/mybackup/conf를 편집하고 SOURCE='/'SOURCE='/var/lib/lxc'로 변경하고 ~/.duply/mybackup/exclude에서 lxc가 아닌 행을 제거하십시오.

Alpine Linux LXC 컨테이너 -를 실행하여 테스트 한 결과 데비안에서도 작동합니다.

Duply를 사용한 단순 백업 -암호화되지 않은 간단한 로컬 파일 백업도 수행 할 수 있습니다 (TARGET='file://[relative|/absolute]/local/path'에서 ~/.duply/mybackup/conf로 설정).

Duply 백업에 서명하려면 자동 환경의 GnuPG (암호를 일반 텍스트로 저장하는 대신 암호가없는 서명 키)를 참조하십시오.

Cron 작업에 대한 Duply conf 파일에서 GPG_TEST='disabled'를 설정하십시오.

not 일반 텍스트 암호를 conf에 저장하면 notrestores에서 GPG_TEST를 비활성화하십시오-그래서 gpg-agent 비밀번호를 캐시합니다.

11
Stuart Cardall

Brad Jasperson에 동의합니다. 나는 이것을 이렇게한다 :

lxc-clone -KMP /path/to/backup name name

컨테이너에 문제가 발생하고 가동 중지 시간이 많이 걸리면 사본을 실행할 수 있습니다.

lxc-start -n name -P /path/to/backup

멈춰 :

lxc-stop -n name -P /path/to/backup

나중에 적절한 시간에 다시 복사 할 수 있습니다. 행운을 빕니다!

2
Alek

컨테이너를 백업하는 가장 간단한 방법은 lxc-clone을 실행하는 것입니다.

lxc-clone -o NAMEOFCONTAINER -n NAMEOFCONTAINER -P BACKUPDIR

백업을/var/lib/lxc로 복사하거나 이동하는 것만 큼 간단하게 복원 공간을 절약하기 위해 tar를 만들 수도 있습니다.

1
Brad Jasperson