Linux:强制只读挂载文件系统的fsck?
我正在为无头嵌入式设备开发,运行CentOS 6.2.用户可以连接键盘,但不能连接显示器,串行控制台需要打开机箱,这是我们不希望用户必须做的事情.这几乎完全避免了使用恢复USB驱动器启动的可能性,除非它只是盲目地重新映像硬盘驱动器.我想提供一些恢复工具,我已经编写了一个工具,它在/ dev / tty1上代替getty来提供这些功能.
一个这样的功能是fsck.我已经找到了如何以只读方式重新安装root和其他文件系统.既然它们是只读的,那么fsck它们然后重新启动应该是安全的.不幸的是,fsck向我抱怨文件系统已安装并拒绝执行任何操作. 如何强制fsck在只读的挂载分区上运行? 根据我的研究,这将是一个模糊不清的东西. “-f”仅表示强制修复干净(但未安装)的分区.我需要修复干净或不干净的安装分区.从我读到的,这是“只有专家”应该做的事情,但没有人费心去解释专家是如何做到的.我希望有人可以向我透露这个. 顺便说一句,我注意到Gentoo上的e2fsck 1.42.4会让你fsck一个挂载的分区,甚至挂载读写,但是如果从终端运行fsck似乎只会这样做,所以它可以询问用户是否有“他们确定要做一些如此危险的事情.我不确定CentOS版本是否做同样的事情,但似乎fsck CAN修复了已安装的分区,但是当它没有从终端运行时它却完全拒绝. 一个最后的选择是我编译自己的黑客fsck.但我担心我会以某种意想不到的方式弄乱它. 谢谢! 注意:最初发布here. 更新:我认为在我写这篇文章的时候并不重要,但为了重新安装fs只读,我必须这样做: echo s > /proc/sysrq-trigger echo s > /proc/sysrq-trigger echo u > /proc/sysrq-trigger 这是我能找到的唯一方法.其他一切抱怨文件系统忙.据我所知,这是“安全的”,但它可能与通常的方法略有不同.这可能是fsck不想修复它的原因.它仍然认为它是读写的. 解决方法
您可以fsck只读文件系统,因为只读挂载并不像读写安装那样将其标记为“脏”.写入缓存中没有任何更改可能只是部分刷新到磁盘,因此所有磁盘上的结构都是一致且安全的,以便fsck进行修改.
但是,如果fsck进行了任何更改,内核的文件系统驱动程序可能会变得混乱,因为它预期保持不变的事情已经从它下面改变了.这不会影响文件系统本身的完整性(因为驱动程序没有写入它),但它可能会使运行系统不稳定.为避免这种情况,如果fsck对文件系统进行了任何更改,则应重新启动. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |