0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对磁盘的深度解析,从操作系统层面来讲解

独爱72H 来源:itworld123 作者:itworld123 2019-12-06 16:07 次阅读

(文章来源:itworld123)

企业级存储系统通常也是运行在常规操作系统之上的,比如早期的EMC的中端存储是运行在Windows XP平台上的,而国内的存储厂商的产品通常是基于Linux平台。分布式存储更是不例外,目前分布式存储通常都是运行在Linux操作系统之上。

为了更好地理解存储技术,从操作系统层面理解磁盘就显得尤为重要了。为了便于学习,本文以Linux操作系统作为参考,介绍磁盘在Linux操作系统层面的相关内容。我们通常看到的磁盘是在/dev目录下的文件(设备)。在Linux操作系统中一切皆文件,因此磁盘设备本身也是以文件的形态呈现的。比如某个操作系统下面我们可能会看到如下内容。

上述设备中形似sdX的设备为SCSI磁盘设备。无论是基于SAS、iSCSI还是FC的磁盘设备,大概都是这个样子。形似dm-X的是Device Map块设备,也就是通过LVM进行管理的设备,这种设备是一种逻辑设备。在Linux操作系统中块设备的种类很多,有本地磁盘设备、有SAN设备还有基于网络的块设备。在虚拟机中块设备又呈现为另外一种文件名,比如在Xen虚拟机中伪xvdX。

虽然名称差异很大,但是在Linux操作系统内核中的实现确实非常简单。在内核中任何磁盘块设备都是通过调用add_disk函数完成的。在《Linux设备驱动程序》这本书对块设备进行了详细的介绍,并且可以通过非常简单的代码实现一个自己的块设备。

SAN的全称是存储区域网络,也就是通过网络的形式实现计算节点(客户端)对存储系统的访问。在存储系统中可以划分若干个LUN,这些LUN通过网络的方式连接,在客户端呈现为一个磁盘。如图所示,存储系统的资源在计算节点以磁盘的形式呈现。

对于Linux操作系统来说,块设备就好像一个文件一样。任何读写数据都是以偏移和长度为基本信息下发到磁盘块设备进行处理。因此,对于块设备来说,它并不关系这些数据在底层是如何存储。对于SAN存储来说,当块设备接收到请求后,会调用底层协议层的接口将请求转发出去。SAN存储使用的是SCSI协议,因此,块设备的请求都会转换为SCSI协议进行处理。

Linux内核实现了一个SCSI子系统,所有SCSI设备及驱动都基于该子系统实现。该SCSI子系统分为3层,SCSI上层、SCSI中层和SCSI下层。其中上层是设备层,实现比如磁盘驱动、磁带驱动或者光盘等所有的块设备。中层是通用层,实现SCSI的公共功能,比如错误处理等内容。下层是硬件驱动层,比如FC-HBA驱动和SAS-HBA卡驱动等等。

针对Linux磁盘设备来说,其发送的请求经过SCSI层后会封装为SCSI协议包,然后通过底层的协议发送出去。对于块设备,底层协议对用户来时是透明的,用户在使用块设备的时候也不用关心块设备底层所使用的通信协议。但是对于SCSI子系统来说是需要关系底层通信协议的,因为它要调用底层驱动的接口将数据通过该驱动发送出去。对底层驱动的调用是通过其回调函数完成的,回调函数的注册发生在设备初始化的时候。

至此,我们了解到SAN存储磁盘与本地磁盘并无本质的差别,核心差异在与其数据需要通过某种协议与比较远的设备进行数据的交换。SAN存储最早只支持FC协议。后来随着以太网技术的飞速发展,IBM发明了iSCSI协议,该协议是基于TCP/IP协议实现的存储协议。iSCSI协议可以简单地理解为一个应用层的协议,类似HTTP协议。只不过HTTP协议用于传输Web内容,而iSCSI协议则用于传输磁盘内容。

可以看出,iSCSI其实就是对SCSI协议的封装,然后通过以太网进行传输。说白了,iSCSI就是以以太网作为传输媒介的SCSI协议。iSCSI协议分为客户端和服务端两部分,在iSCSI协议中称为启动器和目标器。其中启动器就是计算端,而目标器就是存储端。

(责任编辑:fqj)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121875
  • 磁盘
    +关注

    关注

    1

    文章

    338

    浏览量

    24882
收藏 人收藏

    评论

    相关推荐

    【服务器数据恢复】服务器raid6阵列多块磁盘离线的数据恢复案例

    一台网站服务器中有一组由6块磁盘组建的RAID6磁盘阵列,操作系统层面运行MySQL数据库和存放一些其他类型文件。
    的头像 发表于 02-23 13:13 154次阅读

    深度解析全球操作系统格局

    操作系统是负责协调、管理和控制计算机硬件与软件资源的程序,是整个计算机的核心系统软件。 按照操作系统面向的设备类型,通用操作系统主要包括桌面操作系统
    的头像 发表于 01-18 15:00 282次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>解析</b>全球<b class='flag-5'>操作系统</b>格局

    开源操作系统大全

    开源操作系统即公开源代码的操作系统软件,它遵循开源协议使用、编译和发布。自由和开放源代码软件中最著名的是 Linux ,它是一种类 Unix 的操作系统。Linux 可安装在各种计算机硬件设备中
    发表于 10-27 15:13

    【昉·星光 2 高性能RISC-V单板计算机体验】三: nvme 磁盘启动 VisionFive2 并对磁盘分区扩容

    nvme 磁盘启动 VisionFive2 并对磁盘分区扩容 在之前的经验贴《在 VisionFive2 上如何更快的向 nvme 硬盘安装操作系统》中介绍了一种通用的向 nvme
    发表于 09-04 02:54

    AIX操作系统安装及配置

      目录  AIX操作系统安装配置规范  1 系统安装配置标准  2 安装配置指南  2.1 操作系统安装  2.2 语言包安装  2.3 软件包安装  2.4 补丁安装  2.5 系统
    发表于 07-19 09:38 1次下载

    设置磁盘配额(3)#网络操作系统

    操作系统
    未来加油dz
    发布于 :2023年07月18日 12:01:25

    设置磁盘配额(2)#网络操作系统

    操作系统
    未来加油dz
    发布于 :2023年07月18日 12:00:46

    设置磁盘配额(1)#网络操作系统

    操作系统
    未来加油dz
    发布于 :2023年07月18日 12:00:12

    使用Linux基本磁盘(2)#网络操作系统

    网络操作系统
    未来加油dz
    发布于 :2023年07月18日 11:31:29

    使用Linux基本磁盘(1)#网络操作系统

    网络操作系统
    未来加油dz
    发布于 :2023年07月18日 11:30:50

    磁盘的驱动调度(2)#操作系统

    计算机操作系统
    学习硬声知识
    发布于 :2023年05月24日 23:22:30

    磁盘的驱动调度(1)#操作系统

    计算机操作系统
    学习硬声知识
    发布于 :2023年05月24日 23:21:57

    操作系统概念重点讲解(2)#操作系统

    操作系统
    学习硬声知识
    发布于 :2023年05月19日 19:29:09

    操作系统概念重点讲解(1)#操作系统

    操作系统
    学习硬声知识
    发布于 :2023年05月19日 19:28:41

    聊聊操作系统

    说到操作系统,大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑,使用的是windows和macOS系统;用手机、平板电脑,则是android(安卓)和iOS系统
    的头像 发表于 05-12 11:13 1026次阅读
    聊聊<b class='flag-5'>操作系统</b>