CN104516687B - 一种Linux块设备的Windows远程映射方法 - Google Patents
一种Linux块设备的Windows远程映射方法 Download PDFInfo
- Publication number
- CN104516687B CN104516687B CN201410806282.4A CN201410806282A CN104516687B CN 104516687 B CN104516687 B CN 104516687B CN 201410806282 A CN201410806282 A CN 201410806282A CN 104516687 B CN104516687 B CN 104516687B
- Authority
- CN
- China
- Prior art keywords
- message
- data
- classes
- windows
- linux
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0667—Virtualisation aspects at data level, e.g. file, record or object virtualisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种Linux块设备的Windows远程映射方法。该方法在Linux系统中创建虚拟块设备文件,将Windows系统下的存储设备作为Linux系统中虚拟块设备文件所对应的实际物理设备;根据接入Windows系统的存储设备找到Windows内核中对应的设备对象指针,并创建Windows系统到Linux系统的TCP连接;Linux系统的虚拟块设备和Windows系统的USB存储设备采用TCP协议传输消息,根据TCP消息中的操作类型进行读操作或写操作。本发明通过扩展网络块设备到Windows系统平台的方式,简化了文件传输的操作过程,并且提高了数据传输效率。
Description
技术领域
本发明涉及Linux网络块设备领域,特别是涉及一种基于网络的将Windows存储设备映射为远程Linux平台块设备的方法。
背景技术
在Linux操作系统中,I/O设备主要分为字符设备和块设备,块设备将数据存储在固定大小的块中,每块都有可用于访问的地址。因此,块设备常用于大容量存储设备,如磁盘。块设备以特殊文件方式存在于Linux系统中,块设备能够高效稳定的完成每一次读写操作。在Linux内核2.6版本以后加入了网络块设备功能(即NBD,Network Block Device),Linux系统之间能够将各自的存储设备以网络块设备方式共享给其他系统使用。但在Windows系统中没有相对应的实现方式。基于网络的共享方法很多,NFS、FTP以及Linux SCP等等,但这些方法都是操作系统上层应用的共享方式,其传输效率比处于内核态基于设备的网络块设备方式要低。
随着计算机与互联网的快速发展,数据中心或机房中的服务器绝大多数都采用Linux操作系统,但个人电脑上则是Windows系统,在平时的使用过程中不可避免会遇到文件传输等操作,对于USB存储设备而言,通常的操作方式是将其中数据拷贝到个人桌面电脑之后再通过文件共享方法拷贝到服务器,或者反之。很明显,传输效率很低,而且费时费力。
发明内容
本发明针对上述问题,提供一种Windows存储设备(尤其适用于Windows USB存储设备)到Linux块设备的远程映射方法,通过扩展网络块设备到Windows系统平台的方式,简化文件传输的操作过程,并且提高数据传输效率。
为实现上述目的,本发明采用如下技术方案:
一种Windows存储设备到Linux块设备的远程映射方法,其步骤包括:
1)在Linux系统中创建虚拟块设备文件,并指定请求处理函数、设备号,然后绑定请求处理队列,创建TCP监听进程,将Windows系统的存储设备作为Linux系统中虚拟块设备文件所对应的实际物理设备;
2)根据接入Windows系统的存储设备找到Windows内核中对应的设备对象指针,并创建Windows系统到Linux系统的TCP连接;
3)Linux系统的虚拟块设备和Windows系统的存储设备采用TCP协议传输消息,根据TCP消息中的操作类型进行读操作或写操作。
进一步地,所述Windows系统的存储设备优选为USB存储设备,除支持Windows USB存储设备之外,仅通过修改设备对象查找条件,即可支持其他Windows存储设备(如硬盘)。
进一步地,所述TCP消息包括三类网络传输消息:A类消息、B类消息和C类消息,其中A类消息和C类消息传输操作指令以及操作结果状态信息,为定长格式,B类消息传输实际数据,为不定长格式。
进一步地,所述A类消息包含的字段为类型、编号、操作类型、数据长度和数据起始地址;编号是为了区分相同类型消息以及重复消息;操作类型包含两种,即读操作和写操作;数据长度和起始地址分别指明本次过程需要操作的存储设备中的地址和数据块数;所述B类消息包含类型、编号、数据长度和数据四个字段,当A类消息指明当前操作为读操作,则B类消息从Windows端发送到Linux端;当A类消息指明当前操作为写操作,则B类消息从Linux端发送到Windows端;所述C类消息包含类型、编号和状态编号三个字段,用于表示一个操作成功或者失败状态。
一种采用上述方法的Windows系统到Linux系统的远程映射系统,其特征在于,包括Linux系统的虚拟块设备和Windows系统的存储设备,两部分采用TCP协议传输消息,根据TCP消息中的操作类型进行读操作或写操作。
与现有技术相比,本发明的创新之处在于:以网络共享为基础,设计块设备跨平台映射方法,使USB存储设备能够以更方便、更有效的方式使用和管理。具体体现在:
1.本发明将Windows下的存储设备作为Linux服务器块设备文件的实际物理设备,这种方式尤其适合在PC和数据中心或机房服务器之间传输数据,用户可以将USB存储设备直接连接在当前正在使用的PC上,通过本方法会在指定服务器中自动创建块设备文件,然后在服务器挂载该虚拟块设备到相应目录即可访问;
2.相比NFS、FTP等文件共享方式,本发明的运行环境为操作系统内核态,能够以更高的速度在PC和服务器之间传输数据;
3.本发明是在文件系统底层实现,因此所使用的上层文件系统是Linux VFS文件系统,虽然物理设备是在Windows平台下进行读写操作,但能够支持所有Linux文件系统支持的类型,即使Windows文件系统不支持也不会受到影响。
附图说明
图1是本发明方案的总体结构示意图。
图2是虚拟块设备请求处理逻辑流程图。
图3是Windows物理USB存储设备处理流程图。
图4是传输消息格式示意图。
图5是消息传输顺序示例图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实例和附图,对本发明做进一步说明。
本发明以扩展块设备使用平台、提高块设备使用简易性和传输效率为目标,解决Windows系统平台下的存储设备作为Linux系统平台下网络块设备使用的问题。具体包括:
1.Linux平台下块设备的虚拟;
2.Linux平台下虚拟块设备操作指令和数据的截获与转发;
3.Windows平台下存储设备的操作指令接收与反馈;
4.Windows平台下存储设备的操作指令执行和数据的管理。
如图1所示,本实施例由Linux虚拟块设备和Windows物理USB存储设备两部分组成,两部分采用TCP协议传输消息(如图4所示,A、B和C类消息)实现通信。其它实施例中,通过修改设备对象查找条件,即可支持其他Windows存储设备(如硬盘)。
一、Linux虚拟块设备
在Linux系统中创建虚拟块设备文件,指定请求处理函数、设备号(包含主设备号和次设备号,主设备号用来表示一个特定的驱动程序,次设备号用来表示使用该驱动程序的各设备),绑定请求处理队列,创建TCP监听进程,并获取用户对此虚拟设备所有操作的请求消息即request消息。在Linux内核中request消息被定义为request结构体,其中以下三个属性在内核与驱动之间的交互过程中有着重要作用:
struct request{
sector_t sector;
unsigned long nr_sectors;
unsigned int current_nr_sectors;
};
虚拟块设备驱动从request消息中根据这些属性提取出相应操作的操作类型(读数据还是写数据)、数据起始地址和数据长度,实际数据的传输由于操作类型不同,传输方向也不同。
如图2所示,Linux服务器主要操作过程如下所示:
1.创建网络监听进程;
2.注册块设备,并配置相关参数;
3.绑定消息请求处理函数;
4.添加块设备到内核;
5.等待TCP客户端连接;
6.等待用户操作;
a)读操作:
i.从request消息中分析数据读取的地址和长度;
ii.将操作类型、待读取数据起始地址和长度组装为A类消息;
iii.发送给TCP对端(Windows系统)节点;
iv.等待接收来自对端包含待读取数据的B类消息;
v.从接收到的B类消息中获取待读取数据内容,拷贝到request消息中指定的内存空间。
vi.发送C类消息给TCP对端节点,确认操作成功或失败;
b)写操作:
i.从request消息中分析出待写数据的起始地址和数据长度;
ii.将操作类型、待写数据起始地址以及数据长度组装为A类消息;
iii.发送给TCP对端节点;
iv.从request消息中分析出待写数据的内容,组装为B类消息;
v.发送给TCP对端节点;
vi.等待接收来自TCP对端节点的C类消息,确认操作成功或失败。
二、Windows物理USB存储设备
在Windows系统中,根据接入系统的USB存储设备找到Windows内核中对应的设备对象指针,以便对物理设备进行读写操作。创建TCP监听进程,接收Linux端发送的A类消息和B类消息。根据消息中包含的操作类型,进入不同的处理流程(如图3所示)。
Windows客户端操作过程:
1.当系统检测到USB存储设备的插入之后;
2.查找USB存储设备对应的内核设备对象;
3.创建到Linux服务器的TCP连接,并等待消息;
4.根据服务器端的操作指令将消息分为两类:读操作和写操作;
a)针对读操作,
i.从接收到的A类消息中分析待读取数据的起始地址和长度;
ii.创建并配置IRP请求;
iii.将IRP发送给设备对象;
iv.等待并处理操作结果;
v.从指定系统内存空间读取数据并创建B类消息;
vi.发送给TCP对端节点(Linux系统);
vii.等待C类消息,确认本次操作成功或者失败;
b)针对写操作,
i.从接收到的A类消息中分析待读取数据的起始地址和长度;
ii.等待此消息对应的B类消息;
iii.创建并配置IRP请求;
iv.将IRP请求发送给设备对象;
v.根据处理结果,创建C类消息;
vi.发送给TCP对端节点;
其中找到USB存储设备对应内核设备对象是通过枚举内核设备栈实现。根据USB存储设备驱动程序名称“\\Driver\\USBSTOR”查找设备栈,满足条件:
pAttrDeviceObj->DeviceType==FILE_DEVICE_DISK&&
(pAttrDeviceObj->Flags&DO_DEVICE_HAS_NAME)&&
(pAttrDeviceObj->Characteristics&FILE_REMOVABLE_MEDIA)
则查找成功。
三、消息类型
如图4所示,本发明中设计三类网络传输消息,其中A类和C类消息传输操作指令以及操作结果状态信息,为定长格式。B类消息传输实际数据,为不定长格式。
A类消息包含如下字段,即类型(即表示A类消息)、编号、操作类型、数据长度和数据起始地址。编号是为了区分相同类型消息以及重复消息。操作类型包含两种,即读操作和写操作。数据长度和起始地址分别指明本次过程需要操作的USB存储设备中的地址和数据块数。
B类消息包含类型(即表示B类消息)、编号、数据长度和数据四个字段,当A类型消息指明当前操作为读操作,那么B类消息从Windows端发送到Linux端;当A类型消息指明当前操作为写操作,那么B类消息从Linux端发送到Windows端。
C类消息包含类型(即表示C类消息)、编号和状态编号三个字段。C类消息主要用于表示一个操作成功或者失败状态,如果失败,则表示失败的原因编号。如图5所示,C类消息主要存在于写操作完成之后,Windows端发送给Linux端的结果反馈。
本发明方案不限于上述实施方式,例如上述三类消息可以进行合并,如将A类消息和B类消息组合在一起,即一条消息中既包含数据起始地址和长度信息,又包含实际数据内容等;或者将消息顺序进行调整以及采用缓存方式预存储消息和数据等方式。
本发明通过网络实现Windows系统平台下的存储设备作为Linux服务器块设备文件所对应的实际物理设备,从而实现块设备跨平台共享方法。相比NFS等文件共享方式,本发明能够以更高的速率传输数据、更为方便的方式使用USB存储设备或其他存储设备。如图1所示,本发明尤其适合在PC和数据中心(或机房)服务器之间传输数据,用户可以将USB存储设备直接连接在当前正在使用的PC上,通过本方法会在指定服务器中自动创建块设备文件,然后在服务器挂载该虚拟块设备到相应目录即可访问。同时本发明能够支持所有Linux文件系统支持的类型,包括Windows系统不能识别的文件系统类型。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。
Claims (9)
1.一种Windows存储设备到Linux块设备的远程映射方法,其步骤包括:
1)在Linux系统中创建虚拟块设备文件,并指定请求处理函数和设备号,然后绑定请求处理队列,创建TCP监听进程,将Windows系统的存储设备作为Linux系统中虚拟块设备文件所对应的实际物理设备;
2)根据接入Windows系统的存储设备找到Windows内核中对应的设备对象指针,并创建Windows系统到Linux系统的TCP连接;
3)Linux系统的虚拟块设备和Windows系统的存储设备采用TCP协议传输消息,根据TCP协议传输消息中的操作类型进行读操作或写操作;所述TCP协议传输消息包括三类网络传输消息:A类消息、B类消息和C类消息,其中A类消息和C类消息传输操作指令以及操作结果状态信息,为定长格式,B类消息传输实际数据,为不定长格式。
2.如权利要求1所述的方法,其特征在于:所述Windows系统的存储设备为USB存储设备,或者为硬盘。
3.如权利要求1所述的方法,其特征在于:所述A类消息包含的字段为类型、编号、操作类型、数据长度和数据起始地址;编号是为了区分相同类型消息以及重复消息;操作类型包含两种,即读操作和写操作;数据长度和起始地址分别指明本次过程需要操作的存储设备中的地址和数据块数;所述B类消息包含类型、编号、数据长度和数据四个字段,当A类消息指明当前操作为读操作,则B类消息从Windows端发送到Linux端;当A类消息指明当前操作为写操作,则B类消息从Linux端发送到Windows端;所述C类消息包含类型、编号和状态编号三个字段,用于表示一个操作成功或者失败状态。
4.如权利要求3所述的方法,其特征在于,Linux系统的虚拟块设备的操作流程是:
a)读操作:
i.从request消息中分析数据读取的地址和长度;
ii.将操作类型、待读取数据起始地址和长度组装为A类消息;
iii.发送给TCP对端节点;
iv.等待接收来自对端包含待读取数据的B类消息;
v.从接收到的B类消息中获取待读取数据内容,拷贝到request消息中指定的内存空间;
vi.发送C类消息给TCP对端节点,确认操作成功或失败;
b)写操作:
i.从request消息中分析出待写数据的起始地址和数据长度;
ii.将操作类型、待写数据起始地址以及数据长度组装为A类消息;
iii.发送给TCP对端节点;
iv.从request消息中分析出待写数据的内容,组装为B类消息;
v.发送给TCP对端节点;
vi.等待接收来自TCP对端节点的C类消息,确认操作成功或失败。
5.如权利要求4所述的方法,其特征在于,Windows系统的存储设备的操作流程是:
a)针对读操作,
i.从接收到的A类消息中分析待读取数据的起始地址和长度;
ii.创建并配置IRP请求;
iii.将IRP发送给设备对象;
iv.等待并处理操作结果;
v.从指定系统内存空间读取数据并创建B类消息;
vi.发送给TCP对端节点;
vii.等待C类消息,确认本次操作成功或者失败;
b)针对写操作,
i.从接收到的A类消息中分析待读取数据的起始地址和长度;
ii.等待此消息对应的B类消息;
iii.创建并配置IRP请求;
iv.将IRP请求发送给设备对象;
v.根据处理结果,创建C类消息;
vi.发送给TCP对端节点。
6.如权利要求1所述的方法,其特征在于:通过枚举内核设备栈找到Windows系统的存储设备对应的内核设备对象。
7.一种采用权利要求1所述方法的Windows系统到Linux系统的远程映射系统,其特征在于,包括Linux系统的虚拟块设备和Windows系统的存储设备,两部分采用TCP协议传输消息,根据TCP协议传输消息中的操作类型进行读操作或写操作;所述TCP协议传输消息包括三类网络传输消息:A类消息、B类消息和C类消息,其中A类消息和C类消息传输操作指令以及操作结果状态信息,为定长格式,B类消息传输实际数据,为不定长格式。
8.如权利要求7所述的系统,其特征在于:所述Windows系统的存储设备为USB存储设备,或者为硬盘。
9.如权利要求7所述的系统,其特征在于:所述A类消息包含的字段为类型、编号、操作类型、数据长度和数据起始地址;编号是为了区分相同类型消息以及重复消息;操作类型包含两种,即读操作和写操作;数据长度和起始地址分别指明本次过程需要操作的存储设备中的地址和数据块数;所述B类消息包含类型、编号、数据长度和数据四个字段,当A类消息指明当前操作为读操作,则B类消息从Windows端发送到Linux端;当A类消息指明当前操作为写操作,则B类消息从Linux端发送到Windows端;所述C类消息包含类型、编号和状态编号三个字段,用于表示一个操作成功或者失败状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410806282.4A CN104516687B (zh) | 2014-12-22 | 2014-12-22 | 一种Linux块设备的Windows远程映射方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410806282.4A CN104516687B (zh) | 2014-12-22 | 2014-12-22 | 一种Linux块设备的Windows远程映射方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104516687A CN104516687A (zh) | 2015-04-15 |
CN104516687B true CN104516687B (zh) | 2018-04-27 |
Family
ID=52792066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410806282.4A Active CN104516687B (zh) | 2014-12-22 | 2014-12-22 | 一种Linux块设备的Windows远程映射方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104516687B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104917826A (zh) * | 2015-05-26 | 2015-09-16 | 浪潮电子信息产业股份有限公司 | 一种异构环境下通过自动编码转换的方式访问ftp的方法 |
CN107547645B (zh) * | 2017-08-30 | 2020-10-02 | 厦门天锐科技股份有限公司 | Linux服务端与windows客户端之间跨平台文件的传输方法 |
CN109257420B (zh) * | 2018-08-29 | 2021-07-02 | 郑州云海信息技术有限公司 | 一种文件互传方法和装置 |
CN110336857B (zh) * | 2019-06-03 | 2022-04-12 | 平安科技(深圳)有限公司 | 网络块设备的创建方法、装置、设备和存储介质 |
CN110336693B (zh) * | 2019-06-03 | 2022-08-19 | 平安科技(深圳)有限公司 | 网络块设备的管理方法、装置、设备和存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100340991C (zh) * | 2003-12-30 | 2007-10-03 | 英业达股份有限公司 | 跨平台的计算机测试系统及方法 |
GB0919253D0 (en) * | 2009-11-03 | 2009-12-16 | Cullimore Ian | Atto 1 |
CN101944043A (zh) * | 2010-09-27 | 2011-01-12 | 公安部第三研究所 | Windows平台下Linux虚拟机磁盘文件访问方法 |
US8706834B2 (en) * | 2011-06-30 | 2014-04-22 | Amazon Technologies, Inc. | Methods and apparatus for remotely updating executing processes |
CN103259744A (zh) * | 2013-03-26 | 2013-08-21 | 北京航空航天大学 | 一种基于分簇的移动虚拟网络映射方法 |
-
2014
- 2014-12-22 CN CN201410806282.4A patent/CN104516687B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN104516687A (zh) | 2015-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104516687B (zh) | 一种Linux块设备的Windows远程映射方法 | |
US20220318184A1 (en) | Virtual rdma switching for containerized applications | |
US11159453B2 (en) | Fabric-based storage-server connection | |
US8402239B2 (en) | Volume management for network-type storage devices | |
US8452930B2 (en) | Methods and apparatus for backup and restore of thin provisioning volume | |
US8590050B2 (en) | Security compliant data storage management | |
US8898224B2 (en) | Migrating active I/O connections with migrating servers and clients | |
US20200026425A1 (en) | Efficient scaling of distributed storage systems | |
US7249227B1 (en) | System and method for zero copy block protocol write operations | |
US20180121459A1 (en) | System and method of using data blocks to optimize file storage | |
JP4310070B2 (ja) | ストレージシステムの運用管理方式 | |
WO2012085968A1 (en) | Storage apparatus and storage management method | |
US7856541B2 (en) | Latency aligned volume provisioning methods for interconnected multiple storage controller configuration | |
JP4965743B2 (ja) | オペレーティング・システムの移行の際におけるストレージ・エリア・ネットワーク(「san」)アクセス権の保持 | |
JP2006092322A (ja) | ファイルアクセスサービスシステムとスイッチ装置及びクオータ管理方法並びにプログラム | |
WO2014189481A1 (en) | Object migration between cloud environments | |
KR101430649B1 (ko) | 클라우드 환경 내의 데이터 분석 서비스 제공 시스템 및 방법 | |
CN110392084A (zh) | 在分布式系统中管理地址的方法、设备和计算机程序产品 | |
JP4285058B2 (ja) | ネットワーク管理プログラム、管理計算機及び管理方法 | |
US9767119B2 (en) | System and method for monitoring hosts and storage devices in a storage system | |
CN106648462B (zh) | 数据存储方法及装置 | |
US20110238715A1 (en) | Complex object management through file and directory interface | |
JP6072255B2 (ja) | ストレージシステム、ストレージシステムの制御方法及び管理システム | |
JP2013003691A (ja) | 計算機システムおよびその計算機システムにおけるディスク共有方法 | |
US20130110904A1 (en) | Method and apparatus to forward shared file stored in block storages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |