È possibile ridurre on-line un volume EXT4 con LVM?


47

Oggi ho provato questo sul mio computer con OpenSUSE 12.3 (kernel 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 è un volume EXT4.

È davvero non supportato o mi manca qualcosa?

Risposte:


68

Come diceva il messaggio, puoi solo far crescere un filesystem online. Se vuoi ridurlo, devi prima smontarlo.

Secondo il manutentore del filesystem ext4 , Ted Ts'o:

Siamo spiacenti, la riduzione on-line non è supportata.


12
È un peccato ...
Alicia,

5
Cos'è il downvote?
Michael Hampton

16
@MichaelHampton - qualche idiota che spara al messaggero? : D
tink

2
È successo 10 anni fa. Questo è già stato implementato?
duane,

@duane No. No. Nemmeno probabilmente lo sarà mai.
Michael Hampton

17

Sì, puoi ridurre / spostare / espandere una partizione di root senza riavviare (né livecd, né usbkey): consulta questa risposta . È scritto molto bene e facile da seguire, anche se piuttosto lungo e un po 'rischioso.

resize2fs impossibile ridurre le ext4partizioni online . Questa limitazione, se applicata sulla partizione di root, può farti pensare di non poter evitare di riavviare l'host per consentire la riduzione della rootpartizione, che potrebbe essere qualcosa che vuoi evitare. Il processo collegato ti consentirà di smontare la partizione root senza riavviare. Quindi, in questa luce, non si tratta di un ridimensionamento online rigorosamente rispetto allo stato montato della partizione, tuttavia rimane un ridimensionamento online per quanto riguarda lo stato online della rete o la raggiungibilità dell'host.

Naturalmente, se vuoi solo far crescere la tua partizione ext4, dovresti attenerti alle resize2fssoluzioni di lavoro convenzionali .

La soluzione generale che ho collegato funzionerà su qualsiasi tipo di soluzione dedicata o VPS per esempio.

TLDR; questa soluzione comporta per pivot_rootper tmpfsin modo da poter umounttranquillamente la partizione di root dal vivo e violino con esso. Una volta fatto, pivot_roottornerai sulla tua nuova partizione di root.

Ciò consente praticamente qualsiasi manipolazione sul file system di root (spostalo, cambia il filesystem, cambia il suo dispositivo fisico ...).

L'ho usato personalmente, e funziona molto bene anche sul sistema debian, ma la guida è stata inizialmente scritta nel 2007 per redhat, la risposta che ho collegato è stata aggiornata per CentOS7. È molto probabile che funzioni su OpenSUSE, anche se probabilmente con qualche adattamento.


4
Questo non è "online" per quanto riguarda il confronto con "crescita online". Tutti i servizi devono essere inattivi e il filesystem di root diventa inaccessibile. Potrebbe valere la pena contrastarlo con l'approccio livecd o initramfs / rdshell in questo commento. Non vorrei che le persone fossero confuse da questo.
Brian Chrisman,

2
@BrianChrisman Questo è davvero un gotcha che meritava un chiarimento e che spero di aver trattato con una modifica nel mio post. Mille grazie per il feedback.
vaab,

Quello che mi piace della soluzione referenziata è che è "quasi online". Ho fatto questa cosa particolare codificando un piccolo script e strumenti nel comando dracut e ho lanciato i risultanti initramfs da kexec. Se questo potesse in qualche modo tenere aperta una sessione ssh durante il processo, sarebbe meglio. Suppongo che se costruisci la radice falsa con sshd e i file necessari, avvii un'altra sshd (perché sei ssh in) su un'altra porta, quindi puoi ssh sull'altra porta e verificare la connettività prima di continuare a lobotomizzare il sistema.
Brian Chrisman,

13

Se il caso è un server remoto senza console, è possibile ridurre il filesystem usando initramfs durante il riavvio. Devi aggiungere resize2fs a initramfs ed eseguirlo prima di montare root.

Esempio Debian / Ubuntu:

/ etc / initramfs-tools / hooks / resizefs (eseguibile):

#!/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 (eseguibile)

#!/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

Ora esegui update-initramfs, riavvia, controlla le dimensioni, rimuovi questi script e update-intiramfs di nuovo.

Per dracut (Fedora, CentOS) usa la stessa logica (/usr/lib/dracut/modules.d).

Questo è molto utile per criptare o spostare rootfs, senza spazio libero disponibile per la nuova partizione.


2
Funziona come un fascino. Nota che devi eseguire update-initramfs con l'opzione -u.
Diomidis Spinellis,

Freddo. Nel mio caso avevo anche bisogno di update-grub.
Wojciech Kaczmarek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.