Mover el contenedor LXD a otro almacenamiento

Mover el contenedor LXD a otro almacenamiento

Tengo un problema con mi storage.imgarchivo actual (btrfs). Tenía 2 TB de datos dentro de un contenedor, por lo que el archivo Storage.img alcanzó un tamaño de 2 TB. Después de esto lo borré todo, dejándome con 100GB de datos reales. El problema ahora es que el archivo Storage.img no se redujo a 100 GB. Todavía tiene un tamaño de 2 TB.

He creado otro almacenamiento newstorage.img(btrfs) en LXD con el comando lxc storage create newstoragepero no sé cómo transferir los contenedores al nuevo almacenamientola direccion correctapara poder eliminar el antiguo storage.imgy recuperar mi espacio en el disco duro.

Intenté cosas como montar manualmente las dos imágenes y hacerlo, cp -R /one/* /new/pero luego no puedo iniciar los contenedores.

Respuesta1

No se necesitan trucos:

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

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

Respuesta2

Encontré un "truco" que resuelve el problema.

El problema es que lxc storage create newstoragecrea una imagen de 15 GB de forma predeterminada. Este valor no se puede cambiar.

Uno debe tener acceso a otra máquina Linux con una nueva instalación de LXD y ejecutar lxd initallí. Seleccione btrfs, un tamaño de dispositivo de bucle de la nueva capacidad deseada de la imagen y el nombre de la imagen. Ahora copie ese nuevo almacenamiento.img al servidor.

Los pasos para copiar el contenido son:

  1. Cerrar todos los contenedores
  2. Reiniciar la máquina
  3. Monte el archivo antiguo.img en /mnt/oldstorage
  4. Monte el nuevo almacenamiento.img en /mnt/newstorage
  5. Ejecute sudo cp -rpv /mnt/oldstorage /mnt/newstorage
  6. Saque el archivo antiguo Storage.img de la carpeta /var/lib/lxd/disks/
  7. Mueva el nuevo almacenamiento.img a /var/lib/lxd/disks/
  8. Reiniciar la máquina
  9. Iniciar todos los contenedores

Editar: Este método funciona bien siempre que no elimine ningún contenedor existente. LXD crea un subvolumen para cada contenedor. Si desea conservar la capacidad de eliminar contenedores existentes, debe crear un subvolumen para cada contenedor.

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

información relacionada