我们的linux使用的是EXT4 Journaling file system  日志文件系统

https://zh.wikipedia.org/wiki/%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F

https://en.wikipedia.org/wiki/Journaling_file_system

这样文件系统在程序逻辑上不会因为掉电而产生一个损坏的文件,或者影响文件系统的一致性。其他资料:

日志文件系统是怎样工作的  http://linuxperf.com/?p=153  备份:日志文件系统是怎样工作的 _ Linux Performance.pdf

Crash Consistency: FSCK and Journaling http://pages.cs.wisc.edu/~remzi/OSTEP/file-journaling.pdf  备份:file-journaling.pdf

虽然文件系统不会轻易损坏,但要修改/写入的文件内容还是会在掉电时丢失,如果要保证数据不会丢失,需要在硬件上做掉电保护。

你可以在系统开机后用mount来查看当前的文件系统格式,如:

root@phyboard-mira-imx6-3:~# mount
/dev/mmcblk0p2 on / type ext4 (rw,relatime,nodelalloc,data=journal)
devtmpfs on /dev type devtmpfs (rw,relatime,size=378324k,nr_inodes=94581,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
tmpfs on /tmp type tmpfs (rw)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
tmpfs on /var/volatile type tmpfs (rw,relatime)

这是在一个从sd启动的linux上的截图。

但是,文件系统级别的措施并不能保证硬件不会在写入时因为掉电导致损坏。因此,还需要参考存储使用的硬件的信息。

对于我们使用的flash器件来说,掉电时都不能保证当时的操作正确完成。

但我们的emmc和nand都有相应的ecc(在nand中通过ubifs的bit-flips)机制来检测错误/未完成的操作,然后进行重新擦除处理。

请参考:

https://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_jung.pdf  备份:linuxcon_jp2010_jung.pdf

https://cseweb.ucsd.edu/~swanson/papers/DAC2011PowerCut.pdf 备份:DAC2011PowerCut.pdf

NAND eMMC NOR 入门 / An Introduction to NAND, eMMC, NOR

https://prod.micron.com/~/media/documents/products/technical-note/emmc/tnfc27_emmc_pwr_loss_data_integ_esg.pdf


  • No labels