Warum muss ich resize2fs nach lvextend ausführen?


10

Um die Größe der LVM2-Partition zu ändern, müssen die folgenden 2 Befehle ausgeführt werden:

# lvextend -L+1G /dev/myvg/homevol
# resize2fs /dev/myvg/homevol

Wenn ich jedoch etwas durchführe lvextend, sehe ich, dass die Änderungen bereits auf die Partition angewendet wurden (wie in Gnome Disks gezeigt). Warum muss ich das noch tun resize2fs?

Antworten:


19

Der lvextendBefehl (ohne die --resizefsOption) trifft nur die LVM-seitigen Vorkehrungen, um das Blockgerät zu vergrößern, das das logische Volume ist. Unabhängig vom Dateisystemtyp (oder sogar davon, ob überhaupt ein Dateisystem vorhanden ist) auf dem LV sind diese Vorgänge immer ähnlich.

Wenn der LV ein ext2 / 3/4-Dateisystem enthält, besteht der nächste Schritt darin, die Metadaten des Dateisystems zu aktualisieren, um das Dateisystem darauf aufmerksam zu machen, dass mehr Speicherplatz verfügbar ist, und die erforderlichen Metadatenstrukturen zum Verwalten des hinzugefügten Speicherplatzes zu erstellen / zu erweitern. Bei ext2 / 3/4 Dateisystemen umfasst dies mindestens:

  • Erstellen neuer Inodes für den hinzugefügten Speicherplatz
  • Erweitern der Blockzuordnungsdatenstrukturen, sodass das Dateisystem erkennen kann, ob ein Block des hinzugefügten Speicherplatzes verwendet wird oder frei ist
  • Verschieben möglicherweise einige Datenblöcke, wenn sie der zuvor erwähnten Datenstrukturerweiterung im Wege stehen

Dieser Teil ist spezifisch für den Dateisystemtyp, obwohl die ext2 / 3/4 Dateisystemtypen so ähnlich sind, dass sie alle mit einem einzigen resize2fsTool in der Größe geändert werden können . Für XFS-Dateisysteme würden Sie xfs_growfsstattdessen ein Tool verwenden. Andere Dateisysteme verfügen möglicherweise über eigene Erweiterungstools. Und wenn das logische Volume kein Dateisystem enthalten würde, sondern eine "rohe" Datenbank oder ein Oracle ASM-Volume, müsste ein weiteres Verfahren angewendet werden.

Jedes Dateisystem verfügt über unterschiedliche interne Funktionen, sodass die Bedingungen für die Erweiterung eines Dateisystems für jedes Dateisystem unterschiedlich sind. Es dauerte eine Weile, bis eine gemeinsame API für die Dateisystemerweiterung entwickelt wurde. Dadurch konnte der fsadm resizeBefehl implementiert werden , der eine einheitliche Syntax zum Erweitern mehrerer Dateisystemtypen bietet. Die --resizefsOption lvextendverwendet nur den fsadm resizeBefehl.

Auf den Punkt gebracht: Nach dem lvextendLVM-Level - Tools wie lvs, vgs, lvdisplayund vgdisplaydie aktualisierte Größe, aber das Dateisystem und alle Tools arbeitet auf es sehen, wie df, wird es noch nicht sehen.


Wäre es richtig zu sagen, dass nach dem Laufen lvextendund vor der Ausführung resize2fs, dfwürden die aktualisierten Größen melden?
Rufus

Genau. (Zu meiner Antwort hinzugefügt.)
telcoM

Vielen Dank. Was bedeutet "Erstellen neuer Inodes für den hinzugefügten Speicherplatz", da der hinzugefügte Speicherplatz noch nicht verwendet wird und Inodes nur für vorhandene Dateien vorhanden sind?
Tim

Für moderne Dateisysteme wie XFS ist dies der Fall. Die ext2 / 3/4-Dateisysteme folgen jedoch einem klassischeren Design mit einer vorab zugewiesenen Tabelle von Inodes. Bei der Erstellung des Dateisystems wird ein Verhältnis von (maximale Anzahl von Inodes) / (Dateisystemgröße) festgelegt, das nicht als Online-Vorgang geändert werden kann. Infolgedessen resize2fsmuss die Inode-Tabelle erweitert werden, um das Verhältnis beizubehalten, wenn das Dateisystem erweitert wird.
TelcoM

11

Die LVM-Schicht ist nur ein Container für das darin enthaltene Dateisystem. Sie können festlegen lvextend, dass die Größe des Dateisystems innerhalb des logischen Volumes geändert werden soll, ohne dass eine separate Option (oder ) resize2fshinzugefügt werden muss :-r--resizefs

lvextend -r ...

1
Ich suchte diese Option, Sekundenschnelle geschlagen. +1
Rui F Ribeiro

4

Weil Dateisysteme und logische Volumes unterschiedliche Abstraktionen sind. Ein Volume ist ein Teil der Festplatte (wie eine Partition) - oder zumindest das "virtuelle" Äquivalent. Es ist nur ein Blockgerät. Ein Dateisystem ist eine Struktur, die sich innerhalb dieses Systems befindet (oder darüber hinaus, wenn Sie dies bevorzugen) und die verwendet wird, um eine Zuordnung zwischen Dateien (und Verzeichnissen usw.) zu diesem Gerät bereitzustellen. Ohne resize2fsist die Partition größer, aber das Dateisystem nutzt den verfügbaren Speicherplatz nicht aus.

Sie können zunächst ein Dateisystem erstellen, das nicht die gesamte Partition einnimmt. Von der mke2fsManpage:

Die Dateisystemgröße wird durch fs-size angegeben. Wenn fs-size kein Suffix hat, wird es als Zweierpotenz interpretiert, es sei denn, die Option -b Blockgröße ist angegeben. In diesem Fall wird fs-Größe als Anzahl der Blockgrößenblöcke interpretiert. Wenn die fs-Größe durch 'k', 'm', 'g', 't' (entweder in Groß- oder Kleinbuchstaben) ergänzt wird, wird sie in Zweierpotenzen von zwei Kilobyte, Megabyte, Gigabyte, interpretiert. Terabyte usw. Wenn fs-size weggelassen wird, erstellt mke2fs das Dateisystem basierend auf der Gerätegröße.

Wie Sie sehen, wird standardmäßig die Partition gefüllt, und es gibt normalerweise keinen Grund, etwas anderes zu tun - aber Sie können, wenn Sie möchten.

Beachten Sie, dass when lvextendeine Option --resizefs(oder nur eine -r) hat, mit der das Dateisystem nach dem Erweitern des Volumes erweitert werden kann, ohne dass ein separater Befehl ausgeführt werden muss.


0

Das resize2fserzwingt fs, dass das Dateisystem erweitert oder verkleinert wird, um den vom lvextendBefehl erzeugten neuen Speicherplatz zu belegen. Die Prozesse:

with fs:
        -- shrink --> 1. shrink fs 2. shrink volume
        -- expand --> 1. expand volume, 2. expand fs
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.