Come ridimensionare una partizione ext4 oltre il limite di 16 TB?


26

Quando si tenta di ridimensionare e la vecchia partizione ext4 creata senza il flag a 64 bit, resize2fs 1.42 fallirà se la nuova dimensione è o supera 16 TiB.

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

Non voglio copiare i file su un supporto esterno. Non voglio nemmeno rischiare la perdita di dati. Come posso ridimensionare il volume in sicurezza?

Risposte:


46

Stai tentando di ridimensionare un filesystem che è stato creato prima che l' -O 64bitopzione diventasse predefinita. È possibile aggiornare il filesystem ext a 64 bit, consentendogli di estendere volumi significativamente maggiori (1024 PiB anziché 16 TiB).

Supponendo che venga chiamato il dispositivo di destinazione /dev/mapper/target-device, questo è ciò che devi fare:

Prerequisiti

  1. Questa dimensione del volume deve essere supportata da RAID. Errori del disco regolari potranno causare danni in caso contrario.
  2. Tuttavia, RAID non è un backup . È necessario avere i vostri oggetti di valore conservati altrove.
  3. Innanzitutto ridimensionare e verificare tutti i volumi circostanti (tabelle delle partizioni, crittografia, lvm).
  4. Dopo aver modificato la configurazione RAID dell'hardware, Linux può o meno riconoscere immediatamente la nuova dimensione massima. Controllare $ cat /proc/partitionse riavviare se necessario.

Usa un kernel stabile recente e e2fsprogs

  1. Assicurati di (controllare uname -r) che stai eseguendo un kernel in grado di gestire correttamente filesystem ext4 a 64 bit - vuoi usare un 4.4.xkernel o successivo (default Ubuntu 16 e successivi).
  2. Acquisisci e2fsprogs almeno della versione 1.43

    • Ubuntu 16.04(21-04-2016) è stato rilasciato con e2fsprogs 1.42.12(25-08-2014)
    • e2fsprogs 1.43 (17/05/2016) è la prima versione in grado di aggiornare la dimensione dell'indirizzo extfs.
    • Ubuntu 18.04(26-04-2018) spedito con e2fsprogs 1.44.x(bene!)

Se sei acceso 16.04e non riesci ad eseguire l'aggiornamento a una nuova versione di Ubuntu, dovrai abilitare il supporto del pacchetto sorgente e installare manualmente una versione più recente:

$ 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

Ridimensiona

Passaggio 1: smontare correttamente il filesystem

$ sudo umount /dev/mapper/target-device

Passaggio 2: verificare la presenza di errori nel file system

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

Passaggio 3: abilitare il supporto a 64 bit nel filesystem

Consultare man tune2fse man resize2fs- è possibile modificare alcuni flag del filesystem.

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

Su un tipico HDD RAID, sono necessari 4 minuti di elevato carico IO e CPU.

Passaggio 4: ridimensionare il filesystem

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

Se non si passa una dimensione sulla riga di comando, resize2fs presuppone che "cresca in tutto lo spazio disponibile", in genere è esattamente ciò che si desidera. Il-p flag ha abilitato le barre di avanzamento, ma quelle vengono visualizzate solo dopo alcuni passaggi iniziali.

Su un tipico HDD RAID, sono necessari 4 minuti di elevato carico IO e CPU.

Verifica di nuovo

Controlla di nuovo il filesystem

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

e2fsck delle versioni più recenti può suggerire di correggere i timestamp o l'estensione degli alberi che le versioni precedenti gestivano male. Questa non è un'indicazione di alcun problema serio e puoi scegliere di risolverlo ora o più tardi.

Se si verificano errori, non farti prendere dal panico e non tentare di scrivere sul volume; consultare qualcuno con una vasta conoscenza del filesystem, poiché ulteriori operazioni potrebbero distruggere i dati!

Se non si verificano errori, rimontare il dispositivo:

$ sudo mount /dev/mapper/target-device

Successo!

Non avrai bisogno di alcuna versione non di Ubuntu di e2fsprogs per il funzionamento continuo del filesystem aggiornato - il kernel supporta quelli da un po 'di tempo ormai. È stato necessario solo avviare l'aggiornamento.


Per riferimento, c'è un messaggio di errore simile che verrà stampato da mke2fs se viene richiesto di creare un dispositivo enorme con opzioni non appropriate:

$ 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.

1
Questo è corretto. Vorrei aggiungere che Redhat (quindi RHEL, Centos, ecc.) Preferiva XFS rispetto a Ext4 nel loro programma di installazione quando partizionava un filesystem su 16 TB, e ora preferisco XFS come file system predefinito.
Diablo-D3,

Sì, i kernel più vecchi ancora significativi nel mondo RedHat non contengono ancora un supporto stabile per ext4 a 64 bit. Afaik Ubuntu si adatta a ciò che dicono molti guru di Linux, ext4 deve essere sostituito da btrfs - sebbene ext4 sia vicino a btrfs nelle funzionalità ora, credo che btrfs sia più elegante nel design e forse anche meno incline a bug.
anx,

2
btrfs non è pronto per la produzione e potrebbe non essere mai pronto per la produzione, dal momento che Oracle ha messo lo sviluppo sul masterizzatore. La mia opinione personale è che se hai bisogno di quel livello di complessità del file system, usa un minuscolo root XFS da 8 GB combinato con l'uso di ZFS per le tue reali esigenze di archiviazione dei dati.
Diablo-D3,

0

Mi è successo di recente, con un Ubuntu 18.04 che era stato aggiornato dopo essere stato installato inizialmente con un Ubuntu 16.04 ... L'array di archiviazione (/ dev / sdb) era stato inizialmente partizionato in due partizioni da 14 TB, e questo è volendo ingrandire la prima partizione a 28 TB in cui si è verificato il problema.

Non avevo bisogno di scaricare una nuova versione di resize2fs perché era molto recente.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

L'unico problema era convertire la partizione 1 a 64 bit che era stata formattata in 32 bit ... Invece di invitare il lettore a consultare la documentazione di tune2fs (come suggerisce Anx), propongo un vero esempio!

# 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).

Infine, allarghiamo la partizione del disco!

# 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).
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.