web-dev-qa-db-fra.com

Comment puis-je augmenter le nombre d'inodes dans un système de fichiers ext4?

J'ai eu un problème (nouveau pour moi) la semaine dernière. J'ai un système de fichiers ext4 (Fedora 15). L'application qui s'exécute sur le serveur s'est soudainement arrêtée. Je n'ai pas pu trouver le problème à première vue.

df a montré 50% d'espace disponible. Après avoir cherché pendant environ une heure, j'ai vu un message sur le forum où le gars a utilisé df -i. L'option recherche l'utilisation des inodes. Le système était à court d'inodes, un problème simple que je n'avais pas réalisé. La partition n'avait que 3,2 millions d'inodes.

Maintenant, mes questions sont: Puis-je faire en sorte que le système ait plus d'inodes? Doit/peut-il être défini lors du formatage du disque? Avec les inodes 3.2M, combien de fichiers pourrais-je avoir?

61
piovisqui

Il semble que vous ayez beaucoup plus de fichiers que prévu.

Je ne sais pas s'il existe une solution pour modifier dynamiquement la taille de la table d'inode. J'ai peur que vous ayez besoin de sauvegarder vos données, de créer un nouveau système de fichiers et de restaurer vos données.

Pour créer un nouveau système de fichiers avec une énorme table d'inodes, vous devez utiliser l'option '-N' de mke2fs (8).

Je recommanderais d'utiliser d'abord l'option '-n' (qui ne crée pas le fs, mais affiche les informations utiles) afin que vous puissiez obtenir le nombre estimé d'inodes. Ensuite, si vous en avez besoin, utilisez '-N' pour créer votre système de fichiers avec un numéro d'inode spécifique.

35
cinsk

Avec 3,2 millions d'inodes, vous pouvez avoir 3,2 millions de fichiers et répertoires au total (mais plusieurs liens physiques vers un fichier n'utilisent qu'un seul inode).

Oui, il peut être défini lors de la création d'un système de fichiers sur la partition. Les options -T usage-type, -N number-of-inodes, ou -i bytes-per-inode peut tous définir le nombre d'inodes. J'utilise généralement -i, après avoir comparé la sortie de du -s et find | wc -l pour une collection de fichiers similaire et permettant une certaine marge.

Non, il ne peut pas être modifié sur place sur un système de fichiers existant. Toutefois:

  • Si vous exécutez LVM ou si le système de fichiers se trouve sur le LUN d'un SAN (soit directement sur le LUN, soit comme dernière partition sur le LUN), ou si vous avez de l'espace vide sur le disque après la partition, vous pouvez agrandir la partition, puis utilisation resize2fs pour étendre le système de fichiers. Cela ajoute plus d'inodes en proportion de l'espace ajouté, à peu près. Si vous voulez éviter de manquer d'inodes avant l'espace en supposant que les futurs fichiers ont en moyenne la même taille, définissez un pourcentage de bloc réservé suffisamment élevé en utilisant tune2fs -m.
  • Si vous avez suffisamment d'espace et pouvez mettre le système de fichiers hors ligne, mettez-le hors ligne, créez un nouveau système de fichiers avec plus d'inodes et copiez tous les fichiers.
  • Si seulement un sous-ensemble de fichiers utilise beaucoup d'inodes et que vous disposez de suffisamment d'espace libre, créez un système de fichiers sur un périphérique en boucle soutenu par un fichier sur le système de fichiers, créez un système de fichiers avec plus d'inodes (et peut-être aussi des blocs plus petits) dessus, et y déplacer les répertoires incriminés. C'est probablement un problème de performances et un problème de maintenance, mais c'est une alternative.
  • Et bien sûr, si vous pouvez supprimer un grand nombre de fichiers inutiles, cela devrait aussi vous aider.
13
david

Comme autre solution de contournement, je pourrais suggérer d'envisager de regrouper d'énormes collections de fichiers dans une archive non compressée (!) tar, puis d'utiliser archivemount pour le monter en tant que système de fichiers. Une archive tar est meilleure pour le partage qu'une image de système de fichiers et offre des performances similaires lors de la sauvegarde sur un cloud ou un autre stockage.


Si la collection est censée être en lecture seule, squashfs peut être une option, mais elle nécessite certaines options activées dans le noyau, et la compression xz est également disponible pour tar avec les mêmes performances .

12
tijagi

J'ai des solutions alternatives à cette situation. Disons que vous avez 1000 inodes dans une partition de 10G. Mais en raison de la limite d'inodes, vous n'êtes pas censé utiliser tout l'espace de partition. Mais dans ces solutions, vous pourrez utiliser l'espace restant de la partition sans formatage it.

$ df -i  # see list ( I need just one free inode here so move just one file into other PARTITION)
/dev/part1  1000 999 1 99.9%     /data

$ dd if=/dev/zero of=/data/new_data
$ mkfs.ext4 /data/new_data
$ mkdir /data1
$ mount /data/new_data /data1

pour montage permanent

$ echo "/data/new_data /data1 ext4 defaults 0 1" >> /etc/fstab
7
SANJEET

J'ai récemment rencontré ce problème lors de l'utilisation de la mise à niveau d'apt ou d'aptitude.

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.1G  2.3G  70% /

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 521497   2791  100% /

Commande émise:

du /|sort -k1 -n

La plupart des fichiers révélés se trouvaient dans des sous-dossiers pour plusieurs versions du noyau dans:

/usr/src/linux-headers

Suppression de ces sous-dossiers et problème d'inode a été corrigé.

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 104986 419302   21% /
6
kph0x1

essayez du -s --inodes * 2>/dev/null |sort -g le cd dans le dernier dir en sortie et répéter.

Divulgation complète: tous les OS ne sont pas pris en charge --inodes flag pour la commande du (ce n'est pas le cas de mon Mac OS) mais de nombreux OS Linux le font.

2
Otto Leichliter