Forum général.général Taille fichier différente entre ls et du

Posté par (site web personnel) . Licence CC By‐SA.
Étiquettes : aucune
7
12
fév.
2013

Bonjour,

Sur un serveur j'ai /var qui est plein à 100% (c'est df qui le dit). Je fouille à la recherche des rebelles et je tombe sur un cas :

#ls -l
-rw-r--r-- 1 root root 1374687232 févr. 12 11:00 connections.tdb
du *
269104 connections.tdb

Y aurait pas comme un problème avec la taille des fichiers suivant la commande ?

  • # Yo

    Posté par . Évalué à 1.

    Tu peux faire un du -h connections.tdb suivi d'un ls -h connections.tdb ?

    Zarbi ton problème. T'es sûr que c'est bien le même fichier connections.tdb ? ;)

    • [^] # Re: Yo

      Posté par (site web personnel) . Évalué à 2.

      du -h /var/lib/samba/connections.tdb --> 263M /var/lib/samba/connections.tdb

      ls -lh /var/lib/samba/connections.tdb --> -rw-r--r-- 1 root root 1,3G févr. 12 11:22 /var/lib/samba/connections.tdb

      Born to Kill EndUser !

      • [^] # Re: Yo

        Posté par (site web personnel) . Évalué à 3.

        Peux-tu faire un ls -lsh

        Parfois la taille prise par le fichier est différente de la taille du fichier.

  • # e2fsck

    Posté par (site web personnel) . Évalué à 2.

    Avez-vous vérifié que la partition est saine ? Certaines corruptions de partitions ne pourraient-elle pas aboutir à ce genre d'incohérence ?

    « IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace

    • [^] # Re: e2fsck

      Posté par (site web personnel) . Évalué à 1.

      J'ai pensé à ça aussi, mais avant j'envoie une demande de support à redhat pour être certain.

      Born to Kill EndUser !

  • # Sparse file

    Posté par . Évalué à 8.

    https://en.wikipedia.org/wiki/Sparse_file

    Par contre, tu as peut-être un petit souci avec ton Samba.

  • # Taille logique != taille physique

    Posté par . Évalué à 10.

    Il est possible que tous les 1374687232 octets ne soient pas physiquement alloués (fichier à trous ou "sparse file").

    Par exemple:

    $ dd if=/dev/zero of=x bs=4k count=1 seek=1048575
    1+0 enregistrements lus
    1+0 enregistrements écrits
    4096 octets (4,1 kB) copiés, 0,000128089 s, 32,0 MB/s
    $ ls -lh x
    -rw-rw-r-- 1 toto toto 4,0G févr. 12 11:35 x
    $ du -h x
    4,0K x
    
    

    Le fichier a une taille logique de 4 Go mais n'occupe que 4 ko.

    • [^] # Re: Taille logique != taille physique

      Posté par (site web personnel) . Évalué à 2.

      Ok donc du est plus fiable que ls, mais df se base sur quoi ? logique ou physique ?

      Born to Kill EndUser !

      • [^] # Re: Taille logique != taille physique

        Posté par . Évalué à 7.

        df se base sur le physique.
        Il ne parcourt pas l'arborescence de fichiers pour additionner les tailles mais se contente de compter les blocs marqués comme libres dans une table du système de fichiers (c'est pour ça qu'il est beaucoup plus rapide que du).

  • # Fichier purgé non désalloué

    Posté par . Évalué à 9.

    Il est possible que tu aies des fichiers qui ont été purgés mais sont toujours alloués parce que le process les utilisant ne les a pas fermés.
    df indique alors que l'utilisation est de 100% mais ils sont introuvables avec du.
    Pour les identifier, tu peux faire:

    ls -l /proc/*/fd/* | grep '(deleted)'
    
    
    • [^] # Re: Fichier purgé non désalloué

      Posté par . Évalué à 5.

      ou plus simplement

      lsof -l | grep deleted

    • [^] # Re: Fichier purgé non désalloué

      Posté par (site web personnel) . Évalué à 3. Dernière modification le 12 février 2013 à 13:00.

      Intéressant

      lsof -l | grep deleted
      vmtoolsd 2706 0 7u REG 253,1 9857 444419 /tmp/vmware-root/appLoader-2706.log (deleted)
      mysqld 3675 27 1w REG 253,2 367 613690 /var/log/mysql/mysqld-error.log.1 (deleted)
      mysqld 3675 27 2w REG 253,2 367 613690 /var/log/mysql/mysqld-error.log.1 (deleted)
      mysqld 3675 27 3w REG 253,2 3621478400 613610 /var/log/mysql/mysql.log.1 (deleted)
      mysqld 3675 27 5u REG 0,23 0 186996 /sql/tmp/ibVzQY25 (deleted) (192.168.5.11:/vol/ds_nfs_sql_01)
      mysqld 3675 27 6u REG 0,23 232 186997 /sql/tmp/ibyTNv5M (deleted) (192.168.5.11:/vol/ds_nfs_sql_01)
      mysqld 3675 27 7u REG 0,23 0 186998 /sql/tmp/ib5w2h8t (deleted) (192.168.5.11:/vol/ds_nfs_sql_01)
      mysqld 3675 27 8u REG 0,23 0 186999 /sql/tmp/ibgpGdeb (deleted) (192.168.5.11:/vol/ds_nfs_sql_01)
      mysqld 3675 27 12u REG 0,23 128 187000 /sql/tmp/ibv1STCS (deleted) (192.168.5.11:/vol/ds_nfs_sql_01)
      
      

      le mysql.log.1 pourrait être celui qui me fous le bazar si bien sur la colonne SIZE/OFF correspond à une taille de fichier ?
      Un petit /etc/init.d/mysqld restart et pouf /var occupé à 15%.

      Merci à tous :)

      Born to Kill EndUser !

  • # Taille vs blocs alloués ?

    Posté par (site web personnel) . Évalué à 2.

    La taille du fichier ne correspond pas axctement à la taille des blocs alloués ?

  • # "Apparent Size"

    Posté par (site web personnel) . Évalué à 1.

    Voir ce lien qui comporte les mêmes interrogations:

    although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal fragmentation, indirect blocks, and the like

  • # DU ne sert pas à examiner la taille d'un fichier

    Posté par (site web personnel) . Évalué à 1. Dernière modification le 13 février 2013 à 13:50.

    DU ne sert pas à examiner la taille d'un fichier mais le nombre de blocs effectivement utilisés par le fichier sur le disque. du(1):

    Summarize disk usage of each FILE, recursively for directories.

    Pour ton problème de place dans /var le nombre pertinent est effectivement celui renvoyé par DU. Pour trouver les fauteurs de trouble, tu peux faire

    du | sort -n
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.