inodes, comparaison d'espace consommé pour de nombreux petits fichiers (xfs, btrfs, ext4)

9

J'ai une partition ext4 (LVM sur une machine virtuelle) avec une grande quantité de petits fichiers , que je dois étendre tous les 3-4 mois.

Concernant la quantité d'espace utilisée par les inodes.

L'un des systèmes de fichiers xfs, btrfs ou ext4 utilise-t-il moins d'espace?

En d'autres termes, le passage à btrfs ou xfs ralentira-t-il le remplissage d'une partition avec des inodes puis avec ext4?

abadys
la source
si vous utilisez ext4 et prévoyez de stocker principalement des types de petite taille, vous devez le créer avec mkfs.ext4 -t newspour de meilleurs résultats. Aussi, je suggère de tester - créer (sur lvm, ou périphérique de bouclage par exemple) chacun des systèmes de fichiers à tour de rôle, et commencer à copier vos vrais fichiers jusqu'à ce qu'il se remplisse. Quand il se remplit, faites df -i(ou find | wc -l) pour trouver celui qui a réussi à stocker la plupart de vos fichiers - de cette façon, vous en serez sûr.
Matija Nalis
1
@MatijaNalis, -Tavec un T majuscule. Le fichier de configuration a également d'autres choix utiles
ilkkachu
@ilkkachu correct, merci. Cela devrait êtremkfs.ext4 -T news
Matija Nalis
Quelle est la taille des fichiers?
drudru

Réponses:

6

Pour commencer avec votre première question: oui, l'un de ces systèmes de fichiers utilise moins d'espace. Même sans plus de détails, il est peu probable qu'ils utilisent tous exactement la même quantité d'espace, étant donné qu'ils ont des implémentations différentes. On est donc obligé d'utiliser moins d'espace que tous les autres.

Btrfs a l'allocation dynamique des inodes, il n'y a donc pas de remplissage comme vous le faites avec les tables d'inodes pour ext4 (dont la taille est définie au moment de la création du système de fichiers ext4).

XFS est dynamique de manière similaire, mais a une limite (pourcentage du système de fichiers qui peut être utilisé pour les inodes), donc là, si vous remplissez votre allocation d'inode dépend du pourcentage défini ainsi que du nombre de fichiers / tailles de fichier

Anthon
la source
Merci pour la réponse rapide! On dirait que XFS est le choix le plus sûr pour l'instant. Ce pourcentage d'utilisation d'inode peut-il être modifié dynamiquement? et sinon, existe-t-il un moyen de prévoir le montant qui sera nécessaire?
abadys
1
Vous devriez pouvoir le faire avecxfs_growfs -m XX
Anthon
3

Oui, et sachez que tout dépend de vos besoins:

Btrfs (prononcé comme Butter FS, Better FS ou B-Tree FS)

Étant donné que le btrfs sera capable de s'étendre sur plusieurs disques durs, c'est un très bon format qu'il peut prendre en charge 16 fois plus d'espace disque que l' ext4 . Une taille de partition maximale du système de fichiers btrfs est de 16 exbibytes, ainsi qu'une taille de fichier maximale de 16 exbibytes également.

Nombre maximum de fichiers: 2 ** 64

XFS

Le XFS est un système de fichiers de journalisation 64 bits hautes performances. XFS prend en charge la taille maximale du système de fichiers de 8 exbibytes pour le système de fichiers 64 bits. Maintenant, RHEL 7.0 utilise XFS comme système de fichiers par défaut, y compris la prise en charge de l'utilisation de XFS pour la /bootpartition.

Nombre maximum de fichiers: 2 ** 64

EXT4

L' ext4 est bien connu car il apporte les améliorations de vitesse par rapport à ext3. L'ext4 a quelques limites. La taille maximale d'un fichier est de 16 tébioctets (soit environ 17,6 téraoctets). Le plus grand volume / partition que vous pouvez avoir avec ext4 est de 1 exbibyte. Comme dans les systèmes de fichiers les plus modernes, c'est un système de fichiers de journalisation qui signifie qu'il gardera un journal de l'endroit où les fichiers sont principalement situés sur le disque et de toutes les autres modifications qui se produisent sur le disque. Indépendamment de toutes ses fonctionnalités, il ne prend pas en charge la compression transparente, le chiffrement transparent ou la déduplication des données. Les instantanés sont pris en charge techniquement, mais cette fonctionnalité est au mieux expérimentale.

Nombre maximum de fichiers: 4 milliards

XFS vs Btrfs

XFS n'a pas de RAID, tandis que Btrfs RAID n'est pas encore complètement stable et en est à ses débuts. XFS est de plus en plus mature que Btrfs , mais nous ne pouvons pas nier que Btrfs est puissant et un système de fichiers en pleine croissance.

Pour l'instant, XFS est mon choix - d'autant plus que c'est le FS par défaut sur RHEL 7 -, sauf si j'ai vraiment besoin de Btrfs.

FarazX
la source
1
Cela contient de bonnes informations générales sur les systèmes de fichiers en général, mais je ne vois pas le problème spécifique des petits fichiers mentionné ici.
ilkkachu
@ilkkachu "grande quantité de petits fichiers" qu'est-ce que cela signifie? Il s'agit d'inodes car les fichiers sont tous créés via des inodes et l'inode est une structure de données utilisée pour représenter un objet de système de fichiers. Je pense donc avoir expliqué tous les besoins de l'auteur, en plus j'ai mentionné le nombre maximum de fichiers.
FarazX
2

Je suppose que le problème que vous avez n'est pas la partition qui se remplit d'inodes en soi, mais qui manque de nombre d'inodes dans le système de fichiers. ext4 réserve les inodes statiquement lorsque le système de fichiers est créé, mais vous pouvez définir le nombre avec des options pourmkfs.ext4 :

-i octets-par-inode
Spécifiez le rapport octets / inode. mke2fs crée un inode pour chaque octet par octet d'espace sur le disque. Plus le rapport octets-par-inode est grand, moins il y aura d'inodes créés.

-N nombre d'inodes
Remplace le calcul par défaut du nombre d'inodes qui devrait être réservé pour le système de fichiers (qui est basé sur le nombre de blocs et le rapport octets par inode). Cela permet à l'utilisateur de spécifier directement le nombre d'inodes souhaités.

Le manuel indique explicitement que le rapport d'octets par inode ne peut pas être modifié après la création du FS, mais le nombre total sera mis à l'échelle pour correspondre au rapport si le FS est redimensionné.

Vous pouvez également définir la taille de chaque inode. La valeur par défaut est de 256 octets sur "la plupart" des systèmes de fichiers, mais peut être réduite à 128 (la valeur par défaut pour les "petits" systèmes de fichiers). L'espace supplémentaire est utilisé pour stocker des attributs étendus (par exemple, les étiquettes SELinux), donc si vous n'en avez pas besoin, il devrait être sûr de réduire la taille au minimum.

-I inode-size
Spécifiez la taille de chaque inode en octets. La valeur de taille d'inode doit être une puissance de 2 supérieure ou égale à 128.

df -idevrait montrer le nombre d'inodes alloués et utilisés. Avec les options par défaut, une partition de 30 Go que j'ai examinée avait un inode pour 16 Ko, mais si vos fichiers sont très petits, vous pouvez définir, par exemple, -i 4096un inode pour chaque bloc de données du système.

Si vos fichiers sont inférieurs à 4096, vous souhaiterez peut-être également réduire la taille des blocs du système de fichiers, car tous les fichiers normaux nécessiteront de toute façon un bloc de données complet. (C'est-à-dire sur ext4. Je ne sais pas si d'autres systèmes de fichiers actuels emballent de petits fichiers.)

-b block-size
Spécifiez la taille des blocs en octets. Les valeurs de taille de bloc valides sont 1024, 2048 et 4096 octets par bloc. Si elle est omise, la taille de bloc est déterminée de manière heuristique par la taille du système de fichiers et l'utilisation attendue du système de fichiers (voir l'option -T).

mkfs.ext4a également l' -T <type>option qui peut être utilisée comme raccourci pour tout ou partie de ceux-ci. Les paramètres sont dedans /etc/mke2fs.conf, ce qui sur mon Debian rend par exemple mkfs.ext4 -T smalléquivalent à

mkfs.ext4 -b 1024 -I 128 -i 4096

Ce qui n'est peut-être pas un mauvais ensemble d'options pour de nombreux petits fichiers (et pas de xattrs.)

Si vos fichiers sont encore plus petits que 1 Ko, un système de fichiers n'est peut-être pas le meilleur moyen de sauvegarder les données, mais quelque chose comme une base de données ou un système spécifique à une application devrait peut-être être envisagé.

ilkkachu
la source