簡體   English   中英

如何備份/移動LXC容器?

[英]How do I Backup / Move LXC containers?

我想采取lxc容器備份。 我們有12.04 LTS ubuntu server ,我已經安裝了LXC - 1.0.0.alpha2 我想將我們的ubuntu服務器更新為14.04 LTS。 所以我想做的是備份LXC容器 - >將OS升級到14.04 - >恢復LXC容器。 使用早期版本(我猜是0.7.5)有lxc-backup和lxc-restore但是1.0.0.alpha2我們沒有備份和恢復操作。 我怎樣才能備份lxc容器。 我花了超過3個小時將副本容器文件夾(/ var / lib / lxc / my_container /)放入pendrive並將其粘貼到另一個12.04 LTS服務器中,但它無法正常運行,我得到的錯誤是,

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

那么我怎么能期望它在升級的14.04服務器操作系統中有效。

有想法進行lxc-container備份嗎?

編輯:2016年3月29日

如果您偶然發現這篇文章,我的答案實際上是關於在系統之間移動 LXC容器,因為這似乎是被問到的問題。

如果您想備份 LXC容器,請參閱@Stuart的答案,了解一些很棒的選擇。

在主機系統之間移動LXC容器

這就是我在系統之間遷移LXC容器的方法。 我已成功將基於12.04容器的ubuntu移動到14.04主機,並且它們運行良好。

  • 關閉容器

     # lxc-stop -n $NAME 
  • 歸檔容器rootfs&config

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

    --numeric-owner標志非常重要! 沒有它,容器可能無法啟動,因為uid / gids在提取的文件系統中受到損壞。 當tar創建存檔時,它會保留用戶/組所有權信息。 默認情況下,在解壓縮時,tar會嘗試使用運行tar的系統上的ID來解析存檔用戶/組所有權名稱。 這旨在確保在新系統上解析用戶所有權,以防系統之間的UID數值不同。

    這對LXC文件系統不利,因為數字uid / gid所有權旨在為整個文件系統保留。 如果它被解析為不同的值,則會發生不好的事情。

  • 將文件復制到新服務器

     # rsync -avh container_fs.tar.gz user@newserver:/var/lib/lxc/ 
  • 提取rootfs

     # 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

我忽略了這個錯誤,並且沒有遇到任何我管理的容器的問題。 如果您還有其他問題,請將錯誤消息添加到原始帖子中,我將詳細說明。

編輯:2017年11月

要備份的lxc迅速容器到remote主機沒有btrfs文件系統掛載我從一個文件系統remote與主機sshfscd插入安裝。 停止容器並創建它的tar.xz存檔。


編輯:2016年3月

我現在在btrfs文件系統上運行我的lxc容器,以便更簡單地獲取正在運行的容器的snapshot btrfs sub snap檢測到proc run sys是虛擬文件系統,並且不包含在快照中。


我使用Duply來備份LXC容器。 不像備份正常的機器想包括/dev從備份中LXC容器。

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容器進行測試 - 也可以在Debian上運行。

使用Duply進行簡單備份 - 您也可以對本地文件進行非常簡單的未加密備份(在~/.duply/mybackup/conf設置TARGET='file://[relative|/absolute]/local/path'

要簽署Duply備份,請參閱自動環境中的GnuPG (無密碼簽名密鑰,而不是以明文形式存儲密碼)。

在Duply conf文件中為cron作業設置GPG_TEST='disabled'

如果你存儲在您的任何明文口令conf 不要禁用GPG_TEST恢復 -使gpg-agent緩存密碼。

我同意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

您可以在適當的時間將其復制回原位。 祝好運!

我發現備份容器的最簡單方法是運行lxc-clone。

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

恢復它就像復制或將備份移回/ var / lib / lxc一樣簡單您還可以對其進行tar以節省空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM