La dimensione delle directory non vale i nostri sforzi

Questo è un piccolo post completamente inutile, non necessario nell'applicazione pratica, ma divertente sulle directory nei sistemi * nix. È venerdì.

Durante le interviste, spesso sorgono domande noiose sugli inode, tutto Γ¨ file, a cui poche persone sanno rispondere in modo sensato. Ma se scavi un po’ piΓΉ a fondo, puoi trovare cose interessanti.

Per comprendere il post, alcuni punti:

  • tutto Γ¨ un file. anche la directory Γ¨ un file
  • l'inode memorizza i metadati dal file, ma il nome del file non Γ¨ memorizzato lΓ¬
  • il nome del file viene memorizzato nella directory data
  • La dimensione della directory, la stessa mostrata in ls e che per impostazione predefinita Γ¨ 4Kb, dipende dal numero di file nella directory e dalla lunghezza dei loro nomi
  • Ovviamente, maggiore Γ¨ il numero di file, maggiore Γ¨ la dimensione della directory

E ora la cosa interessante: creiamo una directory con un milione di file, controlliamo la dimensione della directory, quindi eliminiamo tutti i file e osserviamo la dimensione della directory.

$ mkdir niceDir && cd niceDir
# Π² зависимости ΠΎΡ‚ скорости носитСля, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ 2-10 ΠΌΠΈΠ½ΡƒΡ‚
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug  2 13:37 .

Come puoi vedere, la dimensione della directory non Γ¨ cambiata, anche se sembrerebbe :)

Puoi solo correggere la dimensione di una directory (senza eliminarla) usando fsck (e l'opzione -D) in uno stato non montato.

Ma quando sono andato a cercare il motivo per cui era così, si è scoperto che 10 anni fa questo comportamento esisteva già abbiamo discusso in lkml. E secondo gli sviluppatori, la correzione semplicemente non vale la pena.

Fonte: habr.com

Aggiungi un commento