当前位置: 首页 > news >正文

Linux- inode vnode

什么是inode

inode 是 UNIX 和 UNIX-like 操作系统中的一个关键概念。它代表了文件系统中文件或目录的元数据。每个文件和目录在文件系统中都有一个与之关联的 inode。这个数据结构存储了关于文件的所有信息,除了其名称和实际数据之外。

以下是 inode 中通常包含的信息:

  1. 文件类型: 如常规文件、目录、字符设备、块设备、软链接等。
  2. 权限: 表示为一个八进制数或位掩码,描述了文件的所有者、群组和其他用户的访问权限。
  3. 链接数: 表示此 inode 的硬链接数目。
  4. 所有者和群组 ID: 文件的所有者和所属群组的用户 ID。
  5. 大小: 文件的大小(字节为单位)。
  6. 时间戳: 如文件的创建时间、最后访问时间、内容的最后修改时间等。
  7. 数据块指针: 指向存储文件数据的物理或逻辑块的指针。
  8. 文件系统特定的属性: 如扩展属性、ACLs (访问控制列表) 等。

这是一个简化的 inode 数据结构的概述:

struct inode {mode_t      i_mode;          /* 文件类型和权限 */uid_t       i_uid;           /* 所有者用户ID */gid_t       i_gid;           /* 群组ID */off_t       i_size;          /* 文件大小 */time_t      i_atime;         /* 最后访问时间 */time_t      i_mtime;         /* 内容的最后修改时间 */time_t      i_ctime;         /* inode 本身的最后修改时间 */nlink_t     i_links_count;   /* 硬链接数目 */uint32_t    i_blocks;        /* 数据块数目 */uint32_t    *i_block;        /* 指向数据块的指针 */...                         /* 其他属性和文件系统特定的字段 */
};

当我们在 UNIX-like 系统中使用 ls -l 命令时,所看到的大部分文件属性(如权限、所有者、大小和时间戳)都是直接从 inode 中取得的。

请注意,实际的 inode 结构可能会根据具体的文件系统和操作系统版本有所不同。上述仅是一个高级概念性的表示。

什么是vnode

vnode 是 UNIX 和 UNIX-like 系统(如 Linux、BSD 等)中用于表示文件的抽象接口。vnode 结构提供了一种文件系统无关的方式来引用文件和目录。这意味着不同的文件系统(如 ext4、NFS、FAT 等)可以通过相同的接口(即 vnode)被内核访问。这种设计使得用户和应用程序无需知道文件的实际存储方式。

虽然不同的操作系统可能会有略微不同的 vnode 结构定义,但以下是一个典型的、简化的 vnode 数据结构的概述:

struct vnode {enum vtype      v_type;      /* 文件类型:文件、目录、块设备、字符设备等 */struct mount    *v_mount;    /* 该 vnode 所在的挂载点信息 */struct vnodeops *v_op;       /* vnode 操作函数集,例如 read、write 等 */int             v_count;     /* 对此 vnode 的引用计数 */void            *v_data;     /* 文件系统特定的私有数据,例如对 inode 的引用 */...                         /* 可能还有其他的字段 */
};
  • v_type: 表示文件的类型。可能的类型包括常规文件、目录、字符设备、块设备等。
  • v_mount: 指向代表文件系统挂载点的结构的指针。
  • v_op: 包含一个指向操作函数集的指针,这些操作定义了如何在该 vnode 上执行各种操作。
  • v_count: 表示当前对此 vnode 的引用次数。当 vnode 不再被任何进程引用时,它可能会被回收。
  • v_data: 指向文件系统特定数据的指针。例如,在 ext4 文件系统上,这可能是一个指向 inode 的指针。

注意:实际的 vnode 结构可能会根据具体的操作系统和版本有所不同。上述只是一个高级概念性的表示。要获取特定系统上的确切定义,应该查看相应的系统头文件或文档。

让我们通过一个简化的示例来理解 vnode 的概念和其如何工作。

假设我们有一个简单的文件系统结构,其中包含两种文件系统:ext4 和 NFS。这两种文件系统在处理文件时有自己的方式和操作。但操作系统希望为所有文件提供统一的接口。

步骤:

  1. 应用程序请求:当一个应用程序请求打开一个文件(例如使用 open() 系统调用),它只提供一个路径,例如 /data/file1.txt

  2. 内核查找 vnode:内核首先检查该文件的 vnode 是否已经在缓存中。如果不在,它会为该文件创建一个新的 vnode。

  3. 填充 vnode:一旦确定了 vnode,内核需要填充它的数据结构。这里,它会查看 /data/file1.txt 实际位于哪个文件系统上。如果它位于 ext4 上,内核会使用 ext4 的文件系统驱动来填充 vnode。如果它位于 NFS 上,内核会使用 NFS 的驱动。

  4. 操作文件:现在,当应用程序想要读取或写入该文件时,内核可以使用 vnode 的信息(特别是其中的函数指针)来进行相应的操作。这意味着,对于应用程序来说,无论文件实际上位于哪个文件系统上,文件的操作方式都是相同的。

图示

应用程序|| open("/data/file1.txt")|v
内核------------------------|                       |
ext4驱动                  NFS驱动|                       |v                       v
ext4 文件系统           NFS 文件系统

在此示例中,vnode 的存在为应用程序提供了一个统一的方法来处理 /data/file1.txt,而无需关心其实际上位于哪个文件系统上。内核负责管理 vnode 和与实际的文件系统驱动(如 ext4 或 NFS)的交互。

二者的区别

inodevnode 都是代表文件的数据结构,但它们存在于不同的上下文和层次,并有一些关键的区别。

inode

  1. 定义: inode 是 UNIX 和 UNIX-like 文件系统中的一个核心概念,代表了一个文件或目录的元数据。
  2. 存在位置: inode 是文件系统层面的结构,存在于具体的文件系统中。
  3. 内容: inode 包含关于文件的元数据,例如文件的大小、权限、时间戳、数据块的位置等,但不包括文件名。
  4. 唯一性: 在给定的文件系统中,每个 inode 都有一个唯一的 inode 号。
  5. 文件名: 文件名与目录项(dentry)存储在目录中,它们指向相应的 inode
  6. 限制: 由于 inode 是文件系统特定的,它通常只对具体的文件系统(例如 ext4、xfs 等)有意义。

vnode

  1. 定义: vnode(或称为虚拟节点)是 UNIX-like 操作系统中的抽象层,用于代表所有文件系统中的文件或目录。
  2. 存在位置: vnode 是内核中的结构,是对各种文件系统的一个统一抽象。
  3. 内容: 与 inode 类似,vnode 也包含了文件或目录的元数据。但是,vnode 还包含指向具体文件系统操作的指针,这使得内核可以统一地处理各种文件系统。
  4. 唯一性: 在内核中,每个打开的文件或目录都有一个与之关联的 vnode
  5. 文件名: 和 inode 一样,vnode 本身不存储文件名。
  6. 目的: vnode 的主要目的是为不同类型的文件系统(例如 ext4、NFS、FAT32 等)提供一个统一的接口。

总结

  • inode 是文件系统级别的,具有文件系统特定的信息。
  • vnode 是操作系统级别的,为所有文件系统提供了一个统一的接口。
  • 在某些 UNIX-like 系统中,vnode 可能直接指向一个文件系统的 inode,这样 vnode 就可以通过 inode 访问文件的实际数据和属性。

这种分层设计允许操作系统支持多种文件系统,同时为应用程序提供了一个统一和一致的文件和目录操作接口。

实例

让我们用一个简化的实际例子来揭示inodevnode之间的关系。

假设我们有一个计算机上安装了两个不同的文件系统:一个是本地的ext4文件系统,另一个是网络上的NFS文件系统。

  1. 本地文件: 当用户请求打开本地ext4文件系统上的一个文件,例如/local/data.txt,操作系统首先会在ext4文件系统中查找该文件的inode。这个inode包含了文件的所有元数据,如文件大小、所有者、权限等。同时,操作系统在内存中也会为这个文件创建一个vnode结构。这个vnode不仅包含了文件的元数据,还包含了一组函数指针,这些函数指针指向ext4文件系统的操作,如读、写、删除等。

  2. 远程文件: 用户还可能想要打开网络上的NFS文件系统中的一个文件,例如/remote/data.txt。在这种情况下,操作系统会查找该文件在NFS服务器上的相关信息,并在内存中为它创建一个vnode。这个vnode的结构与本地文件的vnode非常相似,但其函数指针会指向NFS的操作,因为文件的实际数据位于远程服务器上。

这两个例子的关键点在于:不同的文件系统可能有不同的实现和操作,但通过vnode的抽象,操作系统可以为所有文件提供统一的接口。这意味着应用程序不需要知道文件实际存在于哪个文件系统中,它只需通过统一的接口进行读写操作。这种设计简化了应用程序的开发,并使操作系统能够更容易地支持多种文件系统。

相关文章:

Linux- inode vnode

什么是inode inode 是 UNIX 和 UNIX-like 操作系统中的一个关键概念。它代表了文件系统中文件或目录的元数据。每个文件和目录在文件系统中都有一个与之关联的 inode。这个数据结构存储了关于文件的所有信息,除了其名称和实际数据之外。 以下是 inode 中通常包含的…...

不来看看?通过Python实现贪吃蛇小游戏

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Python》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专…...

C# linq初探 使用linq查询数组中元素

使用linq进行数组查询 输出数组中全部的偶数并升序输出结果 写法1: int[] numbers { 5, 10, 8, 3, 6, 12 }; //查询的数组var numqurey from num in numberswhere num % 2 0 //按照条件过滤orderby numselect num;foreach (var num in numqurey){Console.Writ…...

使用线程池进行任务处理

线程池 线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分…...

ES6之Map和Set有什么不同?

一、Map 1.定义 Map是ES6提供的一种新的数据结构,它是键值对的集合,类似于对象,但是键的范围不限于字符串,各种类型的值都可以当做键。 Object结构是“字符串-值”的对应,Map结构则是“值-值”的对应 2.代码示例 M…...

Java中的集合

Java中的集合分为单列集合和双列集合,单列集合顶级接口为Collection,双列集合顶级接口为Map。 Collection 的子接口有两个:List和Set。 List 接口的特点:元素可重复,有序(存取顺序)。 List 接…...

9.4.2servlet基础2

一.SmartTomcat 1.第一次使用需要进行配置. 二.异常处理 1.404:浏览器访问的资源,在服务器上不存在. a.检查请求的路径和服务器配置的是否一致(大小写,空格,标点符号). b. 确认webapp是否被正确加载(检查web.xml没有/目录错误/内容错误/名字拼写错误)(多多关注日志信息). 2…...

嵌入式学习 - 用电控制电

目录 前言: 1、继电器 2、二极管 3、三极管 3.1 特殊的三极管-mos管 3.2 npn类型三极管 3.3 pnp类型三极管 3.4 三极管的放大特性 3.5 mos管和三极管的区别 前言: 计算机的工作的核心原理:用电去控制电。 所有的电子元件都有数据手册…...

QCA组态如何科学命名?

前言 (一)文献来源 文献来源:[1]Furnari S, Crilly D, Misangyi V F, et al. Capturing causal complexity: Heuristics for configurational theorizing[J]. Academy of Management Review, 2021, 46(4): 778-799. (二&#xff…...

外贸行业中常用的邮箱推荐

随着全球贸易的不断发展,外贸行业越来越重要。在这个过程中,电子邮件作为一种重要的沟通工具,扮演着关键的角色。然而,对于许多外贸从业者来说,选择合适的邮箱服务并不容易。本文将探讨外贸邮箱和普通邮箱的区别&#…...

高性能实践

1、认识性能 从用户体验来看,性能就是响应时间短; 从开发角度来看,性能主要是执行效率高。 性能主要表现形式如下: (1)响应时间,AVG、MAX、MIN、TP95、TP99 (2)吞吐…...

说说hashCode() 和 equals() 之间的关系?

每天一道面试题,陪你突击金九银十! 上一篇关于介绍Object类下的几种方法时面试题时,提到equals()和hashCode()方法可能引出关于“hashCode() 和 equals() 之间的关系?”的面试题,本篇来解析一下这道基础面试题。 先祭一…...

算法通关村-----图的基本算法

图的实现方式 邻接矩阵 定义 邻接矩阵是一个二维数组,其中的元素表示图中节点之间的关系。通常,如果节点 i 与节点 j 之间有边(无向图)或者从节点 i 到节点 j 有边(有向图),则矩阵中的元素值…...

基于随机森林+小型智能健康推荐助手(心脏病+慢性肾病健康预测+药物推荐)——机器学习算法应用(含Python工程源码)+数据集(二)

目录 前言总体设计运行环境Python环境依赖库 模块实现1. 疾病预测2. 药物推荐1)数据预处理2)模型训练及应用3)模型应用 其它相关博客工程源代码下载其它资料下载 前言 本项目基于Kaggle上公开的数据集,旨在对心脏病和慢性肾病进行…...

stm32学习-芯片系列/选型

【03】STM32HAL库开发-初识STM32 | STM概念、芯片分类、命名规则、选型 | STM32原理图设计、看数据手册、最小系统的组成 、STM32IO分配_小浪宝宝的博客-CSDN博客  STM32:ST是意法半导体,M是MCU/MPU,32是32位。  ST累计推出了&#xff1a…...

LeetCode //C - 200. Number of Islands

200. Number of Islands Given an m x n 2D binary grid grid which represents a map of *‘1’*s (land) and *‘0’*s (water), return the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically…...

使用Python构建强大的网络爬虫

介绍 网络爬虫是从网站收集数据的强大技术,而Python是这项任务中最流行的语言之一。然而,构建一个强大的网络爬虫不仅仅涉及到获取网页并解析其HTML。在本文中,我们将为您介绍创建一个网络爬虫的过程,这个爬虫不仅可以获取和保存网…...

图像处理之《基于语义对象轮廓自动生成的生成隐写术》论文精读

一、相关知识 首先我们需要了解传统隐写和生成式隐写的基本过程和区别。传统隐写需要选定一幅封面图像,然后使用某种隐写算法比如LSB、PVD、DCT等对像素进行修改将秘密嵌入到封面图像中得到含密图像,通过信道传输后再利用算法的逆过程提出秘密信息。而生…...

Java 字节流

一、输入输出流 输入输出 ------- 读写文件 输入 ------- 从文件中获取数据到自己的程序中,接收处理【读】 输出 ------- 将自己程序中处理好的数据保存到文件中【写】 流 ------- 数据移动的轨迹 二、流的分类 按照数据的移动轨迹分为:输入流 输出流…...

华硕电脑怎么录屏?分享实用录制经验!

“华硕电脑怎么录屏呀,刚买的笔记本电脑,是华硕的,自我感觉挺好用的,但是不知道怎么录屏,最近刚好要录一个教程,怎么都找不到在哪里录制,有人能教教我吗?” 随着电脑技术的不断发展…...

python学习--python的异常处理机制

try…except try:n1int(input(请输入一个整数))n2int(input(请输入另一个整数))resultn1/n2print(结果为,result) except ZeroDivisionError: print(除数不能为0)try…except…else 如果try块中没有抛出异常,则执行else块,如果try中抛出异常&#xff0…...

nacos+Dubbo整合快速入门

官网&#xff1a;Nacos Spring Boot 快速开始 下载下载链接启动&#xff1a;进入bin目录&#xff0c;startup.cmd -m standalone引入依赖 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.9…...

QT实现钟表

1、 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPaintEvent> //绘制事件类 #include <QDebug> //信息调试类 #include <QPainter> //画家类 #include <QTimerEve…...

准备我们心爱的IDEA写Jsp

JSP学习 一、准备我们心爱的IDEA new一个项目&#xff1a;New Project --> Next -->Next -->Finsh 二、配置好服务器Tomcat-9.0.30 1.> 在WEB-INF下创建一个Lib包 将jsp-api.jar复制进去&#xff0c;并使其生效 未生效前&#xff1a; 生效过程&#xff1a; 2.>…...

将近 5 万字讲解 Python Django 框架详细知识点(更新中)

Django 框架基本概述 Django 是一个开源的 Web 应用后端框架&#xff0c;由 Python 编写。它采用了 MVC 的软件设计模式&#xff0c;即模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。在 Django 框架中&am…...

Arcgis提取每个像元的多波段反射率值

Arcgis提取每个像元的多波段反射率值 数据预处理 数据预处理阶段需要对遥感图像进行编辑传感器参数、辐射定标、大气校正、正射校正&#xff0c;具体流程见该文章 裁剪研究区 对于ENVI处理得到的tiff影像&#xff0c;虽然是经过裁剪了&#xff0c;但是还存在黑色的背景值&a…...

JavaScript面试题整理(一)

数据类型篇 1、JavaScript有哪些数据类型&#xff0c;它们的区别是什么&#xff1f; 基本数据类型&#xff1a;number、string、boolean、undefined、NaN、BigInt、Symbol 引入数据类型&#xff1a;Object NaN是JS中的特殊值&#xff0c;表示非数字&#xff0c;NaN不是数字…...

数据结构:树和二叉树之-堆排列 (万字详解)

目录 树概念及结构 1.1树的概念 1.2树的表示 ​编辑2.二叉树概念及结构 2.1概念 2.2数据结构中的二叉树&#xff1a;​编辑 2.3特殊的二叉树&#xff1a; ​编辑 2.4 二叉树的存储结构 2.4.1 顺序存储&#xff1a; 2.4.2 链式存储&#xff1a; 二叉树的实现及大小堆…...

爬虫入门基础:深入解析HTTP协议的工作过程

目录 一、HTTP协议简介 二、HTTP协议的工作过程 三、请求方法与常见用途 四、请求头与常见字段 五、状态码与常见含义 六、进阶话题和注意事项 总结 在如今这个数字化时代&#xff0c;互联网已经成为我们获取信息、交流和娱乐的主要渠道。而在互联网中&#xff0c;HTTP协…...

k8备份与恢复-Velero

简介 Velero 是一款可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷等资源的备份恢复软件。 Velero 实现的 kubernetes 资源备份能力&#xff0c;可以轻松实现 Kubernetes 集群的数据备份和恢复、复制 kubernetes 集群资源到其他kubernetes 集群或者快速复制生产环境…...

网站规划模板/南宁正规的seo费用

spring 集成 Orika Bean映射框架 前文介绍了Orika&#xff0c;本文介绍如何在spring框架中集成使用。 spring中注册 与spring 集成仅需定义统一的mapperFactory&#xff0c;然后把需要转换的bean依次注册至mapperFactory。 package com.mytutorial;import ma.glasnost.orik…...

网站怎么生成三级域名/2021近期时事新闻热点事件

生肖年份的起点●储流杰中国传统文化中运用天干(甲、乙、丙、丁、戊、己、庚、辛、壬、癸)和地支(子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥&#xff0c;)依次交替组合循环的方法纪年&#xff0c;俗称干支纪年法。组合时必须单数配单数&#xff0c;双数配双数&#xff0…...

360移动建站/今日热搜榜排行榜

Lists-列表 列表是Python中的另一种对象。它们用于存储索引的项目列表。 使用带有逗号分隔项的方括号创建列表。 列表中的某个项目可以使用方括号中的索引访问。 举个例子: words ["Hello", "world", "!"] print(words[0]) print(words[1]) …...

菜鸟建网站/店铺如何运营和推广

它可能看起来像一个隐形棒球&#xff0c;但360fly实际上是一个360度动作相机。它整齐地使用镜头与抛物面镜一起记录周围的一切&#xff0c;然后使用软件打开图像。这是一个新兴运动的一部分 - 360度视频与YouTube和Facebook兼容&#xff0c;这是一种生成伪VR内容的快捷方式。De…...

政府网站建设规范及标准/seo专业培训需要多久

上学时从来没把元旦当作一年的新开始&#xff0c;没想到工作后大家都对元旦如此看重。现在想想&#xff0c;从去年6月下旬毕业到现在&#xff0c;也接近半年了&#xff0c;是时候总结一下和重新调整2014年的规划的时候了。 毕业后到一家小公司上班&#xff0c;感觉半年的收获不…...

专业做足球体彩网站/seo信息网

这篇文章的适用范围其实不仅限于Java后端或Java Web&#xff0c;不过其中有些是拿这方面举例的&#xff0c;在其它方面&#xff0c;大家可以举一反三&#xff0c;应该也能得到些启示。 我们在面试时&#xff0c;会发现有些候选人技术不错&#xff0c;比如在Java Web后端方面&am…...