Recientemente Docker añadió opciones para configurar el método de almacenamiento de los volúmenes. El método por defecto (dispositivos loop) no se considera muy apropiado para entornos de producción, así que veamos cómo configurarlo para que use LVM directamente.
Este ejercicio está realizado en Fedora 23, y asume que ya tienes configurado el ordenador con particionado LVM.
Averigua de dónde puedes sacar espacio
Comprueba qué volúmenes lógicos tienes en tu sistema:
# lvm lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home system -wi-ao---- 411,41g root system -wi-ao---- 50,00g swap system -wi-ao---- 3,86g
Comprueba cuánto espacio tienes en cada uno:
# df --human-readable S.ficheros Tamaño Usados Disp Uso% Montado en devtmpfs 3,9G 0 3,9G 0% /dev tmpfs 3,9G 2,5M 3,9G 1% /dev/shm tmpfs 3,9G 1,8M 3,9G 1% /run tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup /dev/mapper/system-root 50G 6,3G 41G 14% / tmpfs 3,9G 336K 3,9G 1% /tmp /dev/sda1 477M 136M 313M 31% /boot /dev/mapper/system-home 405G 238G 147G 62% /home tmpfs 798M 16K 798M 1% /run/user/42 tmpfs 798M 48K 798M 1% /run/user/1000
Aquí vemos que en / y /home me sobra bastante espacio.
Voy a quitarle 20GiB a /home, ya que para
reducir el tamaño de /
es algo más complicado (aunque no demasiado).
Reduce un volumen lógico
Voy a necesitar la cuenta de root habilitada para entrar al modo emergencia, así que voy a activarla:
# passwd --force --unlock root
Ahora
entraré en modo emergencia
para poder desmontar /home:
# systemd isolate emergency.target
Dentro de este modo, voy a reducir /home. Esto tomará un tiempo,
dependiendo del tamaño de la partición:
# lvm lvresize --resizefs --size -20G system/home
Regresaré al modo gráfico y desactivaré la cuenta de root:
# systemd isolate graphical.target # passwd --lock root
Ahora la próxima vez que arranque Docker, gestionará ese espacio libre automáticamente para crear los volúmenes lógicos que necesite:
# systemctl start docker.service
Limpiando viejos volúmenes
Con lo que hemos hecho ya debería bastar, pero si tuvieras errores o conflictos, te vendrá bien limpiar los viejos volúmenes. Ojo porque esto causará pérdida de información:
# systemctl stop docker.service docker-storage-setup.service # rm -Rf /var/lib/docker # systemctl start docker.service