linux I/O 栈 预习(上)

二、预习

在我们进去device mapper的dm dedup学习之前,我们先要预习一下,什么是device mapper,和为什么device mapper能够做块重删。

1、device mapper
照旧,我们先看一下维基百科对它的介绍。
The device mapper is a framework provided by the Linux kernel for mapping physical block devices onto higher-level virtual block devices. It forms the foundation of the logical volume manager (LVM), software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
注1:这一段的意思就是说device mapper是我们linux系统中非常重要的LVM和软RAID还有加密、快照等特性的实现。

Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device. Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption or simulation of unreliable hardware behavior.
注2:这一段的意思是说device mapper使用虚拟设备(dm-n)来提供与其他虚拟或者真实的块设备的数据传送,当然数据能够在其中改变(比如raid会增加冗余信息),也可以不改变(比如linear就是透传),或者就是更厉害的功能,加密等吧,可见这个device mapper一定可以是个常青树,什么和存储有关系的都可以用它实现。

我们大致了解的device mapper,我们还需要了解一下device mapper在linux I/O stack中的位置吧;
还是那个老图,我们尽量看看,顺便把其他的模块也讲解一下;
linux I/O 栈  预习(上)

鉴于篇幅有限,我们就从上往下讲,因为本人从事linux I/O stack的研究已经有5年的时间,大概每个位置都是玩过的,但并非每个module都是专家,并且kernel I/O stack里面的存储的知识都非常的深,所以要入坑存储的同行的请三思啊。
ok,废话不多说,我们从最上层开始讲,这里只是概要性的分析,不涉及特别深。
linux I/O 栈  预习(上)
我把图截成上下两半,以block layer为分层。上面应该就是大概非常熟悉的三大块,LIO、虚拟块设备、VFS虚拟文件系统。
1、LIO(linux io target)
做传统SAN存储和分布式块存储的同学应该对LIO比较熟悉吧,至少都是听过的,早些年我们做iscsi或者fc存储的时候,那时候我们大多数用IET和SCST,后来随着linux kernel对LIO的逐步完善,目前LIO可以支持非常多种类的fabric和backcore。
fabric:tcm_fc(我觉得可能是用于emulex的光纤卡),iscsi_target_mod(是对接linux kernel网络协议栈)、tcm_qla2xxx(对接qlogic的光纤卡)、sbp_target(IEEE 1394),tcm_usb_target(做usb移动硬盘可以用上)等等吧,其中iscsi_target_mod可以被赋予infiniband的支持,会成为一个新的target为iser。
backcore:backcore简单来讲就是虚拟scsi lun的mod,它能够解析和仿真几乎常见的所有标准SCSI命令,让它看起来和SCSI DISK内的LUN一样。LIO能够提供几种backcore,core_file(通常是文件系统的某个文件,或者直接是将块设备作为文件导出),core_iblock(能够将linux块设备导出),pscsi(能够直接导出,比如直接导出/dev/sdb等)。
2、vfs(虚拟文件系统)
微微一笑,这里我不太懂,属于瞎写。
文件系统在linux中占有举足轻重的作用,他可能是用户和开发者最便捷能够访问资源的方式。
linux为用户开发了很多可操作的文件系统。大致有以下几种:
block-based fs:这类文件系统通常后端设备是一个或多个块设备,它们的实体是一个能够组织数据的表结构,通过查表(metadata)来实现文件描述符到块的映射访问,这能非常有效的进行我们日常所有的大部分工作和生活需求。我们比较常用的是ext2/3/4,xfs和btrfs等等。
Network fs:网络文件系统,他们的诞生是要去解决,block-based文件不能够有效共享文件而产生的。他们从本质上讲都是分布式的,因为文件可能被多个client使用,这种文件系统通常需要非常复杂的分布式协议作为支持,如我们最开始接触的NFS,从windows兼容的smb2fs,还有目前非常流行的ceph,目前来看ceph并非和它的前辈一样只能够作为NAS的导出协议,它能够提供新兴的存储接口对象存储和高效的块存储。
psedudo fs:伪文件系统。大家应该都会对/dev/sda这种块设备直接进行过dd等操作,从vfs来看,/dev/sda这种bdev也是一种伪文件系统,包括我们更加数据的/proc、/sys、/configfs等开发者经常用来变成使用的接口,他们的注册和使用都非常简单,能够高效的帮助我们完成各种系统功能的配置和查看。
special psedudo fs:这类特别伪文件系统,是非常重要的,我们经常会把/tmp和/var挂载为tmpfs,用来加速不需要持久化的信息,来提供运行速度。

大致说完了上面的两个LIO和vfs后,我们就需要来讲讲top block device,也就是可能被导出的block decive,在linux中,被LIO和VFS使用,等价于被mount,即使独占模式,保护块设备的访问安全。
top block device:也就是虚拟块设备,这个在linux 里主要就是咱们经常用的LVM drbd md-raid bcache和device mapper,它们就是在/drivers/md/下面,他们就是真正承上启下的块虚拟化模块,每个模块都是比较有意思。这些内容会在后续的文章中一一讲解。

【本文由51cto博客作者 “底层存储技术” https://blog.51cto.com/12580077 个人创作,公众号:存储之谷】,如需转载,请于本人联系,谢谢。

转载于:https://blog.51cto.com/12580077/2310233

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot controller 访问 404

两种解决方式: 1、因为SpringBoot的项目启动类,会只扫描该包下的文件或者改包下所有子包内的文件,只要你把该文件移动到启动类的相同目录报下就可以。 2、就是在该类上面加者在启动类上添加注解 ComponentScan(basePackages {"com.boota…

fegin需要实现类_【第24条】静态成员类优于非静态成员类

第24条静态成员类优于非静态成员类嵌套类(nested class)是指定义在另一个类的内部的类。嵌套类存在的目的应该只是为它的外围类(enclosing class)提供服务。如果嵌套类将来可能会用于其他的某个环境中,它就应该是顶层类(top-level class)。嵌套类有四种:…

Springboot 多线程的使用

直接上代码 线程配置类 package zengmg.nbpi.com.thread;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework…

vlookup函数练习_为什么职场要学excel函数?看这个案例演示:自动计算快递价格...

在上一篇文章里面,我们讲了如何整理完成一个规范化的表格,以便于下一步的函数计算。最初的信息内容如图所示。经过整理,我们得到了表2这样的规范化表格。现在,我们就通过表2来实现快递费用自动计算,最终实现图中这样的…

蓝牙芯片排行_7月TWS 全球品牌出货量排行榜出炉

数据铸造影响力撰文 / 旭日大数据编辑 / 柏序旭日大数据公布了2020年7月全球TWS品牌销量排行榜,与上期数据相比,全球品牌七排名TOP20汰换率为15%,其中DOSS,万魔、BOSE跌出前20,广州由我,Tzumi登榜&…

project 打印的时候上面的表格和下面的图例中间有个很大的空白,这块东西怎么能去掉呢?

“打印预览”的“页面设置”里面,“页面”选项卡里的“缩放”项设为1页宽,1页高就可以了, 当然如果你的任务项比较少的话,怎么调也不容易去掉下面的空白 操作如下图(下图的任务太少,去不掉空白的&#xf…

加密机工作原理_端子机压力检测装置工作原理

上期我们介绍了端子机压力管理装置的使用常识,这期我们介绍端子机压力管理装置的工作原理,端子机压接管理装置,有单通道压力监测和双通道压力监测二种,双通道压力监测装置,一般用于双头端子压接机上,一台主…

win10解决java多版本java -version问题

电脑环境 先安装了Jdk8,后安装了jdk11.(发现Jdk11没有单独的jre,官网也不提供下载,集成在一起了) Java -version 将环境变量切换为 JDK11 后 javac -version 是 java编译环境是jdk11了,但 java -versio…

vs设计窗口不见了_碳纤维的巅峰:VS沛纳海616V3

各位朋友,你们好!欢迎大家关注XYZ腕表俱乐部。专注腕表资讯,致力于做腕表拆解测评,为大家普及分享有价值的腕表知识,真正让大家实实在在透明玩表。想了解更多,欢迎搜索:XYZ腕表俱乐部。可以让您…

CSharpGL(49)试水OpenGL软实现

CSharpGL(49)试水OpenGL软实现 CSharpGL迎来了第49篇。本篇内容是用C#编写一个OpenGL的软实现。暂且将其命名为SoftGL。 目前已经实现了由Vertex Shader和Fragment Shader组成的Pipeline,其效果与显卡支持的OpenGL实现几乎相同。下图左是常规OpenGL渲染的结果&#…

SonarQube结合IDEA实现代码检测

环境准备 1.SonarQube下载:https://www.sonarqube.org/downloads/ 建议用最新版本,SonarQube与idea的结合 需要SonarQube很多插件,需要借助idea的SonarLint 插件。 不同的SonarQube版本,有不同的插件版本 idea的SonarLint 插件…

二维小波变换_【外文文献速读】实时二维水波模拟

题目:Water surface wavelets 作者:Stefan Jeschke, TomšSkřivan, MatthiasMller-Fischer, Nuttapong Chentanez, Miles Macklin, Chris Wojtan

技术开发(委托)合同怎么写?

一直基于宁波市科技局备案合同模板签订合同,并完成科技局备案工作,成功了N次,直接分享模板,该模板通过了法务审核,财务审核,只需要批示修改相关内容即可,一份技术开发委托合同,十几分…

最常用的15个前端表单验证JS正则表达式

2019独角兽企业重金招聘Python工程师标准>>> 在表单验证中,使用正则表达式来验证正确与否是一个很频繁的操作,本文收集整理了15个常用的JavaScript正则表达式,其中包括用户名、密码强度、整数、数字、电子邮件地址(Ema…

程序员个人外包合同怎么写?

分享一份工作上经常用到的个人外包合同协议,该协议通过了法务与财务审核,兼顾甲乙双方利益,程序员接私活必备!!!! ---需要电子word版,请关注--------- 回复:个人外包合同…

rocketmq新扩容的broker没有tps_深入研究RocketMQ消费者是如何获取消息的

前言小伙伴们,国庆都过的开心吗?国庆后的第一个工作日是不是很多小伙伴还沉浸在假期的心情中,没有工作状态呢?那王子今天和大家聊一聊RocketMQ的消费者是如何获取消息的,通过学习知识来找回状态吧。废话不多说&#xf…

苏宁 11.11:仓库内多 AGV 协作的全局路径规划算法研究

本文为『InfoQ x 苏宁 2018双十一』技术特别策划系列文章之一。 1. 背景 随着物联网和人工智能的发展,越来越多的任务渐渐的被机器人取代,机器人逐渐在发展中慢慢进入物流领域,“智能叉车”,AGV(Automated Guided Vehi…

用python绘制玫瑰花的代码_python也能玩出玫瑰花!程序员的表白代码

有些情侣是异地恋,情人节想送朵玫瑰花给女朋友都困难。别担心,用Python就好了,互联网时代的恋爱神器!接下来就让我们一起来看看如何用Python变出玫瑰花的。 1、首先我们导入画图工具turtle,即import turtle 2、导入画图…

Springboot 整合 swagger

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40254498/article/details/83622098 swagger 主要是为后端服务的接口文档,懒人必备,swagger就是一款让你更好的书写API文档的框架。 其他的框架…

Project为项目设置预算

假设项目预算10万元,如果项目完成后,花费没有超过10万元,则成本管理是成功的,如果花费了11万,则超过了预算。 预算是10万,一般目标成本设得比预算成本低,比如9.5万。在项目实施过程中&#xff…