Wie ändere ich die Größe einer ext4-Partition über die 16-TB-Grenze hinaus?

26

Beim Versuch, die Größe einer alten ext4-Partition zu ändern, die ohne das 64-Bit-Flag erstellt wurde, schlägt resize2fs 1.42 fehl, wenn die neue Größe 16 TB oder mehr beträgt.

$ resize2fs -p /dev/mapper/target-device
resize2fs: New size too large to be expressed in 32 bits

Ich möchte die Dateien nicht auf ein externes Medium kopieren. Ich möchte auch keinen Datenverlust riskieren. Wie kann ich die Lautstärke sicher ändern?

angst
quelle

Antworten:

46

Sie versuchen, die Größe eines Dateisystems zu ändern, das erstellt wurde, bevor die -O 64bitOption zum Standard wurde. Es ist möglich, Ihr ext-Dateisystem auf 64-Bit-Adressen zu aktualisieren, sodass es sich über deutlich größere Volumes (1024 PiB statt 16 TiB) erstreckt.

Angenommen, Ihr Zielgerät heißt /dev/mapper/target-device, müssen Sie Folgendes tun:

Voraussetzungen

  1. Diese Datenträgergröße muss durch RAID gesichert werden. Regelmäßige Datenträgerfehler wird Schaden sonst verursachen.
  2. Dennoch RAID ist kein Backup . Sie müssen Ihre Wertsachen auch an anderer Stelle aufbewahren.
  3. Ändern Sie zuerst die Größe und überprüfen Sie alle umgebenden Volumes (Partitionstabellen, Verschlüsselung, lvm).
  4. Nach dem Ändern der Hardware-RAID-Konfiguration erkennt Linux die neue maximale Größe möglicherweise sofort oder nicht. Überprüfen Sie $ cat /proc/partitionsund starten Sie gegebenenfalls neu.

Verwenden Sie einen aktuellen stabilen Kernel und e2fsprogs

  1. Stellen Sie sicher, dass uname -rSie einen Kernel ausführen (überprüfen ), der 64-Bit-Ext4-Dateisysteme ordnungsgemäß verarbeiten kann - Sie möchten einen 4.4.xKernel oder höher verwenden (Standard Ubuntu 16 und höher).
  2. Erwerben Sie e2fsprogs mindestens der Version 1.43

    • Ubuntu 16.04(21.04.2016) wurde veröffentlicht mit e2fsprogs 1.42.12(25.08.2014)
    • e2fsprogs 1.43 (17.05.2016) ist die erste Version, mit der die Adressgröße von extfs aktualisiert werden kann.
    • Ubuntu 18.04(26.04.2018) versendet mit e2fsprogs 1.44.x(gut!)

Wenn Sie angemeldet sind 16.04und kein Upgrade auf eine neuere Ubuntu-Version durchführen können, müssen Sie die Quellpaketunterstützung aktivieren und eine neuere Version manuell installieren:

$ resize2fs
# if this  prints version 1.43 or above, continue to step 1
$ sudo apt update
$ sudo apt install git
$ sudo apt build-dep e2fsprogs
$ cd $(mktemp -d)
$ git clone -b v1.44.2 https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git e2fsprogs && cd e2fsprogs
$ ./configure
$ make
$ cd resize
$ ./resize2fs
# this should print 1.43 or higher
# if this prints any lower version, panic
# use `./resize2fs` instead of `resize2fs` for the rest of the steps

Größe ändern

Schritt 1: Mounten Sie das Dateisystem ordnungsgemäß

$ sudo umount /dev/mapper/target-device

Schritt 2: Überprüfen Sie das Dateisystem auf Fehler

$ sudo e2fsck -fn /dev/mapper/target-device

Schritt 3: Aktivieren Sie die 64-Bit-Unterstützung im Dateisystem

Konsultieren Sie man tune2fsund man resize2fs- Sie können mit, um einige Dateisystem-Flags zu ändern.

$ sudo resize2fs -b /dev/mapper/target-device

Bei einem typischen Festplatten-RAID dauert dies 4 Minuten mit hoher E / A- und CPU-Belastung.

Schritt 4: Ändern Sie die Größe des Dateisystems

$ sudo resize2fs -p /dev/mapper/target-device

Wenn Sie in der Befehlszeile keine Größe übergeben, geht resize2fs davon aus, dass der gesamte verfügbare Speicherplatz verfügbar ist. Dies ist normalerweise genau das, was Sie möchten. Das -pFlag aktiviert Fortschrittsbalken - diese werden jedoch erst nach einigen ersten Schritten angezeigt.

Bei einem typischen Festplatten-RAID dauert dies 4 Minuten mit hoher E / A- und CPU-Belastung.

Überprüfen Sie es erneut

Überprüfen Sie das Dateisystem erneut

$ sudo e2fsck -fn /dev/mapper/target-device

e2fsck neuerer Versionen schlägt möglicherweise vor, Zeitstempel oder Extent-Bäume zu korrigieren, die in früheren Versionen nicht richtig verarbeitet wurden. Dies ist kein Hinweis auf ein ernstes Problem, und Sie können es jetzt oder später beheben.

Wenn Fehler auftreten, geraten Sie nicht in Panik und versuchen Sie nicht , auf das Volume zu schreiben. Konsultieren Sie jemanden mit umfassenden Kenntnissen des Dateisystems, da weitere Vorgänge wahrscheinlich Daten zerstören würden!

Wenn keine Fehler auftreten, montieren Sie das Gerät erneut:

$ sudo mount /dev/mapper/target-device

Erfolg!

Für den weiteren Betrieb des aktualisierten Dateisystems benötigen Sie keine Nicht-Ubuntu-Version von e2fsprogs - der Kernel unterstützt diese bereits seit geraumer Zeit. Es war nur erforderlich, das Upgrade zu starten.


Als Referenz wird eine ähnliche Fehlermeldung ausgegeben, wenn mke2fs aufgefordert wird, ein großes Gerät mit unangemessenen Optionen zu erstellen:

$ mke2fs -O ^64bit /dev/huge
mke2fs: Size of device (0x123456789 blocks) is too big to be expressed in 32 bits using a blocksize of 4096.
angst
quelle
1
Das ist richtig. Ich möchte hinzufügen, dass RedHat (also RHEL, Centos usw.) in seinem Installationsprogramm XFS gegenüber Ext4 bevorzugte, wenn ein Dateisystem über 16 TB partitioniert wurde, und jetzt XFS als Standarddateisystem bevorzugt.
Diablo-D3
Ja, die meisten älteren Kernel, die in der RedHat-Welt noch von Bedeutung sind, bieten noch keine stabile Unterstützung für 64-Bit-ext4. Afaik Ubuntu passt zu dem, was viele Linux-Gurus sagen, dass ext4 durch btrfs ersetzt werden soll. Obwohl ext4 in den Features dem von btrfs nahe kommt, glaube ich, ist btrfs eleganter im Design und vielleicht sogar weniger anfällig für Bugs.
Angst
2
btrfs ist nicht bereit für die Produktion und wird möglicherweise nie bereit für die Produktion sein, da Oracle die Entwicklung auf den Prüfstand gestellt hat. Meine persönliche Meinung ist, wenn Sie dieses Maß an Dateisystemkomplexität benötigen, sollten Sie einen winzigen 8-GB-XFS-Stamm verwenden und ZFS für Ihre tatsächlichen Datenspeicheranforderungen verwenden.
Diablo-D3
0

Es passierte mir kürzlich mit einem Ubuntu 18.04, der nach der Erstinstallation mit einem 16.04-Ubuntu aktualisiert wurde ... Das Speicherarray (/ dev / sdb) wurde ursprünglich in zwei 14-TB-Partitionen partitioniert, und das aus Gründen der Vergrößerung die erste Partition auf 28 TB, bei der das Problem aufgetreten ist.

Ich musste keine neue Version von resize2fs herunterladen, da diese sehr neu war.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

Das einzige Problem war die Konvertierung der 64-Bit-Partition 1, die in 32 Bit formatiert wurde.

# tune2fs -O 64bit /dev/sdb1
tune2fs 1.44.1 (24-Mar-2018)
Please run "resize2fs -b /dev/sdb1" to enable 64-bit mode.

# resize2fs -b /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Convert the file system to 64 bits.
The file system on /dev/sdb1 now has a size of 3662109119 blocks (4k).

Schließlich vergrößern wir die Festplattenpartition!

# resize2fs /dev/sdb1
resize2fs 1.44.1 (24-Mar-2018)
Resizing the file system on /dev/sdb1 to 7324303099 (4k) blocks.
The file system on / dev / sdb1 now has a size of 7324303099 blocks (4k).
MaxiReglisse
quelle