65 votes

Pourquoi mes systèmes de fichiers XFS consomment-ils soudainement plus d'espace et sont-ils remplis de fichiers épars ?

J'ai couru Systèmes de fichiers XFS comme partitions de données/de croissance pendant près de 10 ans sur divers serveurs Linux.

J'ai remarqué un phénomène étrange avec les serveurs CentOS/RHEL récents fonctionnant avec la version 6.2+.

L'utilisation du système de fichiers stable est devenue très variable après le passage à la nouvelle révision du système d'exploitation EL6.0 et EL6.1. Les systèmes initialement installés avec la version EL6.2+ présentent le même comportement, avec de fortes variations de l'utilisation du disque sur les partitions XFS (voir l'exemple de l'utilisation du disque). bleu dans le graphique ci-dessous).

Avant et après. La mise à niveau de 6.1 à 6.2 a eu lieu samedi. xfs graph

Le graphique d'utilisation du disque du dernier trimestre du même système, montrant les fluctuations de la semaine dernière. enter image description here

J'ai commencé à vérifier que les systèmes de fichiers ne contenaient pas de gros fichiers et que les processus ne s'emballaient pas (fichiers journaux, peut-être ?). J'ai découvert que mes fichiers les plus volumineux rapportaient des valeurs différentes à partir de du y ls . Exécuter du avec et sans le --apparent-size illustre la différence.

# du -skh SOD0005.TXT
29G     SOD0005.TXT

# du -skh --apparent-size SOD0005.TXT
21G     SOD0005.TXT

Une vérification rapide en utilisant le utilité de ncdu sur l'ensemble du système de fichiers :

Total disk usage: 436.8GiB  Apparent size: 365.2GiB  Items: 863258

Le système de fichiers est plein de fichiers épars avec près de 70 Go d'espace perdu par rapport à la version précédente du système d'exploitation/noyau !

J'ai parcouru les Bugzilla de Red Hat et les journaux de changement pour voir s'il y avait des rapports sur le même comportement ou de nouvelles annonces concernant XFS.

Nada.

Je suis passé de la version du noyau 2.6.32-131.17.1.el6 a 2.6.32-220.23.1.el6 pendant la mise à niveau ; aucun changement dans le numéro de version mineur.

J'ai vérifié la fragmentation des fichiers avec le filefrag outil. Certains des plus gros fichiers de la partition XFS avaient des milliers d'extensions. L'exécution d'une défragmentation en ligne avec xfs_fsr -v pendant une période d'activité lente a permis de réduire temporairement l'utilisation du disque (voir mercredi dans le premier graphique ci-dessus). Cependant, l'utilisation a explosé dès que l'activité intense du système a repris.

Qu'est-ce qui se passe ici ?

2 votes

Mmm... Piazza....

79voto

ewwhite Points 193555

J'ai retrouvé la trace de ce problème lors d'une discussion sur un commit à la Arbre source XFS à partir de décembre 2010. Le correctif a été introduit dans le noyau 2.6.38 (et, bien évidemment, repris ultérieurement dans certains noyaux de distribution Linux populaires).

Les fluctuations observées dans l'utilisation du disque sont le résultat d'une nouvelle fonctionnalité ; Préallocation dynamique spéculative EOF de XFS .

Il s'agit de réduire la fragmentation des fichiers lors des écritures en continu en allouant l'espace de manière spéculative à mesure que la taille des fichiers augmente. La quantité d'espace préalloué par fichier est dynamique et dépend principalement de l'espace libre disponible sur le système de fichiers (pour éviter de manquer complètement d'espace).

Il suit ce calendrier :

freespace       max prealloc size
  >5%             full extent (8GB)
  4-5%             2GB (8GB >> 2)
  3-4%             1GB (8GB >> 3)
  2-3%           512MB (8GB >> 4)
  1-2%           256MB (8GB >> 5)
  <1%            128MB (8GB >> 6)

Il s'agit d'un ajout intéressant au système de fichiers, car il peut aider à gérer certains des fichiers massivement fragmentés avec lesquels je travaille.

L'espace supplémentaire peut être récupéré temporairement en libérant le cache des pages, les dentries et les inodes avec :

sync; echo 3 > /proc/sys/vm/drop_caches

La fonction peut être entièrement désactivée en définissant un allocsize pendant le montage du système de fichiers. La valeur par défaut pour XFS est allocsize=64k .

L'impact de ce changement sera probablement ressenti par les systèmes de surveillance/seuil (c'est ainsi que je l'ai détecté), mais il a également affecté les éléments suivants systèmes de bases de données et pourrait entraîner des résultats imprévisibles ou indésirables pour les machines virtuelles et les baies de stockage à allocation fine (elles utiliseront plus d'espace que prévu).

Dans l'ensemble, cela m'a pris au dépourvu car il n'y a pas eu d'annonce claire du changement de système de fichiers au niveau de la distribution ou même dans le suivi de la page d'accueil du site web de l'entreprise. Liste de diffusion XFS .


Modifier :
Les performances sur les volumes XFS avec cette fonctionnalité sont considérablement améliorées. Je constate une fragmentation constante de < 1 % sur des volumes qui affichaient auparavant une fragmentation de 50 %. Les performances d'écriture sont globalement en hausse !

Statistiques du même ensemble de données, comparant l'ancien XFS à la version de EL6.3.

Vieux :

# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%

Nouveau :

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%

4 votes

Un million de upvotes et mon royaume à vous

1 votes

Merci ! Nous venons de passer de Debian Squeeze à Ubuntu et nous nous demandions pourquoi du et ls montraient des valeurs si différentes pour les gros fichiers (par exemple 50 Mo contre 64 Mo).

1 votes

@ewwhite Avez-vous désactivé cette fonction pour récupérer l'espace ? Ou est-ce que cet article dit simplement que cette fonctionnalité est à l'origine de l'écart entre les tailles signalées ? Il semble que "sur les systèmes de base de données ou les VM à provisionnement fin, envisagez de désactiver cette fonction", mais je ne suis pas sûr de ce que vous avez décidé de faire, en fin de compte.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X