Vraag Is het mogelijk om een ​​EXT4-volume online te verkleinen met LVM?


Vandaag heb ik dit op mijn machine geprobeerd met 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 is een EXT4-volume.

Wordt het echt niet ondersteund of mis ik iets?


44
2017-08-01 18:59


oorsprong




antwoorden:


Zoals het bericht al zei, kunt u alleen toenemen een bestandssysteem online. Als je het wilt verkleinen, moet je het eerst ontkoppelen.

Volgens de ext4 bestandssysteemonderhouder, Ted Ts'o:

Sorry, online krimpen wordt niet ondersteund.


57
2017-08-01 19:04



Dat is jammer... - Alicia
Wat is er met het downvote? - Michael Hampton♦
@MichaelHampton - een idioot die de boodschapper neerschiet? : D - tink


Ja, je kunt een rootpartitie verkleinen / verplaatsen / vergroten zonder opnieuw op te starten (noch livecd, noch usbkey): raadpleeg dit antwoord. Het is heel goed geschreven en gemakkelijk te volgen, hoewel vrij lang en een beetje riskant.

resize2fs  kan niet online krimpen ext4 scheidingswanden. Deze beperking, wanneer toegepast op de rootpartitie, kan ertoe leiden dat je denkt dat je niet kunt voorkomen dat je de host herstart om het te laten krimpen root partitie, wat misschien iets is dat u wilt vermijden. Met het gekoppelde proces kunt u de rootpartitie opzoeken zonder opnieuw op te starten. Dus in dit licht is het niet strikt genomen online het wijzigen van de grootte van de aangekoppelde toestand van de partitie, maar het blijft een online formaat wijzigen met betrekking tot de online status van het netwerk of de bereikbaarheid van de host.

Natuurlijk, als je alleen je ext4-partitie wilt laten groeien, moet je vasthouden aan de conventionele werking resize2fs oplossingen.

De algemene oplossing die ik heb gekoppeld, werkt bijvoorbeeld op elk type dedicated of VPS-oplossing.

TLDR; deze oplossing houdt in pivot_root naar tmpfs dus je kunt het umount veilig je rootpartitie leven en ermee worstelen. Als je klaar bent, doe je het pivot_root terug op je nieuwe rootpartitie.

Dit maakt vrijwel elke manipulatie op het root-bestandssysteem mogelijk (verplaats het, verander het bestandssysteem, verander het fysieke apparaat ...).

Ik heb dit persoonlijk gebruikt, en het werkt ook heel goed op het debian-systeem, maar de gids werd oorspronkelijk in 2007 geschreven voor redhat, het antwoord dat ik heb gekoppeld is bijgewerkt voor CentOS7. Het is zeer waarschijnlijk dat het op uw OpenSUSE zal werken, hoewel waarschijnlijk met enige aanpassing.


13
2018-02-01 02:22



Dit is niet 'online' met betrekking tot vergelijking met 'online groeien'. Alle services moeten leeg zijn en je rootbestandssysteem is ontoegankelijk. Zou het waard zijn om dit te contrasteren met de aanpak livecd of initramfs / rdshell in deze opmerking. Ik zou het haten dat mensen hierdoor in de war raken. - Brian Chrisman
@BrianChrisman Dit is inderdaad een gotcha die opheldering verdient en die ik hoop dat ik een bewerking in mijn bericht heb behandeld. Hartelijk dank voor de feedback. - vaab
Wat ik leuk vind aan de oplossing waarnaar wordt verwezen, is dat het 'bijna online' is. Ik deed dit bijzonder door een klein script en tools in de dracut-opdracht te coderen en de resulterende initramfs van kexec te starten. Als dit op een of andere manier een SSH-sessie open zou kunnen houden tijdens het proces, zou dat het beste zijn. Ik veronderstel dat als je de nep-root met sshd en benodigde bestanden bouwt, een andere sshd (omdat je ssh'd in) op een andere poort start, dan kun je ssh naar de andere poort en de connectiviteit verifiëren voordat je het systeem lobotomiseert. - Brian Chrisman


Als de case een externe server zonder console is, kunt u het bestandssysteem verkleinen met behulp van initramfs tijdens het rebooten. Je moet resize2fs toevoegen aan initramfs en het uitvoeren voordat je root gaat monteren.

Debian / Ubuntu-voorbeeld:

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

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

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

Voer nu update-initramfs uit, reboot, controleer de grootte, verwijder deze scripts en update-intiramfs opnieuw.

Gebruik voor dracut (Fedora, CentOS) dezelfde logica (/usr/lib/dracut/modules.d).

Dit is erg handig voor het crypten of verplaatsen van rootfs, zonder vrije ruimte voor de nieuwe partitie.


9
2017-12-19 10:47



Dit werkt als een charme. Merk op dat je update-initramfs moet uitvoeren met de -u optie. - Diomidis Spinellis
Stoer. In mijn geval moest ik dat ook doen update-grub. - Wojciech Kaczmarek