Pourquoi y a-t-il une discordance dans l'utilisation du disque signalée par df et du?

J'ai un server Linux (CentOS), les packages OS + utilisés autour de 5 Go. Ensuite, j'ai transféré des données de 97 Go d'un server Windows vers deux dossiers sur ce server Linux, après avoir calculé l'utilisation du disque, je vois que la taille totale des deux dossiers est plus grande que la taille du disque utilisé.

Exécutez du -sh sur chaque dossier, l'un utilise 50 Go, l'autre utilise 47 Go

Mais exécutez df -h, l'espace utilisé est 96G. (50 Go + 47 Go + 5 Go)> 96 Go

Y a-t-il un problème? Ces deux dossiers contiennent beaucoup de files (1 million +). Merci.

    Cette page donne un aperçu de la raison pour laquelle ils ont des valeurs différentes, mais il semble suggérer que votre taille devrait être la plus petite des deux.

    df utilise le total des blocs alloués, tandis que du seul regarde les files eux-mêmes, à l'exclusion des métadonnées telles que les inodes, qui nécessitent encore des blocs sur le disque. En outre, si un file est supprimé alors qu'une application l'a ouvert, le du rapport l'indiquera comme l'espace libre mais df ne le fait pas jusqu'à ce que l'application se termine.

    Lorsque le du est plus grand que df , la raison habituelle est "blocs épars": si un programme n'écrit pas réellement dans un bloc de disque mais le search après, il obtient un pointeur zéro dans la carte d'allocation de blocs de l'inode et pas d'espace disque réel est réservé pour cela. Si vous y écrivez plus tard, un bloc de disque réel sera alloué et la carte sera modifiée pour pointer vers le nouveau bloc.