转载自华为服务支持的系统异常掉电或crash时,文件末尾概率出现乱码
问题描述
系统异常掉电或crash时,文件末尾概率出现乱码。
原因分析
EXT4文件系统为了提升落盘性能,首先更新文件元数据的文件长度字段,长度字段落盘后,文件数据再落盘。因此,长度字段更新后,如果发生掉电或者crash时,文件数据尚未落盘,文件末尾就会出现乱码。
解决方法
出现乱码是正常的实现机制,要保证文件落盘,需要在掉电前及时执行sync。如果系统异常掉电出现该问题,只能手工修复乱码。另外可以修改mount中的模式为可靠性模式:
性能模式:文件长度字段先落盘,文件数据后落盘。
可靠性模式:文件数据先落盘,长度字段后落盘。
$bash: mount /dev/sdb -o nospeed mnt
修改cmdline参数,在启动参数中增加 “ext4.speed=0”。
说明:
可靠性模式能够保障文件的可靠性,与性能模式相比,有少许性能损失,请用户根据需求场景选择对应的模式。
Mount参数与cmdline参数同时配置时,以cmdline参数为准,即全局生效。
对于重要的文件,或者有文件格式要求的文件, 写完之后及时的fsync就可以保证此场景下文件数据完整性。
网友评论