在断电时防止ext4 / Linux驱动器上的数据损坏
我有一些嵌入式电路板运行American Megatrends bios,嵌入式
linux作为操作系统.我遇到的问题是工业闪存ide会因断电而损坏.我把它们格式化为ext4.每当发生这种情况时,我通常可以使用fsck修复闪存,但在我们的部署中这是不可能的.我听说禁用写缓存应该会有所帮助,但我无法弄清楚如何去做.另外,还有什么我应该做的吗?
更多信息 该驱动器是一个4GB的ide闪存模块. 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上的性能损失和更高的磨损水平. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |