一种路由器外接存储设备的控制方法

文档序号:8415523阅读:2288来源:国知局
一种路由器外接存储设备的控制方法
【技术领域】
[0001]本发明属于路由器的技术领域,具体地涉及一种路由器外接存储设备的控制方法。
【背景技术】
[0002]传统的路由器,大部分既没有内置的存储,也没有外接的硬件接口来安装扩展存储设备,因此不具备数据存储能力。这种路由器功能简单,可扩展性差。
[0003]少量的传统路由器具备扩展接口,比如USB接口,但是对存储设备只有最基本的控制能力,且对于存储设备的使用也没有明确的规范,用户可操作性和可控制性很弱,无法确切知道存储设备的相关状态,也没有控制接口对其进行操作,比如想取出存储设备,就只能强制拔出而无法安全卸载存储设备,这样很容易对存储设备造成损坏。而且无法对存储设备进行一些高级操作,比如文件系统进行检查和格式化。因此这种路由器不能对存储设备进行妥善控制和有效利用。
[0004]目前市面上常见的外接存储设备,比如SD卡、U盘,有一定的损坏率和故障率,且故障发生原因多样,难以检测,当存储设备出现异常时,会对系统性能造成严重影响。
[0005]路由器是嵌入式系统,硬件资源较少,如果存储设备发生异常,会造成进程因等待1等而挂死的情况,可能严重影响系统主机的性能,而嵌入式系统上存储设备出现故障的几率相对较高。
[0006]传统的查询存储设备信息的方式是直接调用底层接口,然而不同的存储设备有不同的命令,且由于写命令执行时间较长,每次直接调用时响应速度较慢。
[0007]传统的存储设备控制方式也是直接调用底层控制接口,可能会造成多个操作同时进行的结果,比如同时执行格式化和卸载操作,这样有可能对存储设备造成损坏。

【发明内容】

[0008]本发明要解决的技术解决问题是:克服现有技术的不足,提供一种路由器外接存储设备的控制方法,其能够对路由器外接存储设备进行统一控制,保证路由器系统的稳定性和存储设备的稳定性,提供完整的操作接口并提升对存储设备的利用率。
[0009]本发明的技术解决方案是:这种路由器外接存储设备的控制方法,该方法利用linux udev体系和hotplug热插拔机制对存储设备进行监控,当存储设备接入或者移除路由器系统时,驱动路由器系统初始化并触发内核的hotplug事件,内核通过netlinksocket与用户态hotplugd进程进行通信,storaged进程在hotplugd进程设置回调钩子,每当有存储设备事件发生就通知storaged进程,storaged进程执行以下步骤:
[0010](I)接收存储设备插入路由器的信息;
[0011](2)判断存储设备的磁盘是否需要格式化,是则执行步骤(3),否则执行步骤(9);
[0012](3)磁盘未格式化;
[0013](4)是否确认格式化,是则执行步骤(5),否则执行步骤(3);
[0014](5)将磁盘格式化;
[0015](6)磁盘正在格式化;
[0016](7)判断格式化是否成功,是则执行步骤(9),否则执行步骤(8);
[0017](8)格式化失败,跳转到步骤(15);
[0018](9)将存储设备自动挂载到路由器;
[0019](10)判断是否挂载成功,是则执行步骤(11),否则执行步骤(15);
[0020](11)存储设备被挂载;
[0021](12)判断存储设备是否移除,是则执行步骤(13);否则执行步骤(11);
[0022](13)将存储设备卸载,跳转到步骤(15);
[0023](14)挂载失败,跳转到步骤(15);
[0024](15)结束。
[0025]本发明通过storaged进程在hotplugd进程设置回调钩子,每当有存储设备事件发生就通知storaged进程,storaged进程执行格式化存储设备的磁盘、挂载存储设备、卸载存储设备,所以能够对路由器外接存储设备进行统一控制,保证路由器系统的稳定性和存储设备的稳定性,提供完整的操作接口并提升对存储设备的利用率。
【附图说明】
[0026]图1示出了根据本发明的路由器外接存储设备的控制方法的流程图。
【具体实施方式】
[0027]如图1所示,这种路由器外接存储设备的控制方法,该方法利用linux udev体系和hotplug热插拔机制对存储设备进行监控,当存储设备接入或者移除路由器系统时,驱动路由器系统初始化并触发内核的hotplug事件,内核通过netlink socket与用户态hotplugd进程进行通信,storaged进程在hotplugd进程设置回调钩子,每当有存储设备事件发生就通知storaged进程,storaged进程执行以下步骤:
[0028](I)接收存储设备插入路由器的信息;
[0029](2)判断存储设备的磁盘是否需要格式化,是则执行步骤(3),否则执行步骤(9);
[0030](3)磁盘未格式化;
[0031](4)是否确认格式化,是则执行步骤(5),否则执行步骤(3);
[0032](5)将磁盘格式化;
[0033](6)磁盘正在格式化;
[0034](7)判断格式化是否成功,是则执行步骤(9),否则执行步骤(8);
[0035](8)格式化失败,跳转到步骤(15);
[0036](9)将存储设备自动挂载到路由器;
[0037](10)判断是否挂载成功,是则执行步骤(11),否则执行步骤(15);
[0038](11)存储设备被挂载;
[0039](12)判断存储设备是否移除,是则执行步骤(13);否则执行步骤(11);
[0040](13)将存储设备卸载,跳转到步骤(15);
[0041](14)挂载失败,跳转到步骤(15);
[0042](15)结束。
[0043]本发明通过storaged进程在hotplugd进程设置回调钩子,每当有存储设备事件发生就通知storaged进程,storaged进程执行格式化存储设备的磁盘、挂载存储设备、卸载存储设备,所以能够对路由器外接存储设备进行统一控制,保证路由器系统的稳定性和存储设备的稳定性,提供完整的操作接口并提升对存储设备的利用率。
[0044]优选地,该控制方法还包括状态监测和自动故障排除步骤:在存储设备驱动中设置统计机制,当发现存储设备读写报错达到指定次数的时候,通过hotplug通知storaged,storaged取出对应的消息类型和故障原因,将设备重新挂载成ι.ο类型的分区或者卸载并禁用,以避免继续对磁盘进行操作造成更大的危害。
[0045]优选地,所述状态监测和自动故障排除步骤还包括:storaged定期对存储设备进行扫描,调用文件系统检查工具对文件系统进行扫描,如果发现超级块损坏,则自动卸载存储设备并执行修复;如果修复成功则重新挂载存储设备的磁盘,如果修复失败则记录相关状态。
[0046]优选地,该控制方法还包括对外提供查询和操作接口步骤:数据以json格式输出,方便解析和处理;通过storaged对存储设备状态进行查询;对storaged下发指令完成对存储设备的卸载、弹出、格式化,storaged对接收到的指令进行控制,按照时间顺序维护一个链表,每次只调用一个接口,一个动作执行完成之后,再调用下一个接口,实现接口调用的序列化。
[0047]优选地,该控制方法还包括防止自身被磁盘异常阻塞步骤storaged在执行命令时先检测是否有同样的指令被阻塞住,如果有,则返回相应的错误码。
[0048]优选地,所述防止自身被磁盘异常阻塞步骤还包括storaged先调用叉子函数fork生成一个子进程,由子进程来调用相关操作指令,父进程对子进程进行监控,读取子进程的标准输出stdout和标准错误输出stderr,如果子进程超过预先设定的时间依然没有退出,则杀进程指令kill杀死子进程,并记录错误状态。
[0049]以下给出一个具体实施例。
[0050]本发明在系统中设计了一个守护进程storaged,由storaged完成对存储设备的各种管理功能,storaged会维护设备的不同的状态,如图1所示。
[0051]I,设备自动发现和管理。
[0052]系统利用linux udev体系和hotplug热插拔机制对存储设备进行监控。当存储设备接入或者移除系统时,驱动程序初始化并触发内核的hotplug事件,内核通过netlinksocket与用户态hotplugd程序进行通信,storaged会在hotplugd设置回调钩子程序,每当有存储设备事件发生就会通知storaged,storaged收到消息开始自动对设备进行管理。storaged收到设备插入消息后,第一步首先对磁盘状态进行检测,如发现磁盘处于不正常状态(比如是否被锁定)。然后对文件系统进行检测,如果发现
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1