Existe-t-il un moyen de faire en sorte que les systèmes de fichiers ext utilisent moins d’espace pour eux-mêmes sous Linux?

48

J'ai un tas de disques durs internes et externes que j'utilise sur un système Linux. Je n'ai que des systèmes Linux, alors utiliser un système de fichiers Linux n'aurait de sens que, n'est-ce pas? Cependant, j'utilise actuellement NTFS partout, car cela me donne l'espace le plus utilisable sur les disques durs.

Cependant, je voudrais maintenant passer aux systèmes de fichiers Linux, principalement pour des raisons d'autorisations et de compatibilité (par exemple, je ne parviens pas à redimensionner ma partition NTFS chiffrée par LUKS sous Linux, continue de me dire de choisir chkdsk sous Windows).

Cependant, lorsque j'ai formaté ces disques durs, j'ai essayé plusieurs systèmes de fichiers et chaque système de fichiers Linux, même ext2, qui pour autant que je sache n'a pas de journalisation, a utilisé beaucoup d'espace pour lui-même. Je ne me souviens pas des valeurs exactes, mais c’est plus de 100 Go que NTFS m’a apporté davantage sur un disque dur de 2 To, ce qui est beaucoup.

Ma question est donc la suivante: existe-t-il un moyen de faire en sorte que les systèmes de fichiers ext utilisent moins d’espace pour eux-mêmes? Ou existe-t-il un autre système de fichiers (j'ai essayé ext2, ext3, ext4, NTFS et vfat - aucun d'entre eux ne s'est approché de l'espace utilisable que m'offrait NTFS) avec un support Linux parfait et un grand espace utilisable?

J'aimerais savoir comment et pourquoi les systèmes de fichiers (en particulier ext2, qui n'a pas de journalisation) utilisent autant d'espace que NTFS et je ne sais pas où demander. Je préférerais la plupart du temps utiliser ext4 sans journalisation et tout ce qui consomme autant d'espace, si cela est possible.

confettis
la source
1
Avez-vous vu ce fil ?
JakeGould
4
Je l’ai dit, et cela explique ce qui occupe l’espace supplémentaire, mais la différence entre NTFS et ext est BEAUCOUP plus grande qu’entre reiserfs et ext, et je me demande s’il est possible de le réduire. Par exemple, sur un disque dur de 1 To, je suis capable d'utiliser 989 Go avec NTFS. ext4 me donnerait environ 909 Go.
confettis
C'est suffisant. Question décente et la réponse est éclairante aussi.
JakeGould
3
Comment mesurez-vous réellement quel espace est disponible? ceci est important car, selon les valeurs que vous regardez, vous pouvez ou non voir l'effet de la réservation de 5%, par exemple, comme indiqué dans la question liée
eMBee
2
Gardez à l'esprit que la journalisation sur des systèmes de fichiers tels que ext3 et ext4 est une bonne chose. Il est assez facile de perdre l’alimentation d’un disque externe ou de le débrancher par accident s’il s’agit d’une clé USB. Lorsque cela se produit, ce n’est souvent pas grave, car il se soigne lui-même à l’aide du journal lorsqu’il redémarre. Sans ce filet de sécurité, la situation serait bien pire. Ce n'est pas juste un cas de plus, c'est mieux.
Joe

Réponses:

97

Par défaut, ext2 et ses successeurs réservent 5% du système de fichiers à l'utilisateur root. Cela réduit la fragmentation et réduit le risque que l'administrateur ou les démons appartenant à la racine n'aient plus d'espace pour travailler.

Ces blocs réservés empêchent les programmes ne fonctionnant pas en tant que root de remplir votre disque. Le fait que ces considérations justifient ou non la perte de capacité dépend de l'utilisation du système de fichiers.

Le montant de 5% a été fixé dans les années 1980, lorsque les disques étaient beaucoup plus petits, mais ils ont été laissés tels quels. De nos jours, 1% est probablement suffisant pour la stabilité du système.

La réservation peut être modifiée à l'aide de l' -moption de la tune2fscommande:

tune2fs -m 0 /dev/sda1

Cela définira le pourcentage de blocs réservés à 0% (0 blocs).

Pour obtenir la valeur actuelle (entre autres), utilisez la commande:

tune2fs -l <device> 
harrymc
la source
10
Cela expliquerait parfaitement l’immense différence d’espace utilisable (5% des 2 To représentant 100 Go). Les disques ne seront utilisés pour rien en rapport avec la racine ou les fichiers système, donc je pense que ce serait sauvegardé de le désactiver. J'ai cependant une question: comment les programmes appartenant à root savent-ils qu'il y a plus d'espace libre que les programmes non root? Exécuter en dftant que non-racine vs racine ne montre aucune différence.
confettis
12
@confetti: Parce que le VFS ne rejette pas leurs tentatives d'écriture sur le disque avec une erreur (jusqu'à ce que le volume soit réellement plein, bien sûr).
Ignacio Vazquez-Abrams
1
tune2fs -l <device>devrait donner cette valeur parmi d'autres. Le montant de 5% a été fixé dans les années 1980, lorsque les disques étaient beaucoup plus petits, mais ils ont été laissés tels quels. De nos jours, 1% est probablement suffisant pour la stabilité du système.
harrymc
7
XFS réserve le plus petit des 5% ou 8192 blocs (32 Mio), de sorte que le montant réservé est généralement minime comparé à la taille du système de fichiers.
Michael Hampton
5
Merci beaucoup à tous pour les explications. Cela m'a aidé à comprendre grandement. Mon disque se remplissait entièrement jusqu’à son dernier octet, mais mon système n’a pas complètement échoué. Je comprends maintenant pourquoi.
confettis
3

si les données que vous avez l'intention de stocker sont compressibles, btrfs monté avec compress=zstd(ou compress-force=zstd) utiliserait probablement beaucoup moins d'espace disque que ext *

  • Cela fera que btrfs compressera vos données de manière transparente avant de les écrire sur le disque, et les décompressera de manière transparente lors de la lecture. de plus, ext4 pré-alloue tous les inodes lors de la création du système de fichiers, btrfs les crée au besoin, je suppose que cela pourrait économiser de l’espace.
hanshenrik
la source
1
Cela vous dérange-t-il d'ajouter plus d'informations à cette réponse? (Comment ça marche, ce que ça fait, peut-être une référence, ...)
confetti
@confetti comme ça? patchwork.kernel.org/patch/9817875
hanshenrik
J'aime beaucoup cette idée, mais il serait bien d’avoir plus d’informations sur son impact sur la vitesse et les performances.
confettis
2
@confetti, puisque vous utilisez un disque dur, cela améliorera probablement les performances. Les processeurs sont tellement plus rapides que les disques durs que la partie lente de l'accès au disque obtient les données sur et hors du disque; le temps passé à comprimer ou à décompresser ne sera pas perceptible.
Mark
2
Par contre, la plupart des types de fichiers volumineux actuels (par exemple, les images, l’audio, la vidéo et même les formats de documents texte les plus riches) tendent à être déjà compressés et ne bénéficient généralement pas d’une compression supplémentaire. Du moins pas du genre simple à usage général effectué au niveau du système de fichiers.
Ilmari Karonen
3

Un autre point dont on n'a pas encore parlé est le nombre d'inodes que vous avez réservés sur votre système de fichiers.

Par défaut, mkfs crée un certain nombre d’inodes qui devraient permettre de mettre beaucoup de très petits fichiers dans votre système de fichiers. Si vous savez que les fichiers seront très volumineux et que vous ne placerez qu'un petit nombre de fichiers sur le système de fichiers, vous pouvez réduire le nombre d'inodes.

Prends soin de toi! Ce nombre (ou le rapport entre l'espace et le nombre d'inodes) ne peut être défini qu'au moment de la création du système de fichiers. Même lors de l'extension du FS, le rapport reste le même.

glglgl
la source
Sinon, si vous savez que vous allez stocker beaucoup de très petits fichiers, vous pouvez augmenter le nombre d'inodes et réduire la taille du bloc afin de ne pas gaspiller autant d'espace. (Chaque fichier doit consommer au moins un bloc, même s'il s'agit d'un octet. Utilisez ls -ls pour comparer la taille de celle utilisée sur le disque.)
Perkins
@Perkins Vous avez raison, mais je pense que cela vaut uniquement pour les très petits fichiers: la taille de bloc par défaut est 4kiB (IIRC), la taille minimale est de 1 kiB. Donc, pas tellement à gagner, sauf que votre disque est vraiment plein de ces fichiers. Mais néanmoins, je pourrais plonger dans cela demain.
Glglgl
2
ou bien utilisez btrfs, qui crée des inodes si nécessaire. alors que les inodes d'ext4 sont alloués au moment de la création du système de fichiers et ne peuvent pas être redimensionnés après création, avec une limite stricte de 4 milliards, les inodes de btrfs sont créés dynamiquement selon les besoins, et la limite est de 2 ^ 64, environ 18,4 quintillions, soit environ 4,6 milliards fois plus haut que la limite dure d'un ext4
maxi
Cela me rappelle de mettre en place une bobine Usenet. ext4 va stocker très petit (la limite est quelque part entre 60 et 160 octets selon beaucoup de choses) dans l'inode lui-même.
mr.spuratic
@hanshenrik Notez que vous avez la même limitation de taille de bloc sur btrfs (avec quelques moyens supplémentaires de le contourner), de sorte que vous devez toujours savoir quel type de fichier (grand ou petit ou les deux) vous allez stocker et Ajustez votre système de fichiers en conséquence si vous souhaitez utiliser le maximum de mémoire. La disponibilité de la compression automatique aide beaucoup si vous stockez des données volumineuses.
Perkins