Soluzione 1:
Come diceva il messaggio, puoi solo crescere un filesystem ext4 online. Se vuoi rimpicciolirlo, dovrai prima smontarlo.
Secondo il manutentore del filesystem ext4, Ted Ts'o:
Spiacenti, la riduzione in linea non è supportata.
Soluzione 2:
Se il caso è un server remoto senza console, puoi 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
# 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
Ora esegui update-initramfs -u -k kernel-name
per aggiornare initramfs per il kernel kernel-name
che è impostato come predefinito nel tuo bootloader (grub). In caso di errore di avvio, è possibile eseguire l'avvio con un altro kernel/initramfs integro non modificato. Oppure puoi usare all
per aggiornare tutti i kernel, ma poi non hai modo di tornare indietro.
Verifica di non avere strumenti nel tuo sistema che aumentino automaticamente il filesystem (ad es. cloud-init - commento resizefs
in /etc/cloud/cloud.cfg
).
Riavviare. Controlla la dimensione del file system. Rimuovi gli script initramfs ed esegui update-intiramfs -u -k kernel-name
di nuovo.
Ora puoi ridurre il dispositivo sottostante con parted resizepart
/ mdadm --grow --size=
/ lvresize -L
. La dimensione del dispositivo dovrebbe essere maggiore della dimensione del filesystem dagli script. Il modo più semplice per non commettere errori:se si pianifica la dimensione del dispositivo - 6G. imposta la dimensione fs nello script su 5G. dopo che fs è stato ridimensionato:ridimensiona il dispositivo a 6G, quindi aumenta fs al massimo online con resize2fs /dev/sda1
. Ora il tuo fs si adatta perfettamente al tuo dispositivo.
Per dracut (Fedora, CentOS) usa la stessa logica (/usr/lib/dracut/modules.d).
Questo è molto utile per crittografare o spostare rootfs, senza spazio libero disponibile per la nuova partizione.
Soluzione 3:
Sì, puoi ridurre/spostare/ingrandire una partizione root senza alcun riavvio (né livecd, né usbkey):consulta questa risposta. È scritto molto bene e facile da seguire, anche se piuttosto lungo e un po' rischioso.
resize2fs
non può ridurre online ext4
partizioni . Questa limitazione, se applicata alla partizione root, potrebbe farti pensare che non puoi evitare di riavviare l'host per consentire la riduzione del root
partizione, che potrebbe essere qualcosa che vuoi evitare. Il processo collegato ti consentirà di smontare la partizione di root senza alcun riavvio. Quindi, in questa luce, non è propriamente online ridimensionamento rispetto allo stato montato della partizione, tuttavia rimane un ridimensionamento online rispetto allo stato online della rete o alla raggiungibilità dell'host.
Ovviamente, se vuoi solo aumentare la tua partizione ext4, dovresti attenerti al resize2fs
funzionante convenzionale soluzioni.
La soluzione generale che ho collegato funzionerà su qualsiasi tipo di soluzione dedicata o VPS, ad esempio.
TLDR; questa soluzione implica pivot_root
a tmpfs
quindi puoi umount
in modo sicuro la tua partizione di root viva e giocherella con essa. Una volta fatto, pivot_root
sulla tua nuova partizione root.
Ciò consente praticamente qualsiasi manipolazione sul file system root (spostalo, cambia file system, 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 sul tuo OpenSUSE, anche se probabilmente con qualche adattamento.