LUN磁盘、LVM及JFS2驱动内部关系

2023-10-28

复杂度2/5
机密度3/5

最后更新2021/04/30

LUN(Logical Unit Number)是scsi专用概念,指在同一SCSI设备(同SCSI ID)下映射的逻辑子设备。这来自最早SCSI设备是总线结构,可以支持一个或两个initiator,多个target。由于寻址SCSI设备依靠SCSI ID,而每个SCSI总线做多支持16个设备(最多15个target)。如果每个Target只能定位一个磁盘,那么一条SCSI总线仅仅能连接15个磁盘,这对现在动辄几十甚至上百磁盘的服务器设备,远远不足。为了超越原始SCSI标准的局限,后续的SCSI标准推出了子设备:LUN的概念,即一个SCSI ID下可以挂接最多65535个LUN设备,而每个LUN可以是一块磁盘,也可以是一个CD-ROM或带机。由于最常使用的SCSI设备是磁盘,我们通常把LUN与磁盘等同,一个LUN就是一块SCSI磁盘。另外,SCSI现在并不仅仅是物理SCSI设备,好多新型设备都依托于SCSI协议,而物理层及链路层采用其它方案,非原始SCSI标准的电路连接。例如基于光纤的FC设备,实际上是通过光纤通道传输,最终设备访问协议也是SCSI。

LUN磁盘(现在可能是物理磁盘,存储阵列虚拟的逻辑磁盘,介质可能是铁磁机械设备,也可能是SSD这种电子电路设备,在AIX操作系统最终都被驱动程序识别为一种磁盘设备)在AIX上,首先对应为一个hdisk(其实还有可能被识别为pdisk暂时略过),hdisk有两种使用方案:被加到VG(Volume Group)中,成为PV(Physical Volume);被应用程序直接访问(一般被称为裸设备,取其不被OS管理包装,直接赤裸使用之意)。裸设备与PV没什么区别,只是由谁对磁盘空间进行管理,如果由AIX管理,则以PV形式存在;如果被特定应用程序管理,则被叫做裸设备,例如由Oracle数据库的ASM进行磁盘管理。

PV存在的意义是将磁盘的大小、类型等物理特性屏蔽掉与VG配合,使其抽象为由同样大小的PP(Physical Partition)空间块组成的存储池。一个VG就是一堆PP,使用者不用考虑PP来自哪个PV即磁盘。

在PP基础之上,把特定一组PP组织在一起,就变成一个特定大小的存储空间,被称为LV(Logical Volume),在LV这一层,AIX加如了诸如镜像、条块化等能力,使得上层对LV使用与支持LV的PV之间实现隔离,下层可以通过增删镜像实现对上层透明的数据迁移;可以利用镜像实现对物理设备的故障冗余,实现数据保护;可以利用条块,实现类似RAID0的能力;同时采用镜像和条块技术,则达到了RAID10的效果。

有一些应用软件自身没有提供很强的磁盘管理能力,但并不需要AIX提供文件系统管理功能,则也可能直接使用LV这种物理块集合,在这种用法下,LV也被称为裸设备。事实上,LV裸设备的使用方式早于直接使用磁盘裸设备的方式。无论是磁盘裸设备还是LV裸设备,他们的使用概念是相同的,因为应用程序读写裸设备采用的访问协议是SCSI协议,定位数据和读写数据使用的是SCSI LBA(Logical Block Address)和SCSI CDB(Control Data Block结构)。换句话说,直到此层面,AIX对这些设备的管理其实是在SCSI地址和数据之间进行转换,通过各种LV到PP,PP到PV,PV到hdisk之间的映射关系,把应用程序的访问地址,转换为对应hdisk上的某个位置。

下一层面(其实上上层,这个排列是倒过来的),AIX引入了文件系统,一般都是JFS2文件系统。由于文件系统的加入,对存储设备访问发生了一次大变化,使用的通信协议由SCSI转换为file IO,即对文件的open/close,seek,read,write等等。与之对应,对SCSI设备的访问是open/close, ioctl, read/write等操作,虽然看起来差不多,编程实现时的差距其实非常大。

操作系统对设备管理进行分层,其目的不仅是为管理,更要实现隔离,实现抽象和透明化,使上层访问无需考虑下层的变化,而下层的变化也能不影响上层——这是操作系统存在的最大意义。

一个课外题,Unix,包括Linux和AIX,对任何设备的管理都抽象为文件,那么AIX是如何识别各个文件的不同呢?它怎么知道这个文件对应的设备是磁盘,另一个设备对应的是网卡?这全依赖于统一的ioctl调用的devinfo请求。具体来说,对所有的设备(驱动)都应该提供ioctl功能,这个功能至少要支持一个devinfo的请求参数,当对设备文件进行ioctl devinfo query的时候,设备驱动要返回标准的devinfo信息块,此块内需要包含对该设备的最基础描述,包括主设备类型,子设备类型等等,然后通过AIX设备驱动编程标准的对应关系,访问者就能知道所访问的设备文件对应的物理设备是何种类型,应该如何管理。

又一个课外题,文件系统文件也支持ioctl么?怎么识别普通文件和设备文件?识别文件和设备的答案再此:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LUN磁盘、LVM及JFS2驱动内部关系 的相关文章

  • 玩具操作系统文件系统[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经在 assembly c 中开发了一个运行基本终端的基本内核 我已将其设置为使用 grub 运行 iso 我想继续使用这个操作系
  • Windows 驱动程序时间戳函数

    我正在修改现有的 Windows 内核设备驱动程序 并且需要在其中捕获时间戳 我打算使用 time h 库并调用 Clock 函数来实现这一点 但是在 Windows Visual Studio 下 链接失败 所以我把它作为我需要在驱动程序
  • //什么是路径,它与/有什么不同

    我们知道根目录是 根据posix 还有另一个与 不同的目录 当您 ls 和 ls 时 输出是相同的 就像 stat 一样 但是如果您 cd 和 cd 它们是不同的 尽管目录内容相同 这真的让我很困惑 有人得到答案吗 From Bash FA
  • /arm64/Image 到 zImage 或 boot.img

    大家好 我一直在试图弄清楚如何使我的 android 内核成为 zImage 或 boot img 我试图弄清楚但没有运气 有人告诉我 zImage 不适用于我的设备 因为它是 arm64 内核 但我想我会再问一次 如果是这种情况 我会尝试
  • 由于 system.currentTimeMillis() 导致系统 CPU 使用率较高

    我正在我们的 Storm Supervisor Wheezy 机器 上调试高系统 CPU 使用率 不是用户 CPU 使用率 以下是观察结果 相关进程的 perf 输出 Events 10K cpu clock 16 40 java kern
  • 定义新的套接字选项以在 TCP 内核代码中使用

    我正在尝试向 TCP 内核代码添加一些功能 在tcp input c 我希望我实现的代码仅在某些情况下运行 我想添加一个控制标志 可以从用户空间应用程序设置它 我 认为我 需要添加一个新的套接字选项 以便我可以完成以下操作setsockop
  • 监控内核注册表更改

    人们能否给我指点 没有双关语 我需要研究的主题才能做到这一点 我并不是真正的 Windows 专家 但我很快就能掌握新概念 我看到了 Mark Russinovich 和 Bryce Cogswell 编写的进程监控程序 http tech
  • cscope 或 ctags 为什么选择其中之一? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我主要使用 vim gvim 作为编辑器 并且正在考虑结合使用lxr Linux 交叉参考 http
  • USBInterfaceOpen总是报kIOReturnExclusiveAccess错误

    最近我遇到了这个问题 很头疼 我已经在这个问题上花了一个星期了 但仍然失败 希望您能帮我把这块石头踢开 非常感谢 我的问题 我们公司为iPhone生产USB存储设备 实际上这个存储设备中有一个SDCard 现在 我们想要开发一个 Mac 应
  • 对内核模块代码进行单元测试是否可行?

    如果是这样我应该使用什么技术 我正在考虑使用 hippomock 因为它们可以用来模拟 C 方法 还有更好的方法吗 如果是这样 任何人都可以提供建议 或者您认为内核的单元测试是否太过分了 从 Linux 内核版本 5 5 开始KUnit可用
  • 转储 $mft 文件的内容

    对于一些商业的我正在做的项目我需要能够读取 mft 文件中存储的实际数据 我找到了一个gpl lib http www codeproject com KB files NTFSParseLib aspx artkw ntfs这可能会有所帮
  • Linux 中 NDIS 过滤器的类似物是什么?

    我正在研究一个as close to real time我在linux中尽可能地使用系统 并且需要在收到特定数据包后立即发送大约600 800字节的TCP数据包 为了获得最佳的延迟 我希望这个数据包直接从内核发送 而不是将接收到的数据包一直
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • 选择 c 和 gamma 值

    您好 我正在使用 SMO 执行 SVM 分类 其中我的内核是 RBF 现在我想选择c and sigma值 使用网格搜索和交叉验证 我是内核函数的新手 请帮助 一步一步的过程 选择一些您认为有趣的 C 和 sigma 值 例如 C 1 10
  • C#驱动开发?

    在我一头扎进 C 之前 我一直认为 C 或 C 最适合在 Windows 上开发驱动程序 我不喜欢在 NET 机器上开发驱动程序的想法 但 NET 似乎是 MS 应用程序开发的方向 所以我现在想知道 人们正在使用 C 来开发驱动程序吗 您是
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • 如何编译一个简单的 multiboot2 裸机可执行文件?

    我想开始写一个操作系统内核 然后 我找到了一个document http nongnu askapache com grub phcoder multiboot pdf引入 multiboot2 规范 有三个示例代码文件 名为boot S
  • 使用 strace 修复挂起内存问题

    我有一个在 RHEL6 x 64 位 上运行的多线程进程 我发现当我尝试启动该进程时 该进程挂起并且大多数线程 同一进程的 崩溃 有些线程等待线程之间的共享内存被创建 我可以看到所有的共享内存都没有被创建 但是当我使用 strace 时 进
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind

随机推荐

  • 在C语言中利用PCRE实现正则表达式

    http dev jizhiinfo net post 49 1 PCRE简介 PCRE Perl Compatible RegularExpressions即 perl语言兼容正则表达式 是一个用C语言编写的正则表达式函数库 由菲利普 海
  • SDIO接口(2)——SD卡寄存器

    1 SD卡寄存器 SDIO接口中定义了8个寄存器 OCR CID CSD RCA DSR SCR SSR 仅sdio卡支持 CSR 仅sdio卡支持 这些寄存器只能通过对应的命令访问 其中OCR CID CSD SCR寄存器保存了卡 内容的
  • 聚类效果评价——Davies-Bouldin(DB指标)——内部评估标准(3)

    Davies David L and Donald W Bouldin A cluster separation measure IEEE transactions on pattern analysis and machine intel
  • Sql日志

    sql日志是为了记录一些之前的所有操作 一般是为了查看一些误操作之前的操作是什么 便于维护 node中常用的日志库是log4js 写好日志配置 专门写在一个文件中 导出日志对象 一个日志类别就是一个对象 const log4js requi
  • Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.解决办法

    电脑磕坏了 最近把公司给的mac屏幕给磕坏了 换成自己的macbookpro 本来想用时间机器做个无缝衔接 结果发现不能用了 跟客服沟通被告知macos版本在11以上不支持时间机器系统迁移 只能使用迁移助理做数据备份 非常痛苦 要重新安装各
  • 图形类设计——c++圆、矩形、三角形类的设计

    题目要求 设计三个图形类 Circle 圆 Rectangle 矩形 Triangle 三角形 1 Cirlce 类基本信息 圆心坐标 半径 Rectangle 类基本信息 长 宽 Triangle 类基本信息 三个顶点坐标 其中 成员变量
  • 排查Linux机器是否已经被入侵

    随着开源产品的越来越盛行 作为一个Linux运维工程师 能够清晰地鉴别异常机器是否已经被入侵了显得至关重要 个人结合自己的工作经历 整理了几种常见的机器被黑情况供参考 背景信息 以下情况是在CentOS 6 9的系统中查看的 其它Linux
  • 基于Yolov5环境配置详解(真的很方便很简单)

    目录 前言 写在前面 很重要 本文相应版本 一 查看CUDA 二 安装Anaconda 三 安装Pytorch环境 五 安装Pycharm 六 验证Pytorch 七 下载Yolov5 5 0源码和权重文件 八 安装Microsoft C
  • 祝贺姜宁当选 2022 Apache 软件基金会新任董事

    近日 Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果 在这周 Apache 软件基金会 下称 ASF 举行了一年一度的成员会议 并选举出了新的董事会 Rich Bowen 原董事 Bertrand Delacr
  • tftp服务器上传文件至华三ac,H3C命令行怎样实现TFTP呢【已解决】~

    设备基本配置 interface Ethernet0 0 用于连接client 的接口地址 port link mode route ip address 10 0 0 1 255 255 255 0 3 操作步骤 1 确认设备FTP功能使
  • 电子电路基础 (10)——场效应管的构造原理及使用

    一 场效应管的构造以及认识 非常重要 两只半引脚的 上面的是散热 和中间的半只引脚连在一起的 1 1 场效应管的构造 场效应管简称FET 与三极管一样也分三个极 其中D极称为漏极 也称为供电极 S极为源极 也称输出极 G极为栅极或称闸极 也
  • activiti实战系列 并行网关(parallelGateWay)

    流程图 13 2 部署流程定义 启动流程实例 13 3 查询我的个人任务 13 4 完成我的个人任务 说明 1 一个流程中流程实例只有1个 执行对象有多个 2 并行网关的功能是基于进入和外出的顺序流的 分支 fork 并行后的所有外出顺序流
  • eigen 总结(一)

    参考 https blog csdn net u012936940 article details 79706280 Matrix 类 Matrix
  • 前端vue uni-app自定义精美海报生成组件

    前端Vue Uni App自定义精美海报生成组件的技术实现 在当前软件开发中 随着技术的不断发展 软件开发的复杂度也在不断提高 为了解决这个问题 组件化开发逐渐成为了一种趋势 通过组件化开发 我们可以实现单独开发 单独维护 并且组件之间可以
  • java代码规范检查(遵循阿里巴巴开发)

    java代码规范检查 遵循阿里巴巴开发 基于代码的部署 后期测试与维护 需要对代码进行检查 在这里遵循阿里巴巴集团的开发规范 有兴趣的可以去参考阿里巴巴出版的一本书 阿里巴巴Java开发手册 eclipse安装代码规范检查插件 环境 JDK
  • 如何使用nuget中的FastReport.Core库

    https www cnblogs com wxchuachua p 10167508 html 下载FastReport Net最新版本 FastReport Net 2018新功能之一 使用nuget数据包 要安装软件包 必须创建一个本
  • c/c++将tuple展开/解包到不定参数列表中

    目录 问题引入 问题提出 引入templete lt size t Is gt 模板 获取不定参数模板的索引模板 问题引入 现在想实现这样一个模板类 将不定参通过commit函数提交到工作队列 然后由一个线程从队列中取出数据 调用proce
  • c# 创建自绘用户控件

    一 继承UserControl类 public class Chart UserControl 二 定义常量 私有成员变量 属性 加入属性的修饰 可以在图形界面配置 private const int LeftPos 60 private
  • 多因素方差分析中预测因素的筛多_用回归来理解方差分析(二):两因素方差分析...

    1 两因素方差分析的形式 多因素方差分析针对的是多因素完全随机设计 包含两个及以上的自变量 为便于讲解 本文以两因素方差分析为例 在一个两因素完全随机设计中 自变量 包含 共 个水平 自变量 包含 共 个水平 总共形成 个处理 各处理 之下
  • LUN磁盘、LVM及JFS2驱动内部关系

    复杂度2 5 机密度3 5 最后更新2021 04 30 LUN Logical Unit Number 是scsi专用概念 指在同一SCSI设备 同SCSI ID 下映射的逻辑子设备 这来自最早SCSI设备是总线结构 可以支持一个或两个i