Номер зубного и i-узла
У меня был следующий вопрос на экзамене:
В файловой системе ext3 количество зубных рядов больше, чем число i-узлов.
Я должен был ответить с Истиной или Ложью и объяснить.
Мой ответ:
Это неверно, потому что dentries - это ссылки между каталогами, и в основном все является i-узлом (даже каталогом), поэтому # i-node> # dentries.
Однако я не учел файловую систему ext3. Я что-то пропустил или мой ответ правильный?
3 ответа
Вероятно, у нас будет больше зубных камней из-за следующего:
- Все жесткие ссылки имеют уникальные зубные ряды, но указывают на один и тот же индекс.
- Поиски, возвращающие ENOENT (файл или каталог не существует), создают dentry и помечают его указатель на индекс как NULL(который технически называется отрицательным dentry). Это помогает ускорить отрицательный поиск, то есть поиск по несуществующему пути.
Но вы можете иметь жесткие ссылки. Таким образом, вы можете иметь много зубных рядов, указывающих на один и тот же инод.
Количество dentries всегда больше, чем число inode в чисто размонтированной файловой системе.
Обратите внимание: с каждым индексом (за исключением несвязанных файлов, которые сохраняются в живых с помощью дескрипторов открытых файлов - они очищаются при чистом размонтировании или во время восстановления после нечистого размонтирования), связан хотя бы один dentry. Каждый индексный каталог имеет по крайней мере два - ссылку от своего родителя (или его собственный ..
для корня) и от .
, Кроме того, каталоги имеют дополнительный dentry, связанный с ними для каждого подкаталога ..
dentry.
Таким образом, в абсолютном минимуме есть еще один dentry, чем inode (для FS только с корневым каталогом). Дополнительные каталоги и жесткие ссылки раздувают это дальше.