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

关于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



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UBIFS是一种支持压缩的文件系统,可以在存储文件系统进行压缩,从而减小文件系统的大小,提高系统的性能。UBIFS支持多种压缩算法,包括LZO、LZ4和ZLIB等。以下是在UBIFS中使用压缩文件系统的一些步骤: 1.在内核配置中开启UBIFS压缩选项。需要在内核配置中开启CONFIG_UBIFS_FS_LZO和CONFIG_UBIFS_FS_ZLIB选项,以支持LZO和ZLIB压缩算法。 2.在ubinize.conf文件中设置压缩选项。ubinize.conf是一个ubinize命令的配置文件,用于将多个文件文件系统打包成一个UBI镜像文件。在ubinize.conf文件中,可以通过设置compress选项来指定压缩算法和压缩级别,如下所示: ``` [fs] mode=ubi image=my_image.ubi vol_id=0 vol_type=dynamic vol_name=rootfs vol_flags=autoresize filesystem=ubifs image_size=100MiB compress=lzo compress_level=6 ``` 在上面的示例中,使用LZO压缩算法,并设置压缩级别为6。 3.在生成UBI镜像文件使用压缩选项。使用ubinize命令生成UBI镜像文件,需要使用-c选项指定ubinize.conf配置文件,并使用-m选项指定压缩选项,如下所示: ``` ubinize -c ubinize.conf -m ``` 在上面的示例中,使用ubinize.conf文件中的压缩选项进行压缩。 需要注意的是,在使用UBIFS压缩文件系统,需要根据实际需求和NAND Flash的容量来确定文件系统的大小和压缩算法,以确保系统的正常运行。同,还需要对文件系统进行特殊的处理和配置,避免数据丢失和损坏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值