web-dev-qa-db-fra.com

Comment redimensionner une partition ext4 au-delà de la limite de 16 To?

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é?

25
anx

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:

Conditions préalables

  1. Cette taille de volume doit être sauvegardée par RAID. Les erreurs de disque régulières causeront des dommages sinon.
  2. Toujours, RAID n'est pas une sauvegarde . Vous devez faire stocker vos objets de valeur ailleurs.
  3. Commencez par redimensionner et vérifier tous les volumes environnants (tables de partition, chiffrement, lvm).
  4. Après avoir modifié la configuration RAID matérielle, Linux peut ou non immédiatement accuser réception de la nouvelle taille maximale. Vérifiez $ cat /proc/partitions et redémarrez si nécessaire.

Utiliser un noyau stable récent et e2fsprogs

  1. Assurez-vous (cochez 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).
  2. 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

Redimensionner

É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érifier à nouveau

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

Succès!

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.
43
anx