Почему Linux загружается с несколькими дентриями, инициализированными для корневого каталога "/" - PullRequest
3 голосов
/ 12 марта 2012

Я играю вокруг кода ядра Linux, особенно в части файловой системы.Я обнаружил, что при загрузке ядра несколько объектов dentry выделяются для корневого каталога "/".Зачем ему нужно выделять несколько копий корневого каталога в оперативной памяти?Более того, поскольку кажется, что dcache (кэш dentry, по существу большая хеш-таблица) использует хеш-функцию H (parent_dentry_address, name_hash) для вычисления корзины, в которой сопротивлялся dentry. Означает ли это, что каждый корневой dentry "/" создаетВ отличие от сопоставления dentry с хэш-хранилищем в dcache?

Кстати, вышеуказанное поведение наблюдалось в Linux-3.3.0-rc4.

Ответы [ 3 ]

1 голос
/ 15 апреля 2012

Прочтите Documentation / initrd.txt из исходного кода ядра, чтобы увидеть, что происходит при начальной загрузке:

When using initrd, the system typically boots as follows:

  1) the boot loader loads the kernel and the initial RAM disk
  2) the kernel converts initrd into a "normal" RAM disk and
     frees the memory used by initrd
  3) if the root device is not /dev/ram0, the old (deprecated)
     change_root procedure is followed. see the "Obsolete root change
     mechanism" section below.
  4) root device is mounted. if it is /dev/ram0, the initrd image is
     then mounted as root
  5) /sbin/init is executed (this can be any valid executable, including
     shell scripts; it is run with uid 0 and can do basically everything
     init can do).
  6) init mounts the "real" root file system
  7) init places the root file system at the root directory using the
     pivot_root system call
  8) init execs the /sbin/init on the new root filesystem, performing
     the usual boot sequence
  9) the initrd file system is removed

Note that changing the root directory does not involve unmounting it.
It is therefore possible to leave processes running on initrd during that
procedure. Also note that file systems mounted under initrd continue to
be accessible.

Я надеюсь, что это отвечает на вопрос, почему ядро ​​выделяет несколько зубных рядов для "/"

1 голос
/ 13 марта 2012

Я собираюсь закрыть глаза, не смотреть на какой-либо код и просто выпалить, может ли это быть результатом установки / над / и более одного раза?

Если вы монтируете что-то поверх /, нижележащий / не может просто исчезнуть, потому что это может быть выставлено безграничным количеством.

0 голосов
/ 08 декабря 2015

В ядре есть два типа '/', один для корневого каталога процесса, а другой - для корневого каталога файловой системы.

Когда файловая система регистрируется и монтируется, она сначала выделяет в качестве монтируемого файла dentry для монтирования root.вход в эту файловую систему, обычно этот dentry использует '/' name.RAM, такие как proc / devtmpfs ... смонтированное внутреннее ядро, поэтому будет несколько dentry с тем же именем '/'.

...