关于ubifs在断电时丢失数据的处理方法

来源:互联网 发布:linux渗透测试系统 编辑:程序博客网 时间:2024/05/17 23:05

关于ubifs在断电时丢失数据的处理方法 


首先要说的是,文件系统在掉电的时候肯定是有几率丢失数据,因为断电可以在任何情况下发生,如果有数据在内存个中来不及写入,那么内存中的数据就丢失了,而且nand上的未写完的数据,可能因为文件对应的信息没有更新,造成重启后文件系统找不到那个文件,或者文件无法打开。所以,最牢靠的办法是使用UPS或者后备电池。 

 
UBIFS具有很好的性能,这从ubifs作为rootfs的mount和启动速度就可以看出。部分原因是ubifs可以说是一个write back的文件系统。 也就是说,ubifs会在内存中维持一个buf,当文件被修改时,只是这个buf的内容被改变,但是不一定会将改动回写到nand;系统会积累一定时间的改动然后再写入,这样能提高系统的性能。但是这样带来的问题是一旦断电,buf里的改动全部丢失。 


 解决办法可以有: 

 1. 在kernel的bootargs中加入rootflags=sync,强制使用sync方式mount ubifs,结果就是性能下降 

 2. 在程序中修改了文件内容后,调用fsync 


UBIFS是异步文件系统。正如其它Linux文件系统,它使用页cache。页cache是由Linux内存管理单元负责。页cache很大并可以缓存很多数据。当我们把一个文件写入文件系统时,事实上我们的数据是先写入了页cache,标记页为“脏”,然后写函数返回,过一段时间后数据正式写入储存介质。 write-buffer是UBIFS自己的缓冲区,工作于页cache和flash之间。这表示回写并不是写入flash而是写入了write-buffer。 write-buffer是为了改善nand flash性能。write-buffer的大小通常是
nand flash的页大小。

write-buffer的存在可以把一些零散的数据合并起来整页整页地写入到nand flash中。这不但减少了低速的与flash通信的次数,而且减少了flash中的碎片。 当然在写入大量数据时,是不需要用到write-buffer的。只在最后一次写入数据不够一个
nand flash页时,最后的数据缓存起来。


当然实现同步的方法有: sync()、fsync(fd)、open时使用O_SYNC、在挂载UBIFS时加上“-o sync”选项。


转自:https://wenku.baidu.com/view/562a4fbc0066f5335b812180.html



原创粉丝点击