一种Linux系统下多分区存储设备卸载失败后回滚方法及
系统
技术领域
本发明属于操作系统管理技术领域,涉及一种回滚方法及系统,特别是涉及一种Linux系统下多分区存储设备卸载失败后回滚方法及系统。
背景技术
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
例如,路由器上对存储设备的管理是基于linux对存储设备的管理,也就是说是按照分区管理的。假如存储设备上有3个分区,linux就生成三个设备节点,用户添加删除存储设备的时候,就需要处理三个设备,需要考虑其中的分区。
多数用户使用的windows环境,windows提供统一删除设备的接口-添加和删除设备操作对象是存储设备,而不是存储设备上的分区。假如存储设备上有3个分区,windows会显示3个分区,用户添加和删除设备时是按照存储设备为单位处理的,不用考虑分区的情况。
而Linux对存储设备的管理是按照存储设备上的分区进行管理的,在删除时也是按照分区进行的。而用户习惯于按照存储设备设备进行管理,删除时不必考虑分区情况。
因此,如何提供一种Linux系统下多分区存储设备卸载失败后回滚方法及系统,以解决现有技术中的安装有Linux系统的各种计算机硬件设备在用户添加和删除存储设备时需要考虑分区,使用户在使用各种计算机硬件设备时出现与操作windows系统差异行为的困惑等种种缺陷,实已成为本领域从业者亟待解决的技术问题。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种Linux系统下多分区存储设备卸载失败后回滚方法及系统,用于解决现有技术中的安装有Linux系统的各种计算机硬件设备在用户添加和删除存储设备时需要考虑分区,使用户在使用各种计算机硬件设备时出现与操作windows差异行为的困惑的问题。
为实现上述目的及其他相关目的,本发明一方面提供一种Linux系统下多分区的存储设备卸载失败后回滚方法,应用于采用Linux系统的终端装置上,所述终端装置包括多个用于加载所述存储设备的驱动设备,所述Linux系统下多分区的存储设备卸载失败后回滚方法包括:采用第一控制命令使所述驱动设备加载所述多分区的存储设备;自动生成包含分区属性信息的分区信息文件;查找与所述分区信息文件相对应的文件路径,通过所述文件路径读取所述分区信息文件,并实时读取所述多分区的存储设备的存储容量;识别所述分区信息文件中包含的各项内容;采用第二控制命令卸载所述多分区的存储设备,判断所述多分区的存储设备中是否存在正在使用的分区;若是,则采用回滚操作;若否,则表示所述多分区的存储设备正确卸载,结束进程。
可选地,所述回滚操作为将卸载的所述多分区的存储设备重新加载。
可选地,所述第一控制命令为加载命令,所述第二控制命令为卸载命令。
可选地,所述文件路径为:/proc/partitions;其中,proc用于存放运行时的Linux系统的信息文件,所述信息文件包括进程信息,内存信息,及设备驱动信息;partitions用于存放Linux系统下多分区的存储设备的分区信息文件。
可选地,所述分区信息文件中包括多分区的存储设备的设备号、分区内容、存储设备的容量大小、存储设备编号、及存储设备的分区号。
可选地,所述分区内容包括M个存储设备,每一个所述存储设备包括N个分区;其中,M为大于等于0的整数,N为大于等于2小于等于15的正整数。
本发明另一方面还提供一种Linux系统下多分区的存储设备卸载失败后回滚系统,应用于采用Linux系统的终端装置上,所述终端装置包括多个用于加载所述存储设备的驱动设备,所述Linux系统下多分区的存储设备卸载失败后回滚系统包括:加载模块,用于采用第一控制命令使所述驱动设备加载所述多分区的存储设备;文件生成模块,用于自动生成包含分区属性信息的分区信息文件;路径查找模块,用于查找与所述分区信息文件相对应的文件路径;读取模块,用于通过所述文件路径读取所述分区信息文件,并实时读取所述多分区的存储设备的存储容量;识别模块,用于识别所述分区信息文件中包含的各项内容;卸载模块,用于采用第二控制命令卸载所述多分区的存储设备;判断模块,用于判断所述多分区的存储设备中是否存在正在使用的分区;若是,则调用用于执行回滚操作的回滚操作模块;若否,则调用用于拒绝执行回滚操作的终止模块。
可选地,所述回滚操作模块在所述判断模块检测到所述多分区的存储设备中存在正在使用的分区时,调用所述加载模块将卸载的所述多分区的存储设备重新加载。
可选地,所述判断模块检测所述多分区的存储设备中是否存在正在使用的分区的依据为根据实时读取到的所述多分区的存储设备的存储容量;当读取到的所述多分区的存储设备的存储容量小于所述多分区的存储设备的预定存储容量表示所述多分区的存储设备中存储正在使用的分区;当读取到的所述多分区的存储设备的存储容量等于所述多分区的存储设备的预定存储容量时表示所述多分区的存储设备卸载正确。
可选地,所述第一控制命令使所述驱动设备加载所述多分区的存储设备至Linux系统下用户层。
如上所述,本发明所述的Linux系统下多分区存储设备卸载失败后回滚方法及系统,具有以下有益效果:本发明通过同时加载或卸载单个存储器中的多个设备分区使存储设备在软件上看上去是单一的整体,用户只是对一个设备进行了操作,屏蔽了Linux系统对多分区存储管理的特点,和用户使用windows系统习惯保持一致。
附图说明
图1显示为本发明的Linux系统下多分区存储设备卸载失败后回滚方法流程示意图。
图2显示为本发明的Linux系统下多分区存储设备卸载失败后回滚系统原理结构示意图。
元件标号说明
1 Linux系统下多分区存储设备卸载失败后回滚系统
11 加载模块
12 文件生成模块
13 路径查找模块
14 读取模块
15 识别模块
16 卸载模块
17 判断模块
18 回滚操作模块
19 终止模块
S1~S7 步骤
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
请参阅附图。需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
下面结合实施例和附图对本发明进行详细说明。
本发明所述的Linux系统下多分区存储设备卸载失败后回滚方法及系统的发明原理为:基于linux操作系统的计算机硬件设备上,加载多分区的存储设备会生成多个设备,删除设备时候,需要把存储设备上的分区一个一个的在linux系统上卸载,如果某一个设备分区被使用导致不能卸载,用户看到的设备信息将会不正确。本发明解决这个问题。
实施例一
本实施例提供一种Linux系统下多分区存储设备卸载失败后回滚方法,请参阅图1,显示为Linux系统下多分区存储设备卸载失败后回滚方法流程示意图。所述Linux系统下多分区存储设备卸载失败后回滚方法应用于采用Linux系统的终端装置上,所述终端装置包括多个用于加载所述存储设备的驱动设备,所述计算机硬件设备包括手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机等等,在本实施例中,所述计算机硬件设备为路由器。Linux系统包括多个用于加载所述存储设备的驱动设备。如图1所示,所述Linux系统下多分区存储设备卸载失败后回滚方法包括以下步骤:
S1,采用第一控制命令使所述驱动设备加载所述多分区的存储设备。在本实施例中,所述第一控制命令为加载命令,即Mount命令。所述第一控制命令,即所述Mount命令使所述驱动设备加载所述多分区的存储设备至Linux系统下用户层。若不使用Mount命令,所述存储设备仅仅只是存在于设备驱动层,用户是无法看到,也无法使用。
S2,自动生成包含分区属性信息的分区信息文件。
S3,查找与所述分区信息文件相对应的文件路径,通过所述文件路径读取所述分区信息文件,并实时读取所述多分区的存储设备的存储容量。在Linux系统上,选定的文件路径为/proc/partitions。其中,proc用于存放运行时的Linux系统的信息文件,所述信息文件包括进程信息,内存信息,及设备驱动信息等等;partitions用于存放Linux系统下所有多分区的存储设备的分区信息文件。所述分区信息文件中包括多分区的存储设备的设备号、分区内容、存储设备的容量大小、存储设备编号、及存储设备的分区号。
例如,在本实施例中,所述分区信息文件内容如下:
在所述分区信息文件中第一列为存储设备的设备号,Linux系统对于一些通用的设备类型,设备号是固定的,“31”表示mtd设备(memory technology device内存技术设备)的设备号,“8”表示scsi设备(Small Computer System Interface,小型计算机系统接口)的设备号。所述分区内容包括M个存储设备,每一个所述存储设备包括N个分区;其中,M为大于等于0的整数,N为大于等于2小于等于15的正整数。在本实施例中,所述计算机硬件设备为路由器,该路由器使用scsi设备驱动加载存储设备,也就是说在本实施例中,所有插上的存储设备的设备号都是“8”。选定了存储设备的设备号,但是分区内容还不能确定。这时就需要考虑第二列的数据内容了,第二列为分区内容,例如,在上述分区信息文件内容中第二列数据“0,1,2…”。其中,“0”表示加载的第一个存储设备,即表示这个磁盘,仅用于显示无时间物理意义。“1”表示第一个存储设备的第1个分区,“2”表示第一个存储设备的第2个分区,以此类推,“15”表示第一个存储设备的第15个分区,但是若第二列的数据内容中出现“16”则表示第二个存储设备,那么“17”就是第二个存储设备的第1个分区,以此类推,一个磁盘最多15个分区。
S4,识别所述分区信息文件中包含的各项内容。即识别所述分区信息文件中包含的多分区的存储设备的设备号、分区内容、存储设备的容量大小、存储设备编号、及存储设备的分区号。
S5,采用第二控制命令卸载所述多分区的存储设备,并在卸载所述多分区的存储设备的同时,判断所述多分区的存储设备中是否存在正在使用的分区;若是,则执行步骤S6;若否,则表示所述多分区的存储设备正确卸载,执行步骤S7,拒绝执行回滚操作,结束进程。在本实施例中,所述第二控制命令为卸载命令,即Umount命令是把存储设备从用户空间卸载,卸载之后用户就看不见了,也无法使用,但是在设备驱动层面依然保留。所述步骤S5中判断检测所述多分区的存储设备中是否存在正在使用的分区的依据为根据实时读取到的所述多分区的存储设备的存储容量;当读取到的所述多分区的存储设备的存储容量小于所述多分区的存储设备的预定存储容量表示所述多分区的存储设备中存储正在使用的分区;当读取到的所述多分区的存储设备的存储容量等于所述多分区的存储设备的预定存储容量时表示所述多分区的存储设备卸载正确,结束进程。
S6,回滚操作,所述回滚操作为将卸载的所述多分区的存储设备重新加载。
在本实施例中,无论是mount或umount都只能针对一个分区进行操作,比如本例中sda1,而用户操作的是整个磁盘,比如加载一个第一存储设备A,它有两个分区,第一分区和第二分区。插上设备时,软件使用第一控制命令,即mount命令分别加载了第一存储设备A的分区1和分区2,若用户正在使用了第一分区,此时用户点击了卸载(umount)设备A,由于第二分区没有被使用,第二分区被正确卸载了,而第一分区正在被使用,第一分区是无法卸载的,这样用户就会看到设备无法卸载,但是设备的容量却减少了。本发明解决了这个问题,当发现一个设备中某个分区无法被正确卸载时,采用回滚的方式,把原先被卸载的设备重新加载到用户空间,这样用户看到设备无法卸载提示后,设备的存储容量也正确的显示出来。
本实施例所述的Linux系统下多分区存储设备卸载失败后回滚方法通过同时加载或卸载单个存储器中的多个设备分区使存储设备在软件上看上去是单一的整体,用户只是对一个设备进行了操作,屏蔽了Linux系统对多分区存储管理的特点,和用户使用windows系统习惯保持一致。
实施例二
本实施例提供一种Linux系统下多分区存储设备卸载失败后回滚系统1,所述Linux系统下多分区存储设备卸载失败后回滚系统应用于采用Linux系统的终端装置上,所述终端装置包括多个用于加载所述存储设备的驱动设备,所述计算机硬件设备包括手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机等等,在本实施例中,所述计算机硬件设备为路由器。Linux系统包括多个用于加载所述存储设备的驱动设备。请参图2,显示为Linux系统下多分区存储设备卸载失败后回滚系统原理结构示意图。如图2所示,所述Linux系统下多分区存储设备卸载失败后回滚系统1包括:加载模块11、文件生成模块12、路径查找模块13、读取模块14、识别模块15、卸载模块16、判断模块17、回滚操作模块18、及终止模块19。
所述加载模块11用于采用第一控制命令使所述驱动设备加载所述多分区的存储设备。在本实施例中,所述第一控制命令为加载命令,即Mount命令。所述第一控制命令,即Mount命令使所述驱动设备加载所述多分区的存储设备至Linux系统下用户层。若不使用Mount命令,所述存储设备仅仅只是存在于设备驱动层,用户是无法看到,也无法使用。
与所述加载模块11连接的所述文件生成模块12用于自动生成包含分区属性信息的分区信息文件。
与所述文件生成模块12连接的所述路径查找模块13用于查找与所述分区信息文件相对应的文件路径。
与所述路径查找模块13连接的读取模块14用于通过所述文件路径读取所述分区信息文件,并实时读取所述多分区的存储设备的存储容量。在Linux系统上,选定的文件路径为/proc/partitions。其中,proc用于存放运行时的Linux系统的信息文件,所述信息文件包括进程信息,内存信息,及设备驱动信息等等;partitions用于存放Linux系统下所有多分区的存储设备的分区信息文件。所述分区信息文件中包括多分区的存储设备的设备号、分区内容、存储设备的容量大小、存储设备编号、及存储设备的分区号。
例如,在本实施例中,所述分区信息文件内容如下:
在所述分区信息文件中第一列为存储设备的设备号,Linux系统对于一些通用的设备类型,设备号是固定的,“31”表示mtd设备(memory technology device内存技术设备)的设备号,“8”表示scsi设备(Small Computer System Interface,小型计算机系统接口)的设备号。所述分区内容包括M个存储设备,每一个所述存储设备包括N个分区;其中,M为大于等于0的整数,N为大于等于2小于等于15的正整数。在本实施例中,所述计算机硬件设备为路由器,该路由器使用scsi设备驱动加载存储设备,也就是说在本实施例中,所有插上的存储设备的设备号都是“8”。选定了存储设备的设备号,但是分区内容还不能确定。这时就需要考虑第二列的数据内容了,第二列为分区内容,例如,在上述分区信息文件内容中第二列数据“0,1,2…”。其中,“0”表示加载的第一个存储设备,即表示这个磁盘,仅用于显示无时间物理意义。“1”表示第一个存储设备的第1个分区,“2”表示第一个存储设备的第2个分区,以此类推,“15”表示第一个存储设备的第15个分区,但是若第二列的数据内容中出现“16”则表示第二个存储设备,那么“17”就是第二个存储设备的第1个分区,以此类推,一个磁盘最多15个分区。
与所述读取模块14连接的所述识别模块15用于识别所述分区信息文件中包含的各项内容。即识别所述分区信息文件中包含的多分区的存储设备的设备号、分区内容、存储设备的容量大小、存储设备编号、及存储设备的分区号。
与所述识别模块15连接的所述卸载模块16用于采用第二控制命令卸载所述多分区的存储设备。
分别与所述读取模块14和卸载模块16连接的所述判断模块17用于在卸载所述多分区的存储设备的同时,判断所述多分区的存储设备中是否存在正在使用的分区;若是,则调用用于执行回滚操作的回滚操作模块18;若否,则表示所述多分区的存储设备正确卸载,调用用于拒绝执行回滚操作的所述终止模块19。在本实施例中,所述第二控制命令为卸载命令,即Umount命令是把存储设备从用户空间卸载,卸载之后用户就看不见了,也无法使用,但是在设备驱动层面依然保留。所述判断模块17具体用于检测所述多分区的存储设备中是否存在正在使用的分区的依据为根据实时读取到的所述多分区的存储设备的存储容量;当读取到的所述多分区的存储设备的存储容量小于所述多分区的存储设备的预定存储容量表示所述多分区的存储设备中存储正在使用的分区;当读取到的所述多分区的存储设备的存储容量等于所述多分区的存储设备的预定存储容量时表示所述多分区的存储设备卸载正确。
与所述加载模块11和判断模块17连接的所述回滚操作模块18还用于在所述判断模块17检测到所述多分区的存储模块中存在正在使用的分区时,调用所述加载模块11将卸载的所述多分区的存储设备重新加载。
本实施例所述的Linux系统下多分区存储设备卸载失败后回滚方法及系统通过同时加载或卸载单个存储器中的多个设备分区使存储设备在软件上看上去是单一的整体,用户只是对一个设备进行了操作,屏蔽了Linux系统对多分区存储管理的特点,和用户使用windows系统习惯保持一致。
综上所述,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。