Lors d'une tentative de redimensionnement et d'une ancienne partition ext4 créée sans l'indicateur 64 bits, resize2fs 1.42 échouera si la nouvelle taille est supérieure ou égale à 16 To.
$ resize2fs -p /dev/mapper/target-device
resize2fs: New size too large to be expressed in 32 bits
Je ne veux pas copier les fichiers sur un support externe. Je ne veux pas risquer de perdre des données non plus. Comment puis-je redimensionner le volume en toute sécurité?
Vous essayez de redimensionner un système de fichiers créé avant que l'option -O 64bit
ne devienne par défaut. Il est possible de mettre à niveau votre système de fichiers ext vers des adresses 64 bits, ce qui lui permet de couvrir des volumes beaucoup plus importants (1024 PiB au lieu de 16 TiB).
En supposant que votre périphérique cible s'appelle /dev/mapper/target-device
, voici ce que vous devez faire:
$ cat /proc/partitions
et redémarrez si nécessaire.uname -r
) que vous exécutez un noyau capable de gérer correctement les systèmes de fichiers ext4 64 bits - vous voulez utiliser un noyau 4.4.x
ou ultérieur (Ubuntu 16 ou supérieur par défaut).Acquérir e2fsprogs d'au moins la version 1.43
Ubuntu 16.04
(2016-04-21) a été publié avec e2fsprogs 1.42.12
(2014-08-25)e2fsprogs 1.43
(2016-05-17) est la 1ère version capable de mettre à niveau la taille d'adresse extfs.Ubuntu 18.04
(2018-04-26) est livré avec e2fsprogs 1.44.x
(bon!)Si vous êtes sur 16.04
et que vous ne pouvez pas passer à une version plus récente d’Ubuntu, vous devrez activer le support du paquet source et installer manuellement une version plus récente:
$ 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
Étape 1: démontez correctement le système de fichiers
$ Sudo umount /dev/mapper/target-device
Étape 2: Recherchez les erreurs sur le système de fichiers
$ Sudo e2fsck -fn /dev/mapper/target-device
Étape 3: activez la prise en charge 64 bits dans le système de fichiers .
Consultez man tune2fs
and man resize2fs
- vous pouvez modifier certains indicateurs de système de fichiers.
$ Sudo resize2fs -b /dev/mapper/target-device
Sur un RAID de disque dur classique, cela prend 4 minutes de IO & charge CPU élevée.
Étape 4: Redimensionner le système de fichiers
$ Sudo resize2fs -p /dev/mapper/target-device
Si vous ne transmettez pas une taille sur la ligne de commande, resize2fs suppose que vous devez "passer à tout l'espace disponible" - c'est généralement exactement ce que vous voulez. L'indicateur -p
a activé les barres de progression, mais celles-ci ne s'affichent qu'après quelques étapes initiales.
Sur un RAID de disque dur classique, cela prend 4 minutes de IO & charge CPU élevée.
Vérifiez à nouveau le système de fichiers
$ Sudo e2fsck -fn /dev/mapper/target-device
e2fsck des versions plus récentes peut suggérer de corriger les horodatages ou les arborescences d’extension mal gérées par les versions précédentes. Ce n'est pas une indication d'un problème grave et vous pouvez choisir de le résoudre maintenant ou plus tard.
Si des erreurs se produisent, faites pas paniquez et faites pas essayez d'écrire sur le volume; consultez une personne ayant une connaissance approfondie du système de fichiers, car toute opération ultérieure risquerait de détruire les données!
Si aucune erreur ne se produit, remontez l'appareil:
$ Sudo mount /dev/mapper/target-device
Vous n'aurez besoin d'aucune version de e2fsprogs non-Ubuntu pour le fonctionnement continu du système de fichiers mis à niveau - le noyau les prend en charge depuis un certain temps déjà. Il était seulement nécessaire de lancer la mise à niveau.
Pour référence, il existe un message d'erreur similaire que mke2fs imprimera s'il lui est demandé de créer un périphérique énorme avec des options inappropriées:
$ 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.