Solución 1:
Como decía el mensaje, solo puedes crecer un sistema de archivos ext4 en línea. Si desea reducirlo, primero deberá desmontarlo.
Según el mantenedor del sistema de archivos ext4, Ted Ts'o:
Lo sentimos, no se admite la reducción en línea.
Solución 2:
Si el caso es un servidor remoto sin consola, puede reducir el sistema de archivos usando initramfs mientras reinicia. Debe agregar resize2fs a initramfs y ejecutarlo antes de montar la raíz.
Ejemplo de Debian/Ubuntu:
/etc/initramfs-tools/hooks/resizefs (ejecutable):
#!/bin/sh
set -e
PREREQS=""
prereqs() { echo "$PREREQS"; }
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs
exit 0
/etc/initramfs-tools/scripts/local-premount/resizefs (ejecutable)
#!/bin/sh
set -e
PREREQS=""
prereqs() { echo "$PREREQS"; }
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
# simple device example
/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G # see size info below
/sbin/e2fsck -yf /dev/sda1
# complex device example
# activate md-raid containing FS/PV
#/sbin/mdadm -A /dev/md0
# activate VG containing FS
#/sbin/lvm vgchange -ay vg0
# resize
#/sbin/e2fsck -yf /dev/vg0/root # or /dev/md0
#/sbin/resize2fs /dev/vg0/root 5G
#/sbin/e2fsck -yf /dev/vg0/root
Ahora ejecuta update-initramfs -u -k kernel-name
para actualizar initramfs para el kernel kernel-name
que está configurado como predeterminado en su gestor de arranque (grub). En caso de falla en el arranque, puede arrancar con otro kernel/initramfs saludable sin modificar. O puede usar all
para actualizar todos los núcleos, pero luego no tiene vuelta atrás.
Verifique que no tenga ninguna herramienta en su sistema que haga crecer el sistema de archivos automáticamente (por ejemplo, cloud-init - comentario resizefs
en /etc/cloud/cloud.cfg
).
Reiniciar. Compruebe el tamaño del sistema de archivos. Elimine los scripts de initramfs y ejecute update-intiramfs -u -k kernel-name
de nuevo.
Ahora puede reducir el dispositivo subyacente con parted resizepart
/ mdadm --grow --size=
/ lvresize -L
. El tamaño del dispositivo debe ser mayor que el tamaño del sistema de archivos de los scripts. La forma más sencilla de no cometer errores:si el tamaño del dispositivo planificado - 6G. establezca el tamaño de fs en el script en 5G. después de cambiar el tamaño de fs:cambie el tamaño del dispositivo a 6G, luego haga crecer fs al máximo en línea con resize2fs /dev/sda1
. Ahora tu fs encaja perfectamente en tu dispositivo.
Para dracut (Fedora,CentOS) use la misma lógica (/usr/lib/dracut/modules.d).
Esto es muy útil para encriptar o mover rootfs, sin espacio libre disponible para la nueva partición.
Solución 3:
Sí, puedes reducir/mover/aumentar una partición raíz sin reiniciar (ni livecd, ni usbkey):consulta esta respuesta. Está muy bien escrito y es fácil de seguir, aunque bastante largo y un poco arriesgado.
resize2fs
no se puede reducir en línea ext4
particiones . Esta limitación, cuando se aplica en la partición raíz, puede llevarlo a pensar que no puede evitar reiniciar el host para permitir la reducción de root
partición, que podría ser algo que desee evitar. El proceso vinculado le permitirá desmontar la partición raíz sin reiniciar. Entonces, bajo esta luz, no es estrictamente hablando en línea cambio de tamaño con respecto al estado montado de la partición, sin embargo, sigue siendo un cambio de tamaño en línea con respecto al estado en línea de la red o la accesibilidad del host.
Por supuesto, si solo desea hacer crecer su partición ext4, debe apegarse al trabajo convencional resize2fs
soluciones.
La solución general que he vinculado funcionará en cualquier tipo de solución VPS o dedicada, por ejemplo.
TLDR; esta solución implica pivot_root
a tmpfs
para que puedas umount
con seguridad, su partición raíz viva y juegue con ella. Una vez hecho esto, pivot_root
de vuelta en su nueva partición raíz.
Esto permite prácticamente cualquier manipulación en el sistema de archivos raíz (moverlo, cambiar el sistema de archivos, cambiar su dispositivo físico...).
Personalmente, he usado esto, y también funciona muy bien en el sistema Debian, pero la guía se escribió inicialmente en 2007 para redhat, la respuesta que vinculé se actualizó para CentOS7. Es muy probable que funcione en su OpenSUSE, aunque probablemente con alguna adaptación.