Подтвердить что ты не робот

Разница Inode и Vnode

У меня были некоторые сомнения относительно Inode vs Vnode. Насколько я понимаю, inode представляет собой представление файла, который используется виртуальной файловой системой. В то время как vnodes являются файловой системой. Правильно ли это?

Кроме того, я запутался, является ли inode структурой данных ядра, то есть является ли это структурой данных в памяти или структурой данных, которая существует в блоках на реальном диске?

4b9b3361

Ответ 1

Обычно (например, для файловых систем Linux и BSD), inode - это первая структура на диске, которая описывает хранение файла в терминах этого диска (обычно в блоках). Vnode - это встроенная структура, которая абстрагирует большую часть того, что является inode (индекс может быть одним из полей данных), но также захватывает такие вещи, как операции с файлами, блокировки и т.д. Это позволяет поддерживать файловые системы, не основанные на inode, в частности сетевые файловые системы.

Ответ 2

Чтобы добавить что-то к этому: лучшее объяснение, которое я мог найти для vnode, находится здесь, в Документах FreeBSD. Для более академически настроенных есть также оригинальная статья, в которой была введена концепция, которая обеспечивает гораздо более глубокий ресурс.

Таким образом, vnodes были созданы для FreeBSD из-за распространения различных типов файловых систем, которые необходимо использовать как UFS, NFS и т.д. Vnodes предназначены для обеспечения абстракции во всех возможных файловых системах, чтобы ОС могла взаимодействовать с их и так, чтобы функции ядра не нуждались в конкретной поддержке каждой файловой системы под солнцем; они должны знать только, как взаимодействовать с файлом vnode.

Вернемся к исходным вопросам vnodes, как упоминал @Doug Luce, в абстракциях памяти и не относятся к файловой системе. Они могут использоваться взаимозаменяемо в UFS, ext4 и любом другом. Напротив, inodes хранятся на диске и специфичны для конкретной файловой системы. inodes содержат метаданные о файле, таком как размер, владелец, указатели на адреса блоков между прочим. Vnodes содержат некоторые данные о файле, но только атрибуты, которые не меняются в течение жизненного цикла файла, поэтому inode будет местом для ссылки, если вы хотите получить самую полную информацию о файле. Если вас больше интересует inodes, я бы посоветовал вам проверить wikipedia, в которой есть хорошая статья о них.

Ответ 3

Это зависит от вашей ОС. Например, в системе Linux нет v- node, только общий i- node struct inode, который хотя и концептуально похож на v- node, реализуется по-разному.

Для ядер BSD и UNIX v- node указывает на структуру i-node, специфичную для файловой системы, а также некоторую дополнительную информацию, включая указатели на функции, которые работают с файлом, и метаданные, не включенные в inode. Основное различие заключается в том, что inode - это файловая система, а vnode - нет. (В Linux, как упоминалось выше, есть как независимый от системы индексный дескриптор, так и зависящий от файловой системы индексный дескриптор)

Индекс не является структурой данных ядра, однако, vode/generic inode является ядром представления inode.

Ответ 4

Это зависит от операционной системы и файловой системы, в которой вы работаете или работаете. Например, inode VXFS и ADVFS - это не что иное, как структура данных на диске, называемая vnode. В общем, оба относятся к метаданным файлов.

Ответ 5

Концепция vnode различается в зависимости от того, в какой системе вы находитесь, все просто приняли имя и побежали с ним.

В Linux и Unix вы можете рассматривать абстракцию следующим образом. Предположим, что существует

f.tmp

Вы хотите, чтобы f зависал во время работы вашей программы, потому что вы обращаетесь к нему, но если ваша программа завершается или сбой, вы хотите быть уверенным, что она уходит.

Вы можете сделать это, открыв f, а затем unlink(). Вы все равно сохраните ссылку на f, хотя его индексный дескриптор теперь имеет 0 записей в каталоге и поэтому был помечен как бесплатный. Операционная система все еще сохраняет, где начался файл и его распределение, пока ваша программа не закончится. Эта "виртуализация" inode, которая больше не существует, является vnode.

Другая распространенная ситуация для этого - когда вы читаете ресурс, который исчезает из-под вас. Предположим, вы смотрите фильм, пока он транслируется во временное место. Когда фильм будет полностью загружен, он будет перенесен на другой том для хранения. Каким-то образом вы можете продолжать просмотр и чистку фильма, пока он остается открытым. В этом случае, даже если ссылок снова нет, поскольку есть vnode, этот индекс не может быть очищен еще.