
Durante la instalación de mi sistema operativo centos stream 8, le di a /var un tamaño de 10 GB pensando que sería más que suficiente, pero después de comenzar a usar Docker descubrí que ocupa demasiado espacio en la partición /var como se muestra en el comando df:
[root@compute-07 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 28G 0 28G 0% /dev
tmpfs 28G 0 28G 0% /dev/shm
tmpfs 28G 179M 28G 1% /run
tmpfs 28G 0 28G 0% /sys/fs/cgroup
/dev/mapper/cs-root 371G 8.2G 363G 3% /
/dev/mapper/cs-home 100G 2.0G 98G 2% /home
/dev/mapper/cs-var 10G 9.0G 1.1G 90% /var
/dev/sda2 2.0G 412M 1.6G 21% /boot
/dev/sda1 2.0G 7.3M 2.0G 1% /boot/efi
/dev/mapper/cs-tmp 10G 105M 9.9G 2% /tmp
tmpfs 5.5G 16K 5.5G 1% /run/user/42
overlay 10G 9.0G 1.1G 90%
/var/lib/docker/overlay2/77f74478297ca61595f0003d35c7323ec627adb44d94cef92c2b4a3c97319a66/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/5eeb399ce4a3c0d8065d63123985269a359fa66f4d20a8486326e466a48a0128/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/08d42ca66e3a5974bc305b502bca2aa4d22aa7ddcab6ea14c6af300b3abb3a70/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/1a45cb32b127fdf8f5c1483385139a865fdc69260ec20f3dcd4c56ad6890f909/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/ebb9af8edee824a4013dcd526e33e22272283bdee508fd43208fade557def728/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/41d55822108d04c85f348dc134fe6929b0e67f6b3bd7e0af147633bfd3a252c1/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/5cf3e8e06e9b4c2e6ed65164d91aed19f63d55e91524d6563e9f16b6709d29be/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/1d1eda94e68596b00d0cabcc75a7c91999a1c845ebd02c733bb9f00ac66a26f0/merged
overlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/bc9e9a28c6761ad89a9457110642156ebd2b4d77de841f2a3ac9ffbaa90e4b63/merged
tmpfs 5.5G 0 5.5G 0% /run/user/0
Este es el resultado del comando lsblk, como /var está en una partición separada, entonces / y /home no pude encontrar una manera de cambiar su tamaño o crear otra partición y luego vincularla a /var.
[root@compute-07 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 558.4G 0 disk
├─sda1 8:1 0 2G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 554.4G 0 part
├─cs-root 253:0 0 370.4G 0 lvm /
├─cs-swap 253:1 0 64G 0 lvm [SWAP]
├─cs-tmp 253:2 0 10G 0 lvm /tmp
├─cs-home 253:3 0 100G 0 lvm /home
└─cs-var 253:4 0 10G 0 lvm /var
sr0 11:0 1 1024M 0 rom
¿Hay alguna manera de cambiar el tamaño de esta partición sin tener que perder ningún dato?
Respuesta1
No. En realidad, la mayor parte del espacio del sistema siempre se utiliza /var
donde normalmentevarLos datos disponibles viven: bases de datos, Docker, registros, etc., mientras que Linux /
,casi nuncautiliza más de 10 GiB de espacio, cuando el sistema se administra correctamente.
No solo su LVM no es óptimo: yo colocaría toda la instalación de Debian con algunos servicios en el espacio que desperdició en su ESP y /boot
. (Tenía la costumbre de crear máquinas virtuales con 4 GiB asignados para el sistema. Más que suficiente).
Bueno, la mejor solución sería reducir su sistema de archivos raíz de gran tamaño, pero eso no se puede hacer en línea. Necesita iniciar algunos medios de rescate, activar su VG y luego reducir el sistema de archivos y el volumen lógico, y eso podría consumir una cantidad considerable de tiempo, considerando el tamaño de la partición. También es posible estropear las cosas. Si tiene prisa, puede hacer un cambio: cree un directorio en la raíz, mueva los datos de Docker a él y vuelva a montarlo en el lugar donde se encuentran los datos de Docker en var. Debe detener Docker y todos los contenedores por el momento. Algo como esto:
systemctl stop docker.service
mkdir /var-lib-docker
mv /var/lib/docker/* /var-lib-docker
mount --bind /var-lib-docker /var/lib/docker
systemctl start docker.service
De esa manera, Docker utilizará el espacio en el sistema de archivos raíz de gran tamaño, mientras estará disponible en la ubicación habitual. Debe /etc/fstab
agregar la siguiente entrada para que esta configuración sobreviva al reinicio:
/var-lib-docker /var/lib/docker none bind 0 0
Pero recuerde que este es un truco bastante feo que puede ganar algo de tiempo pero también traer algunos problemas, así que busque la oportunidad de recuperar espacio de la raíz y asignarlo correctamente /var
.
Y que esta sea la lección: nunca asigne todo el espacio disponible desde el principio. Deje parte (la mayor parte) sin asignar. Siempre puede agregar fácilmente el espacio y hacerlo en línea, aunque recuperarlo es muy difícil, requiere mucho tiempo y es propenso a errores, y eso requiere tiempo de inactividad. Lo mejor es gestionar el espacio para que nunca tengas que reclamarlo.
Respuesta2
Como alternativa aesta respuesta
Su sistema utiliza volúmenes lógicos LVM.
Es posible que quede algo de espacio no utilizado en el grupo de volúmenes que puede asignar para extender var.
En caso de que no quede espacio sin utilizar, o sea muy poco, puedesreducir o eliminar el LVM de intercambioy tome el espacio que se libera para extender /var.
Eso dejaría su sistema intacto y, por lo general, incluso se puede hacer en línea.
El enfoque para eso sería algo así como (comandos no probados, así que no los copie directamente, pero el principio debe ser sólido)
Cree un archivo de intercambio temporal o permanente en su sistema de archivos raíz de gran tamaño como reemplazo mientras desconecta la partición de intercambio.
dd if=/dev/zero of=/swap-file count=65536 bs=1M
mkswap /swap-file
swapon /swap-file
swapoff /dev/mapper/cs-swap
para deshabilitar la partición de intercambiolvreduce
cs-swap seguido de formatear la partición de intercambio LVM restante nuevamentemkswap
y reactivar el espacio de intercambio más pequeño conswapon
o eliminarlo directamente con
lvremove
Utilice el espacio LVM libre recién creado para ampliar el volumen /var LVM y ampliar el sistema de archivos
lvextend -l +100%FREE --resizefs /dev/mapper/cs-var
Respuesta3
Tu df
y lsblk
no nos digas cuáles son sus sistemas de archivos. Para reducir un volumen (partición o LV), primero se debe reducir el sistema de archivos que contiene. Una opción común para rootfs, ext4, se puede reducir sin conexión. Sin embargo, la opción de FS predeterminada para CentOS (y distribuciones similares a RHEL) es XFS y no se puede reducir en este momento.
Como otros han señalado en sus respuestas, no es difícil hacer una copia de seguridad de su rootfs con 8,2 GB. Entonces, dependiendo de su tipo de sistema de archivos rootfs, tiene las siguientes opciones:
Si es ext4, puedes reducirlo en el lugar:
Reinicie en otro sistema, como ArchISO, ya que ext4 solo se puede reducir sin conexión.
Asegúrese
lvs
de mostrar su partición, luegoe2fsck -f /dev/mapper/cs-root
resize2fs -M -p /dev/mapper/cs-root
Alternativamente, si conoce el tamaño de rootfs que desea, puede especificarlo en lugar de usar
-M
:resize2fs -p /dev/mapper/cs-root 15G
Tenga en cuenta que es mejor dejar algo de espacio para reducir el volumen subyacente.
Recuperar espacio del LV
lvreduce -L 16G cs/root
Cambie el tamaño del sistema de archivos al tamaño del volumen:
resize2fs -p /dev/mapper/cs-root
Ahora el espacio libre se puede entregar a
/var
:lvextend -l +100%FREE cs/var
Sin embargo, si es XFS, lo mejor que puede hacer es hacer una copia de seguridad de sus rootfs y recrearlo:
- Inicie un ArchISO como el anterior.
rsync -avHAXx /your-rootfs /somewhere
(Asegúrese/somewhere
de que esté en otro volumen; es fácil encontrar 8,2 GB de espacio libre; es muy probable que su volumen de intercambio esté sobredimensionado)lvremove
el volumen raíz y recrearlo con un tamaño apropiado. Recomiendo formatear a ext4 esta vez.rsync -avHAXx /somewhere /your-rootfs
para copiar cosas de nuevo.- Actualice su configuración de GRUB si es necesario: AFAICT, el ID de LV a menudo se escribe
grub.cfg
como una pista, pero no estoy familiarizado con CentOS (en Debian sería simplementeupdate-grub
). - Asigne espacio libre en el VG como se indica arriba.
Otras notas que me gustaría señalar:
- La partición de su sistema EFI (ESP) es demasiado grande. Para un servidor Linux típico, 256 MB deberían ser más que suficientes (yo uso 128 MB en mi servidor Ubuntu). Sólo necesita contener el binario GRUB y una versión muy básica de
grub.cfg
. /boot
no tiene que vivir de su propio volumen. GRUB puede leer LVM y su sistema de archivos rootfs sin problemas.- Dependiendo del diseño de su servidor,
/root
es probable que también esté sobredimensionado (yo uso 16 GB para mi servidor Proxmox VE; no planeo colocar datos en el host). - ¿Realmente necesitas 64 GB de espacio de intercambio? Normalmente estoy bien con sólo 8 GB.