Frage Ist es möglich, ein EXT4-Volume mit LVM online zu verkleinern?


Heute habe ich das auf meinem Rechner mit OpenSUSE 12.3 (Kernel 3.7) versucht:

# 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 ist ein EXT4-Volume.

Ist es wirklich nicht unterstützt oder fehlt mir etwas?


44
2017-08-01 18:59


Ursprung




Antworten:


Wie die Nachricht sagte, können Sie nur wachsen ein Dateisystem online. Wenn Sie es verkleinern möchten, müssen Sie es zuerst unmounten.

Laut dem ext4 Dateisystem-Betreuer, Ted Ts'o:

Sorry, das Online-Verkleinern wird nicht unterstützt.


57
2017-08-01 19:04



Das ist schade... - Alicia
Was ist mit dem Downvote? - Michael Hampton♦
@MichaelHampton - irgendein Trottel, der den Boten schießt? : D - tink


Ja, Sie können eine Root-Partition ohne Neustart neu skalieren / verschieben / erweitern (noch livecd, noch usbkey): konsultiere diese Antwort. Es ist sehr gut geschrieben und leicht zu folgen, obwohl es ziemlich lang und ein wenig riskant ist.

resize2fs  kann nicht online schrumpfen ext4 Partitionen. Wenn diese Einschränkung auf die Root - Partition angewendet wird, könnte es sein, dass Sie denken, dass Sie nicht vermeiden können, den Host neu zu starten, um ein Schrumpfen des Hosts zu ermöglichen root Partition, die Sie möglicherweise vermeiden möchten. Der verknüpfte Prozess ermöglicht es Ihnen, die Root-Partition ohne Neubooten umzuhängen. In diesem Licht ist es also nicht streng genommen online Die Größenanpassung in Bezug auf den angehängten Zustand der Partition bleibt jedoch eine Online-Größenanpassung in Bezug auf den Netzwerk-Online-Status oder die Erreichbarkeit des Hosts.

Natürlich, wenn Sie nur Ihre ext4 Partition erweitern möchten, sollten Sie sich an die herkömmliche Arbeitsweise halten resize2fs Lösungen.

Die allgemeine Lösung, die ich verlinkt habe, funktioniert zum Beispiel bei jeder Art dedizierter oder VPS-Lösung.

TLDR; Diese Lösung impliziert pivot_root zu tmpfs also kannst du umount sicher deine root-Partition live und tüfteln damit. Wenn du fertig bist, wirst du es tun pivot_root zurück auf Ihrer neuen root-Partition.

Dies ermöglicht so ziemlich jede Manipulation des Root-Dateisystems (Verschieben, Ändern des Dateisystems, Ändern des physischen Gerätes ...).

Ich habe das persönlich benutzt, und es funktioniert auch sehr gut auf Debian-System, aber der Leitfaden wurde ursprünglich im Jahr 2007 für redhat geschrieben, die Antwort, die ich verknüpft habe, wurde für CentOS7 aktualisiert. Es ist sehr wahrscheinlich, dass es auf Ihrem OpenSUSE funktioniert, wenn auch mit einiger Anpassung.


13
2018-02-01 02:22



Dies ist nicht "online" in Bezug auf den Vergleich mit "Online Grow". Alle Dienste müssen inaktiv sein und auf Ihr Root-Dateisystem kann nicht mehr zugegriffen werden. Könnte es wert sein, dies mit dem Livecd- oder initramfs / rdshell-Ansatz in diesem Kommentar zu vergleichen. Ich würde es hassen, wenn die Leute dadurch verwirrt wären. - Brian Chrisman
@BrianChrisman Dies ist in der Tat eine Frage, die Klärung verdient und ich hoffe, ich habe mit einer Bearbeitung in meinem Beitrag behandelt. Vielen Dank für das Feedback. - vaab
Was ich an der referenzierten Lösung mag, ist, dass es "fast online" ist. Ich tat diese besondere Sache, indem ich ein kleines Skript und Werkzeuge in den Befehl dracut codierte und die resultierenden initramfs von kexec startete. Wenn dies irgendwie eine ssh-Sitzung während des Prozesses offen halten könnte, wäre das am besten. Ich nehme an, wenn Sie die gefälschte Wurzel mit sshd und benötigten Dateien erstellen, starten Sie eine andere sshd (weil Sie sshdd sind) an einem anderen Port, dann können Sie ssh zu dem anderen Port und überprüfen Sie die Konnektivität vor dem Lobotomisieren des Systems weiter. - Brian Chrisman


Wenn der Fall Remote-Server ohne Konsole ist, können Sie das Dateisystem während des Neustarts mit initramfs verkleinern. Sie müssen resize2fs zu initramfs hinzufügen und vor dem Mounten von root ausführen.

Debian / Ubuntu Beispiel:

/ etc / initramfs-tools / hooks / resizefs (ausführbar):

#!/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-preount / resizefs (ausführbar)

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

Führen Sie nun update-initramfs aus, starten Sie neu, überprüfen Sie die Größe, entfernen Sie diese Skripte und update-iniramfs erneut.

Für Dracut (Fedora, CentOS) verwenden Sie die gleiche Logik (/usr/lib/dracut/modules.d).

Dies ist sehr nützlich zum Verschlüsseln oder Verschieben von Rootfs, wobei kein freier Speicherplatz für die neue Partition verfügbar ist.


9
2017-12-19 10:47



Das funktioniert wie ein Zauber. Beachten Sie, dass Sie update-initramfs mit der Option -u ausführen müssen. - Diomidis Spinellis
Cool. In meinem Fall musste ich auch update-grub. - Wojciech Kaczmarek