web-dev-qa-db-fra.com

Existe-t-il des inconvénients à la création de systèmes de fichiers ext4 avec un maximum d'inodes?

La création de systèmes de fichiers ext4 avec des inodes 2 ^ 32-1 présente-t-elle des inconvénients?

J'ai un lecteur de 1 To et je voudrais stocker 800 millions à 1,5 milliards de petits fichiers sur celui-ci. Il semble que le maximum soit de 4 milliards, alors je me demande si je pourrais le régler au maximum lors de la création d'un FS, ou si je devrais trouver une autre solution.

4
Fluffy

Selon des questions similaires sur Stack Overflow et nix & Linux (voir ci-dessous), il est déconseillé de maximiser le nombre d'inodes sur un système de fichiers ext4.

Mieux vaut utiliser un autre système de fichiers ou diviser votre disque en plusieurs systèmes de fichiers.

Résumer:

  • Un inode occupe 256 octets. Il peut être configuré à 128, mais même si:

    2³² inodes × 256 bytes each = 1 TB
    
  • Lors de la création d'un système de fichiers ext4, vous pouvez spécifier le type d'utilisation défini dans /etc/mke2fs.conf:

    mkfs.ext4 -T usage-type /dev/something
    

    Pour stocker de nombreux petits fichiers, le type small peut être utilisé:

    small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }
    

    Cela signifie: pour chaque 4096 octets d'espace disque (taille du système de fichiers), un inode sera réservé, chacun ayant une taille de 128 octets. La commande mkfs.ext4 -T small /dev/something créerait ainsi 244 millions d'inodes sur un système de fichiers de 1 To, occupant 31 Go. Ces 244 millions de fichiers occuperont au moins 250 Go (min. 1024 octets chacun).

  • Pour stocker 1 milliard d'inodes avec un faible encombrement (128 octets), vous aurez besoin de 128 Go rien que pour les inodes. Si la taille de bloc la plus petite possible (1024 selon la page de manuel de mk2efs) est utilisée, ces 1 milliard de fichiers occuperaient au moins 1 To (mais souvenez-vous qu'il ne vous reste que 872 Go à cause des 128 Go pour les inodes).

  • La plus petite taille de bloc possible pour ext4 est de 1024 octets. Par conséquent, vous ne pouvez pas stocker plus de 1 TB/1024 = 1 milliard de fichiers et il est inutile d'avoir plus d'inodes.

  • En règle générale, le inode_ratio ne devrait pas être plus petit que le blocksize car vous ne pouvez pas (facilement) stocker plus d'un fichier dans un bloc.

  • Il est possible de stocker les 60 premiers octets d'un fichier directement dans l'inode si le système de fichiers est configuré de cette façon. Dans ce cas, le fichier n'occuperait pas un bloc (normal); lisez à propos de tels données en ligne ici mais considérez également le taille d'inode .

  • D'un commentaire au question U & L :

    Trop d'inodes ont un coût certain, ils prennent de la place eux-mêmes et croyez-moi, les performances de fsck sont extrêmement sérieuses. Nous parlons de ralentissements pratiquement exponentiels, comme 30 secondes contre 2 jours ... et ceci est lié aux entrées/sorties. Sans parler des ralentissements dans la liste de fichiers, l'indexation, etc.


Références:

2
PerlDuck