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?

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.


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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.