关于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
- 关于ubifs在断电时丢失数据的处理方法
- 关于ubuntu12.04断电后不能启动的处理方法
- 异常断电导致HDFS文件块丢失,影响HBASE数据的问题处理
- MSSQL断电的处理方法
- 数据丢失处理方法
- 数据丢失值的处理方法总结
- MSSQL服务器断电的处理方法
- 处理丢失的数据
- dlink路由器断电后数据丢失
- 解决电脑断电日志数据丢失问题
- VS2008关于MSVCP90D.dll丢失的原因和处理方法
- 【原创】工控机安装Ubuntu系统,直接断电然后再上电时,系统停留在启动项位置等待选择的处理方法
- 如何恢复断电造成的丢失文件
- 因突然断电造成Oracle破坏的数据恢复方法
- 恢复丢失数据的方法
- hadoop断电数据丢失恢复之郴(chen)州
- Spring boot处理Long类型的Json数据,在Js代码调用时精度丢失的问题
- 关于iframe的session丢失的处理
- html界面的设计开发
- ETCD命令集合
- AtCoder GC 018B: Sports Festival 题解
- ios中通过代码来创建第一个页面
- 第七题 用两个栈实现队列
- 关于ubifs在断电时丢失数据的处理方法
- 【HDU-1280】 前m大的数
- Makefile文件名操作函数
- sqlserver中修改表之后无法保存
- 控制耦合
- 关于android中的.9图制作
- spring boot 1.5.4使用JPA,遇到Mysql区分大小写的问题
- - `Yoga (= 0.44.0.React)` required by `React/Core (0.44.0)`
- [Notes][多项式]杂记 · 多项式算法—多项式求逆 多项式取模 多项式开根…