Почему размер файла «точка» может быть «.» превышать 4096?

10

Сегодня я нашел «пустой» каталог размером 4 МБ.

У него не было видимого содержимого, поэтому я попытался ls -lah. Это показало мне некоторые скрытые файлы (не очень большие). В поисках причины, по которой каталог был настолько большим, я обнаружил, что .размер файла точка ( ) составляет 3,9 МБ.

Что хранится в этом файле? Разве это не просто ссылка на один и тот же каталог?

Вот вывод оболочки (анонимный):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 (mockbuild@builder6.centos.org) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...
Мартин Хеннингс
источник

Ответы:

14

Точечный файл, как и каждый каталог, содержит список имен для файлов в этом каталоге и их номера inode. Поэтому, если у вас когда-то было много файлов в этом каталоге (что весьма вероятно для каталога "tmp"), это привело бы к увеличению размера записи в каталоге.

После того, как файлы ушли, файловая система не будет автоматически сокращать файл каталога снова.

Вы можете поэкспериментировать с этим, создав новую пустую директорию, сделав ls -laв ней начальный размер (4096 на моем компьютере), а затем touchнабрав много файлов, которые увеличат размер директории.

(Да, я знаю, что я замаскировал / неточен во многих деталях здесь. Но ОП не попросил дать полное объяснение того, как работают файловые системы EXT *.)

Бристоль
источник
2
Спасибо, это, кажется, объясняет феномен. Два любопытных вопроса: когда файл каталога снова уменьшится? И есть ли способ показать содержимое этого файла?
Мартин Хеннингс
3
(1) См. Также unix.stackexchange.com/questions/38639/… - краткий ответ, удалите каталог и создайте его заново.
Бристоль
2
(2) К сожалению, больше нет. Раньше это было возможно в старых версиях UNIX.
Бристоль
Вы также можете работать e2fsck -Dв файловой системе, но для этого требуется, чтобы она была размонтирована.
Псуси
@ Бристоль debugfsможет быть проницательным
Volker Siegel