一种闪存数据管理方法、装置及计算机可读存储介质
技术领域
本发明涉及数据存储管理技术领域,尤其涉及一种闪存数据管理方法、装置及计算机可读存储介质。
背景技术
Nand-flash内存是flash内存的一种,1989年,东芝公司发表了NAND flash结构。其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
例如,通过Nand-flash内存进行数据存储的无线通信装置在工业控制、安防、智能城市管理、无线通信、监控、汽车电子等领域有着广泛的使用。由于无线通信装置通常工作在比较恶劣和不稳定环境下,常常由于外部环境(电磁干扰、电压异常、强制掉电等)引起装置的存储介质(NAND Flash)异常(数据丢失、bit翻转等)从而导致模块死机、重启、AT指令通等异常情况,极大的影响了模块本身的稳定性、可靠性,同时也给装置的售后维护工作带来极大的负担。
发明内容
本发明的主要目的在于提出一种闪存数据管理方法、装置及计算机可读存储介质,旨在解决现有无线通信装置由于闪存数据造成异常,影响模块稳定性和可靠性的技术问题。
为了解决上述技术问题,本发明提供了一种闪存数据管理方法,该方法包括以下步骤:
将无线通信模块的根文件***设定为只读文件***,并挂载到内存文件***;
将所述根文件***设定为叠合式文件***,且将所述根文件***的配置目录挂载到所述无线通信模块中闪存的可读写文件***分区。
进一步的,所述无线通信模块的闪存包括可读写文件***分区和只读文件***分区。
进一步的,所述将无线通信模块的根文件***挂载到内存文件***的步骤之后,该方法还包括以下步骤:
在所述根文件***进行临时读写操作时,将读写操作内容写到所述内存文件***;
***重启时,将所述读写操作内容对应的临时文件删除。
进一步的,所述叠合式文件***是将上下两层的所述配置目录合并为同一文件***,下层的所述配置目录是只读的,上层的所述配置目录是可修改的。
进一步的,所述将所述根文件***的配置目录设定为叠合式文件***,且将所述配置目录挂载到所述无线通信模块中闪存的可读写文件***分区的步骤之后,所述方法还包括:
删除配置文件时,对下层的所述配置目录中的所述配置文件进行隐藏,对上层的所述配置目录中的所述配置文件直接删除;
读写配置文件时,复制下层的所述配置目录中的所述配置文件到上层的所述配置目录后,都所述上层的所述配置目录中的所述配置文件进行读写。
进一步的,所述将所述根文件***的配置目录设定为叠合式文件***,且将所述配置目录挂载到所述无线通信模块中闪存的可读写文件***分区的步骤之后,所述方法还包括:
将所述内存的文件***分区的挂载在操作***内核中进行,若挂载失败则认为所述文件***异常,进入恢复流程。
进一步的,所述将所述内存的文件***分区的挂载在操作***内核中进行的步骤之后,所述方法还包括:
当挂载成功后,判断所述内存的可读写文件***分区是否挂载成功,若否,则进入恢复流程。
进一步的,所述进入恢复流程的步骤具体包括:所述文件***分区中的内容按照所述文件***的格式进行格式化操作,从而恢复所述文件***分区。
进一步的,所述判断所述内存的可读写文件***分区是否挂载成功的步骤之后,所述方法还包括:
若是,则所述文件***正常启动。
进一步的,所述进入恢复流程的步骤之后,所述方法还包括:
当所述文件***恢复成功后,所述文件***正常启动;否则,发出错误报告。
基于同一发明构思,本发明的另一方面,提供了一种无线通信装置,所述无线通信装置包括处理器、闪存存储器及数据总线;
所述数据总线用于实现处理器和闪存存储器之间的连接通信;
所述处理器用于执行闪存存储器中存储的闪存数据管理程序,以实现以下步骤:
将无线通信模块的根文件***挂载到内存文件***;
将所述根文件***的配置目录设定为叠合式文件***,且将所述配置目录挂载到所述无线通信模块中闪存的可读写文件***分区;
将所述内存的文件***分区的挂载在操作***内核中进行,若挂载失败则认为所述文件***异常,进入恢复流程;
当挂载成功后,判断所述内存的可读写文件***分区是否挂载成功,若否,则进入恢复流程。
基于同一发明构思,本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有闪存数据管理程序,所述闪存数据管理程序被处理器执行时实现上述的闪存数据管理方法的步骤。
本发明技术方案的有益效果:
本发明的闪存数据管理方法、装置及计算机可读存储介质,采用叠合式文件***和文件***的恢复机制来增加无线通信模块的稳定性和可靠性,同时也减少无线通信模块类产品的售后维护工作。
叠合式文件***(overlayfs)采用文件叠加的方式来对重要文件进行管理,能够避免***关键文件被非法篡改,同时还允许用于进行配置文件的修改。这样既能保证***启动的正常,也能保证用户配置数据不被丢失。
由于闪存(NAND F1ash)的特性,在特殊的条件下(主要是异常掉电)***文件有一定的几率被损坏,因此采用文件***恢复的机制来保证***关键文件的正确性,保证***正常的启动。
附图说明
图1为本发明实施例提供的第一种闪存数据管理方法流程框图;
图2为本发明实施例的叠合式文件***(overlayfs)原理结构示意图;
图3为本发明实施例提供的第二种闪存数据管理方法流程框图;
图4为本发明实施例提供的第三种闪存数据管理方法流程框图;
图5为本发明实施例提供的闪存数据恢复步骤执行流程图;
图6为本发明实施例提供的无线通信装置的一种硬件结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明涉及的闪存(NAND Flash)的工作原理:
NAND Flash的数据是以bit的方式保存在存储单元(memory cell),一般来说,一个单元中只能存储一个bit。这些单元以8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。这些Line会再组成页(page),以三星samsumg的256M x 8Bit K9F2G08R0A芯片为例:每页2112Bytes(2kbyte(Main Area)+64byte(Spare Area)),空闲区通常被用于ECC、耗损均衡(wear leveling)和其它软件开销功能,尽管它在物理上与其它页并没有区别。每64个页形成一个块(block 128kB)。具体一片flash上有多少个块视需要所定。
NAND flash以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址:
Column Address:Starting Address of the Register.翻成中文为列地址,地址的低8位;
Page Address:页地址;
Block Address:块地址。
NAND Flash在嵌入式***中的地位与PC机上的硬盘是类似的。用于保存***运行所必需的操作***,应用程序,用户数据,运行过程中产生的各类数据,***掉电后数据不会护丢失。
在NAND Flash中,当CPU从NAND Flash开始启动时,CPU会通过内部的硬件将NANDFlash开始的4KB数据复制到称为“Steppingstone”的4KB的内部RAM中,起始地址为0,然后跳到地址0处开始执行。这也就是我们为什么可以把小于4KB的程序烧到NAND Flash中,可以运行,而当大于4KB时,却没有办法运行,必须借助于NAND Flash的读操作,读取4KB以后的程序到内存中。
本发明涉及的文件***具体为:
文件***是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操作***的交互。尽管kennel内核是Linux的核心,但文件却是用户与操作***交互所采用的主要工具。这对Linux来说尤其如此,这是因为在UNIX传统中,它使用文件I/O机制管理硬件设备和数据文件。下面是Linux文件***组件的体系结构。
用户空间包含一些应用程序(例如,文件***的使用者)和GNU C库(glibc),它们为文件***调用(打开、读取、写和关闭)提供用户接口。***调用接口的作用就像是交换器,它将***调用从用户空间发送到内核空间中的适当端点。
VFS是底层文件***的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件***,各个文件***的行为可能差异很大。有两个针对文件***对象的缓存(inode和dentry)。它们缓存最近使用过的文件***对象。
每个文件***实现(比如ext2、JFS等等)导出一组通用接口,供VFS使用。缓冲区缓存会缓存文件***和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用sync命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的数据发送到设备驱动程序,进而发送到存储设备)。
而在Linux中,根文件***是一种首要的文件***,该文件***不仅具有普通文件***的存储数据文件的功能,但是相对于普通的文件***,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件***,内核代码的映像文件保存在根文件***中,***引导启动程序会在根文件***挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件***和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作***的,会出现无法加载文件***的错误。
那么根文件***在***启动中挂载过程为:先将/dev/ram0挂载,而后执行/linuxrc.等其执行完后。切换根目录,再挂载具体的根文件***。根文件***执行完之后,也就是到了Start_kernel()函数的最后,执行init的进程,也就第一个用户进程,对***进行各种初始化的操作。
根文件***之所以在前面加一个″根″,说明它是加载其它文件***的″根”,既然是根的话,那么如果没有这个根,其它的文件***也就没有办法进行加载的。它包含***引导和使其他文件***得以挂载(mount)所必要的文件。根文件***包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件***中还包括了许多的应用程序bin目录等,任何包括这些Linux***启动所必须的文件都可以成为根文件***。
Linux启动时,第一个必须挂载的是根文件***;若***不能从指定设备上挂载根文件***,则***会出错而退出启动。成功之后可以自动或手动挂载其他的文件***。因此,一个***中可以同时存在不同的文件***。
在Linux中将一个文件***与一个存储设备关联起来的过程称为挂载(mount)。使用mount命令将一个文件***附着到当前文件***层次结构中(根)。在执行挂装时,要提供文件***类型、文件***和一个挂装点。根文件***被挂载到根目录下″/″上后,在根目录下就有根文件***的各个目录,文件:/bin/sbin/mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录、文件。
基于上述的闪存(NAND Flash)存储器和文件***原理,提出了如下具体实施例。
实施例1
如图1所示,本发明提供了一种闪存数据管理方法,该方法包括以下步骤:
S101、将无线通信模块的根文件***设定为只读文件***,并挂载到内存文件***;
将根文件***挂载到内存文件***,保证了根文件***的可靠性。用户在根文件***进行临时读写操作时,实际上是将内容写到了内存文件***,而根文件***并没有任何的更改,在***重启之后内存文件***的临时文件消失,并不会影响***启动。
S102、将所述根文件***设定为叠合式文件***,且将所述根文件***的配置目录挂载到所述无线通信模块中闪存的可读写文件***分区。
其中,所述无线通信模块的闪存包括可读写文件***分区和只读文件***分区。
其中,所述将无线通信模块的根文件***挂载到内存文件***的步骤之后,该方法还包括以下步骤:
在所述根文件***进行临时读写操作时,将读写操作内容写到所述内存文件***;
***重启时,将所述读写操作内容对应的临时文件删除。
配置目录下存放着***主要的配置文件,例如人员的账号密码文件、各种服务的其实文件等。一般来说,此目录的各文件属性是可以让一般用户查阅的,但是只有root有权限修改。对于PC上的Linux***,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于***中所拥有的应用程序,依赖于这些程序是否需要配置文件。配置目录存放的配置文件,这些文件由用户进行配置,并且能够保存。因此将此配置目录挂载到闪存的可读写文件***分区上,根据叠合式文件***(overlayfs)的特性,用户写入的配置文件最终存放在了闪存的可读写文件***分区上,并不会写入根文件***。这样既能保证用户配置文件的存放,也能够保证根文件***的可靠性。
其中,所述叠合式文件***是将上下两层的所述配置目录合并为同一文件***,下层的所述配置目录是只读的,上层的所述配置目录是可修改的。
其中,所述将所述根文件***的配置目录设定为叠合式文件***,且将所述配置目录挂载到所述无线通信模块中闪存的可读写文件***分区的步骤之后,所述方法还包括:
删除配置文件时,对下层的所述配置目录中的所述配置文件进行隐藏,对上层的所述配置目录中的所述配置文件直接删除;
读写配置文件时,复制下层的所述配置目录中的所述配置文件到上层的所述配置目录后,都所述上层的所述配置目录中的所述配置文件进行读写。
如图2所示,叠合式文件***(overlayfs)的原理为:叠合式文件***(OverlayFS)使用两个目录,把一个目录置放于另一个之上,并且对外提供单个统一的视角。这两个目录通常被称作层,这个分层的技术被称作union mount。术语上,下层的目录叫做lowerdir,上层的叫做upperdir。对外展示的统一视图称作merged。
图2展示了Docker镜像和Docker容器是如何分层的。镜像层就是lowerdir,容器层是upperdir。暴露在外的统一视图就是所谓的merged。
镜像层和容器层是如何处理相同的文件的:容器层(upperdir)的文件是显性的,会隐藏镜像层(lowerdir)相同文件的存在。容器映射(merged)显示出统一的视图。
overlay驱动只能工作在两层之上。也就是说多层镜像不能用多层OverlayFS实现。替代的,每个镜像层在/var/lib/docker/overlay中用自己的目录来实现,使用硬链接这种有效利用空间的方法,来引用底层分享的数据。注意:Docker1.10之后,镜像层ID和/var/lib/docker中的目录名不再一一对应。
创建一个容器,overlay驱动联合镜像层和一个新目录给容器。镜像顶层是overlay中的只读lowerdir,容器的新目录是可写的upperdir。
具体地,中间层merged和底层lowerdir具有相同文件名的文件,以中间层的文件内容为准,如顶层upperdir修改file1文件,并不改变底层lowerdir的file1文件。底层lowerdir的文件直接映射到顶层upperdir,如file2和file3文件。顶层upperdir新创建文件是,将文件保存到中间层merged,不写入到底层lowerdir,如file4文件。
如图3所示,提供了第二种闪存数据管理方法,该方法包括以下步骤:
S201、将无线通信模块的根文件***设定为只读文件***,并挂载到内存文件***;
S202、将所述根文件***设定为叠合式文件***,且将所述根文件***的配置目录挂载到所述无线通信模块中闪存的可读写文件***分区。
S203、将所述内存的文件***分区的挂载在操作***内核中进行,若挂载失败则认为所述文件***异常,进入恢复流程。
由于闪存(NAND Flash)中既有只读文件***分区也有可读写文件***分区,外部环境和用户操作有可能会导致存放只读文件***和可读写文件***的闪存(NAND Flash)分区数据异常,从而引起***启动失败。
如图5所示,当文件***分区的挂载在操作***(linux)内核中进行,如果挂载失败则认为文件***异常,进入恢复流程,将文件***备份分区中的内容按照文件***的格式进行格式化操作,从而恢复***分区,保证***启动正常。
如图4所示,提供了第三种闪存数据管理方法,该方法包括以下步骤:
S301、将无线通信模块的根文件***设定为只读文件***,并挂载到内存文件***;
S302、将所述根文件***设定为叠合式文件***,且将所述根文件***的配置目录挂载到所述无线通信模块中闪存的可读写文件***分区。
S303、将所述内存的文件***分区的挂载在操作***内核中进行,若挂载失败则认为所述文件***异常,进入恢复流程。
S304、当挂载成功后,判断所述内存的可读写文件***分区是否挂载成功,若否,则进入恢复流程。
如图5所示,在保证***分区正常启动的情况下,一旦挂载的可读写文件***分区异常出错,则进入恢复流程,直接按照文件***的格式进行格式化操作,从而恢复可读写文件***分区;保证***正常启动。
其中,所述进入恢复流程的步骤具体包括:所述文件***分区中的内容按照所述文件***的格式进行格式化操作,从而恢复所述文件***分区。
其中,所述判断所述内存的可读写文件***分区是否挂载成功的步骤之后,所述方法还包括:
若是,则所述文件***正常启动。
其中,所述进入恢复流程的步骤之后,所述方法还包括:
当所述文件***恢复成功后,所述文件***正常启动;否则,发出错误报告。
实施例2
如图6所示,本发明实施例提供的一种无线通信装置硬件结构,该无线通信装置利用闪存(NAND Flash)作为数据存储介质,具体地,所述无线通信装置40至少包括处理器41、闪存存储器42以及数据总线43。数据总线43用于实现处理器41和闪存存储器42之间的连接通信,闪存存储器42作为一种计算机可读存储介质,可以存储至少一个计算机程序,这些计算机程序可供处理器41读取、编译并执行,从而实现对应的处理流程。在本实施例中,闪存存储器42作为一种计算机可读存储介质,其中存储有闪存数据管理程序,该程序可供处理器41执行,从而实现如下的闪存数据管理方法的步骤:
将无线通信模块的根文件***挂载到内存文件***;
将所述根文件***的配置目录设定为叠合式文件***,且将所述配置目录挂载到所述无线通信模块中闪存的可读写文件***分区;
将所述内存的文件***分区的挂载在操作***内核中进行,若挂载失败则认为所述文件***异常,进入恢复流程;
当挂载成功后,判断所述内存的可读写文件***分区是否挂载成功,若否,则进入恢复流程。
另外,与实施例1的闪存数据管理方法基于同一发明构思,本实施的无线通信装置中的闪存数据管理程序还能够执行并实现实施例1所涉及的其他闪存数据管理方法步骤,故本实施例不再赘述。
本实施例中的无线通讯装置可以以各种形式来实施。可以作为单独的硬件设备实施,也可以集成设置在另一终端产品,诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal Digital Assistant,PDA)、便捷式媒体播放器(Portable MediaPlayer,PMP)、导航装置、可穿戴设备、智能手环、计步器等移动终端,以及诸如数字TV、台式计算机等固定终端。这些终端产品基于无线通信装置进行信号交互,实现信号交互的数据通过闪存存储器来存储。
本发明的闪存数据管理方法、装置及计算机可读存储介质采用叠合式文件***和文件***的恢复机制来增加无线通信模块的稳定性和可靠性,同时也减少无线通信模块类产品的售后维护工作。
叠合式文件***(overlayfs)采用文件叠加的方式来对重要文件进行管理,能够避免***关键文件被非法篡改,同时还允许用于进行配置文件的修改。这样既能保证***启动的正常,也能保证用户配置数据不被丢失。
由于闪存(NAND Flash)的特性,在特殊的条件下(主要是异常掉电)***文件有一定的几率被损坏,因此采用文件***恢复的机制来保证***关键文件的正确性,保证***正常的启动。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。