Stai tentando di ridimensionare un filesystem che è stato creato prima che l' -O 64bit
opzione 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
- Questa dimensione del volume deve essere supportata da RAID. Errori del disco regolari potranno causare danni in caso contrario.
- Tuttavia, RAID non è un backup . È necessario avere i vostri oggetti di valore conservati altrove.
- Innanzitutto ridimensionare e verificare tutti i volumi circostanti (tabelle delle partizioni, crittografia, lvm).
- Dopo aver modificato la configurazione RAID dell'hardware, Linux può o meno riconoscere immediatamente la nuova dimensione massima. Controllare
$ cat /proc/partitions
e riavviare se necessario.
Usa un kernel stabile recente e e2fsprogs
- 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.x
kernel o successivo (default Ubuntu 16 e successivi).
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.04
e 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 tune2fs
e 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.