文件系统恢复方法及装置与流程

文档序号:14897457发布日期:2018-07-08 09:02阅读:271来源:国知局

本申请涉及电数字数据处理领域,尤其涉及文件系统恢复方法及装置。



背景技术:

android从4.4版本开始提出了dm-verity的方法来保护文件系统。dm-verity基于kernel(内核)的devicemapper框架。devicemapper是内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便地根据自己的需求制定实现存储资源的管理策略。dm-verity用一个hash(哈希)树来描述整个system(系统)镜像。这种机制允许system分区在读写的时候进行校验,而不是一次性将整个system镜像进行校验。当校验hash值不一致的时候,即表明文件系统的某些block(块)被破坏,返回一个io错误。此时,文件系统的某些功能将无法使用。



技术实现要素:

为了克服现有技术中存在的不足,本发明要解决的技术问题是提供一种文件系统恢复方法及装置,其能及时将破坏的文件系统区域修复,减少对用户使用的影响,提升用户体验。

为解决上述技术问题,本发明的文件系统恢复方法,包括:

响应于文件系统损坏,确定损坏部分的块编号;

检测当前环境是否安全;

响应于当前环境安全,直接进行损坏的文件系统的修复;及

响应于当前环境不安全,系统重启进入bootloader模式,然后进行损坏的文件系统的修复。

作为本发明所述方法的改进,所述响应于当前环境安全,直接进行损坏的文件系统的修复包括:根据所述块编号获取用于修复的二进制文件;计算所获取的二进制文件的哈希值;将计算的哈希值与出厂状态的相应哈希值进行比较;响应于计算的哈希值正确,计算所述块编号对应的扇区;将所获取的二进制文件写到所计算的扇区。

作为本发明所述方法的另一种改进,所述响应于当前环境不安全,系统重启进入bootloader模式,然后进行损坏的文件系统的修复包括:使系统重启进入bootloader模式;根据所述块编号获取用于修复的二进制文件;计算所获取的二进制文件的哈希值;将计算的哈希值与出厂状态的相应哈希值进行比较;响应于计算的哈希值正确,计算所述块编号对应的扇区;将所获取的二进制文件写到所计算的扇区;计算文件系统的各个块的哈希值;检查文件系统的各个块的哈希值是否与出厂状态的相应哈希值一致;响应于任何一块的哈希值与出厂状态的相应哈希值不一致,对该块进行与损坏的块同样的修复处理。

作为本发明所述方法的进一步改进,所述用于修复的二进制文件从网络服务器、本地隐藏的备份区域或者本地的只读区域获取。

作为本发明所述方法的又一进一步改进,本地隐藏的备份区域通过将设备的未存储备份文件系统的区域的起始扇区与文件系统的0扇区对应起来进行隐藏。

为解决上述技术问题,本发明的文件系统恢复装置,包括:

块编号确定模块,用于响应于文件系统损坏,确定损坏部分的块编号;

环境安全检测模块,用于检测当前环境是否安全;

第一修复模块,用于响应于当前环境安全,直接进行损坏的文件系统的修复;及

第二修复模块,用于响应于当前环境不安全,系统重启进入bootloader模式,然后进行损坏的文件系统的修复。

作为本发明所述装置的改进,所述第一修复模块包括:文件获取子模块,用于根据所述块编号获取用于修复的二进制文件;第一哈希值计算子模块,用于计算所获取的二进制文件的哈希值;第一比较子模块,用于将计算的哈希值与出厂状态的相应哈希值进行比较;扇区计算子模块,用于响应于计算的哈希值正确,计算所述块编号对应的扇区;写文件子模块,用于将所获取的二进制文件写到所计算的扇区。

作为本发明所述装置的另一种改进,所述第二修复模块包括:重启子模块,用于使系统重启进入bootloader模式;文件获取子模块,用于根据所述块编号获取用于修复的二进制文件;第一哈希值计算子模块,用于计算所获取的二进制文件的哈希值;第一比较子模块,用于将计算的哈希值与出厂状态的相应哈希值进行比较;扇区计算子模块,用于响应于计算的哈希值正确,计算所述块编号对应的扇区;写文件子模块,用于将所获取的二进制文件写到所计算的扇区;第二哈希值计算子模块,用于计算文件系统的各个块的哈希值;第二比较子模块,用于检查文件系统的各个块的哈希值是否与出厂状态的相应哈希值一致;循环修复子模块,用于响应于任何一块的哈希值与出厂状态的相应哈希值不一致,对该块进行与损坏的块同样的修复处理。

为解决上述技术问题,本发明的有形计算机可读介质,包括用于执行本发明的文件系统恢复方法的计算机程序代码。

为解决上述技术问题,本发明提供一种装置,包括至少一个处理器;及至少一个存储器,含有计算机程序代码,所述至少一个存储器和所述计算机程序代码被配置为利用所述至少一个处理器使得所述装置执行本发明的文件系统恢复方法的至少部分步骤。

按照本发明,通过在dm-verity发现文件系统损坏时,根据环境安全情况采取不同的修复策略进行及时修复,确保在根文件系统被损坏时,能自动修复,大大增强了智能手机和嵌入式设备的安全性,提高了设备的可维护性和改善了用户体验。

结合附图阅读本发明实施方式的详细描述后,本发明的其它特点和优点将变得更加清楚。

附图说明

图1为根据本发明方法的一实施例的流程图。

图2为根据本发明装置的一实施例的结构示意图。

为清晰起见,这些附图均为示意性及简化的图,它们只给出了对于理解本发明所必要的细节,而省略其他细节。

具体实施方式

下面参照附图对本发明的实施方式和实施例进行详细说明。

通过下面给出的详细描述,本发明的适用范围将显而易见。然而,应当理解,在详细描述和具体例子表明本发明优选实施例的同时,它们仅为说明目的给出。

图1示出了根据本发明的文件系统恢复方法的一实施例的流程图。

在步骤s102,响应于dm-verity发现文件系统损坏,dm-verity会给出损坏的blockid(块编号)。

在步骤s104,通过安全模块检测系统当前环境是否安全。如果安全模块确定系统环境安全,则处理进行到步骤s110。否则,如果安全模块确定系统环境不安全,则处理进行到步骤s150。安全模块的检测项可根据需要确定。通常,安全模块会检测基站的真伪、wifi的安全等,例如是否存在arp攻击、dns篡改、未加密等。

在步骤s110,将损坏的blockid发送给网络服务器,网络服务器根据该blockid返回给客户端要下载的内容,格式是二进制文件。

在步骤s112,客户端计算下载的二进制文件的hash值。

在步骤s114,将计算的hash值与出厂状态的相应hash值进行比较。如果计算的hash值正确,则处理进行到步骤s116。否则,如果计算的hash值不正确,则说明下载的过程中出现错误,需要重新下载,处理返回到步骤s110。

在步骤s116,由内核的文件系统计算出该blockid对应的扇区。读的时候对应的扇区就是写的时候要写的扇区。

在步骤s118,使用write函数将下载的二进制文件写入设备的相应扇区。至此,破坏的根文件系统得以及时修复,不影响用户使用。

在步骤s150,响应于系统当前环境不安全,使系统重启进入bootloader模式。

在步骤s152,将损坏的blockid发送给网络服务器,网络服务器根据该blockid返回给客户端要下载的内容,格式是二进制文件。

在步骤s154,客户端计算下载的二进制文件的hash值。

在步骤s156,将计算的hash值与出厂状态的相应hash值进行比较。如果计算的hash值正确,则处理进行到步骤s158。否则,如果计算的hash值不正确,则说明下载的过程中出现错误,需要重新下载,处理返回到步骤s152。

在步骤s158,计算出该blockid对应的扇区。

在步骤s160,调用bootloader的写函数将下载的二进制文件写入设备的相应扇区。

在步骤s162,在bootloader下重新计算各个block的hash值。

在步骤s164,检查文件系统的各个block的hash值是否与出厂状态的相应hash值一致。如果任何一块的哈希值与出厂状态的相应哈希值不一致,则处理返回到步骤s152,对不一致的block进行修复,直到所有block均完全正确为止。如果各个block的hash值均与出厂状态的相应hash值一致,则处理结束。

在上面的实施例中,利用网络服务器来修复根文件系统的好处是节省了大量存储空间,这样设备上的空间就可以更好地利用到用户所使用的空间上。

然而,在其它实施例中,也可利用客户端本地备份的文件系统进行损坏block的修复。在该情形下,保证备份的文件系统的安全性十分重要。在实施例中,可以将文件系统备份区域隐藏起来。在文件系统和驱动层之间有个接口,要把设备的0扇区和文件系统认为的0扇区对接起来,如果把设备的第x个扇区和文件系统的0扇区对应起来,那么文件系统就会认为设备的第x个扇区对应的就是0扇区,这样就达到了隐藏某些扇区的目的。隐藏了文件系统备份区域后,那么应用程序就无法看到该分区的内容了。也就是说无论应用程序拥有何种权限都无法看到该分区的内容,从而保证文件系统备份区域的安全。但为了修复时访问备份的文件系统,可以留给自己一个后门。在环境安全并需要修复时打开这个后门,使用proc或sys文件系统向内核传递参数去拷贝相应的数据,从而可获得用于修复的二进制文件。这样的好处是可以在用户感应不到的情况下完成修复,提高用户体验。如果系统环境不安全,系统重启进入bootloader模式,使用另一个kernel,这个kernel没有做隐藏分区的工作,系统起来后可以看到备份分区而拷贝用于修复的二进制文件直接进行修复。

在其它实施例中,本地的备份区域也可不隐藏,在用户空间设为只读,用selinux、root分权相关机制来保护。需要时以只读方式挂载,覆盖掉被修改的块或文件或整个分区进行修复。

图2示出了根据本发明的文件系统恢复装置的一实施例的结构示意图。该实施例的装置包括:块编号确定模块202,用于响应于文件系统损坏,确定损坏部分的块编号;环境安全检测模块204,用于检测当前环境是否安全;第一修复模块206,用于响应于当前环境安全,直接进行损坏的文件系统的修复;及第二修复模块208,用于响应于当前环境不安全,系统重启进入bootloader模式,然后进行损坏的文件系统的修复。

根据本发明装置的一种实施方式,第一修复模块包括:文件获取子模块,用于根据所述块编号获取用于修复的二进制文件;第一哈希值计算子模块,用于计算所获取的二进制文件的哈希值;第一比较子模块,用于将计算的哈希值与出厂状态的相应哈希值进行比较;扇区计算子模块,用于响应于计算的哈希值正确,计算所述块编号对应的扇区;写文件子模块,用于将所获取的二进制文件写到所计算的扇区。

根据本发明装置的又一种实施方式,第二修复模块包括:重启子模块,用于使系统重启进入bootloader模式;文件获取子模块,用于根据所述块编号获取用于修复的二进制文件;第一哈希值计算子模块,用于计算所获取的二进制文件的哈希值;第一比较子模块,用于将计算的哈希值与出厂状态的相应哈希值进行比较;扇区计算子模块,用于响应于计算的哈希值正确,计算所述块编号对应的扇区;写文件子模块,用于将所获取的二进制文件写到所计算的扇区;第二哈希值计算子模块,用于计算文件系统的各个块的哈希值;第二比较子模块,用于检查文件系统的各个块的哈希值是否与出厂状态的相应哈希值一致;循环修复子模块,用于响应于任何一块的哈希值与出厂状态的相应哈希值不一致,对该块进行与损坏的块同样的修复处理。

在此所述的多个不同实施例或者其特定特征、结构或特性可在本发明的一个或多个实施方式中适当组合。另外,在某些情形下,只要适当,流程图中和/或流水处理描述的步骤顺序可修改,并不必须精确按照所描述的顺序执行。另外,本发明的多个不同方面可使用软件、硬件、固件或者其组合和/或执行所述功能的其它计算机实施的模块或装置进行实施。本发明的软件实施可包括保存在计算机可读介质中并由一个或多个处理器执行的可执行代码。计算机可读介质可包括计算机硬盘驱动器、rom、ram、闪存、便携计算机存储介质如cd-rom、dvd-rom、闪盘驱动器和/或例如具有通用串行总线(usb)接口的其它装置,和/或任何其它适当的有形或非短暂计算机可读介质或可执行代码可保存于其上并由处理器执行的计算机存储器。本发明可结合任何适当的操作系统使用。

除非明确指出,在此所用的单数形式“一”、“该”均包括复数含义(即具有“至少一”的意思)。应当进一步理解,说明书中使用的术语“具有”、“包括”和/或“包含”表明存在所述的特征、步骤、操作、元件和/或部件,但不排除存在或增加一个或多个其他特征、步骤、操作、元件、部件和/或其组合。如在此所用的术语“和/或”包括一个或多个列举的相关项目的任何及所有组合。

前面说明了本发明的一些优选实施例,但是应当强调的是,本发明不局限于这些实施例,而是可以本发明主题范围内的其它方式实现。本领域技术人员可以在本发明技术构思的启发和不脱离本发明内容的基础上对本发明作出各种变型和修改,这些变形或修改仍落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1