S'il s'agit d'un serveur distant sans console, vous pouvez réduire le système de fichiers en utilisant initramfs lors du redémarrage. Vous devez ajouter resize2fs à initramfs et l'exécuter avant de monter root.
Exemple de Debian/Ubuntu :
/etc/initramfs-tools/hooks/resizefs (exécutable) :
#!/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 (exécutable)
#!/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
Exécutez maintenant update-initramfs -u -k kernel-name
pour mettre à jour les initramfs pour le noyau kernel-name
qui est défini par défaut dans votre chargeur de démarrage (Grub). En cas d'échec du démarrage - vous pouvez démarrer avec un autre noyau/initramfs sain non modifié. Ou vous pouvez utiliser all
pour mettre à jour tous les noyaux, mais alors vous n'avez aucun moyen de retour.
Vérifiez que vous n'avez pas d'outils dans votre système qui font croître le système de fichiers automatiquement (par exemple, cloud-init - commentaire resizefs
en /etc/cloud/cloud.cfg
).
Redémarrage. Vérifier la taille du système de fichiers. Supprimez initramfs scripts et exécutez update-intiramfs -u -k kernel-name
encore.
Maintenant, vous pouvez réduire le dispositif sous-jacent avec parted resizepart
/ mdadm --grow --size=
/ lvresize -L
. La taille du périphérique doit être supérieure à la taille du système de fichiers des scripts. La manière la plus simple de ne pas faire d'erreurs : si la taille prévue du périphérique est de 6G, définissez la taille de fs dans le scripts à 5G. après que fs soit redimensionné, redimensionnez le périphérique à 6G, puis augmentez fs au maximum en ligne avec resize2fs /dev/sda1
. Maintenant, votre fs s'adapte parfaitement à votre appareil.
Pour dracut (Fedora,CentOS) utilisez la même logique (/usr/lib/dracut/modules.d).
Ceci est très utile pour crypter ou déplacer des rootfs, sans espace libre disponible pour la nouvelle partition.