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

47

Heute habe ich dies auf meinem Computer 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.

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

Alicia
quelle

Antworten:

68

Wie in der Meldung angegeben, können Sie ein Dateisystem nur online vergrößern . Wenn Sie es verkleinern möchten, müssen Sie es zuerst aushängen.

Laut Ted Ts'o , dem Betreuer des ext4-Dateisystems :

Das Online-Verkleinern wird leider nicht unterstützt.

Michael Hampton
quelle
12
Das ist schade ...
Alicia
5
Was ist mit der Ablehnung?
Michael Hampton
16
@MichaelHampton - irgendein Idiot schießt auf den Boten? : D
Tink
2
Das war vor 10 Jahren. Wurde dies bereits umgesetzt?
Duane
@duane Nein. Hat es nicht. Das wird es wahrscheinlich auch nie sein.
Michael Hampton
16

Ja, Sie können eine Root-Partition verkleinern / verschieben / vergrößern, ohne einen Neustart durchführen zu müssen (weder Live-CD noch USB-Schlüssel): Lesen Sie diese Antwort . Es ist sehr gut geschrieben und leicht zu befolgen, obwohl es ziemlich lang und ein wenig riskant ist.

resize2fs Online- ext4Partitionen können nicht verkleinert werden . Wenn diese Einschränkung auf die Root-Partition angewendet wird, kann dies zu der Annahme führen, dass Sie einen Neustart des Hosts nicht vermeiden können, um das Verkleinern der rootPartition zu ermöglichen , was möglicherweise vermieden werden soll. Mit dem verknüpften Prozess können Sie die Root-Partition ohne Neustart ummounten. In diesem Licht ist es also nicht streng genommen eine Online- Größenänderung in Bezug auf den gemounteten Zustand der Partition, es bleibt jedoch eine Online-Größenänderung in Bezug auf den Netzwerk-Online-Status oder die Erreichbarkeit des Hosts.

Wenn Sie nur Ihre ext4-Partition erweitern möchten, sollten Sie sich natürlich an die herkömmlichen Arbeitslösungen halten resize2fs.

Die allgemeine Lösung, die ich verlinkt habe, funktioniert beispielsweise für alle Arten von dedizierten Lösungen oder VPS-Lösungen.

TLDR; Diese Lösung impliziert zu pivot_root, tmpfsdamit Sie umountIhre Root-Partition sicher leben und damit experimentieren können. Sobald Sie fertig sind, kehren Sie pivot_rootzu Ihrer neuen Root-Partition zurück.

Dies erlaubt so ziemlich jede Manipulation am Root-Dateisystem (es verschieben, das Dateisystem ändern, das physische Gerät ändern ...).

Ich persönlich habe dies verwendet und es funktioniert auch auf Debian-Systemen sehr gut, aber der Leitfaden wurde ursprünglich 2007 für RedHat geschrieben. Die von mir verlinkte Antwort wurde für CentOS7 aktualisiert. Es ist sehr wahrscheinlich, dass es auf Ihrem OpenSUSE funktioniert, wenn auch wahrscheinlich mit einigen Anpassungen.

vaab
quelle
4
Dies ist nicht "online" in Bezug auf den Vergleich mit "online wachsen". Alle Dienste müssen ausgefallen 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ürden.
Brian Chrisman
2
@BrianChrisman Dies ist in der Tat ein Punkt, der eine Klarstellung verdient hat und von dem ich hoffe, dass ich ihn in meinem Beitrag bearbeitet habe. Vielen Dank für die Rückmeldung.
Vaab
Was ich an der referenzierten Lösung mag, ist, dass sie "fast online" ist. Zu diesem Zweck habe ich ein kleines Skript und Tools in den Befehl dracut codiert und das resultierende initramfs von kexec gestartet. Wenn dies irgendwie eine SSH-Sitzung offen halten könnte, wäre das am besten. Ich nehme an, wenn Sie das gefälschte Stammverzeichnis mit sshd und den benötigten Dateien erstellen, starten Sie ein anderes sshd (weil Sie in sshd sind) an einem anderen Port, dann können Sie ssh an den anderen Port senden und die Konnektivität überprüfen, bevor Sie mit der Lobotomisierung des Systems fortfahren.
Brian Chrisman
13

Wenn es sich um einen Remote-Server ohne Konsole handelt, können Sie das Dateisystem beim Neustart mit initramfs verkleinern. Sie müssen resize2fs zu initramfs hinzufügen und ausführen, bevor Sie root einbinden.

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-premount / 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 jetzt update-initramfs aus, starten Sie neu, überprüfen Sie die Größe, entfernen Sie diese Skripte und aktualisieren Sie intiramfs erneut.

Verwenden Sie für dracut (Fedora, CentOS) dieselbe Logik (/usr/lib/dracut/modules.d).

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

urusha
quelle
2
Das wirkt 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