Solution 1 :
Comme le dit le message, vous ne pouvez que grandir un système de fichiers ext4 en ligne. Si vous voulez le réduire, vous devrez d'abord le démonter.
Selon le mainteneur du système de fichiers ext4, Ted Ts'o :
Désolé, la réduction en ligne n'est pas prise en charge.
Solution 2 :
Si le cas est un serveur distant sans console, vous pouvez réduire le système de fichiers à l'aide d'initramfs lors du redémarrage. Vous devez ajouter resize2fs à initramfs et l'exécuter avant de monter root.
Exemple 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
mettre à jour initramfs pour le noyau kernel-name
qui est défini par défaut dans votre chargeur de démarrage (grub). En cas d'échec de 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 vous n'aurez alors aucun moyen de revenir en arrière.
Vérifiez que vous n'avez aucun outil dans votre système qui développe automatiquement le système de fichiers (par exemple, cloud-init - commentaire resizefs
en /etc/cloud/cloud.cfg
).
Redémarrez. Vérifiez la taille du système de fichiers. Supprimez les scripts initramfs et exécutez update-intiramfs -u -k kernel-name
à nouveau.
Vous pouvez maintenant réduire le périphérique 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. Le moyen le plus simple de ne faire aucune erreur:si la taille de l'appareil est prévue - 6G. définissez la taille fs dans le script sur 5G. après le redimensionnement de fs - redimensionnez l'appareil à 6G, puis augmentez fs au maximum en ligne avec resize2fs /dev/sda1
. Maintenant, votre fs s'intègre parfaitement dans votre appareil.
Pour dracut (Fedora, CentOS) utilisez la même logique (/usr/lib/dracut/modules.d).
Ceci est très utile pour chiffrer ou déplacer des rootfs, sans espace libre disponible pour la nouvelle partition.
Solution 3 :
Oui, vous pouvez réduire/déplacer/agrandir une partition racine sans aucun redémarrage (ni livecd, ni usbkey) :consultez cette réponse. C'est très bien écrit et facile à suivre, bien qu'assez long et un peu risqué.
resize2fs
ne peut pas rétrécir en ligne ext4
partitions . Cette limitation, lorsqu'elle est appliquée sur la partition racine, peut vous amener à penser que vous ne pouvez pas éviter de redémarrer l'hôte pour permettre de réduire le root
partition, ce qui pourrait être quelque chose que vous voulez éviter. Le processus lié vous permettra de démonter la partition racine sans aucun redémarrage. Donc, dans cette optique, ce n'est pas à proprement parler en ligne redimensionnement en fonction de l'état monté de la partition, mais il reste un redimensionnement en ligne en fonction de l'état en ligne du réseau ou de l'accessibilité de l'hôte.
Bien sûr, si vous souhaitez uniquement développer votre partition ext4, vous devez vous en tenir au fonctionnement conventionnel resize2fs
solutions.
La solution générale que j'ai liée fonctionnera sur tout type de solution dédiée ou VPS par exemple.
TLDR ; cette solution implique de pivot_root
à tmpfs
donc vous pouvez umount
en toute sécurité votre partition racine en direct et jouer avec elle. Une fois cela fait, vous allez pivot_root
de retour sur votre nouvelle partition racine.
Cela permet à peu près n'importe quelle manipulation sur le système de fichiers racine (le déplacer, changer le système de fichiers, changer son périphérique physique...).
Je l'ai personnellement utilisé, et cela fonctionne également très bien sur le système Debian, mais le guide a été initialement écrit en 2007 pour redhat, la réponse que j'ai liée a été mise à jour pour CentOS7. Il est fort probable que cela fonctionnera sur votre OpenSUSE, mais probablement avec quelques adaptations.