Est-il possible de réduire en ligne un volume EXT4 avec LVM?

47

Aujourd'hui, j'ai essayé ceci sur ma machine avec OpenSUSE 12.3 (noyau 3.7):

# resize2fs /dev/mapper/system-srv 2G
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mapper/system-srv is mounted on /srv; on-line resizing required
resize2fs: On-line shrinking not supported

/dev/mapper/system-srv est un volume EXT4.

Est-ce vraiment non pris en charge ou il me manque quelque chose?

Alicia
la source

Réponses:

68

Comme le message l'a dit, vous ne pouvez développer qu'un système de fichiers en ligne. Si vous voulez le réduire, vous devrez d'abord le démonter.

Selon le responsable du système de fichiers ext4 , Ted Ts'o:

Désolé, la réduction en ligne n'est pas prise en charge.

Michael Hampton
la source
12
C'est dommage ...
Alicia
5
C'est quoi le downvote?
Michael Hampton
16
@ MichaelHampton - un crétin a tiré sur le messager? : D
tink
2
C'était il y a 10 ans. Cela at-il déjà été mis en œuvre?
duane
@duane Non. Ce n'est pas le cas. Il est peu probable que ce soit jamais le cas.
Michael Hampton
17

Oui, vous pouvez réduire / déplacer / agrandir une partition racine sans redémarrage (ni livecd, ni clé USB): consultez cette réponse . C'est très bien écrit et facile à suivre, bien que assez long et un peu risqué.

resize2fs ne peut pas réduire les ext4partitions en ligne . 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 autoriser la réduction de la rootpartition, ce que vous voudrez peut-être éviter. Le processus lié vous permettra de démonter la partition racine sans aucun redémarrage. Donc, dans cette optique, il ne s’agit pas à proprement parler de redimensionnement en ligne en ce qui concerne l’état monté de la partition, mais il reste un redimensionnement en ligne en ce qui concerne le statut de connexion du réseau ou l’accessibilité de l’hôte.

Bien entendu, si vous souhaitez uniquement développer votre partition ext4, vous devez vous en tenir aux resize2fssolutions de travail classiques .

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_rootde tmpfssorte que vous pouvez en umounttoute sécurité votre partition racine en direct et violon avec elle. Une fois cela fait, vous pivot_rootrevenez sur votre nouvelle partition racine.

Cela permet à peu près toutes les manipulations sur le système de fichiers racine (déplacez-le, changez le système de fichiers, changez son périphérique physique ...).

Personnellement, je l'ai utilisé, et cela fonctionne très bien sur le système Debian également, mais le guide a été é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, bien qu'avec probablement quelques adaptations.

vaab
la source
4
Ce n'est pas «en ligne» en ce qui concerne la comparaison avec «croissance en ligne». Tous les services doivent être en panne et votre système de fichiers racine devient inaccessible. Cela vaut peut-être la peine de mettre cela en contraste avec l’approche livecd ou initramfs / rdshell dans ce commentaire. Je détesterais que les gens soient déroutés par cela.
Brian Chrisman
2
@BrianChrisman C'est en effet un gotcha qui méritait une clarification et que j'espère avoir couvert avec un montage dans mon post. Merci beaucoup pour les commentaires.
vaab
Ce que j'aime dans la solution référencée, c'est qu'elle est «presque en ligne». J'ai fait cela en encodant un petit script et des outils dans la commande dracut et en lançant les initramfs résultants à partir de kexec. Si cela pouvait en quelque sorte garder une session ssh ouverte tout au long du processus, ce serait mieux. Je suppose que si vous construisez la fausse racine avec sshd et les fichiers nécessaires, démarrez un autre sshd (car vous êtes ssh'd dans) sur un autre port, vous pouvez alors ssh sur l'autre port et vérifier la connectivité avant de continuer à lobotomiser le système.
Brian Chrisman
13

S'il s'agit d'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

/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G
/sbin/e2fsck -yf /dev/sda1

Maintenant, lancez update-initramfs, redémarrez, vérifiez la taille, supprimez ces scripts et mettez à jour update-intiramfs.

Pour dracut (Fedora, CentOS), utilisez la même logique (/usr/lib/dracut/modules.d).

Ceci est très utile pour le cryptage ou le déplacement de rootfs, sans espace disponible pour la nouvelle partition.

Urusha
la source
2
Cela fonctionne comme un charme. Notez que vous devez exécuter update-initramfs avec l'option -u.
Diomidis Spinellis
Cool. Dans mon cas, j'avais aussi besoin de update-grub.
Wojciech Kaczmarek