Файлы устройства не являются файлами сами по себе. Это интерфейс ввода / вывода для использования устройств в Unix-подобных операционных системах. Они не используют места на диске, однако, они все еще используют inode, как сообщается stat
командой:
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
Используют ли файлы устройств физические inode в файловой системе и зачем они вообще нужны?
filesystems
devices
inode
stat
direprobs
источник
источник
Ответы:
Короткий ответ: это возможно, только если у вас есть физическая файловая система
/dev
(и если вы используете современный дистрибутив Linux, вы, вероятно, этого не сделаете).Длинный ответ следует:
Все это восходит к оригинальной философии UNIX, согласно которой все является файлом. Эта философия является частью того, что сделало UNIX таким универсальным, потому что вы могли напрямую взаимодействовать с устройствами из пользовательского пространства, не нуждаясь в специальном коде в вашем приложении, чтобы напрямую взаимодействовать с физическим оборудованием.
Изначально это
/dev
был просто еще один каталог с известным именем, куда вы помещали файлы своего устройства. Некоторые системы UNIX все еще используют этот подход (я полагаю, что OpenBSD все еще делает), и вы обычно можете сказать, если система похожа на это, потому что у нее будет много файлов устройств для устройств, которых система на самом деле не имеет (например, файлы для каждого возможный раздел на каждом возможном диске). Это экономит место в памяти и время при загрузке за счет использования немного большего дискового пространства, что было хорошим компромиссом для ранних систем, поскольку они, как правило, были очень ограничены в памяти и не очень быстрыми. Это обычно называется наличием статического электричества/dev
.В современных системах Linux (и я полагаю также, что FreeBSD и, возможно, последние версии Solaris),
/dev
это временная файловая система в памяти, заполняемая ядром (или udev, если вы используете Systemd, потому что они не доверяют ядру делать почти все) , Это экономит место на диске за счет некоторого объема памяти (обычно менее нескольких МБ) и очень незначительных накладных расходов на обработку. Он также имеет ряд других преимуществ, одним из которых является то, что проще обнаруживать аппаратные средства с «горячей» заменой. Обычно это называется динамикой/dev
.Однако в обоих случаях доступ к узлам устройства осуществляется через обычный уровень VFS, что по определению означает, что у них должен быть индекс (даже если это виртуальный, который просто существует, чтобы подобные вещи работали так, как
stat()
это должно быть. С практической точки зрения, это оказывает нулевое влияние на системы, которые используют динамические,/dev
потому что они просто хранят иноды в памяти или генерируют их по мере необходимости, и почти нулевое воздействие, где/dev
статично, потому что иноды занимают почти нулевое пространство на диске, и большинство файловых систем либо не имеют верхнего предела их или обеспечение гораздо больше, чем кто-либо может понадобиться.источник
Файлы устройств также имеют разрешения, которые хранятся в inode.
источник
Каталоги - это просто отображение имен файлов на inode, поэтому все, что относится к названию (файл, символическая ссылка, устройство, FIFO, сокет), должно быть в inode, больше некуда его поместить.
Информация об устройстве хранится в иноде. Здесь есть старшие и младшие номера устройств, а также разрешения, метки времени и т. Д. Здесь хранится поле типа, которое говорит о том, что это блочное или символьное устройство, а не обычный файл.
Inode для устройств просто не использует поля, которые содержат карту блоков файла.
источник
Без инода у вас было бы только имя файла, в котором содержалась бы вся информация об рассматриваемом устройстве. Это означает, что «хорошие» имена устройств вроде
/dev/sda
бы могут быть исключены: вам нужно имя, которое можно привязать к конкретному драйверу, например/dev/ohci/sda
.Что еще более важно, все инструменты, которые полагаются на inode (например
stat
,ls
и т. Д.), Должны быть изменены, чтобы обрабатывать пути/dev
особым образом. Это было бы чрезмерно большим объемом работы без видимой выгоды по сравнению с текущим состоянием вещей.источник