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


26

Lors de la tentative de redimensionnement et de l'ancienne partition ext4 créée sans l'indicateur 64 bits, resize2fs 1.42 échouera si la nouvelle taille est ou dépasse 16 To.

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

Je ne souhaite pas copier les fichiers sur un support externe. Je ne veux pas non plus risquer de perdre des données. Comment puis-je redimensionner le volume en toute sécurité?

Réponses:


46

Vous essayez de redimensionner un système de fichiers qui a été créé avant que l' -O 64bitoption 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 s'étendre sur des volumes beaucoup plus importants (1024 PiB au lieu de 16 TiB).

En supposant que votre appareil cible est appelé /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 seront causer d' autres dommages.
  2. Pourtant, RAID n'est pas une sauvegarde . Vous devez également conserver vos objets de valeur ailleurs.
  3. Redimensionnez et vérifiez d'abord tous les volumes environnants (tables de partition, chiffrement, lvm).
  4. Après avoir changé la configuration matérielle du RAID, Linux peut ou non reconnaître immédiatement la nouvelle taille maximale. Vérifiez $ cat /proc/partitionset redémarrez si nécessaire.

Utiliser un noyau stable récent et e2fsprogs

  1. Assurez-vous (vérifiez uname -r) que vous exécutez un noyau capable de gérer correctement les systèmes de fichiers 64 bits ext4 - vous souhaitez utiliser un 4.4.xnoyau ou une version ultérieure (Ubuntu 16 par défaut et supérieur).
  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 première version capable de mettre à niveau la taille de l'adresse extfs.
    • Ubuntu 18.04(2018-04-26) livré avec e2fsprogs 1.44.x(bon!)

Si vous êtes sur 16.04et ne pouvez pas mettre à niveau vers une version plus récente d'Ubuntu, vous devrez activer la prise en charge du package source et installer une version plus récente manuellement:

$ 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émonter correctement le système de fichiers

$ sudo umount /dev/mapper/target-device

Étape 2: recherchez des erreurs dans le système de fichiers

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

Étape 3: activer la prise en charge 64 bits dans le système de fichiers

Consultez man tune2fset man resize2fs- vous pouvez modifier certains indicateurs de système de fichiers.

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

Sur un disque dur RAID typique, cela prend 4 minutes de charge élevée d'E / S et du processeur.

Étape 4: redimensionner le système de fichiers

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

Si vous ne transmettez pas de taille sur la ligne de commande, resize2fs suppose "grandir sur tout l'espace disponible" - c'est généralement exactement ce que vous voulez. Le -pdrapeau a activé les barres de progression - mais celles-ci ne s'affichent qu'après certaines étapes initiales.

Sur un disque dur RAID typique, cela prend 4 minutes de charge élevée d'E / S et du processeur.

Vérifiez à nouveau

Vérifiez à nouveau le système de fichiers

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

L'e2fsck des versions plus récentes peut suggérer de corriger les horodatages ou les arborescences d'étendue que les versions précédentes ont mal traitées. Ce n'est pas une indication d'un problème grave et vous pouvez choisir de le corriger maintenant ou plus tard.

Si des erreurs se produisent, ne paniquez pas et n'essayez pas d'écrire sur le volume; consultez quelqu'un ayant une connaissance approfondie du système de fichiers, car d'autres opérations pourraient probablement détruire des données!

Si aucune erreur ne se produit, remontez l'appareil:

$ sudo mount /dev/mapper/target-device

Succès!

Vous n'aurez pas besoin d'une version non Ubuntu d'e2fsprogs pour continuer à utiliser le système de fichiers mis à niveau - le noyau les prend en charge depuis un certain temps maintenant. 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 est demandé de créer un énorme appareil 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.

1
C'est correct. Je voudrais ajouter que Redhat (donc RHEL, Centos, etc.) préférait XFS à Ext4 dans leur programme d'installation lors du partitionnement d'un système de fichiers sur 16 To, et préfère maintenant simplement XFS comme système de fichiers par défaut.
Diablo-D3

Oui, la plupart des noyaux plus anciens encore importants dans le monde RedHat ne contiennent pas encore de support stable pour 64 bits ext4. Afaik Ubuntu va avec ce que de nombreux gourous de Linux disent, ext4 doit être remplacé par btrfs - bien qu'ext4 soit proche de btrfs dans les fonctionnalités maintenant, je pense que btrfs est plus élégant dans la conception et peut-être encore moins sujet aux bugs.
anx

2
btrfs n'est pas prêt pour la production, et peut ne jamais être prêt pour la production, car Oracle en a mis le développement en veilleuse. Mon opinion personnelle est que si vous avez besoin de ce niveau de complexité du système de fichiers, utilisez une minuscule racine XFS de 8 Go combinée à l'utilisation de ZFS pour vos besoins réels de stockage de données.
Diablo-D3

0

Cela m'est arrivé récemment, avec un Ubuntu 18.04 qui avait été mis à jour après avoir été installé initialement avec un Ubuntu 16.04 ... La matrice de stockage (/ dev / sdb) avait été initialement partitionnée en deux partitions de 14 To, et c'est en voulant agrandir la première partition à 28 To que le problème est survenu.

Je n'ai pas eu besoin de télécharger une nouvelle version de resize2fs car elle était très récente.

# resize2fs 
resize2fs 1.44.1 (24-Mar-2018)

Le seul problème était de convertir la partition 1 64 bits qui avait été formatée en 32 bits ... Au lieu d'inviter le lecteur à consulter la documentation de tune2fs (comme le suggère Anx), je propose un vrai exemple!

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

Enfin, nous agrandissons la partition de disque!

# 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).
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.