4 votes

Comment Du détermine-t-il le lien dur à ignorer ?

Nous avons deux répertoires :

$ ls -l
total 8
drwxr-x--- 2 nimmy nimmy 4096 Nov 15 19:42 jeter
drwxr-x--- 2 nimmy nimmy 4096 Nov 15 19:42 mariano

Je crée un fichier dans le premier dossier :

$ dd if=/dev/zero of=jeter/zero_file.1 bs=512000 count=1
1+0 records in
1+0 records out
512000 bytes (512 kB) copied, 0.268523 s, 1.9 MB/s

C'est la sortie de du :

$ du -sh *
504K    jeter
4.0K    mariano

Comme prévu, si je place un lien dur de l'application zero_file. dans l'autre dossier du La sortie ne change pas :

$ ln jeter/zero_file.1 mariano/zero_file.2
$ du -sh *
504K    jeter
4.0K    mariano

Cependant, pour autant que je sache, il n'y a rien dans le système de fichiers qui pointe sur zero_file.1 comme le fichier original. Alors comment du savoir compter zero_file.1 mais pas zero_file.2 ?

Il ne peut pas s'agir d'une comparaison d'horodatage car tous les liens durs partagent un inode ; ils auront les mêmes données d'horodatage, correct ?

10voto

Alan B. Dee Points 289

En étendant votre test à trois dossiers, vous pouvez voir que ce n'est que la première fois que l'inode est touché que le test est effectué. du le compter. Si vous allez dans le dossier individuel et exécutez du vous aurez la taille complète.

A tester :

mkdir alexandru
ln mariano/zero_file.2 alexandru/zero_file.0
du -sh *

Vous devriez maintenant voir alexandru en prenant les 500K+. Donc, sans regarder le du je suppose qu'il stocke une liste d'inodes parcourus et ne revisite pas ceux qui ont déjà été vus.

4voto

SilverWave Points 41

Si vous le faites

du -sh jeter jeter mariano

Alors vous avez 2 tailles différentes pour Jeter.

Cela semble être en accord avec la conclusion ci-dessus...

... sauf que la 1ère valeur ne devrait pas être le total et la 2ème valeur être zéro ?

3voto

Damian Powell Points 315

Apparemment, quand fstat(3) voit que le nombre de liens durs est supérieur à un, il enregistre le numéro d'inode pour une correspondance ultérieure. Selon POSIX :

Les fichiers comportant plusieurs liens sont comptés et inscrits pour une seule entrée. L'entrée du répertoire qui est sélectionnée dans le rapport n'est pas spécifiée.

Le Shell développe le * glob dans l'ordre lexical, selon POSIX :

Si le motif correspond à un nom de fichier ou à un chemin d'accès existant, il est remplacé par ce nom de fichier ou ce chemin d'accès, trié selon la séquence de collationnement en vigueur dans la locale actuelle.

Cependant, lorsque du -sh est fait sans globbing, l'ordre doit être décidé d'une manière ou d'une autre, mais il semble que cela doive dépendre de l'implémentation.

Notez que ces deux commandes donnent des résultats différents :

du -sh jeter mariano
du -sh mariano jeter

1voto

Udo Kaune Points 19

Si vous voulez vérifier si votre sauvegarde à partir de rsync time machine fonctionne ou non, et peut-être plus important encore, combien d'espace de sauvegarde vous économisez, vous devriez faire un ls -cr | xargs du -hs qui alimentera les répertoires à du dans l'ordre correct (temps de création inversé).

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