将 LXD 容器移动到其他存储

将 LXD 容器移动到其他存储

我当前的文件 (btrfs) 有问题storage.img。容器中有 2TB 数据,因此 storage.img 的大小为 2TB。之后我删除了所有内容,只剩下 100GB 的实际数据。现在的问题是,storage.img 并没有自行缩小到 100GB。它仍然有 2TB 大。

我已经newstorage.img使用命令在 LXD 中创建了另一个存储(btrfs)lxc storage create newstorage,但我不知道如何将容器传输到新存储正确的方式所以我可以删除旧的storage.img并重新获得我的硬盘空间。

我尝试过手动安装两个 img 并执行一些操作cp -R /one/* /new/,但是无法启动容器。

答案1

无需技巧:

lxc stop container_name
lxc move container_name temp_container_name -s new_storage_pool
lxc move temp_container_name container_name
lxc start container_name

致谢:https://discuss.linuxcontainers.org/t/how-to-move-containers-to-a-new-storage-pool-on-the-same-host/2798

答案2

我找到了一个可以解决这个问题的“黑客方法”。

问题是lxc storage create newstorage默认情况下会创建一个 15GB 的图像。此值无法更改。

必须能够访问另一台安装了全新 LXD 的 Linux 机器并lxd init在那里执行。选择 btrfs、所需新映像容量的循环设备大小以及映像名称。现在将新的 storage.img 复制到服务器。

复制内容的步骤如下:

  1. 关闭所有容器
  2. 重启机器
  3. 将旧的 storage.img 挂载到 /mnt/oldstorage
  4. 将新的 storage.img 挂载到 /mnt/newstorage
  5. 执行 sudo cp -rpv /mnt/oldstorage /mnt/newstorage
  6. 将旧的 storage.img 从 /var/lib/lxd/disks/ 文件夹中移出
  7. 将新的 storage.img 移动到 /var/lib/lxd/disks/
  8. 重启机器
  9. 启动所有容器

编辑:只要您不删除任何现有容器,此方法就可以正常工作。LXD 会为每个容器创建一个子卷。如果您想保留删除现有容器的能力,则应该为每个容器创建一个子卷。

btrfs subvolume create [-i <qgroupid>] [<dest>/]<name>

相关内容