在断电时防止ext4 / Linux驱动器上的数据损坏

前端之家收集整理的这篇文章主要介绍了在断电时防止ext4 / Linux驱动器上的数据损坏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些嵌入式电路板运行American Megatrends bios,嵌入式 linux作为操作系统.我遇到的问题是工业闪存ide会因断电而损坏.我把它们格式化为ext4.每当发生这种情况时,我通常可以使用fsck修复闪存,但在我们的部署中这是不可能的.我听说禁用写缓存应该会有所帮助,但我无法弄清楚如何去做.另外,还有什么我应该做的吗?

更多信息

该驱动器是一个4GB的ide闪存模块.
我有一个分区是ext4. O.S.安装在该分区上,grub是我的引导程序.

fdisk -l将/ dev / sda显示为我的flash模块,其中/ dev / sda1作为我的主分区.

断电后我通常无法完全通过启动init脚本完成.

当我将驱动器安装在另一个P.C.我运行fsck / dev / sda1.它总是显示消息

"zero datetime on node 1553 ... fix (y)?"

我修好了它,直到下一次断电,它才能正常启动.

当我明天到办公室时,我会发布fdisk -l的实际输出

这就是我所知道的系统工作原理.我不是一个系统人员,我是一名软件工程师,习惯于陷入工作描述之外的困境.我知道如何格式化驱动器,安装引导程序,编写软件和破解操作系统.

这是dumpe2fs的输出

#sudo dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   VideoServer
Last mounted on:          /
Filesystem UUID:          9cba62b0-8038-4913-be30-8eb211b23d78
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              245760
Block count:              977949
Reserved block count:     48896
Free blocks:              158584
Free inodes:              102920
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      239
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Fri Feb  4 15:12:00 2011
Last mount time:          Sun Oct  2 23:48:37 2011
Last write time:          Mon Oct  3 16:34:01 2011
Mount count:              2
Maximum mount count:      26
Last checked:             Tue Oct  4 07:44:50 2011
Check interval:           15552000 (6 months)
Next check after:         Sun Apr  1 07:44:50 2012
Lifetime writes:          21 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      249d2b79-1e20-49a3-b324-6cb631294a63
Journal backup:           inode blocks

解决方法

写缓存通常与BIOS无关,大多数情况下没有选项可以在那里切换磁盘缓存设置.使用linux,使用hdparm -W 0应该有所帮助.

该设置是持久的,因此如果您没有hdparm在生产系统中使用,则应该能够在其他系统上禁用磁盘写入缓存并重新插入磁盘.

顺便说一下:我的第二个想法是不可写的根文件系统(因此你的系统可以以某种“恢复模式”启动,并允许远程访问,即使可写文件系统由于某种原因无法安装).如果你可以改变硬件设计,可以考虑使用mtd devices代替IDE / SATA磁盘和闪存感知文件系统,如jffs2.我们已经使用这种组合与几个嵌入式设备(主要是现场的VPN路由器解决方案)多年效果很好.

更新:您的问题的根源似乎是您正在运行禁用日记功能的ext4文件系统 – Filesystem功能列表中缺少has_journal.只需关闭所有服务,使用lsof f – /检查是否还有打开的文件,使用mount -o remount重新安装root分区只读,ro /,使用tune2fs -O has_journal / dev / sda1启用日志并设置使用tune2fs -o journal_data_ordered / dev / sda1将“有序”日志模式设置为默认安装选项 – 您必须重新运行fsck(最好来自救援系统)并在此操作后重新安装root / reboot.

通过这些设置,即使在突然断电的情况下,也可以保证元数据可以从日志中恢复.实际数据也始终写入磁盘,尽管您可能会在启动时断电前几秒钟看到数据.如果这是不可接受的,您可以考虑将tune2fs -o journal_data / dev / sda1 mount选项与您的文件系统一起使用 – 这将包括在日志中写入磁盘的所有数据 – 这显然会为您提供更好的数据一致性,但代价是SSD上的性能损失和更高的磨损水平.

原文链接:https://www.f2er.com/linux/401686.html

猜你在找的Linux相关文章