Размерът на директорията не си струва усилията

Това е напълно безполезен, ненужен в практическото приложение, но забавен малък пост за директориите в *nix системи. Все пак е петък.

На интервюта често се задават скучни въпроси за айнодите, всичко-е-файлове, на които малко хора могат да отговорят адекватно. Но ако копаем малко по-дълбоко, можем да намерим интересни неща.

За да разберем поста, ето няколко основни момента:

  • всичко е файл. директорията също е файл
  • в айнода се съхраняват мета-данни на файла, но името на файла не се съхранява там
  • името на файла се съхранява в данните на директорията
  • размерът на директорията, същият, който се показва в ls и по подразбиране 4Кб, зависи от броя на файловете в директорията и дължината на имената им
  • очевидно е, че колкото повече файлове, толкова по-голям е размерът на директорията

А сега интересното: създаваме директория с милион файлове, проверяваме размера на директорията, а след това изтриваме всичките файлове и поглеждаме размера на директорията.

$ 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 .

Както може да се заб注意, размерът на директорията не се е променил, въпреки че би трябвало 🙂

Размерът на директорията (без изтриване) може да бъде поправен само с fsck (и опцията -D) в демонтирано състояние.

А когато започнах да търся защо е така, открих, че 10 години по-рано такова поведение вече е обсъждаха в lkml. И по мнението на разработчиците, поправката просто не си струва вложените усилия.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster