LinuxZone

LinuxZone.net
Linux系统网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux的存储子系统中的硬盘与RAID的相关内容

2023年11月7日 144点热度

Linux操作系统的储存子系统应当是Linux中最为复杂的子系统了。虽然好多子系统都觉得自己是最复杂的子系统,例如显存子系统和网路子系统也如此说。无论怎样,储存子系统在Linux中是比较复杂的。明天我们就介绍一下Linux的储存子系统中的硬碟与RAID的相关内容,前面再写一篇关于LVM与文件系统的内容。

硬碟

在Linux的储存子系统中,最底层的就是硬碟了。这儿的硬碟并不是指我们看见的硬碟硬件,而是指在Linux内部听到的硬碟设备,或则说是块设备。假如我们在/dev目录执行以下ls命令,就可以看见好多设备。在这种设备中以sd开头的就是基于SCSI合同的硬碟。

字符驱动设备关键是什么_linux 字符设备驱动_字符驱动设备

图1Linux中的块设备

无论是基于SAS、iSCSI还是FC的c盘设备,大约都是这个样子。酷似dm-X的是DeviceMap块设备,也就是通过LVM进行管理的设备,这些设备是一种逻辑设备。

在Linux操作系统中块设备的种类好多,有本地c盘设备、有SAN设备还有基于网路的块设备。在虚拟机中块设备又呈现为另外一种文件名,例如在Xen虚拟机中为xvdX。

字符驱动设备关键是什么_字符驱动设备_linux 字符设备驱动

尽管名称差别很大,而且在Linux操作系统内核中的实现却十分简单。在内核中任何c盘块设备都是通过调用add_disk函数完成的。在《Linux设备驱动程序》这本书对块设备进行了详尽的介绍,而且可以通过特别简单的代码实现一个自己的块设备。

字符驱动设备_linux 字符设备驱动_字符驱动设备关键是什么

图2最简单的块设备驱动

这儿面有2个函数,也就是alloc_disk和add_disk。前一个函数是分配一个通用块的结构体,前者则是将该块设备添加到内核,也就是在/dev目录下生成一个“文件”。以上述代码为例,执行后会生成如下块设备。

brw-rw----1rootdisk251,0Jun1609:13/dev/sbulla

字符驱动设备_字符驱动设备关键是什么_linux 字符设备驱动

这儿我们自定义了一个设备名称sbulla。虽然我们看见的SCSI设备也是这样定义的linux 字符设备驱动,只不过其定义名称的时侯是通过sd字符。

以上述代码为例,在块设备中比较重要的地方是初始化了一个队列处理函数(sbull_full_request)。所有从下层访问该块设备的恳求就会转发到该处理函数进行处理。

所有块设备都要初始化这个队列,但是提供一个恳求处理函数。不同的块设备的恳求处理函数略有不同。例如常见的SCSI块设备,其处理函数初始化过程如下:

q=__scsi_alloc_queue(sdev->host,scsi_request_fn);

而nbd(网路块设备,通过网路的形式将服务端的文件映射为顾客端的块设备)设备的初始化队列的代码如下所示:

disk->queue=blk_init_queue(do_nbd_request,&nbd_lock);

类似的反例还好多,本文不再一一介绍。这儿我们须要理解一点,核心问题在于注册处理恳求的反弹函数,以及通过add_disk就可以在/dev目录下边创建一个块设备。

另外一点,对于任何类型的块设备,无论是本地硬碟,还是经过网路的NBD和iSCSI,还是FC设备,最后都是/dev目录下的一个文件,而这个文件或许就是块设备。我们可以通过对该文件的读写实现对块设备的访问。

RAID

作为普通用户使用单个硬碟是没有任何问题的,并且作为企业应用使用单个硬碟存在很大的风险。这时由于硬碟随时有可能受损,因而我们须要一种机制来保证虽然出现硬碟故障的情况下,数据不会遗失,且业务一直可以正常工作。

RAID正是解决上述问题的技术。RAID的全称为廉价冗余c盘阵列(RedundantArrayofInexpensiveDisks),从字面可以看出其基本原理就是通过廉价的c盘组成一组c盘。RAID不仅仅可以通过冗余的方法解决数据可靠性的问题,还可以增强性能。其主要原理就是将恳求分拆到多个化学硬碟来执行,性能自然比一个硬碟快了。

在Linux操作系统层面,虽然就是将化学c盘通过软件具象为逻辑c盘。以RAID1(两块c盘储存相同的数据linux重启命令,在出现一块c盘故障的情况下,数据不遗失)为例,通过Linux内核中的软件创建一个虚拟的块设备,而该块设备中记录了底层对应的数学设备及相关参数。

字符驱动设备_linux 字符设备驱动_字符驱动设备关键是什么

图3RAID1示意图

因而,从用户层面来看就是一块普通的c盘设备,而在底层却是2个独立的化学硬碟。当用户向逻辑c盘写数据的时侯,其中的软件会通过参数进行估算,并将数据重新定向到底层的化学设备。通过这些方式可以保证虽然出现某个数学c盘受损,用户的数据依然完好无损。

不仅里面说的RAID1外,还有好多RAID类型。不同的RAID类型实现不同的功能。例如RAID0实现条带化,主要是提高性能;RAID1则是实现数据的冗余,避免c盘故障造成的数据遗失;因为上述RAID只能解决一方面的问题,因而有人讲三者结合,出现了RAID10和RAID01,这样既能保证数据的可靠性,又能提高性能。

因为RAID1是一份数据讲到两个设备,因而只有50%的有效数据。为了提升有效数据率,于是发明了RAID5和RAID6等类型。其中RAID5通过降低一个校准数据来保证数据的可靠性,以5块盘的RAID5为例,其中有效数占4块盘的空间,有效数据80%。并且RAID5有个问题,就是一组c盘中只能坏一块,假如受损的c盘超过1块都会造成数据遗失。RAID6的算法与RAID5类似linux 字符设备驱动,它的特征是可以容忍2块c盘故障。

在实现层面kali linux,Linux的RAID实现在用户态和内核态都有涉及。其中用户态主要进行RAID的管理,而内核态一方面配合用户态进行RAID管理,另外一方面则实现对IO的处理,这部份才是RAID最为核心的内容。

字符驱动设备关键是什么_字符驱动设备_linux 字符设备驱动

图4软件构架

对于基于SCSI化学c盘的RAID来说,Linux环境下整个软件构架如图4所示。其中实线以上的为用户态的软件模块,实线以下的为内核态的软件模块。这儿比较核心的是RAID公共层,在这儿主要创建md设备,该设备是一个逻辑设备,也是用户可以看见的RAID设备。其下则是具体的RAID模块,用于实现不同的RAID级别(算法)。

再往下就是通用SCSI驱动层了,也就是图中的SCSIc盘驱动这一层的内容。该层虽然是SCSI系统的下层驱动(SCSI子系统分为上中下三层)。RAID模块通过调用该层的数据访问插口就可以实现化学c盘数据读写了。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 内核 物理 硬盘 磁盘 设备
最后更新:2023年11月7日

Linux系统网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux系统网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux系统编程的主要内容-系统调用API函数 如何更改linux最大文件数的限制? Linux内核中的系统调用的标准表示可移植操作系统接口 分区和目录中创建的文件数量有限制 网络攻防干货:显示文件的前10行知识点详解 :Access访问时间函数讲解文件:#include定义函数 嵌入式Linux系统组成部分部分64移植过程 Linux中的文件时间属性可以使用stat命令命令查看 linux 命令 操作系统版本 中标麒麟-内核Linux银河麒麟内核 linux内核移植的主要模块(或组件) Ubuntu下终端默认字体,看起来很舒畅,蛮漂亮的 Linux设备树编译:内核中的dtc工具 服务器配置进行域名解析及域名的解析与解析 安装完linuxredhat5.4,打开浏览器发现显示中文全部成了乱码 linux下mysql英文乱码解决方式(2008-08-22) ubuntu字体安装方法,超实用!!(附详细教程) Linux下USB转串口DB9(RS232)和转换线 Linux上部署Web应用程序时非常常见的做法虚拟主机 (Linux基础知识)Linux用户权限管理 关于Linux发行版本的详细信息和架构信息的说明书
Linux上部署Web应用程序时非常常见的做法虚拟主机Linux下USB转串口DB9(RS232)和转换线ubuntu字体安装方法,超实用!!(附详细教程)linux下mysql英文乱码解决方式(2008-08-22)安装完linuxredhat5.4,打开浏览器发现显示中文全部成了乱码服务器配置进行域名解析及域名的解析与解析Linux设备树编译:内核中的dtc工具Ubuntu下终端默认字体,看起来很舒畅,蛮漂亮的linux内核移植的主要模块(或组件)linux 命令 操作系统版本 中标麒麟-内核Linux银河麒麟内核Linux中的文件时间属性可以使用stat命令命令查看嵌入式Linux系统组成部分部分64移植过程:Access访问时间函数讲解文件:#include定义函数网络攻防干货:显示文件的前10行知识点详解分区和目录中创建的文件数量有限制Linux内核中的系统调用的标准表示可移植操作系统接口如何更改linux最大文件数的限制?Linux系统编程的主要内容-系统调用API函数SHELL编程中使用变量的实验原理和使用技巧和技巧Linux服务器出现CPU负载达到100%居高不下的情况
判进也自や代Linux:操作系统构建原理与应用 不同操作系统发行的软件包可否混用? 「职位」上海自主智能无人系统科学中心工程师招聘 Linux操作系统之目录文件描述符唯一性什么是进程输出 Linux内核的内存子系统映射的漏洞及解决办法 Linux上启用密码登录,您需要进行以下步骤步骤! apache安装教程linux LinuxNginx-1.22 串口驱动框架分析之u-boot串口接收缓冲中的示例 基于指定文件夹下所有文件大小的用法 搞定后原以为万事大吉了,光驱发现一启动还是回到了gub 嵌入式计算机与通用计算机的区别与联系系统的特点 关于基于Arch的Linux发行版的一些事儿 windows linux命令 掌握这些Windows和Linux常用命令,轻松玩转操作系统 红帽公司级Linux6红帽企业级6版本上市 linux 查看应用端口 每日掏心话生命是一场游戏,做你想做的梦 Linux系统常见的命令行工具 红帽LinuxRedHatEnterprise/Linux系统内核与发行套件 Linux、lockf、flock的区别及使用文件锁的注意事项 米尔游网:CanonicalCore和Matter将推出智能家居通用标准Matter FAT32兼容性最好32指的是文件分配表
标签聚合
文件目录 目录 命令 操作 应用 内核 文件 linux服务器 软件 linux系统
书籍
课程
技术群
技术干货大合集↓
  • 2023年12月 / 30篇
  • 2023年11月 / 89篇
  • 2023年10月 / 94篇
  • 2023年9月 / 90篇
  • 2023年8月 / 92篇
  • 2023年7月 / 96篇
  • 2023年6月 / 91篇
  • 2023年5月 / 93篇
  • 2023年4月 / 91篇
  • 2023年3月 / 69篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源 | Linux系统

COPYRIGHT © 2024 LinuxZone.net ALL RIGHTS RESERVED.