linux I/O栈预习(上)

  

二、预习

  

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

  

1,设备映射器
照旧,我们先看一下维基百科对它的介绍。
设备映射器是一个框架提供的Linux内核映射物理块设备alt=癓inux 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,用来加速不需要持久化的信息,来提供运行速度。

  

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

  

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

linux I/O栈预习(上)