Почему каталоги / home, / usr, / var и т. Д. Имеют одинаковый номер индекса (2)?

31

Я обнаружил, что в моем корневом каталоге есть несколько каталогов с одинаковым номером инода:

$ ls -aid */ .*/

2 home/ 2 tmp/ 2 usr/ 2 var/ 2 ./ 2 ../ 1 sys/ 1 proc/

Я только знаю, что имена каталогов хранятся в родительском каталоге, а их данные хранятся в иноде самих каталогов.

Я запутался здесь.

Это то, что я думаю, когда я прослеживаю путь / home / user1.

  • Сначала я попадаю в индекс 2, который является корневым каталогом, который содержит списки каталогов.
  • Затем я нахожу название дома в паре с индексом 2.
  • Так я вернусь на диск, чтобы найти инод 2?
  • И я получаю имя user1 здесь?
youxiao
источник
2
См. Также: grymoire.com/Unix/Inodes.html
Ричард Нейман,

Ответы:

39

Они на разных устройствах.

Если мы посмотрим на вывод stat, мы также можем увидеть устройство, на котором находится файл:

# stat / | grep Inode
Device: 801h/2049d      Inode: 2           Links: 24
# stat /opt | grep Inode
Device: 803h/2051d      Inode: 2           Links: 5

Таким образом, эти два находятся на отдельных устройствах / файловых системах. Номера инодов уникальны только внутри файловой системы, поэтому здесь нет ничего необычного. В ext2 / 3/4 inode 2 также всегда является корневым каталогом , поэтому мы знаем, что они являются корнями соответствующих файловых систем.

Комбинация номер устройства + индекс может быть уникальной для всей системы. (Существуют файловые системы, которые не имеют inode в традиционном смысле, но я думаю, что они все равно должны подделывать какой-то уникальный идентификатор на своем месте.)

Номера устройств там, похоже, совпадают с номерами, показанными на узлах устройства, поэтому /dev/sda1содержит файловую систему, где /она включена:

# ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 Sep 21 10:45 /dev/sda1
ilkkachu
источник
Спасибо, теперь я получаю стат, полезный для меня, я научусь им пользоваться.
youxiao
1
Для записи, все файловые системы имеют некоторый эквивалент, даже если они динамически распределяют inode. Например, в BTRFS (который выполняет динамическое распределение inode, в отличие от статических таблиц inode ext2 / 3/4), конкретное значение inode, которое используется таким образом, равно 256 (потому что все нижнее зарезервировано для специальных записей в деревьях метаданных) ,
Остин Хеммельгарн
1
@AustinHemmelgarn, некоторые файловые системы, такие как FAT или ISO9660, не имеют inode в каком-либо значимом смысле этого слова. Драйвер файловой системы делает немного легкомысленного, чтобы он смотрел на остальную часть системы, которую они делают.
Отметить
@Mark: единственный «значимый смысл слова» в соответствии со стандартом, который определяет его, - это «серийный номер файла [уникальный в устройстве]». Настаивать на том, чтобы думать о inode как об особой структуре данных на диске, примерно так же, как думать о tys как о механических телетайпах.
R ..
1
@R .., я предполагаю, что по этому определению файловая система FAT имеет inode, но «серийный номер файла» для данного файла в файловой системе FAT нестабилен при монтировании или даже во времени при одном монтировании: если давление памяти вызывает извлечение синтезированной структуры inode из кэша, файл получает новый номер в следующий раз, когда что-то запрашивает его данные inode.
Отметить
24

Номер inode любого данного файла уникален для файловой системы, но не обязательно уникален для всех файловых систем, смонтированных на данном хосте. Если у вас несколько файловых систем, вы увидите дубликаты номеров инодов между файловыми системами, это нормально.

Джон
источник